code: def on_draw(self, event):
      prof = Profiler()  # noqa
      self.context.clear()
      M = len(self.cells)
      N = len(self.cells[0])
      w, h = self.size
      for i in range(M):
          for j in range(N):
              self.context.set_viewport(
                  w * i / M, h * j / N, w / M, h / N
              )
              self.cells[i][j].draw()
  
imports: from __future__ import division
  import numpy
  from vispy import gloo, app, scene, visuals
  from vispy.util.profiler import Profiler
label_desc: Use image node_id 4 for calling the GridCanvas obj's underlying member method code with example usage: obj.on_draw(event) without return types