code: def wrapup_plotly(
      self, target, fig, bar_grids, box_grids=None, yrange=None
  ):
      ticktext = self.display_columns.copy()
      label, show_percentile = self.get_axes_label()
      if show_percentile:
          for i, p in enumerate(self.percentile_columns):
              ticktext[i] += f"<br><sup><b>{p}</b></sup>"
  
      tick_params = dict(
          ticktext=ticktext,
          tickvals=np.arange(len(ticktext)),
          **bar_grids,
      )
      fig.update_xaxes(title_text=label, **tick_params)
      if box_grids is None:
          fig.update_yaxes(
              title_text=f"Average {target}",
              secondary_y=True,
              showgrid=False,
              **bar_grids,
          )
      else:
          fig.update_yaxes(
              title_text=f"{target} dist", range=yrange, **box_grids
          )
  
imports: from .styles import _prepare_plot_style, _axes_modify, _display_percentile, _modify_legend_axes, _get_axes_label
  import numpy
  from itertools import cycle
  import plotly.express
  import matplotlib
  import matplotlib.pyplot
  from matplotlib.gridspec import GridSpecFromSubplotSpec
  from mpl_toolkits.axes_grid1.inset_locator import inset_axes
  import matplotlib.patheffects
  import plotly.graph_objects
label_desc: Use image node_id 11 for calling the InfoPlotEngine obj's underlying member method code with example usage: obj.wrapup_plotly(target, fig, bar_grids, box_grids, yrange) without return types