o
    Ö­jK  ã                   @   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_boundÚg_kktÚfree_set© r   úU/var/www/html/CropPilot/venv/lib/python3.10/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)Ú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   Ú
x_free_oldÚA_freeÚb_freeÚzÚlbvÚubvÚvÚindÚcost_newÚtermination_statusÚmove_to_freeÚx_freeÚlb_freeÚub_freeÚalphasÚiÚi_freeÚalphar   r   r   Úbvls   sö   



ÿ



Ö
,

ÿ

þþ
Ù)

ýrK   )N)Ú__doc__Únumpyr   Únumpy.linalgr   r   Úscipy.optimizer   Úcommonr   r   r   rK   r   r   r   r   Ú<module>   s    