code: def elliptic_fourier_descriptors(contour, order=10, normalize=False):
      
      dxy = np.diff(contour, axis=0)
      dt = np.sqrt((dxy ** 2).sum(axis=1))
      t = np.concatenate([([0., ]), np.cumsum(dt)])
      T = t[-1]
  
      phi = (2 * np.pi * t) / T
  
      coeffs = np.zeros((order, 4))
      for n in _range(1, order + 1):
          const = T / (2 * n * n * np.pi * np.pi)
          phi_n = phi * n
          d_cos_phi_n = np.cos(phi_n[1:]) - np.cos(phi_n[:-1])
          d_sin_phi_n = np.sin(phi_n[1:]) - np.sin(phi_n[:-1])
          a_n = const * np.sum((dxy[:, 0] / dt) * d_cos_phi_n)
          b_n = const * np.sum((dxy[:, 0] / dt) * d_sin_phi_n)
          c_n = const * np.sum((dxy[:, 1] / dt) * d_cos_phi_n)
          d_n = const * np.sum((dxy[:, 1] / dt) * d_sin_phi_n)
          coeffs[n - 1, :] = a_n, b_n, c_n, d_n
  
      if normalize:
          coeffs = normalize_efd(coeffs)
  
      return coeffs
docs: Calculate elliptical Fourier descriptors for a contour.
  
      :param numpy.ndarray contour: A contour array of size ``[M x 2]``.
      :param int order: The order of Fourier coefficients to calculate.
      :param bool normalize: If the coefficients should be normalized;
          see references for details.
      :return: A ``[order x 4]`` array of Fourier coefficients.
      :rtype: :py:class:`numpy.ndarray`