| 548 | } |
| 549 | |
| 550 | void Encode::dense_angle_encode(const QVec &q, const std::vector<double>& data) |
| 551 | { |
| 552 | |
| 553 | if (data.size() > q.size() * 2) |
| 554 | { |
| 555 | throw run_fail("Dense_angle_encode parameter error."); |
| 556 | } |
| 557 | |
| 558 | std::vector<double>data_temp(data); |
| 559 | if ((int)(data.size()) & 1) |
| 560 | { |
| 561 | data_temp.push_back(0); |
| 562 | } |
| 563 | |
| 564 | int k = (int)(data_temp.size()); |
| 565 | k /= 2; |
| 566 | |
| 567 | for (auto i = 0; i < data_temp.size() / 2; ++i) |
| 568 | { |
| 569 | m_qcircuit << U3(q[i], data_temp[i], data_temp[k], 0.0); |
| 570 | ++k; |
| 571 | } |
| 572 | |
| 573 | for (int i = 0; i < data_temp.size() / 2; ++i) { |
| 574 | m_out_qubits.push_back(q[i]); |
| 575 | } |
| 576 | |
| 577 | return; |
| 578 | } |
| 579 | void Encode::bid_amplitude_encode(const QVec &q, const std::vector<double>& data, const int split) { |
| 580 | |
| 581 | vector<double>data_temp(data); |