docs: def K_angle_valve_Crane(D1, D2, fd=None, style=0):
      r'''Returns the loss coefficient for all types of angle valve, (reduced 
      seat or throttled) as shown in [1]_.
  
      If β = 1:
          
      .. math::
          K = K_1 = K_2 = N\cdot f_d
          
      Otherwise:
      
      .. math::
          K_2 = \frac{K + \left[0.5(1-\beta^2) + (1-\beta^2)^2\right]}{\beta^4}
          
      For style 0 and 2, N = 55; for style 1, N=150.
      
      Parameters
      ----------
      D1 : float
          Diameter of the valve seat bore (must be smaller or equal to `D2`), [m]
      D2 : float
          Diameter of the pipe attached to the valve, [m]
      fd : float, optional
          Darcy friction factor calculated for the actual pipe flow in clean 
          steel (roughness = 0.0018 inch) in the fully developed turbulent 
          region; do not specify this to use the original Crane friction factor!,
          [-]
      style : int, optional
          One of 0, 1, or 2; refers to three different types of angle valves
          as shown in [1]_ [-]
          
      Returns
      -------
      K : float
          Loss coefficient with respect to the pipe inside diameter [-]
  
      Notes
      -----    
      This method is not valid in the laminar regime and the pressure drop will
      be underestimated in those conditions.
  
      Examples
      --------
      >>> K_angle_valve_Crane(.01, .02)
      26.597361811128465
      
      References
      ----------
      .. [1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane,
         2009.
      '''
      beta = D1/D2
      if style not in (0, 1, 2):
          raise Exception('Valve style should be 0, 1, or 2')
      if fd is None:
          fd = ft_Crane(D2)
  
      if style == 0 or style == 2:
          K1 = 55.0*fd
      else:
          K1 = 150.0*fd
      if beta == 1:
          return K1 # upstream and down
      else:
          return (K1 + beta*(0.5*(1-beta)**2 + (1-beta**2)**2))/beta**4