docs: def rasterize(vectorobject, reference, outname=None, burn_values=1, expressions=None, nodata=0, append=False):
      """
      rasterize a vector object
  
      Parameters
      ----------
      vectorobject: Vector
          the vector object to be rasterized
      reference: Raster
          a reference Raster object to retrieve geo information and extent from
      outname: str or None
          the name of the GeoTiff output file; if None, an in-memory object of type :class:`Raster` is returned and
          parameter outname is ignored
      burn_values: int or list
          the values to be written to the raster file
      expressions: list
          SQL expressions to filter the vector object by attributes
      nodata: int
          the nodata value of the target raster file
      append: bool
          if the output file already exists, update this file with new rasterized values?
          If True and the output file exists, parameters `reference` and `nodata` are ignored.
  
      Returns
      -------
      Raster or None
          if outname is `None`, a raster object pointing to an in-memory dataset else `None`
      Example
      -------
      >>> from spatialist import Vector, Raster, rasterize
      >>> vec = Vector('source.shp')
      >>> ref = Raster('reference.tif')
      >>> outname = 'target.tif'
      >>> expressions = ['ATTRIBUTE=1', 'ATTRIBUTE=2']
      >>> burn_values = [1, 2]
      >>> rasterize(vec, reference, outname, burn_values, expressions)
      """
      if expressions is None:
          expressions = ['']
      if isinstance(burn_values, (int, float)):
          burn_values = [burn_values]
      if len(expressions) != len(burn_values):
          raise RuntimeError('expressions and burn_values of different length')
      
      failed = []
      for exp in expressions:
          try:
              vectorobject.layer.SetAttributeFilter(exp)
          except RuntimeError:
              failed.append(exp)
      if len(failed) > 0:
          raise RuntimeError('failed to set the following attribute filter(s): ["{}"]'.format('", '.join(failed)))
      
      if append and outname is not None and os.path.isfile(outname):
          target_ds = gdal.Open(outname, GA_Update)
      else:
          if not isinstance(reference, Raster):
              raise RuntimeError("parameter 'reference' must be of type Raster")
          if outname is not None:
              target_ds = gdal.GetDriverByName('GTiff').Create(outname, reference.cols, reference.rows, 1, gdal.GDT_Byte)
          else:
              target_ds = gdal.GetDriverByName('MEM').Create('', reference.cols, reference.rows, 1, gdal.GDT_Byte)
          target_ds.SetGeoTransform(reference.raster.GetGeoTransform())
          target_ds.SetProjection(reference.raster.GetProjection())
          band = target_ds.GetRasterBand(1)
          band.SetNoDataValue(nodata)
          band.FlushCache()
          band = None
      for expression, value in zip(expressions, burn_values):
          vectorobject.layer.SetAttributeFilter(expression)
          gdal.RasterizeLayer(target_ds, [1], vectorobject.layer, burn_values=[value])
      vectorobject.layer.SetAttributeFilter('')
      if outname is None:
          return Raster(target_ds)
      else:
          target_ds = None