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

Method run

Core/VirtualQuantumProcessor/DensityMatrix/DensityMatrixSimulator.cpp:74–119  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72}
73
74void DensityMatrixSimulator::run(QProg& node, bool reset_state)
75{
76 QVec qubits;
77 auto qubits_num = get_allocate_qubits(qubits);
78
79 /*Initialize density matrix space*/
80 if (reset_state)
81 m_simulator->init_density_matrix(qubits_num);
82
83 flatten(node);
84 auto prog_node = node.getImplementationPtr();
85 for (auto iterator = prog_node->getFirstNodeIter();
86 iterator != prog_node->getEndNodeIter(); ++iterator)
87 {
88 auto qnode = std::dynamic_pointer_cast<QNode>(*iterator);
89
90 switch (qnode->getNodeType())
91 {
92 case NodeType::MEASURE_GATE:
93 {
94 auto measure_node = std::dynamic_pointer_cast<AbstractQuantumMeasure>(qnode);
95 auto qubit_addr = measure_node->getQuBit()->get_phy_addr();
96 m_simulator->apply_Measure({ qubit_addr });
97 break;
98 }
99
100 case NodeType::GATE_NODE:
101 {
102 auto gate_node = std::dynamic_pointer_cast<AbstractQGateNode>(qnode);
103
104 apply_gate(gate_node);
105
106 /* check if global noisy enabled or not*/
107 if (m_noisy.enabled())
108 apply_gate_with_noisy(gate_node);
109
110 break;
111 }
112
113 default:QCERR_AND_THROW(std::runtime_error, "invalid node for density matrix simulator");
114 }
115
116 } /*end iterator*/
117
118 return;
119}
120
121void DensityMatrixSimulator::apply_gate(std::shared_ptr<AbstractQGateNode> gate_node)
122{

Callers

nothing calls this directly

Calls 9

flattenFunction · 0.85
init_density_matrixMethod · 0.80
apply_MeasureMethod · 0.80
getImplementationPtrMethod · 0.45
getFirstNodeIterMethod · 0.45
getEndNodeIterMethod · 0.45
getNodeTypeMethod · 0.45
getQuBitMethod · 0.45
enabledMethod · 0.45

Tested by

no test coverage detected