Maestro 0.3.11
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
MPOValidation.h
Go to the documentation of this file.
1#pragma once
2
3#include "../../Types.h"
4#include <Eigen/Dense>
5#include <algorithm>
6#include <limits>
7#include <stdexcept>
8#include <string>
9#include <vector>
10
12{
13inline void Bits(const std::vector<bool> &bits, size_t width)
14{
15 if (bits.size() != width)
16 throw std::invalid_argument("MPO bit vector must match the register width");
17}
18
19inline void Pauli(const std::string &pauli, size_t width)
20{
21 if (pauli.size() != width || pauli.find_first_not_of("IXYZ") != std::string::npos)
22 throw std::invalid_argument("Pauli string must have one I/X/Y/Z per qubit");
23}
24
25inline std::vector<int> Qubits(const Types::qubits_vector &qubits, size_t width)
26{
27 std::vector<int> result;
28 for (auto q : qubits)
29 {
30 if (q >= width || q > static_cast<size_t>(std::numeric_limits<int>::max()))
31 throw std::out_of_range("Target qubit is out of range");
32 if (std::find(result.begin(), result.end(), static_cast<int>(q)) != result.end())
33 throw std::invalid_argument("Target qubits must be distinct");
34 result.push_back(static_cast<int>(q));
35 }
36 return result;
37}
38
39inline std::vector<int> Operator(const Types::qubits_vector &qubits, const Eigen::MatrixXcd &matrix, size_t width)
40{
41 if (qubits.empty() || qubits.size() > 2 || matrix.rows() != (Eigen::Index{1} << qubits.size()) || matrix.cols() != matrix.rows() || !matrix.allFinite())
42 throw std::invalid_argument("Operator must be a finite 2x2 or 4x4 matrix matching its targets");
43 return Qubits(qubits, width);
44}
45} // namespace Simulators::MPOValidation
std::vector< int > Qubits(const Types::qubits_vector &qubits, size_t width)
std::vector< int > Operator(const Types::qubits_vector &qubits, const Eigen::MatrixXcd &matrix, size_t width)
void Bits(const std::vector< bool > &bits, size_t width)
void Pauli(const std::string &pauli, size_t width)
std::vector< qubit_t > qubits_vector
The type of a vector of qubits.
Definition Types.h:24