| 509 | } |
| 510 | |
| 511 | void Encode::dc_amplitude_encode(const QVec &q, const std::vector<double>& data) |
| 512 | { |
| 513 | vector<double>data_temp(data); |
| 514 | |
| 515 | if (!_check_normalized(data_temp)) { |
| 516 | throw run_fail("Data is not normalized"); |
| 517 | } |
| 518 | |
| 519 | int size = data_temp.size(); |
| 520 | int log_ceil_size = std::ceil(std::log2(size)); |
| 521 | if (1 << log_ceil_size > q.size() + 1) { |
| 522 | throw run_fail("Dc_Amplitude_encode parameter error."); |
| 523 | } |
| 524 | while (data_temp.size() < (1 << log_ceil_size)) |
| 525 | { |
| 526 | data_temp.push_back(0); |
| 527 | } |
| 528 | |
| 529 | std::vector<std::vector<double>>betas(std::log2(data_temp.size())); |
| 530 | std::vector<double>input(data_temp); |
| 531 | _recursive_compute_beta(data_temp, betas, (int)(std::log2(data_temp.size()) - 1)); |
| 532 | _dc_generate_circuit(betas, q, (int)data_temp.size()); |
| 533 | |
| 534 | return; |
| 535 | } |
| 536 | |
| 537 | void Encode::_index(const int value, const QVec &control_qubits, const int numberof_controls) { |
| 538 | bitset<32> temp(value); |