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";