U
    ¦»|eK  ã                   @   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   úU/var/www/website-v5/atlas_env/lib/python3.8/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rät	||ƒ}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(||  }q¶�q(q¶|d k�r6|
}||7 }d }!t	||ƒ}t||ƒD �]}|dk�rvt
|||||ƒ ||k �r„d}!|!d k	�r” �q`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|}#|#||< �qþ�qªt|#| ƒ}|  |¡| }dt ||¡ } ||  }||| k �rBd}!| }| j |¡}t	||ƒ}�qV|!d k�rnd}!t||||||d |!|d�S )	Néÿÿÿÿr   r   g      à?é   )ÚrcondT)ÚxÚfunÚcostÚ
optimalityÚactive_maskÚnitÚstatusÚinitial_cost)ÚshapeÚcopyr   ÚzerosÚnonzeroÚdotÚTr   Úsizer   r   r   Úanyr   ÚrangeÚargmaxÚhstackÚargminr   )*ÚAÚbÚx_lsqÚlbÚubÚtolÚmax_iterÚverboser   ÚmÚnr   r   Úmaskr   Ú
active_setÚrr   r   r   Úcost_changeÚ	step_normÚ	iterationr   Z
x_free_oldZA_freeZb_freeÚzZlbvZubvÚvÚindÚcost_newÚtermination_statusZmove_to_freeÚx_freeÚlb_freeÚub_freeZalphasÚiÚi_freeÚalphar   r   r   Úbvls   sü    



ÿ



 ÿ

þþ

     ýrC   )N)Ú__doc__Únumpyr   Únumpy.linalgr   r   Úscipy.optimizer   Úcommonr   r   r   rC   r   r   r   r   Ú<module>   s   