Files
qibo-final/qibojit-benchmarks/plot_pathfinding_metric.py
2026-05-19 17:19:36 +08:00

481 lines
24 KiB
Python

from plots.utils import load_data
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.patches import Patch
matplotlib.rcParams['mathtext.fontset'] = 'cm'
matplotlib.rcParams['font.family'] = 'STIXGeneral'
import pandas as pd
save = True # if ``True`` plots will be saved in the current directory as pdfs
def plot_scaling_expectation(input1, input2, input3, circuit, quantity, precision="double", fontsize=30, legend=True, save=False):
combine_data = input1
combine_data2 = input2
combine_data3 = input3
matplotlib.rcParams["font.size"] = fontsize
# Prepare GPU data
condition = (combine_data["circuit"] == circuit) & (combine_data["precision"] == precision)
condition2 = (combine_data2["circuit"] == circuit) & (combine_data2["precision"] == precision)
condition3 = (combine_data3["circuit"] == circuit) & (combine_data3["precision"] == precision)
data = {}
data["qibotn MPI"] = combine_data[(combine_data["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_mpi_expectation.json") & condition]
data["qibotn NCCL"] = combine_data[(combine_data["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_nccl_expectation.json") & condition]
data["qibotn"] = combine_data[(combine_data["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_expectation.json") & condition]
data["qibojit numba"] = combine_data[(combine_data["library_options"] == "backend=qibojit,platform=numba,expectation=XXXZ") & condition]
data2 = {}
data2["qibotn MPI"] = combine_data2[(combine_data2["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_mpi_expectation.json") & condition2]
data2["qibotn NCCL"] = combine_data2[(combine_data2["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_nccl_expectation.json") & condition2]
data2["qibotn"] = combine_data2[(combine_data2["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_expectation.json") & condition2]
data2["qibojit numba"] = combine_data2[(combine_data2["library_options"] == "backend=qibojit,platform=numba,expectation=XXXZ") & condition2]
data3 = {}
data3["qibotn MPI"] = combine_data3[(combine_data3["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_mpi_expectation.json") & condition3]
data3["qibotn NCCL"] = combine_data3[(combine_data3["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_nccl_expectation.json") & condition3]
data3["qibotn"] = combine_data3[(combine_data3["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_expectation.json") & condition3]
data3["qibojit numba"] = combine_data3[(combine_data3["library_options"] == "backend=qibojit,platform=numba,expectation=XXXZ") & condition3]
# Plot data
cpu_cp = sns.color_palette("Oranges", 7)
gpu_cp = sns.color_palette("Purples", 7)
gpu_cp2 = sns.color_palette("Greens", 7)
gpu_cp3 = sns.color_palette("Reds", 7)
plt.figure(figsize=(16, 9))
plt.semilogy(data["qibotn"]["nqubits"], data["qibotn"][quantity],
color=cpu_cp[3], linewidth=1.5, label="1x1 gpu", marker=".", markersize=10)
plt.semilogy(data["qibotn MPI"]["nqubits"], data["qibotn MPI"][quantity],
color=gpu_cp[3], linewidth=1.5, label="1x8 gpu MPI", marker=".", markersize=10)
# plt.semilogy(data["qibotn NCCL"]["nqubits"], data["qibotn NCCL"][quantity],
# color=gpu_cp[5], linewidth=1.5, label="1x8 gpu NCCL", marker=".", markersize=10)
plt.semilogy(data2["qibotn MPI"]["nqubits"], data2["qibotn MPI"][quantity],
color=gpu_cp2[3], linewidth=1.5, label="2x8 gpu MPI", marker=".", markersize=10)
plt.semilogy(data3["qibotn MPI"]["nqubits"], data3["qibotn MPI"][quantity],
color=gpu_cp3[3], linewidth=1.5, label="4x8 gpu MPI", marker=".", markersize=10)
# plt.semilogy(data["qibojit numba"]["nqubits"], data["qibojit numba"][quantity],
# color=cpu_cp[2], linewidth=1.5, label="CPU", marker=".", markersize=10)
# plt.ylim(bottom=1e-4, top=1e3)
# plt.xlim(left=0, right=1750)
# plt.xlim(left=0, right=60)
#plt.xlim(right=31)
plt.title(f"Expectation: {circuit}, depth {5}, {precision} precision")
plt.xlabel("Number of qubits")
if quantity == "total_dry_time":
plt.ylabel("Total dry run time (sec)")
elif quantity == "total_simulation_time":
plt.ylabel("Total simulation time (sec)")
elif quantity == "simulation_times_mean":
plt.ylabel("Simulation times mean (sec)")
if legend:
plt.legend(fontsize="small")
if save:
plt.savefig(f"qibo_scaling_{circuit}_{quantity}_{precision}_ex.pdf", bbox_inches="tight")
else:
plt.show()
def plot_pathfinding_data(input1, input2, input3, circuit, quantity, precision="double", fontsize=30, legend=True, save=False):
num_reps=3
num_pathfinding_per_rep=4 #equivalent to total number of GPUs
combine_data = input1
combine_data2 = input2
combine_data3 = input3
matplotlib.rcParams["font.size"] = fontsize
# Prepare GPU data
condition = (combine_data["circuit"] == circuit) & (combine_data["precision"] == precision)
condition2 = (combine_data2["circuit"] == circuit) & (combine_data2["precision"] == precision)
condition3 = (combine_data3["circuit"] == circuit) & (combine_data3["precision"] == precision)
data = {}
data["qibotn MPI"] = combine_data[(combine_data["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_mpi_expectation.json") & condition]
data2 = {}
data2["qibotn MPI"] = combine_data2[(combine_data2["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_mpi_expectation.json") & condition2]
data3 = {}
data3["qibotn MPI"] = combine_data3[(combine_data3["library_options"] == "backend=qibotn,platform=cutensornet,computation_settings=cu_tensornet_mpi_expectation.json") & condition3]
# Plot data
color_1x1 = sns.color_palette("Oranges", 7)
color_1x4 = sns.color_palette("Purples", 7)
color_2x4 = sns.color_palette("Greens", 7)
color_4x4 = sns.color_palette("Reds", 7)
def extract_metric(data,rep_index,metric_of_interest):
#metric of interest 0: num slices, 1: opt cost, 2: largest intermediate, 3: time
metric_list_total=[]
metric_max=[]
metric_min=[]
metric_max_index=[]
metric_min_index=[]
for each_record in range(len(data["qibotn MPI"]['nqubits'])):
each_rep = data["qibotn MPI"][quantity][each_record][rep_index][0]
split_data = [each_rep[i:i + 4] for i in range(0, len(each_rep), 4)]
metric_list=[]
for each_gpu in range(len(split_data)):
metric_list.append(split_data[each_gpu][metric_of_interest])
metric_list_total.append(metric_list)
max_value = max(metric_list)
max_value_index = metric_list.index(max_value)
min_value = min(metric_list)
min_value_index = metric_list.index(min_value)
metric_max.append(max_value)
metric_min.append(min_value)
metric_max_index.append(max_value_index)
metric_min_index.append(min_value_index)
return metric_list_total, metric_max, metric_min, metric_max_index, metric_min_index
def extract_metric_with_index_of_interest(data,rep_index,metric_of_interest,index_of_interest):
#metric of interest 0: num slices, 1: opt cost, 2: largest intermediate, 3: time
metric_list_total=[]
metric_max=[]
metric_min=[]
metric_selected=[]
for each_record in range(len(data["qibotn MPI"]['nqubits'])):
each_rep = data["qibotn MPI"][quantity][each_record][rep_index][0]
split_data = [each_rep[i:i + 4] for i in range(0, len(each_rep), 4)]
metric_list=[]
for each_gpu in range(len(split_data)):
metric_list.append(split_data[each_gpu][metric_of_interest])
metric_list_total.append(metric_list)
max_value = max(metric_list)
interest_value = metric_list[(index_of_interest[each_record])]
min_value = min(metric_list)
metric_max.append(max_value)
metric_min.append(min_value)
metric_selected.append(interest_value)
return metric_list_total, metric_max, metric_min, metric_selected
rep_data = 0
rep_data2 = 1
rep_data3 = 0
data_opt_cost_original, max_cost, min_cost,max_cost_index, min_cost_index = extract_metric(data,rep_data,1)
data_opt_cost = [list(i) for i in zip(*data_opt_cost_original)]
data_opt_cost_original2, max_cost2, min_cost2, max_cost_index2, min_cost_index2 = extract_metric(data2,rep_data2,1)
data_opt_cost2 = [list(i) for i in zip(*data_opt_cost_original2)]
data_opt_cost_original3, max_cost3, min_cost3, max_cost_index3, min_cost_index3 = extract_metric(data3,rep_data3,1)
data_opt_cost3 = [list(i) for i in zip(*data_opt_cost_original3)]
#####
data_num_slices_original, _, _,selected1 = extract_metric_with_index_of_interest(data,rep_data,0,min_cost_index)
data_num_slices = [list(i) for i in zip(*data_num_slices_original)]
data_num_slices_original2, _, _, selected2= extract_metric_with_index_of_interest(data2,rep_data2,0,min_cost_index2)
data_num_slices2 = [list(i) for i in zip(*data_num_slices_original2)]
data_num_slices_original3, _, _, selected3 = extract_metric_with_index_of_interest(data3,rep_data3,0,min_cost_index3)
data_num_slices3 = [list(i) for i in zip(*data_num_slices_original3)]
####_time
data_time_original, max_cost_time, min_cost_time,max_cost_index_time, min_cost_index_time = extract_metric(data,rep_data,3)
data_time = [list(i) for i in zip(*data_time_original)]
data_time_original2, max_cost2_time, min_cost2_time, max_cost_index2_time, min_cost_index2_time = extract_metric(data2,rep_data2,3)
data_time2 = [list(i) for i in zip(*data_time_original2)]
data_time_original3, max_cost3_time, min_cost3_time, max_cost_index3_time, min_cost_index3_time = extract_metric(data3,rep_data3,3)
data_time3 = [list(i) for i in zip(*data_time_original3)]
# for i in range(len(data_opt_cost)):
# print("max", max_cost[i],"min",min_cost[i],data_opt_cost[i])
# print("1x4",data["qibotn MPI"]["nqubits"])
# print("2x4",data2["qibotn MPI"]["nqubits"])
# print("4x4",data3["qibotn MPI"]["nqubits"])
#### PLOT COST OF PATH ####
plt.figure(figsize=(16, 9))
color4x4=3
# 4x4
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[0],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[1],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[2],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[3],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[4],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[5],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[6],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[7],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[8],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[9],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[10],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[11],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[12],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[13],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[14],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_opt_cost3[15],
color=color_4x4[color4x4], marker=".", s=100)
# 2x4
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[0],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[1],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[2],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[3],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[4],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[5],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[6],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_opt_cost2[7],
color=color_2x4[2], marker=".", s=100)
# 1x4
plt.scatter(data["qibotn MPI"]["nqubits"], data_opt_cost[0],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_opt_cost[1],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_opt_cost[2],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_opt_cost[3],
color=color_1x4[2],marker=".", s=100)
# Best path
plt.semilogy(data["qibotn MPI"]["nqubits"], min_cost,
color=color_1x4[3], label="1x4 selected", linewidth=1.5, marker="x", markersize=10)
# Best path
plt.semilogy(data2["qibotn MPI"]["nqubits"], min_cost2,
color=color_2x4[3], label="2x4 selected",linewidth=1.5, marker="x", markersize=10)
# Best path
plt.semilogy(data3["qibotn MPI"]["nqubits"], min_cost3,
color=color_4x4[3], label="4x4 selected",linewidth=1.5, marker="x", markersize=10)
plt.xlim(left=0, right=305)
plt.title(f"Cost of Paths Found: {circuit}, depth {5}, {precision} precision")
plt.xlabel("Number of qubits")
plt.ylabel("FLOP")
if legend:
plt.legend(fontsize="small")
if save:
plt.savefig(f"qibo_scaling_{circuit}_{quantity}_{precision}_pathfinding.pdf", bbox_inches="tight")
else:
plt.show()
#### PLOT NUM OF SLICES ####
plt.figure(figsize=(16, 9))
color4x4=3
# 4x4
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[0],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[1],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[2],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[3],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[4],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[5],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[6],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[7],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[8],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[9],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[10],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[11],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[12],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[13],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[14],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_num_slices3[15],
color=color_4x4[color4x4], marker=".", s=100)
# 2x4
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[0],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[1],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[2],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[3],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[4],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[5],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[6],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_num_slices2[7],
color=color_2x4[2], marker=".", s=100)
# 1x4
plt.scatter(data["qibotn MPI"]["nqubits"], data_num_slices[0],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_num_slices[1],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_num_slices[2],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_num_slices[3],
color=color_1x4[2],marker=".", s=100)
# Best path
plt.semilogy(data["qibotn MPI"]["nqubits"], selected1,
color=color_1x4[3], label="1x4 selected", linewidth=1.5, marker="x", markersize=10)
# Best path
plt.semilogy(data2["qibotn MPI"]["nqubits"], selected2,
color=color_2x4[3], label="2x4 selected",linewidth=1.5, marker="x", markersize=10)
# Best path
plt.semilogy(data3["qibotn MPI"]["nqubits"], selected3,
color=color_4x4[3], label="4x4 selected",linewidth=1.5, marker="x", markersize=10)
plt.xlim(left=0, right=305)
plt.title(f"Slicing: {circuit}, depth {5}, {precision} precision")
plt.xlabel("Number of qubits")
plt.ylabel("Number of slices")
if legend:
plt.legend(fontsize="small")
if save:
plt.savefig(f"qibo_scaling_{circuit}_{quantity}_{precision}_slicing.pdf", bbox_inches="tight")
else:
plt.show()
#### PLOT Time PF ####
plt.figure(figsize=(16, 9))
color4x4=3
# 4x4
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[0],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[1],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[2],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[3],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[4],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[5],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[6],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[7],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[8],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[9],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[10],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[11],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[12],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[13],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[14],
color=color_4x4[color4x4], marker=".", s=100)
plt.scatter(data3["qibotn MPI"]["nqubits"], data_time3[15],
color=color_4x4[color4x4], marker=".", s=100)
# 2x4
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[0],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[1],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[2],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[3],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[4],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[5],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[6],
color=color_2x4[2], marker=".", s=100)
plt.scatter(data2["qibotn MPI"]["nqubits"], data_time2[7],
color=color_2x4[2], marker=".", s=100)
# 1x4
plt.scatter(data["qibotn MPI"]["nqubits"], data_time[0],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_time[1],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_time[2],
color=color_1x4[2], marker=".", s=100)
plt.scatter(data["qibotn MPI"]["nqubits"], data_time[3],
color=color_1x4[2],marker=".", s=100)
# Best path
plt.semilogy(data["qibotn MPI"]["nqubits"], max_cost_time,
color=color_1x4[3], label="1x4 selected", linewidth=1.5, marker="x", markersize=10)
# Best path
plt.semilogy(data2["qibotn MPI"]["nqubits"], max_cost2_time,
color=color_2x4[3], label="2x4 selected",linewidth=1.5, marker="x", markersize=10)
# Best path
plt.semilogy(data3["qibotn MPI"]["nqubits"], max_cost3_time,
color=color_4x4[3], label="4x4 selected",linewidth=1.5, marker="x", markersize=10)
plt.xlim(left=0, right=305)
plt.title(f"Pathfinding Time: {circuit}, depth {5}, {precision} precision")
plt.xlabel("Number of qubits")
plt.ylabel("Pathfinding Time (sec)")
if legend:
plt.legend(fontsize="small")
if save:
plt.savefig(f"qibo_scaling_{circuit}_{quantity}_{precision}_pftime.pdf", bbox_inches="tight")
else:
plt.show()
data1 = load_data("/home/project/11003124/tankya/costa1/qibojit-benchmarks/qibotn_pathfind_double_1x4_variational_d5.dat")
data2 = load_data("/home/project/11003124/tankya/costa1/qibojit-benchmarks/qibotn_pathfind_double_2x4_variational_d5.dat")
data3 = load_data("/home/project/11003124/tankya/costa1/qibojit-benchmarks/qibotn_pathfind_double_4x4_variational_d5_old.dat")
plot_pathfinding_data(data1,data2,data3,"variational", "expectation_result","double", legend=True, save=save)