INNER CODE UNIT · C++

checkPlacement

aromanro/QCSim · QCSim/DensityMatrixTests.cpp:285

    auto checkPlacement = [&](const QC::Gates::QuantumGateWithOp<> &gate, const std::vector<size_t> &qubits) -> bool {
        const Eigen::MatrixXcd embedded = DM_EmbedOperator(gate.getRawOperatorMatrix(), qubits, nrQubits);
        const Eigen::MatrixXcd expected = embedded * initial * embedded.adjoint();

        QC::DensityMatrix<> direct(nrQubits);
        direct.setDensityMatrix(initial);
        direct.ApplyGate(gate, qubits[0], qubits.size() > 1 ? qubits[1] : 0, qubits.size() > 2 ? qubits[2] : 0);

        QC::DensityMatrix<> recorded(nrQubits);
        recorded.setDensityMatrix(initial);
        recorded.ApplyGate(QC::Gates::AppliedGate<>(gate.getRawOperatorMatrix(), qubits[0],
                                                    qubits.size() > 1 ? qubits[1] : 0,
                                                    qubits.size() > 2 ? qubits[2] : 0));

        if ((direct.getDensityMatrix() - expected).norm() > 1E-9 ||
            (recorded.getDensityMatrix() - expected).norm() > 1E-9)
        {
            std::cout << "Dense gate reference mismatch for a " << qubits.size() << "-qubit gate on";

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…