File size: 1,039 Bytes
9f8cf99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import numpy as np
import pytest


pytest.importorskip("qiskit")


def _amplitude_damping_kraus(gamma: float) -> np.ndarray:
    g = float(gamma)
    k0 = np.array([[1.0, 0.0], [0.0, np.sqrt(1.0 - g)]], dtype=np.complex128)
    k1 = np.array([[0.0, np.sqrt(g)], [0.0, 0.0]], dtype=np.complex128)
    return np.stack([k0, k1], axis=0)


def test_kraus_amplitude_damping_matches_qiskit_quantum_info():
    # This test uses Qiskit quantum_info as a reference implementation.
    from qiskit.quantum_info import DensityMatrix, Kraus

    from qhybrid_kernels import apply_kraus_1q_density_matrix

    gamma = 0.3
    kraus = _amplitude_damping_kraus(gamma)

    # Start from |1><1|
    rho = np.array([[0.0, 0.0], [0.0, 1.0]], dtype=np.complex128)

    out = apply_kraus_1q_density_matrix(rho, n_qubits=1, target_qubit=0, kraus_ops=kraus)

    # Qiskit reference: evolve density matrix under Kraus channel
    channel = Kraus(kraus)
    ref = DensityMatrix(rho).evolve(channel).data

    assert np.allclose(out, ref, atol=1e-12, rtol=1e-12)