class_docstr: Test the angle generation utility functions.
class_docstr_tok: ["Test","the","angle","generation","utility","functions","."]
docstr: Test sun and satellite angle calculation.
docstr_tok: ["Test","sun","and","satellite","angle","calculation","."]
code: def test_get_angles(self, input_func, exp_calls):
      """Test sun and satellite angle calculation."""
      from satpy.modifiers.angles import get_angles
  
      data = input_func()
  
      from pyorbital.orbital import get_observer_look
  
      with mock.patch(
          "satpy.modifiers.angles.get_observer_look",
          wraps=get_observer_look,
      ) as gol:
          angles = get_angles(data)
          assert all(isinstance(x, xr.DataArray) for x in angles)
          da.compute(angles)
  
      # get_observer_look should have been called once per array chunk
      assert gol.call_count == exp_calls
      # Check arguments of get_orbserver_look() call, especially the altitude
      # unit conversion from meters to kilometers
      args = gol.call_args[0]
      assert args[:4] == (
          10.0,
          0.0,
          12345.678,
          data.attrs["start_time"],
      )
  
imports: import contextlib
  import warnings
  from copy import deepcopy
  from datetime import datetime, timedelta
  from glob import glob
  from typing import Optional, Union
  from unittest import mock
  import dask.array
  import numpy
  import pytest
  import xarray
  from pyresample.geometry import AreaDefinition, StackedAreaDefinition
  import satpy
  from satpy.utils import PerformanceWarning
label_desc: Use image node_id 1 for calling the TestAngleGeneration obj's underlying member method code with example usage: obj.test_get_angles(input_func, exp_calls) without return types