code: def draw(self, points, can=None):
          
          if can == None: can = canvas.default_canvas()
          assert self.check_integrity()
          xtip = points[-1][0]
          ytip = points[-1][1]
  
          xtail = points[-2][0]
          ytail = points[-2][1]
  
          can.newpath()
          can.set_line_style(self.line_style)
          if len(points) > 2:
              can.moveto(points[0][0], points[0][1])
              for i in range(1, len(points) - 1):
                  can.lineto(points[i][0], points[i][1])
  
          draw_arrowbody(can, xscale(xtail), yscale(ytail),
                         yscale(xtip), yscale(ytip),
                         nscale(self.head_len))
  
          can.set_fill_color(self.head_color)
          draw_arrowhead(can, xscale(xtail), yscale(ytail),
                         xscale(xtip), yscale(ytip),
                         nscale(self.thickness),
                         nscale(self.head_len),
                         self.head_style)
  
          can.setbb(xtail, ytail)
          can.setbb(xtip, ytip)
docs: Parameter <points> specifies the
          list of points the arrow traverses through.
          It should contain at least two points, i.e.,
          the tail and tip. Parameter
          <can> is an optional parameter that specifies the output.
          <<canvas>>