docs: def friction_factor(Re, eD=0, Method='Clamond', Darcy=True, AvailableMethods=False):
      r'''Calculates friction factor. Uses a specified method, or automatically
      picks one from the dictionary of available methods. 29 approximations are 
      available as well as the direct solution, described in the table below. 
      The default is to use the exact solution. Can also be accessed under the 
      name `fd`.
      
      For Re < 2040, [1]_ the laminar solution is always returned, regardless of
      selected method.
  
      Examples
      --------
      >>> friction_factor(Re=1E5, eD=1E-4)
      0.01851386607747165
  
      Parameters
      ----------
      Re : float
          Reynolds number, [-]
      eD : float, optional
          Relative roughness of the wall, [-]
  
      Returns
      -------
      f : float
          Friction factor, [-]
      methods : list, only returned if AvailableMethods == True
          List of methods which claim to be valid for the range of `Re` and `eD`
          given
  
      Other Parameters
      ----------------
      Method : string, optional
          A string of the function name to use
      Darcy : bool, optional
          If False, will return fanning friction factor, 1/4 of the Darcy value
      AvailableMethods : bool, optional
          If True, function will consider which methods claim to be valid for
          the range of `Re` and `eD` given
      
      See Also
      --------
      Colebrook
      Clamond
      
      Notes
      -----
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Nice name          |Re min|Re max|Re Default|:math:`\epsilon/D` Min|:math:`\epsilon/D` Max|:math:`\epsilon/D` Default|
      +===================+======+======+==========+======================+======================+==========================+
      |Clamond            |0     |None  |None      |0                     |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Rao Kumar 2007     |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Eck 1973           |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Jain 1976          |5000  |1.0E+7|None      |4.0E-5                |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Avci Karagoz 2009  |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Swamee Jain 1976   |5000  |1.0E+8|None      |1.0E-6                |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Churchill 1977     |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Brkic 2011 1       |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Chen 1979          |4000  |4.0E+8|None      |1.0E-7                |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Round 1980         |4000  |4.0E+8|None      |0                     |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Papaevangelo 2010  |10000 |1.0E+7|None      |1.0E-5                |0.001                 |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Fang 2011          |3000  |1.0E+8|None      |0                     |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Shacham 1980       |4000  |4.0E+8|None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Barr 1981          |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Churchill 1973     |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Moody              |4000  |1.0E+8|None      |0                     |1                     |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Zigrang Sylvester 1|4000  |1.0E+8|None      |4.0E-5                |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Zigrang Sylvester 2|4000  |1.0E+8|None      |4.0E-5                |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Buzzelli 2008      |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Haaland            |4000  |1.0E+8|None      |1.0E-6                |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Serghides 1        |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Serghides 2        |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Tsal 1989          |4000  |1.0E+8|None      |0                     |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Alshul 1952        |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Wood 1966          |4000  |5.0E+7|None      |1.0E-5                |0.04                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Manadilli 1997     |5245  |1.0E+8|None      |0                     |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Brkic 2011 2       |None  |None  |None      |None                  |None                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Romeo 2002         |3000  |1.5E+8|None      |0                     |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      |Sonnad Goudar 2006 |4000  |1.0E+8|None      |1.0E-6                |0.05                  |None                      |
      +-------------------+------+------+----------+----------------------+----------------------+--------------------------+
      
      References
      ----------
      .. [1] Avila, Kerstin, David Moxey, Alberto de Lozar, Marc Avila, Dwight 
         Barkley, and Björn Hof. "The Onset of Turbulence in Pipe Flow." Science 
         333, no. 6039 (July 8, 2011): 192-96. doi:10.1126/science.1203223.
      '''
      def list_methods():
          methods = [i for i in fmethods if
          (not fmethods[i]['Arguments']['eD']['Min'] or fmethods[i]['Arguments']['eD']['Min'] <= eD) and
          (not fmethods[i]['Arguments']['eD']['Max'] or eD <= fmethods[i]['Arguments']['eD']['Max']) and
          (not fmethods[i]['Arguments']['Re']['Min'] or Re > fmethods[i]['Arguments']['Re']['Min']) and
          (not fmethods[i]['Arguments']['Re']['Max'] or Re <= fmethods[i]['Arguments']['Re']['Max'])]
          return methods
      if AvailableMethods:
          return list_methods()
      elif not Method:
          Method = 'Clamond'
  
      if Re < LAMINAR_TRANSITION_PIPE:
          f = friction_laminar(Re)
      else:
          f = globals()[Method](Re=Re, eD=eD)
      if not Darcy:
          f *= 0.25
      return f