Monitor: for better collecting network status
Monitor
is a virtual entity to collect network status for better analysis. It can collect network status before the simulation starts, after the simulation finishes, periodically, or when be triggered by a serial of events. It can be initiated by the following input parameters:
name, the name of this monitor
network, a optional input parameter, a
QuantumNetwork
object.
from qns.entity.Monitor.monitor import Monitor
monitor = Monitor(name="monitor_1", network = None)
Users should instruct monitors how to collect the data by providing a calculate function. They can use the method add_attribution
to add a new watching data. The first parameter is the attribution’s name (the column’s name in pandas), and the second parameter is the calculate function calculate_func
. This function will be called whenever the monitor is triggered. The input of calculate_func
is a tuple (Simulator
, QuantumNetwork
, Event
), so that calculate_func
can get what they need from those input. The output is the calculated collecting data. Here are some examples.
def watch_send_count(simulator, network, event):
return sp.count
def watch_recv_count(simulator, network, event):
return rp.count
monitor.add_attribution(name="send_count", calculate_func=watch_send_count)
monitor.add_attribution(name="recv_count", calculate_func=watch_recv_count)
monitor.add_attribution(name="event_name", calculate_func=lambda s, n, e: e.__class__)
Finally, users should tell the monitor when to collect data. SimQN provides the following hooks:
# before the simulation starts
m.at_start()
# after it finishes
m.at_finish()
# at a fixed period time
m.at_period(period_time=1)
# watch every ``RecvQubitPacket`` Event
m.at_event(RecvQubitPacket)
Before the simulation start, the monitor should be installed to the simulator by install
method. After the simulation finishes, users can get the collected data using get_data
function. The data will be formed in a pandas.DataFrame
object.
m.install(s)
s.run()
data = m.get_data()