120 long long int numNonZeroStates = 0;
122 for (Eigen::Index state = 0;
123 state < static_cast<Eigen::Index>(statevector.size()); ++state) {
124 const double stateProb = std::norm(statevector[state]);
125 if (stateProb < std::numeric_limits<double>::epsilon())
continue;
133 std::vector<AliasEntry> under;
134 std::vector<AliasEntry> over;
135 under.reserve(numNonZeroStates);
136 over.reserve(numNonZeroStates);
138 statesTable.reserve(numNonZeroStates);
142 for (Eigen::Index state = 0; state < static_cast<Eigen::Index>(statevector.size());
144 const double stateProb = std::norm(statevector[state]);
145 if (stateProb < std::numeric_limits<double>::epsilon())
continue;
147 const double prob = stateProb * numNonZeroStates;
149 under.emplace_back(prob, i);
151 over.emplace_back(prob, i);
153 statesTable.push_back(state);
161 aliasTable.resize(under.size() + over.size());
166 Alias(
const std::unordered_map<QC::PathIntegral::FastVectorBool, std::complex<double>,
167 QC::PathIntegral::FastVectorBoolHash> &litudesMap) {
168 std::vector<AliasEntry> under;
169 std::vector<AliasEntry> over;
172 under.reserve(amplitudesMap.size());
173 over.reserve(amplitudesMap.size());
175 statesTable.reserve(amplitudesMap.size());
179 for (
const auto &valPair : amplitudesMap) {
180 const double prob = std::norm(valPair.second) * amplitudesMap.size();
181 const size_t state = valPair.first.getWords()[0];
183 under.emplace_back(prob, i);
185 over.emplace_back(prob, i);
188 statesTable.push_back(state);
194 aliasTable.resize(under.size() + over.size());