11import logging
22import threading
3+ import os
34from queue import Queue
45from eqsn .shared_dict import SharedDict
56from eqsn .qubit_thread import SINGLE_GATE , MERGE_SEND , MERGE_ACCEPT , MEASURE ,\
6- MEASURE_NON_DESTRUCTIVE , GIVE_QUBITS_AND_TERMINATE , \
7+ MEASURE_NON_DESTRUCTIVE , \
78 CONTROLLED_GATE , NEW_QUBIT , ADD_MERGED_QUBITS_TO_DICT , QubitThread
89
910
@@ -36,9 +37,7 @@ def run(self):
3637 elif item [0 ] == MERGE_ACCEPT :
3738 self .merge_accept (item [1 ], item [2 ])
3839 elif item [0 ] == MERGE_SEND :
39- self .merge_send (item [1 ], item [2 ])
40- elif item [0 ] == GIVE_QUBITS_AND_TERMINATE :
41- self .give_qubits_and_terminate (item [1 ], item [2 ])
40+ self .merge_send (item [1 ], item [2 ], item [3 ])
4241 elif item [0 ] == MEASURE_NON_DESTRUCTIVE :
4342 self .measure_non_destructive (item [1 ], item [2 ])
4443 elif item [0 ] == ADD_MERGED_QUBITS_TO_DICT :
@@ -72,17 +71,6 @@ def measure_non_destructive(self, q_id, channel):
7271 q = self .shared_dict .get_queues_for_ids ([q_id ])[0 ]
7372 q .put ([MEASURE_NON_DESTRUCTIVE , q_id , channel ])
7473
75- def give_qubits_and_terminate (self , q_id , queue ):
76- temp_queue = Queue ()
77- q = self .shared_dict .get_queues_for_ids ([q_id ])[0 ]
78- q .put ([GIVE_QUBITS_AND_TERMINATE , temp_queue ])
79- qubits = temp_queue .get ()
80- # remove all qubits
81- for c in qubits :
82- self .shared_dict .delete_id_and_check_to_join_thread (c )
83- # send the qubits to the main process
84- queue .put (qubits )
85-
8674 def add_merged_qubits_to_thread (self , q_id , qubits ):
8775 q , t = self .shared_dict .get_queues_and_threads_for_ids ([q_id ])[0 ]
8876 for qubit in qubits :
@@ -116,9 +104,16 @@ def apply_controlled_gate(self, gate, q_id1, q_id2):
116104 q = self .shared_dict .get_queues_for_ids ([q_id1 ])[0 ]
117105 q .put ([CONTROLLED_GATE , gate , q_id1 , q_id2 ])
118106
119- def merge_send (self , q_id , queue ):
107+ def merge_send (self , q_id , queue , queue2 ):
108+ temp_queue = Queue ()
120109 q = self .shared_dict .get_queues_for_ids ([q_id ])[0 ]
121- q .put ([MERGE_SEND , queue ])
110+ q .put ([MERGE_SEND , queue , temp_queue ])
111+ qubits = temp_queue .get ()
112+ # remove all qubits
113+ for c in qubits :
114+ self .shared_dict .delete_id_and_check_to_join_thread (c )
115+ # send the qubits to the main process
116+ queue2 .put (qubits )
122117
123118 def merge_accept (self , q_id , queue ):
124119 q = self .shared_dict .get_queues_for_ids ([q_id ])[0 ]
@@ -141,10 +136,9 @@ def merge_qubits(self, q_id1, q_id2):
141136 q1 = l [0 ]
142137 q2 = l [1 ]
143138 merge_q = Queue ()
144- q1 .put ([MERGE_SEND , merge_q ])
145- q2 .put ([MERGE_ACCEPT , merge_q ])
146139 qubits_q = Queue ()
147- q1 .put ([GIVE_QUBITS_AND_TERMINATE , qubits_q ])
140+ q1 .put ([MERGE_SEND , merge_q , qubits_q ])
141+ q2 .put ([MERGE_ACCEPT , merge_q ])
148142 qubits = qubits_q .get ()
149143 self .shared_dict .change_thread_and_queue_of_ids_and_join (
150144 qubits , q_id2 )
0 commit comments