13 for (
auto it = targets.begin(); it != targets.end(); ++it)
16 throw std::invalid_argument(
"Generic gate target is out of range");
17 if (std::find(targets.begin(), it, *it) != it)
18 throw std::invalid_argument(
"Generic gate targets must be distinct");
20 const auto dimension = Eigen::Index{1} << targets.size();
21 if (matrix.rows() != dimension || matrix.cols() != dimension)
22 throw std::invalid_argument(
"Generic gate matrix has the wrong dimensions");
23 if (!matrix.allFinite())
24 throw std::invalid_argument(
"Generic gate matrix must contain finite values");