code: def _get_cmapper_opts(self, low, high, factors, colors):
      from bokeh.models import WeightedStackColorMapper
      from bokeh.palettes import varying_alpha_palette
  
      AlphaMapper, _ = super()._get_cmapper_opts(
          low, high, factors, colors
      )
      palette = varying_alpha_palette(
          color="#000",
          n=self.num_colors,
          start_alpha=self.start_alpha,
          end_alpha=self.end_alpha,
      )
      alpha_mapper = AlphaMapper(palette=palette)
      opts = {"alpha_mapper": alpha_mapper}
  
      if "NaN" in colors:
          opts["nan_color"] = colors["NaN"]
  
      return WeightedStackColorMapper, opts
  
imports: import sys
  import numpy
  import param
  from bokeh.models import CustomJSHover, DatetimeAxis
  from ...core.util import cartesian_product, dimension_sanitizer, isfinite
  from ...element import Raster
  from ..util import categorical_legend
  from .chart import PointPlot
  from .element import ColorbarPlot, LegendPlot
  from .selection import BokehOverlaySelectionDisplay
  from .styles import base_properties, fill_properties, line_properties, mpl_to_bokeh
  from .util import bokeh33, bokeh34, colormesh
label_desc: Use image node_id 1 for calling the ImageStackPlot obj's underlying member method code with example usage: obj._get_cmapper_opts(low, high, factors, colors) and returns: WeightedStackColorMapper,  opts