ó
î&]\c           @` sa   d  d l  m Z m Z m Z d d l m Z d  d l m Z m Z m	 Z	 d g Z
 d d  Z d S(   i    (   t   divisiont   print_functiont   absolute_importi   (   t   _nnls(   t   asarray_chkfinitet   zerost   doublet   nnlsc      	   C` sC  t  t |  | f  \ }  } t |  j  d k r? t d   n  t | j  d k rc t d   n  |  j \ } } | | j d k r t d   n  | d
 k rŚ d n	 t |  } t | f d t } t | f d t } t | f d t } t	 j
 |  | | | | | | |  \ } }	 }
 |
 d k r9t d	   n  | |	 f S(   s2  
    Solve ``argmin_x || Ax - b ||_2`` for ``x>=0``. This is a wrapper
    for a FORTRAN non-negative least squares solver.

    Parameters
    ----------
    A : ndarray
        Matrix ``A`` as shown above.
    b : ndarray
        Right-hand side vector.
    maxiter: int, optional
        Maximum number of iterations, optional.
        Default is ``3 * A.shape[1]``.

    Returns
    -------
    x : ndarray
        Solution vector.
    rnorm : float
        The residual, ``|| Ax-b ||_2``.

    Notes
    -----
    The FORTRAN code was published in the book below. The algorithm
    is an active set method. It solves the KKT (Karush-Kuhn-Tucker)
    conditions for the non-negative least squares problem.

    References
    ----------
    Lawson C., Hanson R.J., (1987) Solving Least Squares Problems, SIAM

    i   s   expected matrixi   s   expected vectori    s   incompatible dimensionsi˙˙˙˙t   dtypes   too many iterationsN(   t   mapR   t   lent   shapet
   ValueErrort   Nonet   intR   R   R   R   t   RuntimeError(   t   At   bt   maxitert   mt   nt   wt   zzt   indext   xt   rnormt   mode(    (    s2   lib/python2.7/site-packages/scipy/optimize/nnls.pyR   	   s     "-N(   t
   __future__R    R   R   t    R   t   numpyR   R   R   t   __all__R   R   (    (    (    s2   lib/python2.7/site-packages/scipy/optimize/nnls.pyt   <module>   s   	