def test_one(self):
        feature_map = FixedLengthQubitEncoding(4, 4)

        X_train = [
            [4.4, -9.53],
            [18.42, 1.0]
        ]
        y_train = [0, 1]
        input = [2.043, 13.84]

        X_train_in_feature_space = [feature_map.map(x) for x in X_train]
        X_train_in_feature_space_qubit_notation = [["{:b}".format(i).zfill(2 * 9) for i, _ in elem.keys()] for elem in
                                                   X_train_in_feature_space]

        input_in_feature_space = feature_map.map(input)
        input_in_feature_space_qubit_notation = ["{:b}".format(i).zfill(2 * 9) for i, _ in
                                                 input_in_feature_space.keys()]

        logger.info("Training samples in feature space: {}".format(X_train_in_feature_space_qubit_notation))
        logger.info("Input sample in feature space: {}".format(input_in_feature_space_qubit_notation))

        circuit = QmlBinaryDataStateCircuitBuilder(CCXMöttönen())

        qc = circuit.build_circuit('test', X_train=X_train_in_feature_space, y_train=y_train, X_input=input_in_feature_space)

        self.assertIsNotNone(qc)
        self.assertIsNotNone(qc.data)
        self.assertEqual(30, len(qc.data))

        self.assertListEqual(["h"], [qc.data[0].name])
        self.assertListEqual(["h"], [qc.data[1].name])

        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(18, 'f^S'), 3)"], extract_gate_info(qc, 2))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(18, 'f^S'), 4)"], extract_gate_info(qc, 3))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(18, 'f^S'), 7)"], extract_gate_info(qc, 4))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(18, 'f^S'), 8)"], extract_gate_info(qc, 5))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(18, 'f^S'), 10)"], extract_gate_info(qc, 6))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(18, 'f^S'), 11)"], extract_gate_info(qc, 7))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(18, 'f^S'), 15)"], extract_gate_info(qc, 8))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(18, 'f^S'), 0)"], extract_gate_info(qc, 9))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(18, 'f^S'), 2)"], extract_gate_info(qc, 10))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(18, 'f^S'), 3)"], extract_gate_info(qc, 11))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(18, 'f^S'), 4)"], extract_gate_info(qc, 12))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(18, 'f^S'), 6)"], extract_gate_info(qc, 13))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(18, 'f^S'), 7)"], extract_gate_info(qc, 14))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(18, 'f^S'), 14)"], extract_gate_info(qc, 15))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(18, 'f^S'), 4)"], extract_gate_info(qc, 16))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(18, 'f^S'), 10)"], extract_gate_info(qc, 17))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(18, 'f^S'), 11)"], extract_gate_info(qc, 18))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(18, 'f^S'), 13)"], extract_gate_info(qc, 19))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(18, 'f^S'), 16)"], extract_gate_info(qc, 20))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(1, 'l^q'), 0)"], extract_gate_info(qc, 21))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(18, 'f^S'), 0)"], extract_gate_info(qc, 22))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(18, 'f^S'), 2)"], extract_gate_info(qc, 23))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(18, 'f^S'), 3)"], extract_gate_info(qc, 24))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(18, 'f^S'), 4)"], extract_gate_info(qc, 25))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(18, 'f^S'), 6)"], extract_gate_info(qc, 26))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(18, 'f^S'), 7)"], extract_gate_info(qc, 27))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(18, 'f^S'), 14)"], extract_gate_info(qc, 28))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(1, 'l^q'), 0)"], extract_gate_info(qc, 29))
    def test_three(self):
        feature_map = FixedLengthQubitEncoding(4, 4)

        X_train = [
            [4.4, -9.53],
            [18.42, 1.0]
        ]
        y_train = [0, 1]
        input = [2.043, 13.84]

        X_train_in_feature_space = [feature_map.map(x) for x in X_train]
        X_train_in_feature_space_qubit_notation = [["{:b}".format(i).zfill(2 * 9) for i, _ in elem.keys()] for elem in
                                                   X_train_in_feature_space]

        input_in_feature_space = feature_map.map(input)
        input_in_feature_space_qubit_notation = ["{:b}".format(i).zfill(2 * 9) for i, _ in
                                                 input_in_feature_space.keys()]

        logger.info("Training samples in feature space: {}".format(X_train_in_feature_space_qubit_notation))
        logger.info("Input sample in feature space: {}".format(input_in_feature_space_qubit_notation))

        circuit = QmlBinaryDataStateCircuitBuilder(CCXToffoli())

        qc = circuit.build_circuit('test', X_train=X_train_in_feature_space, y_train=y_train, X_input=input_in_feature_space)

        self.assertIsNotNone(qc)
        self.assertIsNotNone(qc.data)
    def test_five(self):
        X_train = np.asarray([[1.0, 1.0], [-1.0, 1.0], [-1.0, -1.0],
                              [1.0, -1.0]])
        y_train = [0, 1, 0, 1]

        X_test = np.asarray([[0.2, 0.4], [0.4, -0.8]])
        y_test = [0, 1]

        class MyFeatureMap(FeatureMap):
            def map(self, input_vector: list) -> sparse.dok_matrix:
                result = sparse.dok_matrix((4, 1))
                index = 0
                if input_vector[0] > 0 and input_vector[1] > 0:
                    index = 0
                if input_vector[0] < 0 and input_vector[1] > 0:
                    index = 1
                if input_vector[0] < 0 and input_vector[1] < 0:
                    index = 2
                if input_vector[0] > 0 and input_vector[1] < 0:
                    index = 3
                result[index, 0] = 1.0
                return result

        initial_state_builder = QmlBinaryDataStateCircuitBuilder(CCXToffoli())

        feature_map = MyFeatureMap()
        X_train_in_feature_space = [feature_map.map(s) for s in X_train]
        X_test_in_feature_space = [feature_map.map(s) for s in X_test]
        qc = initial_state_builder.build_circuit('test',
                                                 X_train_in_feature_space,
                                                 y_train,
                                                 X_test_in_feature_space[0])

        self.assertIsNotNone(qc)
        self.assertIsNotNone(qc.data)
        # self.assertEqual(len(qc.data), 28)

        # self.assertListEqual(["h"], [qc.data[0].name])
        # self.assertListEqual(["h"], [qc.data[1].name])

        qregs = qc.qregs
        cregs = [ClassicalRegister(qr.size, 'c_' + qr.name) for qr in qregs]
        qc2 = QuantumCircuit(*qregs, *cregs, name='test2')

        qc2.data = qc.data
        for i in range(len(qregs)):
            measure(qc2, qregs[i], cregs[i])

        execution_backend = qiskit.Aer.get_backend(
            'qasm_simulator')  # type: BaseBackend
        qobj = qiskit.compile([qc2], execution_backend, shots=8192)
        result = execution_backend.run(qobj)  # type. BaseJob
        counts = result.result().get_counts()  # type: dict

        self.assertListEqual(
            sorted([
                '00 0 00 00 0', '00 0 00 00 1', '00 1 01 01 0', '00 1 00 01 1',
                '00 0 10 10 0', '00 0 00 10 1', '00 1 11 11 0', '00 1 00 11 1'
            ]), sorted(counts.keys()))
