class_docstr: A file handler class for VIIRS compact format.
class_docstr_tok: ["A","file","handler","class","for","VIIRS","compact","format","."]
docstr: Read angles.
docstr_tok: ["Read","angles","."]
code: def read_geo(self, key, info):
      """Read angles."""
      pairs = {
          ("satellite_azimuth_angle", "satellite_zenith_angle"): (
              "SatelliteAzimuthAngle",
              "SatelliteZenithAngle",
          ),
          ("solar_azimuth_angle", "solar_zenith_angle"): (
              "SolarAzimuthAngle",
              "SolarZenithAngle",
          ),
          ("dnb_solar_azimuth_angle", "dnb_solar_zenith_angle"): (
              "SolarAzimuthAngle",
              "SolarZenithAngle",
          ),
          ("dnb_lunar_azimuth_angle", "dnb_lunar_zenith_angle"): (
              "LunarAzimuthAngle",
              "LunarZenithAngle",
          ),
      }
      if self.lons is None or self.lats is None:
          self.lons, self.lats = self.navigate()
      for pair, fkeys in pairs.items():
          if key["name"] in pair:
              if (
                  self.cache.get(pair[0]) is None
                  or self.cache.get(pair[1]) is None
              ):
                  angles = self.angles(*fkeys)
                  self.cache[pair[0]], self.cache[pair[1]] = angles
              if key["name"] == pair[0]:
                  return xr.DataArray(
                      self.cache[pair[0]],
                      name=key["name"],
                      attrs=self.mda,
                      dims=("y", "x"),
                  )
              else:
                  return xr.DataArray(
                      self.cache[pair[1]],
                      name=key["name"],
                      attrs=self.mda,
                      dims=("y", "x"),
                  )
  
      if info.get("standard_name") in ["latitude", "longitude"]:
          mda = self.mda.copy()
          mda.update(info)
          if info["standard_name"] == "longitude":
              return xr.DataArray(self.lons, attrs=mda, dims=("y", "x"))
          else:
              return xr.DataArray(self.lats, attrs=mda, dims=("y", "x"))
  
      if key["name"] == "dnb_moon_illumination_fraction":
          mda = self.mda.copy()
          mda.update(info)
          return xr.DataArray(
              da.from_array(self.geography["MoonIllumFraction"]),
              attrs=info,
          )
  
imports: import logging
  from contextlib import suppress
  from datetime import datetime, timedelta
  import dask.array
  import h5py
  import numpy
  import xarray
  from satpy.readers.file_handlers import BaseFileHandler
  from satpy.readers.utils import np2str
  from satpy.utils import angle2xyz, get_legacy_chunk_size, lonlat2xyz, xyz2angle, xyz2lonlat
label_desc: Use image node_id 7 for calling the VIIRSCompactFileHandler obj's underlying member method code with example usage: obj.read_geo(key, info) and returns: xr, xr, xr, xr, xr