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

Remove the ftqc debug example



Add a simple unit test

Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent 198eba41
Loading
Loading
Loading
Loading

python/examples/test_ftqc.py

deleted100644 → 0
+0 −35
Original line number Diff line number Diff line
from qcor import *
import math

# python3 test_ftqc.py -qrt ftqc

@qjit
def testH0(q : qreg, out_meas_z: FLOAT_REF):
    print("Test H0: Input: ", out_meas_z)
    H(q[0])
    if Measure(q[0]):
        out_meas_z = -1.0 + out_meas_z
    else:
        out_meas_z = 1.0 + out_meas_z
    print("Test H0: Output: ", out_meas_z)

@qjit
def testH1(q : qreg, out_meas_z: FLOAT_REF):
    print("Test H1: Input: ", out_meas_z)
    H(q[1])
    if Measure(q[1]):
        out_meas_z = -1.0 + out_meas_z
    else:
        out_meas_z = 1.0 + out_meas_z
    print("Test H1: Output: ", out_meas_z)

# Note: Must use FTQC runtime to get out_meas_z
@qjit
def test(q : qreg, out_meas_z: FLOAT_REF):
    testH0(q, out_meas_z)
    testH1(q, out_meas_z)

q = qalloc(2)
result = 0.0
test(q, result)
print("Result =", result)
+8 −1
Original line number Diff line number Diff line
@@ -18,3 +18,10 @@ add_test (NAME qcor_test_qcor_spec_api
  )
  set_tests_properties(qcor_test_qcor_spec_api
      PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_INSTALL_PREFIX}:$ENV{PYTHONPATH}")

add_test (NAME qcor_kernel_ftqc_python
  COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_kernel_ftqc.py -qrt ftqc
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_tests_properties(qcor_kernel_ftqc_python
    PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_INSTALL_PREFIX}:$ENV{PYTHONPATH}")
 No newline at end of file
+75 −0
Original line number Diff line number Diff line
import unittest
from qcor import *

float_result = 0.0

class TestKernelFTQC(unittest.TestCase):
    def test_pass_by_ref(self):
        @qjit
        def testX0(q : qreg, out_meas_z: FLOAT_REF):
            X(q[0])
            if Measure(q[0]):
                out_meas_z = -1.0 + out_meas_z
            else:
                out_meas_z = 1.0 + out_meas_z

        @qjit
        def testX1(q : qreg, out_meas_z: FLOAT_REF):
            X(q[1])
            if Measure(q[1]):
                out_meas_z = -1.0 + out_meas_z
            else:
                out_meas_z = 1.0 + out_meas_z

        @qjit
        def test_ref(q : qreg, out_meas_z: FLOAT_REF):
            testX0(q, out_meas_z)
            testX1(q, out_meas_z)
        
        # Note: we only support pass-by-ref for Python
        # variables in *global* scope atm.
        # i.e. no class obj member vars, etc.
        global float_result
        float_result = 0.0
        q = qalloc(2)
        test_ref(q, float_result)
        # testX0 and testX1 add -1.0 to the var.
        self.assertAlmostEqual(float_result, -2.0)

    def test_pass_by_value(self):
        @qjit
        def testX0_byVal(q : qreg, out_meas_z: float):
            X(q[0])
            if Measure(q[0]):
                out_meas_z = -1.0 + out_meas_z
            else:
                out_meas_z = 1.0 + out_meas_z

        @qjit
        def testX1_byVal(q : qreg, out_meas_z: float):
            X(q[1])
            if Measure(q[1]):
                out_meas_z = -1.0 + out_meas_z
            else:
                out_meas_z = 1.0 + out_meas_z

        @qjit
        def test_byVal(q : qreg, out_meas_z: float):
            testX0_byVal(q, out_meas_z)
            testX0_byVal(q, out_meas_z)
        
        global float_result
        float_result = 0.0
        q = qalloc(2)
        test_byVal(q, float_result)
        # No change because we pass by value
        self.assertAlmostEqual(float_result, 0.0)

if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('-qrt', default='ftqc')
    parser.add_argument('unittest_args', nargs='*')
    args = parser.parse_args()
    sys.argv[1:] = args.unittest_args
    unittest.main()
 No newline at end of file