ó
î&]\c           @` s€   d  Z  d d l m Z m Z m Z d d l Z d d l m Z m	 Z	 d d l
 m Z d d l m Z m Z d „  Z d	 „  Z d S(
   s)   Bounded-Variable Least-Squares algorithm.i    (   t   divisiont   print_functiont   absolute_importN(   t   normt   lstsq(   t   OptimizeResulti   (   t   print_header_lineart   print_iteration_linearc         C` s:   |  | } | d k } t  j |  | ƒ | | <t  j | ƒ S(   s0   Compute the maximum violation of KKT conditions.i    (   t   npt   abst   max(   t   gt   on_boundt   g_kktt   free_set(    (    s7   lib/python2.7/site-packages/scipy/optimize/_lsq/bvls.pyt   compute_kkt_optimality   s    
c   )      C` s  |  j  \ } }	 | j ƒ  }
 t j |	 ƒ } |
 | k  } | | |
 | <d | | <|
 | k } | | |
 | <d | | <| d k } | } t j | ƒ \ } |  j |
 ƒ | } d t j | | ƒ } | } |  j j | ƒ } d  } d  } d } | d k r t ƒ  n  xä| j	 d k ræ| d k rFt
 | | ƒ } t | | | | | ƒ n  | d 7} |
 | j ƒ  } |  d  d  … | f } | |  j |
 | ƒ } t | | d d ƒd } | | | k  } | | | k } | | B} t j | ƒ r| | } | | |
 | <t | | <d | | <n  t j | ƒ rL| | } | | |
 | <t | | <d | | <n  | | } | | |
 | <|  j |
 ƒ | } d t j | | ƒ } | | } | } |  j j | ƒ } t |
 | | ƒ } t j | ƒ râ| | } qPqW| d  k rü|	 } n  | | 7} d  }  t
 | | ƒ } x§t | | ƒ D]–} | d k rVt | | | | | ƒ n  | | k  rkd }  n  |  d  k	 r{Pn  t j | | ƒ }! d | |! <| d k } | } t j | ƒ \ } |
 | }" |" j ƒ  } | | }# | | }$ |  d  d  … | f } | |  j |
 | ƒ } t | | d d ƒd } t j | |# k  ƒ \ } t j | |$ k ƒ \ } t j | | f ƒ } | j	 d k r.t j |# | |" | |$ | |" | f ƒ | | |" | }% t j |% ƒ }& | |& }' |% |& }( |" d |( 9}" |" |( | 7}" |& | j	 k  rd | | |' <q4d | | |' <n | }" |" |
 | <t |" | ƒ } |  j |
 ƒ | } d t j | | ƒ } | | } | | | k  ršd }  n  | } |  j j | ƒ } t
 | | ƒ } q+W|  d  k rÚd }  n  t d |
 d | d	 | d
 | d | d | d d |  d | ƒ S(   Niÿÿÿÿi   i    g      à?i   t   rcondt   xt   funt   costt
   optimalityt   active_maskt   nitt   statust   initial_cost(   t   shapet   copyR   t   zerost   nonzerot   dott   Tt   NoneR   t   sizeR   R   R   t   anyt   TrueR   t   ranget   argmaxt   hstackt   argminR   ()   t   At   bt   x_lsqt   lbt   ubt   tolt   max_itert   verboset   mt   nR   R   t   maskR   t
   active_sett   rR   R   R   t   cost_changet	   step_normt	   iterationR   t
   x_free_oldt   A_freet   b_freet   zt   lbvt   ubvt   vt   indt   cost_newt   termination_statust   move_to_freet   x_freet   lb_freet   ub_freet   alphast   it   i_freet   alpha(    (    s7   lib/python2.7/site-packages/scipy/optimize/_lsq/bvls.pyt   bvls   sà    










	
	



(



		(   t   __doc__t
   __future__R    R   R   t   numpyR   t   numpy.linalgR   R   t   scipy.optimizeR   t   commonR   R   R   RI   (    (    (    s7   lib/python2.7/site-packages/scipy/optimize/_lsq/bvls.pyt   <module>   s   	