class_docstr: Test various VIIRS-specific composites.
class_docstr_tok: ["Test","various","VIIRS-specific","composites","."]
docstr: Test the 'dynamic_dnb' or ERF DNB compositor.
docstr_tok: ["Test","the","'dynamic_dnb","'","or","ERF","DNB","compositor","."]
code: def test_erf_dnb(
      self, dnb_units, saturation_correction, area, sza, lza
  ):
      """Test the 'dynamic_dnb' or ERF DNB compositor."""
      from satpy.composites.viirs import ERFDNB
  
      comp = ERFDNB(
          "dynamic_dnb",
          prerequisites=("dnb",),
          saturation_correction=saturation_correction,
          standard_name="toa_outgoing_radiance_per_" "unit_wavelength",
      )
      # dnb is different from in the other tests, so don't use the fixture
      # here
      dnb = np.zeros(area.shape) + 0.25
      cols = area.shape[1]
      dnb[2, : cols // 2] = np.nan
      dnb[3, :] += 0.25
      dnb[4:, :] += 0.5
      if dnb_units == "W cm-2 sr-1":
          dnb /= 10000.0
      dnb = da.from_array(dnb, chunks=25)
      c01 = xr.DataArray(
          dnb,
          dims=("y", "x"),
          attrs={"name": "DNB", "area": area, "units": dnb_units},
      )
      mif = xr.DataArray(
          da.zeros((5,), chunks=5) + 0.1,
          dims=("y",),
          attrs={"name": "moon_illumination_fraction", "area": area},
      )
      res = comp((c01, sza, lza, mif))
      assert isinstance(res, xr.DataArray)
      assert isinstance(res.data, da.Array)
      assert res.attrs["name"] == "dynamic_dnb"
      assert res.attrs["standard_name"] == "equalized_radiance"
      data = res.compute()
      unique = np.unique(data)
      assert np.isnan(unique).any()
      nonnan_unique = unique[~np.isnan(unique)]
      if saturation_correction:
          exp_unique = [
              0.000000e00,
              3.978305e-04,
              6.500003e-04,
              8.286927e-04,
              5.628335e-01,
              7.959671e-01,
              9.748567e-01,
          ]
      else:
          exp_unique = [
              0.00000000e00,
              1.00446703e-01,
              1.64116082e-01,
              2.09233451e-01,
              1.43916324e02,
              2.03528498e02,
              2.49270516e02,
          ]
      np.testing.assert_allclose(nonnan_unique, exp_unique)
  
file_path: satpy/satpy/tests/compositor_tests/test_viirs.py
imports: from datetime import datetime
  import dask.array
  import numpy
  import pytest
  import xarray
  from pyresample.geometry import AreaDefinition
label_desc: Use image node_id 10 for calling the TestVIIRSComposites obj's underlying member method code with example usage: obj.test_erf_dnb(dnb_units, saturation_correction, area, sza, lza) without return types