o
    'Æ&i  ã                   @   sN   d 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d„ Zdd	d
„ZdS )z)Bounded-variable least-squares algorithm.é    N)ÚnormÚlstsq)ÚOptimizeResulté   )Úprint_header_linearÚprint_iteration_linearc                 C   s,   | | }|dk}t  | | ¡||< t  |¡S )z0Compute the maximum violation of KKT conditions.r   )ÚnpÚabsÚmax)ÚgÚon_boundZg_kktÚfree_set© r   úCC:\wamp64\www\opt\env\Lib\site-packages\scipy/optimize/_lsq/bvls.pyÚcompute_kkt_optimality	   s   
r   c	           *   
   C   sŠ  | j \}	}
| ¡ }t |
¡}||k}|| ||< d||< ||k}|| ||< d||< |dk}| }t |¡\}|  |¡| }dt ||¡ }|}| j |¡}d }d }d}|dkr[tƒ  |jdkr|dkrrt	||ƒ}t
|||||ƒ |d7 }||  ¡ }| d d …|f }||  || ¡ }t|||dd }||| k }||| k}||B }t |¡r½|| }|| ||< d||< d||< t |¡rÔ|| }|| ||< d||< d||< ||  }||  ||< |  |¡| }dt ||¡ } ||  }| }| j |¡}t|| | ƒ}t |¡r||  }nn|jdksa|d u r|
}||7 }d }!t	||ƒ}t||ƒD ]}|dkr<t
|||||ƒ ||k rCd}!|!d urJ næt || ¡}"d||"< 	 |dk}| }t |¡\}|| }#|# ¡ }|| }$|| }%| d d …|f }||  || ¡ }t|||dd }t ||$k ¡\}t ||%k¡\}t ||f¡}|jdkröt |$| |#|  |%| |#|  f¡|| |#|   }&t |&¡}'||' }(|&|' })|#d|) 9 }#|#|)| 7 }#|#||< |'|jk rïd|||( < nd|||( < n|}#|#||< nqVt|#| ƒ}|  |¡| }dt ||¡ } ||  }||| k r!d}!| }| j |¡}t	||ƒ}q,|!d u r7d}!t||||||d |!|dS )	Néÿÿÿÿr   r   g      à?é   )ÚrcondT)ÚxZfunÚcostÚ
optimalityZactive_maskÚnitÚstatusÚinitial_cost)ÚshapeÚcopyr   ZzerosZnonzeroÚdotÚTr   Úsizer   r   r   Úanyr   ÚrangeZargmaxZhstackZargminr   )*ÚAÚbZx_lsqZlbZubZtolZmax_iterÚverboser   ÚmÚnr   r   Úmaskr   Z
active_setÚrr   r   r   Zcost_changeZ	step_normÚ	iterationr   Z
x_free_oldZA_freeZb_freeÚzZlbvZubvÚvÚindZcost_newZtermination_statusZmove_to_freeZx_freeZlb_freeZub_freeÚalphasÚiZi_freeÚalphar   r   r   Úbvls   sö   



ÿ



Ö
,

ÿ

þþ
Ù)

ýr/   )N)Ú__doc__Únumpyr   Znumpy.linalgr   r   Zscipy.optimizer   Úcommonr   r   r   r/   r   r   r   r   Ú<module>   s    