class_docstr: SEVIRI native format reader.
  
  **Calibration**
  
  See :mod:`satpy.readers.seviri_base`.
  
  **Padding channel data to full disk**
  
  By providing the `fill_disk` as True in the `reader_kwargs`, the channel is loaded
  as full disk, padded with no-data where necessary. This is especially useful for the
  HRV channel, but can also be used for RSS and ROI data. By default, the original,
  unpadded, data are loaded::
  
      scene = satpy.Scene(filenames,
                          reader='seviri_l1b_native',
                          reader_kwargs={'fill_disk': False})
  
  **Metadata**
  
  See :mod:`satpy.readers.seviri_base`.
docstr: Get the area extent of the file.
  
  Until December 2017, the data is shifted by 1.5km SSP North and West against the nominal GEOS projection. Since
  December 2017 this offset has been corrected. A flag in the data indicates if the correction has been applied.
  If no correction was applied, adjust the area extent to match the shifted data.
  
  For more information see Section 3.1.4.2 in the MSG Level 1.5 Image Data Format Description. The correction
  of the area extent is documented in a `developer's memo <https://github.com/pytroll/satpy/wiki/
  SEVIRI-georeferencing-offset-correction>`_.
docstr_tok: ["Get","the","area","extent","of","the","file",".","Until","December","2017",",","the","data","is","shifted","by","1.5km","SSP","North","and","West","against","the","nominal","GEOS","projection",".","Since","December","2017","this","offset","has","been","corrected",".","A","flag","in","the","data","indicates","if","the","correction","has","been","applied",".","If","no","correction","was","applied",",","adjust","the","area","extent","to","match","the","shifted","data",".","For","more","information","see","Section","3.1.4.2","in","the","MSG","Level","1.5","Image","Data","Format","Description",".","The","correction","of","the","area","extent","is","documented","in","a","`","developer","'s","memo","<","https",":","\/\/github.com\/pytroll\/satpy\/wiki\/","SEVIRI-georeferencing-offset-correction",">","`","_","."]
code: def get_area_extent(self, dataset_id):
      """Get the area extent of the file.
  
      Until December 2017, the data is shifted by 1.5km SSP North and West against the nominal GEOS projection. Since
      December 2017 this offset has been corrected. A flag in the data indicates if the correction has been applied.
      If no correction was applied, adjust the area extent to match the shifted data.
  
      For more information see Section 3.1.4.2 in the MSG Level 1.5 Image Data Format Description. The correction
      of the area extent is documented in a `developer's memo <https://github.com/pytroll/satpy/wiki/
      SEVIRI-georeferencing-offset-correction>`_.
      """
      data15hd = self.header["15_DATA_HEADER"]
  
      # check for Earth model as this affects the north-south and
      # west-east offsets
      # section 3.1.4.2 of MSG Level 1.5 Image Data Format Description
      earth_model = data15hd["GeometricProcessing"]["EarthModel"][
          "TypeOfEarthModel"
      ]
      if earth_model == 2:
          ns_offset = 0
          we_offset = 0
      elif earth_model == 1:
          ns_offset = -0.5
          we_offset = 0.5
          if dataset_id["name"] == "HRV":
              ns_offset = -1.5
              we_offset = 1.5
      else:
          raise NotImplementedError(
              "Unrecognised Earth model: {}".format(earth_model)
          )
  
      if dataset_id["name"] == "HRV":
          grid_origin = data15hd["ImageDescription"][
              "ReferenceGridHRV"
          ]["GridOrigin"]
          center_point = (HRV_NUM_COLUMNS / 2) - 2
          column_step = (
              data15hd["ImageDescription"]["ReferenceGridHRV"][
                  "ColumnDirGridStep"
              ]
              * 1000.0
          )
          line_step = (
              data15hd["ImageDescription"]["ReferenceGridHRV"][
                  "LineDirGridStep"
              ]
              * 1000.0
          )
          nlines_fulldisk = HRV_NUM_LINES
          ncolumns_fulldisk = HRV_NUM_COLUMNS
      else:
          grid_origin = data15hd["ImageDescription"][
              "ReferenceGridVIS_IR"
          ]["GridOrigin"]
          center_point = VISIR_NUM_COLUMNS / 2
          column_step = (
              data15hd["ImageDescription"]["ReferenceGridVIS_IR"][
                  "ColumnDirGridStep"
              ]
              * 1000.0
          )
          line_step = (
              data15hd["ImageDescription"]["ReferenceGridVIS_IR"][
                  "LineDirGridStep"
              ]
              * 1000.0
          )
          nlines_fulldisk = VISIR_NUM_LINES
          ncolumns_fulldisk = VISIR_NUM_COLUMNS
  
      # Calculations assume grid origin is south-east corner
      # section 7.2.4 of MSG Level 1.5 Image Data Format Description
      origins = {0: "NW", 1: "SW", 2: "SE", 3: "NE"}
      if grid_origin != 2:
          msg = (
              "Grid origin not supported number: {}, {} corner".format(
                  grid_origin, origins[grid_origin]
              )
          )
          raise NotImplementedError(msg)
  
      aex_data = {"area_extent": [], "nlines": [], "ncolumns": []}
  
      img_bounds = self.image_boundaries.get_img_bounds(
          dataset_id, self.is_roi()
      )
      for south_bound, north_bound, east_bound, west_bound in zip(
          *img_bounds.values()
      ):
          if self.fill_disk:
              east_bound, west_bound = 1, ncolumns_fulldisk
              if not self.mda["is_full_disk"]:
                  south_bound, north_bound = 1, nlines_fulldisk
  
          nlines = north_bound - south_bound + 1
          ncolumns = west_bound - east_bound + 1
  
          area_dict = {
              "center_point": center_point,
              "east": east_bound,
              "west": west_bound,
              "south": south_bound,
              "north": north_bound,
              "column_step": column_step,
              "line_step": line_step,
              "column_offset": we_offset,
              "line_offset": ns_offset,
          }
  
          aex = calculate_area_extent(area_dict)
  
          aex_data["area_extent"].append(aex)
          aex_data["nlines"].append(nlines)
          aex_data["ncolumns"].append(ncolumns)
  
      return aex_data
  
imports: import logging
  import warnings
  from datetime import datetime, timedelta
  import dask.array
  import numpy
  import xarray
  from pyresample import geometry
  from satpy._compat import cached_property
  from satpy.readers._geos_area import get_area_definition, get_geos_area_naming
  from satpy.readers.eum_base import get_service_mode, recarray2dict, time_cds_short
  from satpy.readers.file_handlers import BaseFileHandler
  from satpy.readers.seviri_base import CHANNEL_NAMES, HRV_NUM_COLUMNS, HRV_NUM_LINES, REPEAT_CYCLE_DURATION, SATNUM, VISIR_NUM_COLUMNS, VISIR_NUM_LINES, NoValidOrbitParams, OrbitPolynomialFinder, SEVIRICalibrationHandler, add_scanline_acq_time, calculate_area_extent, create_coef_dict, dec10216, get_cds_time, get_satpos, pad_data_horizontally, pad_data_vertically, round_nom_time
  from satpy.readers.seviri_l1b_native_hdr import DEFAULT_15_SECONDARY_PRODUCT_HEADER, GSDTRecords, get_native_header, native_trailer
  from satpy.readers.utils import reduce_mda
  from satpy.utils import get_legacy_chunk_size
label_desc: Use image node_id 14 for calling the NativeMSGFileHandler obj's underlying member method code with example usage: obj.get_area_extent(dataset_id) and returns: aex_data