code: def gradient_angle(self):
          
          # ---case 1: gradient path is explicit, but not linear---
          path = self._gradFill.path
          if path is not None:
              raise ValueError('not a linear gradient')
  
          # ---case 2: gradient path is inherited (no a:lin OR a:path)---
          lin = self._gradFill.lin
          if lin is None:
              return None
  
          # ---case 3: gradient path is explicitly linear---
          # angle is stored in XML as a clockwise angle, whereas the UI
          # reports it as counter-clockwise from horizontal-pointing-right.
          # Since the UI is consistent with trigonometry conventions, we
          # respect that in the API.
          clockwise_angle = lin.ang
          counter_clockwise_angle = (
              0.0 if clockwise_angle == 0.0
              else (360.0 - clockwise_angle)
          )
          return counter_clockwise_angle
docs: Angle in float degrees of line of a linear gradient.
  
          Read/Write. May be |None|, indicating the angle is inherited from the
          style hierarchy. An angle of 0.0 corresponds to a left-to-right
          gradient. Increasing angles represent clockwise rotation of the line,
          for example 90.0 represents a top-to-bottom gradient. Raises
          |TypeError| when the fill type is not MSO_FILL_TYPE.GRADIENT. Raises
          |ValueError| for a non-linear gradient (e.g. a radial gradient).