| 402 | } |
| 403 | |
| 404 | void Encode::angle_encode(const QVec &q, const std::vector<double>& data, const GateType& gate_type) |
| 405 | { |
| 406 | |
| 407 | if (data.size() > q.size()) |
| 408 | { |
| 409 | throw run_fail("Qubit_encode parameter error."); |
| 410 | } |
| 411 | switch (gate_type) |
| 412 | { |
| 413 | case RX_GATE: |
| 414 | for (auto i = 0; i < data.size(); ++i) |
| 415 | { |
| 416 | m_qcircuit << RX(q[i], data[i]); |
| 417 | } |
| 418 | break; |
| 419 | |
| 420 | case RY_GATE: |
| 421 | for (auto i = 0; i < data.size(); ++i) |
| 422 | { |
| 423 | m_qcircuit << RY(q[i], data[i]); |
| 424 | } |
| 425 | break; |
| 426 | |
| 427 | case RZ_GATE: |
| 428 | for (auto i = 0; i < data.size(); ++i) |
| 429 | { |
| 430 | m_qcircuit << RZ(q[i], data[i]); |
| 431 | } |
| 432 | break; |
| 433 | |
| 434 | default: |
| 435 | QCERR_AND_THROW_ERRSTR(run_fail, "Error: The input gate type error."); |
| 436 | break; |
| 437 | } |
| 438 | |
| 439 | for (int i = 0; i < data.size(); ++i) { |
| 440 | m_out_qubits.push_back(q[i]); |
| 441 | } |
| 442 | return; |
| 443 | } |
| 444 | |
| 445 | void Encode::_recursive_compute_beta(const std::vector<double>&input_vector, std::vector<std::vector<double>>&betas, int count) { |
| 446 | if (input_vector.size() > 1) |