def test_annotation_position_and_content(ax, format_string): row_col_list = ((0, 5), (8, 1), (7, 0), (13, 5), (1, 6), (3, 2), (2, 8)) qubits = [grid_qubit.GridQubit(row, col) for (row, col) in row_col_list] values = np.random.random(len(qubits)) test_value_map = {(qubit, ): value for qubit, value in zip(qubits, values)} test_row_col_map = {rc: value for rc, value in zip(row_col_list, values)} random_heatmap = heatmap.Heatmap(test_value_map, annotation_format=format_string) random_heatmap.plot(ax) actual_texts = set() for artist in ax.get_children(): if isinstance(artist, mpl.text.Text): col, row = artist.get_position() text = artist.get_text() actual_texts.add(((row, col), text)) expected_texts = set((qubit, format(value, format_string)) for qubit, value in test_row_col_map.items()) assert expected_texts.issubset(actual_texts)
def test_default_annotation(ax): """Tests that the default annotation is '.2g' format on float(value).""" row_col_list = ((0, 5), (8, 1), (7, 0), (13, 5), (1, 6), (3, 2), (2, 8)) qubits = [grid_qubit.GridQubit(row, col) for (row, col) in row_col_list] values = ['3.752', '42', '-5.27e8', '-7.34e-9', 732, 0.432, 3.9753e28] test_value_map = {(qubit, ): value for qubit, value in zip(qubits, values)} test_row_col_map = {rc: value for rc, value in zip(row_col_list, values)} random_heatmap = heatmap.Heatmap(test_value_map) random_heatmap.plot(ax) actual_texts = set() for artist in ax.get_children(): if isinstance(artist, mpl.text.Text): col, row = artist.get_position() text = artist.get_text() actual_texts.add(((row, col), text)) expected_texts = set((qubit, format(float(value), '.2g')) for qubit, value in test_row_col_map.items()) assert expected_texts.issubset(actual_texts)
def test_cells_positions(ax, test_GridQubit): row_col_list = ((0, 5), (8, 1), (7, 0), (13, 5), (1, 6), (3, 2), (2, 8)) if test_GridQubit: qubits = [ grid_qubit.GridQubit(row, col) for (row, col) in row_col_list ] else: qubits = row_col_list values = np.random.random(len(qubits)) test_value_map = {qubit: value for qubit, value in zip(qubits, values)} _, mesh, _ = heatmap.Heatmap(test_value_map).plot(ax) found_qubits = set() for path in mesh.get_paths(): vertices = path.vertices[0:4] row = int(round(np.mean([v[1] for v in vertices]))) col = int(round(np.mean([v[0] for v in vertices]))) found_qubits.add((row, col)) assert found_qubits == set(row_col_list)
def test_cell_colors(axes, colormap_name): qubits = ((0, 5), (8, 1), (7, 0), (13, 5), (1, 6), (3, 2), (2, 8)) values = 1.0 + 2.0 * np.random.random(len(qubits)) # [1, 3) test_value_map = {qubit: value for qubit, value in zip(qubits, values)} vmin, vmax = 1.5, 2.5 random_heatmap = (heatmap.Heatmap(test_value_map).set_colormap( colormap_name, vmin=vmin, vmax=vmax)) mesh, _ = random_heatmap.plot(axes) colormap = mpl.cm.get_cmap(colormap_name) for path, facecolor in zip(mesh.get_paths(), mesh.get_facecolors()): vertices = path.vertices[0:4] row = int(round(np.mean([v[1] for v in vertices]))) col = int(round(np.mean([v[0] for v in vertices]))) value = test_value_map[(row, col)] color_scale = (value - vmin) / (vmax - vmin) if color_scale < 0.0: color_scale = 0.0 if color_scale > 1.0: color_scale = 1.0 expected_color = np.array(colormap(color_scale)) assert np.all(np.isclose(facecolor, expected_color))
def test_plot_updates_local_config(): value_map_2d = { (grid_qubit.GridQubit(3, 2), grid_qubit.GridQubit(4, 2)): 0.004619111460557768, (grid_qubit.GridQubit(4, 1), grid_qubit.GridQubit(4, 2)): 0.0076079162393482835, } value_map_1d = { (grid_qubit.GridQubit(3, 2), ): 0.004619111460557768, (grid_qubit.GridQubit(4, 2), ): 0.0076079162393482835, } original_title = "Two Qubit Interaction Heatmap" new_title = "Temporary title for the plot" for random_heatmap in [ heatmap.TwoQubitInteractionHeatmap(value_map_2d, title=original_title), heatmap.Heatmap(value_map_1d, title=original_title), ]: _, ax = plt.subplots() random_heatmap.plot(ax, title=new_title) assert ax.get_title() == new_title _, ax = plt.subplots() random_heatmap.plot(ax) assert ax.get_title() == original_title
def test_annotation_map(ax): row_col_list = [(0, 5), (8, 1), (7, 0), (13, 5), (1, 6), (3, 2), (2, 8)] qubits = [grid_qubit.GridQubit(*row_col) for row_col in row_col_list] values = np.random.random(len(qubits)) annos = np.random.choice([c for c in string.ascii_letters], len(qubits)) test_value_map = {(qubit, ): value for qubit, value in zip(qubits, values)} test_anno_map = { (qubit, ): anno for qubit, row_col, anno in zip(qubits, row_col_list, annos) if row_col != (1, 6) } random_heatmap = heatmap.Heatmap(test_value_map, annotation_map=test_anno_map) random_heatmap.plot(ax) actual_texts = set() for artist in ax.get_children(): if isinstance(artist, mpl.text.Text): col, row = artist.get_position() assert (row, col) != (1, 6) actual_texts.add(((row, col), artist.get_text())) expected_texts = set((row_col, anno) for row_col, anno in zip(row_col_list, annos) if row_col != (1, 6)) assert expected_texts.issubset(actual_texts)
def test_urls(ax, test_GridQubit): row_col_list = ((0, 5), (8, 1), (7, 0), (13, 5), (1, 6), (3, 2), (2, 8)) if test_GridQubit: qubits = [grid_qubit.GridQubit(*row_col) for row_col in row_col_list] else: qubits = row_col_list values = np.random.random(len(qubits)) test_value_map = {qubit: value for qubit, value in zip(qubits, values)} test_url_map = { qubit: 'http://google.com/{}+{}'.format(*row_col) for qubit, row_col in zip(qubits, row_col_list) if row_col != (1, 6) } # Add an extra entry that should not show up in results because the # qubit is not in the value map. extra_qubit = grid_qubit.GridQubit(10, 7) if test_GridQubit else (10, 7) test_url_map[extra_qubit] = 'http://google.com/10+7' my_heatmap = heatmap.Heatmap(test_value_map).set_url_map(test_url_map) _, mesh, _ = my_heatmap.plot(ax) expected_urls = [ test_url_map.get(qubit, '') for row_col, qubit in sorted(zip(row_col_list, qubits)) ] assert mesh.get_urls() == expected_urls