def test_qfi_simple(self, method): """Test if the quantum fisher information calculation is correct for a simple test case. QFI = [[1, 0], [0, 1]] - [[0, 0], [0, cos^2(a)]] """ # create the circuit a, b = Parameter("a"), Parameter("b") qc = QuantumCircuit(1) qc.h(0) qc.rz(a, 0) qc.rx(b, 0) # convert the circuit to a QFI object op = CircuitStateFn(qc) qfi = QFI(qfi_method=method).convert(operator=op) # test for different values values_dict = [{ a: np.pi / 4, b: 0.1 }, { a: np.pi, b: 0.1 }, { a: np.pi / 2, b: 0.1 }] correct_values = [[[1, 0], [0, 0.5]], [[1, 0], [0, 0]], [[1, 0], [0, 1]]] for i, value_dict in enumerate(values_dict): actual = qfi.assign_parameters(value_dict).eval() np.testing.assert_array_almost_equal(actual, correct_values[i], decimal=1)
def test_qfi(self, method): """Test if the quantum fisher information calculation is correct QFI = [[1, 0], [0, 1]] - [[0, 0], [0, cos^2(a)]] """ a = Parameter('a') b = Parameter('b') params = [a, b] q = QuantumRegister(1) qc = QuantumCircuit(q) qc.h(q) qc.rz(params[0], q[0]) qc.rx(params[1], q[0]) op = CircuitStateFn(primitive=qc, coeff=1.) qfi = QFI(qfi_method=method).convert(operator=op, params=params) values_dict = [{ params[0]: np.pi / 4, params[1]: 0.1 }, { params[0]: np.pi, params[1]: 0.1 }, { params[0]: np.pi / 2, params[1]: 0.1 }] correct_values = [[[1, 0], [0, 0.5]], [[1, 0], [0, 0]], [[1, 0], [0, 1]]] for i, value_dict in enumerate(values_dict): np.testing.assert_array_almost_equal( qfi.assign_parameters(value_dict).eval(), correct_values[i], decimal=1)