コード例 #4
0
    def runTest(self):
        log.info(
            "Testing 'QmlHadamardNeighborClassifier' with CNOT Preparation.")
        execution_backend = qiskit.Aer.get_backend(
            'qasm_simulator')  # type: BaseBackend

        X_train = numpy.asarray([[1.0, 1.0], [-1.0, 1.0], [-1.0, -1.0],
                                 [1.0, -1.0]])
        y_train = [0, 1, 0, 1]

        X_test = numpy.asarray([[0.2, 0.4], [0.4, -0.8]])
        y_test = [0, 1]

        class MyFeatureMap(FeatureMap):
            def map(self, input_vector: list) -> sparse.dok_matrix:
                result = sparse.dok_matrix((4, 1))
                index = 0
                if input_vector[0] > 0 and input_vector[1] > 0:
                    index = 0
                if input_vector[0] < 0 < input_vector[1]:
                    index = 1
                if input_vector[0] < 0 and input_vector[1] < 0:
                    index = 2
                if input_vector[0] > 0 > input_vector[1]:
                    index = 3
                result[index, 0] = 1.0
                return result

        feature_map = MyFeatureMap()

        initial_state_builder = QmlBinaryDataStateCircuitBuilder(CCXToffoli())

        qml = QmlHadamardNeighborClassifier(
            backend=execution_backend,
            shots=100 * 8192,
            feature_map=feature_map,
            classifier_circuit_factory=initial_state_builder)

        qml.fit(X_train, y_train)

        prediction = qml.predict(X_test)

        self.assertEqual(len(prediction), len(y_test))
        self.assertListEqual(prediction, y_test)
    def test_two(self):

        feature_map = FixedLengthQubitEncoding(2, 2)

        X_train = [
            [4.4, -9.53],
            [18.42, 1.0]
        ]
        y_train = [0, 1]
        input = [2.043, 13.84]

        X_train_in_feature_space = [feature_map.map(x) for x in X_train]
        X_train_in_feature_space_qubit_notation = [["{:b}".format(i).zfill(2*5) for i, _ in elem.keys()] for elem in X_train_in_feature_space]

        input_in_feature_space = feature_map.map(input)
        input_in_feature_space_qubit_notation = ["{:b}".format(i).zfill(2*5) for i, _ in input_in_feature_space.keys()]

        logger.info("Training samples in feature space: {}".format(X_train_in_feature_space_qubit_notation))
        logger.info("Input sample in feature space: {}".format(input_in_feature_space_qubit_notation))

        circuit = QmlBinaryDataStateCircuitBuilder(CCXMöttönen())

        qc = circuit.build_circuit('test', X_train=X_train_in_feature_space, y_train=y_train, X_input=input_in_feature_space)

        self.assertIsNotNone(qc)
        self.assertIsNotNone(qc.data)
        self.assertEqual(len(qc.data), 22)

        self.assertListEqual(["h"], [qc.data[0].name])
        self.assertListEqual(["h"], [qc.data[1].name])

        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(10, 'f^S'), 1)"], extract_gate_info(qc, 2))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(10, 'f^S'), 3)"], extract_gate_info(qc, 3))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(10, 'f^S'), 4)"], extract_gate_info(qc, 4))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(10, 'f^S'), 5)"], extract_gate_info(qc, 5))
        self.assertListEqual(["ccx_uni_rot", [0], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 6))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(10, 'f^S'), 0)"], extract_gate_info(qc, 7))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(10, 'f^S'), 1)"], extract_gate_info(qc, 8))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(10, 'f^S'), 2)"], extract_gate_info(qc, 9))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(10, 'f^S'), 3)"], extract_gate_info(qc, 10))
        self.assertListEqual(["ccx_uni_rot", [1], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 11))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(10, 'f^S'), 2)"], extract_gate_info(qc, 12))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(10, 'f^S'), 5)"], extract_gate_info(qc, 13))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 14))
        self.assertListEqual(["ccx_uni_rot", [2], "(QuantumRegister(1, 'l^q'), 0)"], extract_gate_info(qc, 15))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(10, 'f^S'), 0)"], extract_gate_info(qc, 16))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(10, 'f^S'), 1)"], extract_gate_info(qc, 17))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(10, 'f^S'), 2)"], extract_gate_info(qc, 18))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(10, 'f^S'), 3)"], extract_gate_info(qc, 19))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 20))
        self.assertListEqual(["ccx_uni_rot", [3], "(QuantumRegister(1, 'l^q'), 0)"], extract_gate_info(qc, 21))

        qregs = qc.qregs
        cregs = [ClassicalRegister(qr.size, 'c' + qr.name) for qr in qregs]
        qc2 = QuantumCircuit(*qregs, *cregs, name='test2')

        qc2.data = qc.data
        for i in range(len(qregs)):
            measure(qc2, qregs[i], cregs[i])

        execution_backend = qiskit.Aer.get_backend('qasm_simulator')  # type: BaseBackend
        qobj = qiskit.compile([qc2], execution_backend, shots=8192)
        result = execution_backend.run(qobj)  # type: BaseJob
        counts = result.result().get_counts()  # type: dict

        self.assertListEqual(sorted(counts.keys()), sorted(['0 0100111010 0 0', '0 0100001111 0 1', '1 0100100100 1 0', '1 0100001111 1 1']))
    def test_four(self):

        encoding_map = FixedLengthQubitEncoding(2, 2)

        X_train = [[4.4, -9.53], [18.42, 1.0]]
        y_train = [0, 1]
        input = [2.043, 13.84]

        X_train_in_encoded_space = [encoding_map.map(x) for x in X_train]
        X_train_in_encoded_space_qubit_notation = [[
            "{:b}".format(i).zfill(2 * 5) for i, _ in elem.keys()
        ] for elem in X_train_in_encoded_space]

        input_in_encoded_space = encoding_map.map(input)
        input_in_encoded_space_qubit_notation = [
            "{:b}".format(i).zfill(2 * 5)
            for i, _ in input_in_encoded_space.keys()
        ]

        logger.info("Training samples in encoded space: {}".format(
            X_train_in_encoded_space_qubit_notation))
        logger.info("Input sample in encoded space: {}".format(
            input_in_encoded_space_qubit_notation))

        circuit = QmlBinaryDataStateCircuitBuilder(CCXToffoli())
        qc = circuit.build_circuit('test',
                                   X_train=X_train_in_encoded_space,
                                   y_train=y_train,
                                   X_input=input_in_encoded_space)

        self.assertIsNotNone(qc)
        self.assertIsNotNone(qc.data)
        # TODO: adjust ASAP
        # self.assertEqual(28, len(qc.data))
        #
        # self.assertListEqual(["h"], [qc.data[0].name])
        # self.assertListEqual(["h"], [qc.data[1].name])
        #
        # self.assertListEqual(["x", [], "(QuantumRegister(1, 'a'), 0)"], extract_gate_info(qc, 2))
        # self.assertListEqual(["x", [], "(QuantumRegister(1, 'i'), 0)"], extract_gate_info(qc, 3))
        #
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 1)"], extract_gate_info(qc, 4))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 3)"], extract_gate_info(qc, 5))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 4)"], extract_gate_info(qc, 6))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 5)"], extract_gate_info(qc, 7))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 8))
        #
        # self.assertListEqual(["x", [], "(QuantumRegister(1, 'a'), 0)"], extract_gate_info(qc, 9))
        #
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 0)"], extract_gate_info(qc, 10))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 1)"], extract_gate_info(qc, 11))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 2)"], extract_gate_info(qc, 12))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 3)"], extract_gate_info(qc, 13))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 14))
        #
        # self.assertListEqual(["x", [], "(QuantumRegister(1, 'i'), 0)"], extract_gate_info(qc, 15))
        #
        # self.assertListEqual(["x", [], "(QuantumRegister(1, 'a'), 0)"], extract_gate_info(qc, 16))
        #
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 2)"], extract_gate_info(qc, 17))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 5)"], extract_gate_info(qc, 18))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 19))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(1, 'l^q'), 0)"], extract_gate_info(qc, 20))
        #
        # self.assertListEqual(["x", [], "(QuantumRegister(1, 'a'), 0)"], extract_gate_info(qc, 21))
        #
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 0)"], extract_gate_info(qc, 22))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 1)"], extract_gate_info(qc, 23))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 2)"], extract_gate_info(qc, 24))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 3)"], extract_gate_info(qc, 25))
        # self.assertListEqual(["ccx", [], "(QuantumRegister(10, 'f^S'), 8)"], extract_gate_info(qc, 26))
        #
        # self.assertListEqual(["ccx", [], "(QuantumRegister(1, 'l^q'), 0)"], extract_gate_info(qc, 27))

        cregs = [ClassicalRegister(qr.size, 'c' + qr.name) for qr in qc.qregs]
        qc2 = QuantumCircuit(*qc.qregs, *cregs, name='test2')

        qc2.data = qc.data
        for i in range(len(qc.qregs)):
            measure(qc2, qc.qregs[i], cregs[i])

        execution_backend = qiskit.Aer.get_backend(
            'qasm_simulator')  # type: BaseBackend
        job = qiskit.execute([qc2], execution_backend, shots=8192)
        counts = job.result().get_counts()  # type: dict

        self.assertListEqual(
            sorted([
                '0 0100111010 0 0', '0 0100001111 0 1', '1 0100100100 1 0',
                '1 0100001111 1 1'
            ]), sorted(counts.keys()))