[docs]defcollect_fidelity_data(evexpr):""" Extract data from an EventExpression object and create a dictionary containing the necessary metrics (fidelity, simulation time, status) Parameters ---------- evexpr : pydynaa.core.EventExpression Event containing information about the protocol runs. Returns ------- dict Return the metrics via a dict object. Examples -------- >>> subprotocols_done = self.await_signal( ... self.subprotocol_qnode_1, signal_label=Signals.FINISHED ... ) >>> yield subprotocols_done >>> data_point = collect_fidelity_data(subprotocols_done) """# Get loggerlogger=logging.getLogger("data_logger")first_protocol=evexpr.first_term.triggered_events[-1].sourcesecond_protocol=evexpr.second_term.triggered_events[-1].sourcefirst_result=first_protocol.get_signal_result(Signals.FINISHED)second_result=second_protocol.get_signal_result(Signals.FINISHED)# Get the respective QPUsalice=first_protocol.nodebob=second_protocol.node# Get resultsfidelity=get_fidelities(alice,bob)[0]success=first_result["success"]andsecond_result["success"]log=first_result["log"]simtime=ns.sim_time()results={"fidelity":fidelity,"simtime":simtime,"attempt_log":log,"success":success,}logger.info(f"Data returned by data collection handler: {results}")returnresults