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

Method bid_amplitude_encode

QAlg/Encode/Encode.cpp:579–631  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

577 return;
578}
579void Encode::bid_amplitude_encode(const QVec &q, const std::vector<double>& data, const int split) {
580
581 vector<double>data_temp(data);
582
583 if (!_check_normalized(data_temp)) {
584 throw run_fail("Data is not normalized");
585 }
586
587 int n_qubits = std::ceil(std::log2(data_temp.size()));
588 int split_temp = split;
589
590 if (split == 0) {
591 if (n_qubits & 1) {
592 split_temp = n_qubits / 2 + 1;
593 }
594 else {
595 split_temp = n_qubits / 2;
596 }
597 }
598
599 int size = data_temp.size();
600 int size_next = 1 << n_qubits;
601
602 if ((split_temp + 1)*(size_next / (1 << split_temp)) - 1 > q.size()) {
603 throw run_fail("Bid_Amplitude_encode parameter error.");
604 }
605
606 if (split_temp > std::ceil(std::log2(data_temp.size()))) {
607 throw run_fail("Bid_Amplitude_encode parameter error.");
608 }
609
610 while (data_temp.size() < (1 << n_qubits))
611 {
612 data_temp.push_back(0);
613 }
614
615 StateNode* state_tree = _state_decomposition(n_qubits, data_temp);
616
617 NodeAngleTree* angle_tree = _create_angles_tree(state_tree);
618
619 _add_register(angle_tree, n_qubits - split_temp);
620
621 _top_down_tree_walk(angle_tree, q, n_qubits - split_temp);
622
623 _bottom_up_tree_walk(angle_tree, q, n_qubits - split_temp);
624
625 _output(angle_tree, q);
626
627 delete state_tree;
628 delete angle_tree;
629
630 return;
631}
632void Encode::_output(NodeAngleTree* angle_tree, const QVec &q) {
633 if (angle_tree) {
634 if (angle_tree->left) {

Callers 1

Calls 5

run_failClass · 0.85
ceilFunction · 0.50
log2Function · 0.50
sizeMethod · 0.45
push_backMethod · 0.45

Tested by 1