code: def area(self, by_spec=False):
          
          if by_spec:
              path_area = {}
              for poly, key in zip(self.polygons, zip(self.layers,
                                                      self.datatypes)):
                  poly_area = 0
                  for ii in range(1, len(poly) - 1):
                      poly_area += (poly[0][0] - poly[ii + 1][0]) * (
                          poly[ii][1] - poly[0][1]) - (
                              poly[0][1] - poly[ii + 1][1]) * (
                                  poly[ii][0] - poly[0][0])
                  if key in path_area:
                      path_area[key] += 0.5 * abs(poly_area)
                  else:
                      path_area[key] = 0.5 * abs(poly_area)
          else:
              path_area = 0
              for points in self.polygons:
                  poly_area = 0
                  for ii in range(1, len(points) - 1):
                      poly_area += (points[0][0] - points[ii + 1][0]) * (
                          points[ii][1] - points[0][1]) - (
                              points[0][1] - points[ii + 1][1]) * (
                                  points[ii][0] - points[0][0])
                  path_area += 0.5 * abs(poly_area)
          return path_area
docs: Calculate the total area of the path(s).
  
          Parameters
          ----------
          by_spec : bool
              If ``True``, the return value is a dictionary with
              ``{(layer, datatype): area}``.
  
          Returns
          -------
          out : number, dictionary
              Area of this object.