MCPcopy Create free account
hub / github.com/OriginQ/QPanda-2 / initState

Method initState

Core/VirtualQuantumProcessor/CPUImplQPUSingleThread.cpp:224–276  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

222}
223
224QError CPUImplQPUSingleThread::initState(size_t qubit_num, const QStat &state)
225{
226 init_qubit2stat.clear();
227
228 if (!state.empty())
229 {
230 double probs = .0;
231 for (auto amplitude : state)
232 {
233 probs += std::norm(amplitude);
234 }
235
236 if (qubit_num != (size_t)std::log2(state.size()) || std::abs(probs - 1.) > 1e-6)
237 {
238 QCERR("state error");
239 throw std::runtime_error("state error");
240 }
241
242 init_qubit2stat.resize(qubit_num);
243 for (auto i = 0; i < qubit_num; i++)
244 {
245 init_qubit2stat[0].qVec.push_back(i);
246 }
247
248 init_qubit2stat[0].qstate = state;
249 init_qubit2stat[0].qubitnumber = 1;
250 init_qubit2stat[0].enable = true;
251
252 for (auto i = 1; i < qubit_num; i++)
253 {
254 init_qubit2stat[i].qVec.push_back(i);
255 init_qubit2stat[i].qstate.push_back(1);
256 init_qubit2stat[i].qstate.push_back(0);
257 init_qubit2stat[i].qubitnumber = 1;
258 init_qubit2stat[i].enable = false;
259 }
260
261 }
262 else
263 {
264 qubit2stat.erase(qubit2stat.begin(), qubit2stat.end());
265 qubit2stat.resize(qubit_num);
266 for (auto i = 0; i < qubit_num; i++)
267 {
268 qubit2stat[i].qVec.push_back(i);
269 qubit2stat[i].qstate.push_back(1);
270 qubit2stat[i].qstate.push_back(0);
271 qubit2stat[i].qubitnumber = 1;
272 }
273 }
274
275 return qErrorNone;
276}
277
278
279QError CPUImplQPUSingleThread::initState(size_t head_rank, size_t rank_size, size_t qubit_num)

Callers

nothing calls this directly

Calls 11

normFunction · 0.85
log2Function · 0.50
absFunction · 0.50
clearMethod · 0.45
emptyMethod · 0.45
sizeMethod · 0.45
resizeMethod · 0.45
push_backMethod · 0.45
eraseMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected