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

Method amplitude_encode

QAlg/Encode/Encode.cpp:246–285  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

244}
245
246void Encode::amplitude_encode(const QVec &q, const std::vector<double>& data)
247{
248
249 vector<double>data_temp(data);
250
251 if (!_check_normalized(data_temp)) {
252 throw run_fail("Data is not normalized");
253 }
254
255 if (data_temp.size() > (1 << q.size()))
256 {
257 throw run_fail("Amplitude_encode parameter error.");
258 }
259
260 QVec qubits;
261 int k = 0;
262
263 for (auto i : q) {
264 if (k >= std::ceil(std::log2(data.size()))) break;
265 qubits.push_back(i);
266 ++k;
267 }
268
269 while (data_temp.size() < (1 << qubits.size()))
270 {
271 data_temp.push_back(0);
272 }
273
274 std::vector<std::vector<double>>betas(qubits.size());
275 std::vector<double>input(data_temp);
276 _recursive_compute_beta(data_temp, betas, (int)(qubits.size() - 1));
277 _generate_circuit(betas, qubits);
278
279 for (int i = 0; i < std::ceil(std::log2(data.size())); ++i)
280 {
281 m_out_qubits.push_back(q[i]);
282 }
283
284 return;
285}
286void Encode::amplitude_encode(const QVec &q, const std::vector<complex<double>>& data)
287{
288 vector<complex<double>> data_temp(data);

Callers 1

test_Amplitude_encoding1Function · 0.45

Calls 13

run_failClass · 0.85
SWAPClass · 0.85
ceilFunction · 0.50
log2Function · 0.50
absFunction · 0.50
sqrtFunction · 0.50
argFunction · 0.50
expFunction · 0.50
amplitude_encodeFunction · 0.50
sizeMethod · 0.45
push_backMethod · 0.45
realMethod · 0.45

Tested by 1

test_Amplitude_encoding1Function · 0.36