code: def ds_geom(ds, t_srs=None):
      
      gt = ds.GetGeoTransform()
      ds_srs = get_ds_srs(ds)
      if t_srs is None:
          t_srs = ds_srs
      ns = ds.RasterXSize
      nl = ds.RasterYSize
      x = np.array([0, ns, ns, 0, 0], dtype=float)
      y = np.array([0, 0, nl, nl, 0], dtype=float)
      #Note: pixelToMap adds 0.5 to input coords, need to account for this here
      x -= 0.5
      y -= 0.5
      mx, my = pixelToMap(x, y, gt)
      geom_wkt = 'POLYGON(({0}))'.format(', '.join(['{0} {1}'.format(*a) for a in zip(mx,my)]))
      geom = ogr.CreateGeometryFromWkt(geom_wkt)
      geom.AssignSpatialReference(ds_srs)
      if not ds_srs.IsSame(t_srs):
          geom_transform(geom, t_srs)
      return geom
docs: Return dataset bbox envelope as geom