(C|Z)HEEV
=========
Single complex and double complex HEEV.

Description
-----------
Computes the eigenvalues and (optionally) eigenvectors of a Hermitian 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 cheev(const char *JOBZ, const char *UPLO, const qml_long *N,
        qml_single_complex *A, const qml_long *LDA, float *W,
        qml_single_complex *WORK, const qml_long *LWORK, float *RWORK,
        qml_long *INFO);
    
    void zheev(const char *JOBZ, const char *UPLO, const qml_long *N,
        qml_double_complex *A, const qml_long *LDA, double *W,
        qml_double_complex *WORK, const qml_long *LWORK, double *RWORK,
        qml_long *INFO);


Arguments
---------
======   =====================================================================
JOBZ     Compute eigenvectors and store in A if 'V', otherwise do not compute
UPLO     Specify whether to use 'U' upper triangular or 'L' lower triangular part of A
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
WORK     Work space of size at least LWORK
LWORK    Size of work space, at least 2N-1 but optimally a larger multiple of N (-1 to query)
RWORK    Work space of size 3N-2
INFO     0 on success
======   =====================================================================
