docs: def render_electrode_shapes(self, df_shapes=None, shape_scale=0.8,
                                  fill=(1, 1, 1)):
          '''
          Render electrode state shapes.
  
          By default, draw each electrode shape filled white.
  
          See also :meth:`render_shapes()`.
  
          Parameters
          ----------
          df_shapes = : pandas.DataFrame
  
  
          .. versionadded:: 0.12
          '''
          surface = self.get_surface()
          if df_shapes is None:
              if hasattr(self.canvas, 'df_canvas_shapes'):
                  df_shapes = self.canvas.df_canvas_shapes
              else:
                  return surface
          if 'x_center' not in df_shapes or 'y_center' not in df_shapes:
              # No center points have been computed for shapes.
              return surface
  
          cairo_context = cairo.Context(surface)
  
          df_shapes = df_shapes.copy()
          # Scale shapes to leave shape edges uncovered.
          df_shapes[['x', 'y']] = (df_shapes[['x_center', 'y_center']] +
                                   df_shapes[['x_center_offset',
                                              'y_center_offset']].values *
                                   shape_scale)
  
          for path_id, df_path_i in (df_shapes.groupby(self.canvas
                                                       .shape_i_columns)[['x',
                                                                          'y']]):
              # Use attribute lookup for `x` and `y`, since it is considerably
              # faster than `get`-based lookup using columns name strings.
              vertices_x = df_path_i.x.values
              vertices_y = df_path_i.y.values
              cairo_context.move_to(vertices_x[0], vertices_y[0])
              for x, y in itertools.izip(vertices_x[1:], vertices_y[1:]):
                  cairo_context.line_to(x, y)
              cairo_context.close_path()
  
              # Draw filled shape to indicate actuated electrode state.
              cairo_context.set_source_rgba(*fill)
              cairo_context.fill()
          return surface