
    Ti)                     J    d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
Zd Zd ZdS )a  
This module contains subroutines concerning the geometry-improving of the interpolation set.

Translated from Zaikun Zhang's modern-Fortran reference implementation in PRIMA.

Dedicated to late Professor M. J. D. Powell FRS (1936--2015).

Python translation by Nickolai Belakovski.
   )	DEBUGGING)isinvmatprodinprodnormprimasum	primapow2    Nc                    d}t          j        |d          }t          rm|dk    sJ t          j        |          |k    r!t          t          j        |                    sJ ||k    r|dk    sJ t          j        |d          |k    rt          j        |d          |dz   k    sJ t          j        |                                          sJ t          t          j        t          |ddd|f                   d          dk              sJ t          j        |d          |k    rt          j        |d          |k    sJ t          j        |                                          sJ t          |ddd|f         ||          sJ t          j        t          j        |d                    }| rbt          t          |ddd|f         t          j        ||df          j        z
            d          |d|<   t          ||z            ||<   n4t          t          |ddd|f                   d          |d|<   d||<   t          j        d|t          t          j        ||dz                      z            }	t          ||          }
|	t          t          j        g |
dt          |
          z
                      z  }| sd||<   d|t          j        |          <   d}t#          |dk              rt          j        |          }| r|t          j        |          }t          r*|d|cxk    r	|dz   k     sn J ||k    s| sJ |dk    s| rJ |S )a  
    This function finds (the index) of a current interpolation point to be replaced with
    the trust-region trial point. See (19)-(22) of the COBYLA paper.
    N.B.:
    1. If XIMPROVED == True, then JDROP > 0 so that D is included into XPT. Otherwise,
       it is a bug.
    2. COBYLA never sets JDROP = NUM_VARS
    TODO: Check whether it improves the performance if JDROP = NUM_VARS is allowed when
    XIMPROVED is True. Note that UPDATEXFC should be revised accordingly.
    g?r
      N)axis
   )npsizer   allisfinitemaxabsr   zerosr   r	   tileTmaximumr   arrayisnananyargmax)	ximprovedddeltarhosimsimiitolnum_varsdistsqweightsimidscorejdrops                z/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/scipy/_lib/pyprima/cobyla/geometry.py
setdrop_trr,      s    D wsAH  	41}}}}wqzzX%%#bk!nn*=*=%%%||awsA(**rwsA(Q,/N/N/N/N{3##%%%%%26#c!!!YhY,/00q999A=>>>>>wtQ8++a0@0@H0L0L0L0L{4  $$&&&&&SIXI&d33333~ Xbgc1oo&&F $Ys111ixi</@271xYZmC\C\C^/^%_%_fghhhyy#AaC==x$Ys111ixi</@%A%AJJJyyxZ6IbjeBh.G.G$H$HHIIF D!ES"?E"?1x+>"?@@AAAE  h  E"(5//E 519~~ !	%   "em	&!!  +}e!:!:!:!:hl!:!:!:!:!:!:  I   zzzzz L    c	           
         |t          j        |d          nd}	t          j        |d          }
t          j        |d          }t          r|
|	cxk    rdk    sn J |dk    sJ |dk    sJ |dk    sJ t          j        |d          |k    rt          j        |d          |k    sJ t          j        |                                          sJ t          j        |          |dz   k    r6t          t          j        |          t          j        |          z            rJ t          j        |d          |
k    rt          j        |d          |dz   k    sJ t          j        t          j        |          t          j        |          z            rJ t          j        |          |dz   k    r=t          |dt          j        |          z  t          j        |          z  k               rJ d| cxk    r|k     sn J || ddf         }||t          |          z  z  }t          |d|         ||         z
  |          }t          j
        ||
f          }||j        n||ddd|	f<   t          ||	dd|f         t          j        ||	d|f         |df          j        z
  |          j        |dd|	df<   t          j        t          j        d|dd|f         t          ||          z                       }t          j        t          j        d|dd|f         t          ||          z
                      }t          ||           ||z  z   t          ||          ||z  z   k     r|dz  }t          rot          j        |          |k    r!t	          t          j        |                    sJ d|z  t           j                            |          cxk     r	d|z  k    sn J |S )z
    This function calculates a geometry step so that the geometry of the interpolation set is improved
    when SIM[: JDROP_GEO] is replaced with SIM[:, NUM_VARS] + D. See (15)--(17) of the COBYLA paper.
    Nr
   r   r   g?g?)r   r   r   r   r   r   r   isposinfr   r   r   r   r   r   appendr   linalg)r*   amatbvecconmatcpencvaldelbarfvalr#   m_lconnum_constraintsr%   r   gAcvpdcvnds                    r+   geostepr?      s    "&!1RWT1qFgfa((OwtQH  %&----A------1}}}}zzzzaxxxxwtQ8++a0@0@H0L0L0L0L{4  $$&&&&&wt}}1,,S$"+VZJ[J[9[5\5\,,,wvq!!_449K9KxZ[|9[9[9[9[6"(6**R[-@-@@AAAAAwt}}1,,SBHTNN@RUWU`aeUfUf@f9f5g5g,,,E$$$$H$$$$$$ 	UAAAXA!d1gg+A 	YhY$x.0$77A
(O,--A".DFFDAaaa&jMVFGGYhY$67'&():";h]KKMNPTV VVW aaajM 6")Avaaak2WQ]]BCCDDD6")Avaaak2WQ]]BCCDDDq!}td{"VAq\\D4K%???	R  @wqzzX%%#bk!nn*=*=%%% V|binnQ//????3<??????Hr-   )__doc__common.constsr   common.linalgr   r   r   r   r   r	   numpyr   r,   r?    r-   r+   <module>rE      s     & % % % % % M M M M M M M M M M M M M M M M    P P Pj= = = = =r-   