def ellabc (mjr, mnr, pa):
    """Given a 2D Gaussian expressed as an ellipse (major, minor, pa), compute the
    nontrivial parameters for its evaluation.

    * mjr: major axis (sigma not FWHM) of the Gaussian
    * mnr: minor axis (sigma not FWHM) of the Gaussian
    * pa: position angle (from +x to +y) of the Gaussian, radians

    Returns: (a, b, c), where z = exp (ax² + bxy + cy²)

    """
    _ellcheck (mjr, mnr, pa)

    cpa, spa = np.cos (pa), np.sin (pa)
    mjrm2, mnrm2 = mjr**-2, mnr**-2

    a = -0.5 * (cpa**2 * mjrm2 + spa**2 * mnrm2)
    c = -0.5 * (spa**2 * mjrm2 + cpa**2 * mnrm2)
    b = cpa * spa * (mnrm2 - mjrm2)

    return _abccheck (a, b, c)
Given a 2D Gaussian expressed as an ellipse (major, minor, pa), compute the
    nontrivial parameters for its evaluation.

    * mjr: major axis (sigma not FWHM) of the Gaussian
    * mnr: minor axis (sigma not FWHM) of the Gaussian
    * pa: position angle (from +x to +y) of the Gaussian, radians

    Returns: (a, b, c), where z = exp (ax² + bxy + cy²)