code: def power_law(target, X, A1='', A2='', A3=''):
      r
      A = _parse_args(target=target, key=A1, default=1.0)
      B = _parse_args(target=target, key=A2, default=1.0)
      C = _parse_args(target=target, key=A3, default=0.0)
      X = target[X]
  
      r = A * X ** B + C
      S1 = A * B * X ** (B - 1)
      S2 = A * X ** B * (1 - B) + C
      values = {'S1': S1, 'S2': S2, 'rate': r}
      return values
docs: r"""
      Calculates the rate, as well as slope and intercept of the following
      function at the given value of *X*:
  
          .. math::
              r = A_{1}   x^{A_{2}}  +  A_{3}
  
      Parameters
      ----------
      A1 -> A3 : string
          The dictionary keys on the target object containing the coefficients
          values to be used in the source term model
  
      X : string
          The dictionary key on the target objecxt containing the the quantity
          of interest
  
      Returns
      -------
      A dictionary containing the following three items:
  
          **'rate'** - The value of the source term function at the given X.
  
          **'S1'** - The slope of the source term function at the given X.
  
          **'S2'** - The intercept of the source term function at the given X.
  
      The slope and intercept provide a linearized source term equation about the
      current value of X as follow:
  
          .. math::
              rate = S_{1}   X  +  S_{2}