code: def fit_effective_mass(distances, energies, parabolic=True):
      
      if parabolic:
          fit = np.polyfit(distances, energies, 2)
          c = 2 * fit[0]  # curvature therefore 2 * the exponent on the ^2 term
  
      else:
          # Use non parabolic description of the bands
          def f(x, alpha, d):
              top = np.sqrt(4 * alpha * d * x**2 + 1) - 1
              bot = 2 * alpha
              return top / bot
  
          # set boundaries for curve fitting: alpha > 1e-8
          # as alpha = 0 causes an error
          bounds = ((1e-8, -np.inf), (np.inf, np.inf))
          popt, _ = curve_fit(f, distances, energies, p0=[1., 1.],
                              bounds=bounds)
          c = 2 * popt[1]
  
      # coefficient is currently in eV/Angstrom^2/h_bar^2
      # want it in atomic units so Hartree/bohr^2/h_bar^2
      eff_mass = (angstrom_to_bohr**2 / eV_to_hartree) / c
      return eff_mass
docs: Fit the effective masses using either a parabolic or nonparabolic fit.
  
      Args:
          distances (:obj:`numpy.ndarray`): The x-distances between k-points in
              reciprocal Angstroms, normalised to the band extrema.
          energies (:obj:`numpy.ndarray`): The band eigenvalues normalised to the
              eigenvalue of the band extrema.
          parabolic (:obj:`bool`, optional): Use a parabolic fit of the band
              edges. If ``False`` then nonparabolic fitting will be attempted.
              Defaults to ``True``.
  
      Returns:
          float: The effective mass in units of electron rest mass, :math:`m_0`.