code: def plot_pairwise_heatmap(data_dict, title="", xtitle="", ytitle=""):
      if data_dict.get("scores", None) is None:  # pragma: no cover
          return None
  
      bin_labels_left = data_dict["left_names"]
      bin_labels_right = data_dict["right_names"]
      bin_vals = data_dict["scores"]
  
      bin_vals = np.ascontiguousarray(np.transpose(bin_vals, (1, 0)))
  
      heatmap = go.Heatmap(
          z=bin_vals, x=bin_labels_left, y=bin_labels_right
      )
      if data_dict.get("scores_range", None) is not None:
          heatmap["zmin"] = data_dict["scores_range"][0]
          heatmap["zmax"] = data_dict["scores_range"][1]
  
      layout = go.Layout(
          title=title,
          xaxis=dict(title=xtitle),
          yaxis=dict(title=ytitle),
      )
      figure = go.Figure(data=[heatmap], layout=layout)
  
      return figure
  
imports: import plotly.graph_objs
  import numpy
  from plotly import subplots
  import matplotlib.pyplot
  from numbers import Number
  import logging
label_desc: Use image node_id 15 for calling a global function with example usage: plot_pairwise_heatmap(data_dict, title, xtitle, ytitle) and returns: figure, None