class_docstr: :class:`~vispy.visuals.ImageVisual` subclass displaying a complex-valued image.
  
  This class handles complex values by using an rg32f float texture behind the scenes,
  storing the real component in the "r"  value and the imaginary in the "g" value.
  
  Parameters
  ----------
  data : ndarray
      Complex valued ImageVisual data.  Should be a two dimensional array with a dtype
      of np.complex64 or np.complex128.
  complex_mode : str
      The mode used to convert the complex value in each pixel into a scalar:
          * 'real': show only the real component.
          * 'imaginary': show only the imaginary component.
          * 'magnitude': show the magnitude (`np.abs`) of the complex value.
          * 'phase': show the phase (`np.angle`) of the complex value.
code: def _init_texture(self, data, texture_format, **texture_kwargs):
      texture_kwargs = {}
      if self._data_is_complex:
          texture_kwargs["format"] = "rg"
      return super()._init_texture(
          data, texture_format, **texture_kwargs
      )
  
file_path: vispy/vispy/visuals/image_complex.py
imports: from .image import ImageVisual, _APPLY_CLIM_FLOAT, _APPLY_GAMMA_FLOAT
  import numpy
  from .shaders import Function, FunctionChain
label_desc: Use image node_id 2 for calling the ComplexImageVisual obj's underlying member method code with example usage: obj._init_texture(data, texture_format) and returns: super