(S|D|C|Z)GEEV
=============
Single, double, single complex, and double complex GEEV.

Description
-----------
Computes the eigenvalues and (optionally) eigenvectors of a general matrix.

Right eigenvectors satisfy:

.. math::

    \fvar{A} \mult v_i = \lambda_i v_i

Left eigenvectors satisfy:

.. math::

    \herm{u_i} \mult \fvar{A} = \lambda \herm{u_i}

Computed eigenvectors are normalized to have Euclidean unit length and
largest real component.

LAPACK Interface
----------------
.. code-block:: c

    void sgeev(const char *JOBVL, const char *JOBVR, const qml_long *N, float *A,
        const qml_long *LDA, float *WR, float *WI, float *VL,
        const qml_long *LDVL, float *VR, const qml_long *LDVR, float *WORK,
        const qml_long *LWORK, qml_long *INFO);
    
    void dgeev(const char *JOBVL, const char *JOBVR, const qml_long *N, double *A,
        const qml_long *LDA, double *WR, double *WI, double *VL,
        const qml_long *LDVL, double *VR, const qml_long *LDVR, double *WORK,
        const qml_long *LWORK, qml_long *INFO);
    
    void cgeev(const char *JOBVL, const char *JOBVR, const qml_long *N,
        qml_single_complex *A, const qml_long *LDA, qml_single_complex *W,
        qml_single_complex *VL, const qml_long *LDVL, qml_single_complex *VR,
        const qml_long *LDVR, qml_single_complex *WORK, const qml_long *LWORK,
        float *RWORK, qml_long *INFO);
    
    void zgeev(const char *JOBVL, const char *JOBVR, const qml_long *N,
        qml_double_complex *A, const qml_long *LDA, qml_double_complex *W,
        qml_double_complex *VL, const qml_long *LDVL, qml_double_complex *VR,
        const qml_long *LDVR, qml_double_complex *WORK, const qml_long *LWORK,
        double *RWORK, qml_long *INFO);


Arguments
---------
======   =====================================================================
JOBVL    Compute VL if 'V', otherwise do not compute
JOBVR    Compute VR if 'V', otherwise do not compute
N        Number of rows and columns of A
A        Matrix of size N x N, overwritten on exit
LDA      Leading dimension of A
W        Array of size N containing eigenvalues on exit
WR       Real part of W for real versions
WI       Complex part of W for real version
VL       On exit contains left eigenvectors if JOBVL is 'V'
LDVL     Leading dimension of VL
VR       On exit contains right eigenvectors if JOBVR is 'V'
LDVR     Leading dimension of VR
WORK     Work space of size at least LWORK
LWORK    Size of work space, at least 4N but optimally a larger multiple of N (-1 to query)
RWORK    Work space of size 2N
INFO     0 on success
======   =====================================================================
