Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import h5py | |
| import os | |
| import mercury as mr | |
| import sys | |
| sys.path.append('/plot_scripts/') | |
| from map_packages_colors_all import * | |
| from plot_scripts_all import * | |
| package_str = ['qiskit' , 'cirq', 'qsimcirq', 'pennylane', 'pennylane_l', 'qibo', 'qibojit', 'yao', 'quest', 'qulacs', 'intel_qs_cpp', 'projectq', 'svsim', 'hybridq', 'hiq', 'qcgpu', 'qrack_sch', 'cuquantum_qiskit', 'cuquantum_qsimcirq', 'qpanda', 'qpp', 'myqlm', 'myqlm_cpp', 'braket'] | |
| def _build_data_mat(task, cc, pr_1, pr_2, _n_arr): | |
| dir = os.getcwd() | |
| data_mat = np.log(np.zeros((len(package_str), len(_n_arr)))) | |
| for p_i, pack in enumerate(package_str): | |
| dat_pr1 = dir + '/data/{}/{}_{}_{}.h5'.format(task, pack, cc, pr_1) | |
| dat_pr2 = dir + '/data/{}/{}_{}_{}.h5'.format(task, pack, cc, pr_2) | |
| if os.path.isfile(dat_pr1) and os.path.isfile(dat_pr2): | |
| h5f_pr1 = h5py.File(dat_pr1, 'r') | |
| dat_pr1 = h5f_pr1[storage_dict[pack]][:] | |
| h5f_pr1.close() | |
| h5f_pr2 = h5py.File(dat_pr2, 'r') | |
| dat_pr2 = h5f_pr2[storage_dict[pack]][:] | |
| h5f_pr2.close() | |
| ratio_arr = [] | |
| if len(dat_pr1) == len(dat_pr2): | |
| for i, elem in enumerate(dat_pr1): | |
| ratio_arr.append(elem/float(dat_pr2[i])) | |
| elif len(dat_pr1) > len(dat_pr2): | |
| for i, elem in enumerate(dat_pr2): | |
| ratio_arr.append(dat_pr1[i]/float(elem)) | |
| elif len(dat_pr2) > len(dat_pr1): | |
| for i, elem in enumerate(dat_pr1): | |
| ratio_arr.append(elem/float(dat_pr2[i])) | |
| if len(_n_arr) > len(ratio_arr): | |
| for r_i, rat in enumerate(ratio_arr): | |
| data_mat[p_i, r_i] = rat | |
| elif len(_n_arr) < len(ratio_arr): | |
| for n_i in range(len(_n_arr)): | |
| data_mat[p_i, n_i] = ratio_arr[n_i] | |
| else: | |
| for ri, rat_v in enumerate(ratio_arr): | |
| data_mat[p_i, ri] = rat_v | |
| return data_mat | |
| def abs_time_pack(task, cc, N_end, pr_1, pr_2): | |
| if task == "Heisenberg dynamics": | |
| task = "hdyn" | |
| elif task == "Random Quantum Circuit": | |
| task = "rqc" | |
| elif task == "Quantum Fourier Transform": | |
| task = "qft" | |
| if cc == "Singlethread": | |
| cc = 'singlethread' | |
| elif cc == "Multithread": | |
| cc = 'multithread' | |
| elif cc == "GPU": | |
| cc = 'gpu' | |
| if pr_1 == "Single": | |
| pr_1 = "sp" | |
| elif pr_1 == "Double": | |
| pr_1 = "dp" | |
| if pr_2 == "Single": | |
| pr_2 = "sp" | |
| elif pr_2 == "Double": | |
| pr_2 = "dp" | |
| fig, ax = plt.subplots() | |
| dir = os.getcwd() | |
| if task == 'hdyn' or task == 'qft': | |
| N_arr = np.arange(6, N_end, 2) | |
| elif task == 'rqc': | |
| N_arr = np.arange(12, N_end, 2) | |
| # if not os.path.isfile(dat_fst) and not os.path.isfile(dat_fmt) and not os.path.isfile(dat_fgpu): | |
| # return mr.Md(f"Precision {pr} possibly not supported") | |
| data_mat = _build_data_mat(task, cc, pr_1, pr_2, N_arr) | |
| # params = {'figure.figsize': (10, 10)} | |
| # plt.rcParams.update(params) | |
| # plt.imshow(data_mat, cmap='OrRd')#, vmin=-16, vmax=0) | |
| plt.imshow(data_mat, cmap='gist_heat_r', vmin=-1., vmax=10) | |
| plt.yticks(range(len(pkg_str)), package_str) | |
| locs, labels = plt.yticks() | |
| # plt.setp(labels, rotation=90) | |
| plt.xticks(range(len(N_arr)), N_arr) | |
| # locs, labels = plt.xticks() | |
| ax.xaxis.set_major_locator(ticker.AutoLocator()) | |
| ax.xaxis.set_minor_locator(ticker.AutoMinorLocator()) | |
| plt.colorbar() | |
| plt.tight_layout() | |
| # plt.savefig(fn) | |
| plt.show() | |
| # abs_time_pack("Heisenberg dynamics", "Singlethread", 36, "Double", "Single") | |
| # abs_time_pack("Random Quantum Circuit", "Double", 36, "Singlethread", "Multithread") | |
| def comp_time_pack(task_1, task_2, cc, N_end, pr_1, pr_2): | |
| if task_1 == "Heisenberg dynamics": | |
| task_1 = "hdyn" | |
| elif task_1 == "Random Quantum Circuit": | |
| task_1 = "rqc" | |
| elif task_1 == "Quantum Fourier Transform": | |
| task_1 = "qft" | |
| if task_2 == "Heisenberg dynamics": | |
| task_2 = "hdyn" | |
| elif task_2 == "Random Quantum Circuit": | |
| task_2 = "rqc" | |
| elif task_2 == "Quantum Fourier Transform": | |
| task_2 = "qft" | |
| if cc == "Singlethread": | |
| cc = 'singlethread' | |
| elif cc == "Multithread": | |
| cc = 'multithread' | |
| elif cc == "GPU": | |
| cc = 'gpu' | |
| if pr_1 == "Single": | |
| pr_1 = "sp" | |
| elif pr_1 == "Double": | |
| pr_1 = "dp" | |
| if pr_2 == "Single": | |
| pr_2 = "sp" | |
| elif pr_2 == "Double": | |
| pr_2 = "dp" | |
| fig, ax = plt.subplots() | |
| dir = os.getcwd() | |
| if task_1 == 'hdyn' or task_1 == 'qft': | |
| N_arr_1 = np.arange(6, N_end, 2) | |
| elif task_1 == 'rqc': | |
| N_arr_1 = np.arange(12, N_end, 2) | |
| if task_2 == 'hdyn' or task_2 == 'qft': | |
| N_arr_2 = np.arange(6, N_end, 2) | |
| elif task_2 == 'rqc': | |
| N_arr_2 = np.arange(12, N_end, 2) | |
| data_mat_1 = np.matrix(_build_data_mat(task_1, cc, pr_1, pr_2, N_arr_1)) | |
| data_mat_2 = np.matrix(_build_data_mat(task_2, cc, pr_1, pr_2, N_arr_2)) | |
| if N_arr_1[0] > N_arr_2[0]: | |
| data_mat_2 = data_mat_2[:,3:] | |
| elif N_arr_1[0] < N_arr_2[0]: | |
| data_mat_1 = data_mat_1[:,3:] | |
| # print(data_mat_1.shape) | |
| # print(data_mat_2.shape) | |
| # plt.imshow(data_mat_1, cmap='OrRd')#, vmin=-16, vmax=0) | |
| # plt.show() | |
| # plt.imshow(data_mat_2, cmap='OrRd')#, vmin=-16, vmax=0) | |
| # plt.show() | |
| comp_data_mat = np.zeros(data_mat_1.shape) | |
| for ri in range(comp_data_mat.shape[0]): | |
| for ci in range(comp_data_mat.shape[1]): | |
| comp_data_mat[ri, ci] = data_mat_1[ri, ci]/data_mat_2[ri, ci] | |
| # comp_data_mat = np.matrix(data_mat_1) - np.matrix(data_mat_2) | |
| # params = {'figure.figsize': (10, 10)} | |
| # plt.rcParams.update(params) | |
| # plt.imshow(comp_data_mat, cmap='Spectral')#, vmin=-16, vmax=0) | |
| plt.imshow(comp_data_mat, cmap='gist_heat_r', vmin=-0.5) | |
| plt.yticks(range(len(pkg_str)), package_str) | |
| locs, labels = plt.yticks() | |
| # plt.setp(labels, rotation=90) | |
| if N_arr_1[0] > N_arr_2[0]: | |
| plt.xticks(range(len(N_arr_1)), N_arr_1) | |
| elif N_arr_1[0] < N_arr_2[0]: | |
| plt.xticks(range(len(N_arr_2)), N_arr_2) | |
| else: | |
| plt.xticks(range(len(N_arr_1)), N_arr_1) | |
| # locs, labels = plt.xticks() | |
| ax.xaxis.set_major_locator(ticker.AutoLocator()) | |
| ax.xaxis.set_minor_locator(ticker.AutoMinorLocator()) | |
| plt.colorbar() | |
| plt.tight_layout() | |
| # plt.savefig(fn) | |
| plt.show() | |
| # comp_time_pack("Heisenberg dynamics", "Random Quantum Circuit", "Double", 36, "Singlethread", "Multithread") | |