
    Ti<                        d Z ddlZddlmZ ddlmZmZmZm	Z	 ddl
mZmZmZmZmZ ddlmZ ddlmZ dd	lmZmZmZmZmZmZ dd
lmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2 d Z3d Z4d Z5dS )z
This module performs the major calculations of COBYLA.

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.
    N   )checkbreak_con)REALMAXEPS	DEBUGGINGMIN_MAXFILT)INFO_DEFAULTMAXTR_REACHEDDAMAGING_ROUNDINGSMALL_TR_RADIUSCALLBACK_TERMINATE)evaluate)savehist)isinvmatprodinprodnormprimasum	primapow2)fmsgretmsgrhomsg)redrat)redrho)savefiltselectx   )
updatepolefindpole	updatexfc)
setdrop_trgeostep)trstlptrrad)initxfcinitfiltc                    g }g }g }g }d}t          j        t          j        |          t          j        |          f          }t          j        t          j        |          dz             }t          }|t          j        |          nd}t          j        |          }||z
  }t          j        |          }t          rt          |          dk    sJ ||k    r|dk    sJ |dk    sJ ||dz   k    sJ ||k    r|dk    sJ t          t          j        |                    sJ d|cxk    r|	cxk    rdk     sn J d|cxk     rdcxk     r|k     sn J d|k    sJ d|k    sJ d|cxk    r|k    sn J |t          j        |          ||fk    sJ t          t          |          |cxk    r|k    sn J t          | ||||||||
|||||||          \  } }!}"}#}$}%}&}'t          j        t          j        t          j        |d          |                    }(t          j        t          j        |          t          j        |(          f          })t          j        t          j        |(                    }*t          j        t          j        |          t          j        |(          f          }+t          |!|||"|%|#| |(|)|*|+          },|'t          k    r|'}-t!          |*d|,         |(d|,         ||          }.|+dd|.f         }|*|.         }|)dd|.f         }|(|.         }/t#          ||-||&|||/|           t          rm|&|k    sJ t          j        |          |k    r!t%          t          j        |                    rJ t          j        |          st          j        |          rJ ||||/|&|||||-f
S |}0|}1t          j        |t          j        dt+          |!|%                              }2d}3d	}4d}5t          j        dt          j        d
|z  d                    }6d|z  }7t,          }-t/          |7          D ]}8t1          |||!|2|"|1|%|0|#|$
  
        }2t3          |2|!|"|%|#|$          \  }!}"}%}#}$}'|'t4          k    r|'}- nt          t7          t9          |#ddd|f                   d          dt9          |1          z  k              }9t;          |%d|         |%|         z
  |$          }:||j        n||ddd|f<   t;          |!|dd|f         t          j        |!|d|f         |df          j        z
  |$          j        |dd|df<   tA          ||!dd|f          |1|:          };t          |1tC          |;                    }<|<d|0z  k    }3tE          |;|:           }=|"|         t          j#        t          j$        d|!dd|f         t;          |;|          z                       z
  }>|=|2|>z  z   }?|?dt          |2d          z  |0z  k     }@|3s|@r|1dz  }1|1|6|0z  k    r|0}1n;|#dd|f         |;z   }t7          t9          ||#dd|f         z
                      ||<   t7          t9          |%                    |d          |#dd|f         %                    |d          |#ddd|f         z   z
            d          |d|<   t          j&        |          }A||A         t9          d|z            k    r|%|A         }|!dd|Af         }|"|A         }/nxtO          | ||||          \  }}t          j#        t          j$        d|                    }/|&dz  }&tQ          ||||||/|||	  	         tS          |/|||||,|(|*|+||)          \  },}(}*}+})tU          |d||&|1|||/|	  	         |%|         |2|"|         z  z   ||2|/z  z   z
  }BtW          |B|?|          }4tY          |1|<||	|||4          }1|1|6|0z  k    r|0}1|Bdk    }Ct[          |C|;|1|0|#|$          }5t]          |5||2|/|;||!|"|%|#|$          \  }#}$}%}!}"}'|'t4          k    r|'}- nt_          ||&|/|||
|          }'|'t          k    r|'}- n|3p|@p	|4dk    p|5du }D|Do|9 }E|Do|9otG          |1|<          |0k    }F|Eryt          t7          t9          |#ddd|f                   d          dt9          |1          z  k              s-t          j0        t7          t9          |#ddd|f                   d          d          }G|1dz  }Htc          |G|||!|2|"|H|%|$	  	        };|#dd|f         |;z   }t7          t9          ||#dd|f         z
                      ||<   t7          t9          |%                    |d          |#dd|f         %                    |d          |#ddd|f         z   z
            d          |d|<   t          j&        |          }A||A         t9          d|z            k    r|%|A         }|!dd|Af         }|"|A         }/nxtO          | ||||          \  }}t          j#        t          j$        d|                    }/|&dz  }&tQ          ||||||/|||	  	         tS          |/|||||,|(|*|+||)          \  },}(}*}+})tU          |d||&|1|||/|	  	         t]          |G||2|/|;||!|"|%|#|$          \  }#}$}%}!}"}'|'t4          k    r|'}- n>t_          ||&|/|||
|          }'|'t          k    r|'}- n|Fr|0|k    r
td          }- ntG          d|0z  tg          |0|                    }1tg          |0|          }0t          j        |t          j        |2t+          |!|%                              }2ti          |||&|%|         |0|#dd|f         |"|         |!dd|f         |2	  	         t3          |2|!|"|%|#|$          \  }!}"}%}#}$}'|'t4          k    r|'}- n?|r; ||#dd|f         |%|         |&|8|"|         |!dd|f                   }I|Ir	tj          }- n|#dd|f         |;z   }|-td          k    r|3rtC          ||#dd|f         z
            d|z  k    r|&|k     rtO          | ||||          \  }}t          j#        t          j$        d|                    }/|&dz  }&tQ          ||||||/|||	  	         tS          |/|||||,|(|*|+||)          \  },}(}*}+})tU          |d||&|0|||/|	  	         t!          |*d|,         |(d|,         tG          |2|          |          }.|+dd|.f         }|*|.         }|)dd|.f         }|(|.         }/t#          ||-||&|||/|           ||||/|&|||||-f
S )zE
    This subroutine performs the actual computations of COBYLA.
    COBYLAr   Nr      r   g     @@Fg      ?g      ?
   axis   g?gư>g-C6?zTrust regionGeometry      ?gMbP?)6npzerossizer   r   absallisfiniteshapeminr   r%   minimummaximumr&   r	   r   r   anyisnanisposinffcratior
   rangegetcpenr   r   r   r   r   Ttiler#   r   r   maxappendreshapeargminr   r   r   r   r   r$   r!   r    r   argmaxr"   r   r   r   r   )Jcalcfciprintmaxfiltmaxfunamatbvecctolcweighteta1eta2ftargetgamma1gamma2rhobegrhoendconstrfxmaxhistcallbackxhistfhistchistconhistsolverAdistsqcpenminm_lconnum_constraintsm_nlconnum_vars	evaluatedconmatcvalsimsimifvalnfsubinfocfiltconfiltffiltxfiltnfiltinfokoptcstrvrhodeltacpenshortdratiojdrop_trgamma3maxtrtradequate_geogddnormprerefprerecpreremtrfailjactrem	ximproved
bad_trstepimprove_geo
reduce_rho	jdrop_geodelbar	terminatesJ                                                                             x/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/scipy/_lib/pyprima/cobyla/cobylb.pycobylbr      s.    EEEG F
"'!**bgfoo.//AXbgajj1n%%F G #.RWT]]]AFgfooO&GwqzzH  =6{{a&((Vq[[[[1}}}}A%%%%FQJJJJ2;q>>"""""D$$$$D$$$$1$$$$$$6&&&&A&&&&&&&&&&DyyyyG||||G%%%%v%%%%%%|rx~~&(1CCCCC;''7<<<<f<<<<<< =DFFfdD$7FAUE7G=- =-9IvtS$b' HRZ
7A 6 6??@@Eh899GHRWU^^$$EHbgajj"'%..122EVT7D$YwE# #E , uVeV}eFUFmWdCC!!!T'N$KD!dvtVRAuf=== 	7<<<<71::))#bhqkk2B2B)))6r{1~~666 !VUBueWdJJ CE:grz%1F1FGGHHDFEH Z2:dVmS99::F KED Ell \ \ tT64udCdSS 2<D&$PT<?2G 2G.dCw '''DE 8Ic!!!YhY,.?$@$@qIIIQQZ[`QaQaMaabb T)8)_tH~5=="&"2!!!WfW*((:!;'&():";h]KKM"NPTV VVW 	
!!!VWW* 1vaaak**E155E477## 39$ A,,h"&1fQQQ[6IGTUWXMM6Y)Z)Z"["[[
 $-'vD!4s::; b	V b	 SLE$$ AAAxK 1$A'	!c!!!X+6F2F(G(GHHF8 (199Xq3I3IQQQ[!))(A66QQQ		\9JJ4L *M *MST!V !V !VF9H9	&!!AayIdVm4444G1Q %VQtDD	6ryF3344a!UAueUFGTTT6>udGUV?@%PU?Dfg7W 7W3ueUG UAq%PPP 8ntd8n'<<TE\AQRF 66400E< %dFFEJJEs
"" 
I
 ")QsCFFH 6?xQUW\^_abdjlprvx{  ~B  6C  6C2CtVT7+++ %VRa!LLG,&& GvG!Gx47G
 5%5MLMS5F5F#5M
l  N	s8Ic!!!YhY,6G,H,Hq#Q#Q#QUVYbchYiYiUi#ijj N	: 	(9SIXI5F+G+Ga"P"P"PWXYYYI 1WF	4vtT64QUVVA AAAxK 1$A'	!c!!!X+6F2F(G(GHHF8 (199Xq3I3IQQQ[!))(A66QQQ		\9JJ4L *M *MST!V !V !VF9H9	&!!AayIdVm4444G1Q %VQtDD	6ryF3344a!UAueUFGTTT6>udGUV?@%PU?Dfg7W 7W3ueUG
 VR1eVLLL5>y&RVX]_`bcekmqswy|  C  6D  6D2CtVT7+++ %VRa!LLG,&&
  	f}}&c	6#v#6#677Ef%%C :grz$8M8M'N'NOOD662tH~sC8<LdS[n^defefefhpep^qswxxx5?fdTXZ]_c5d5d2FD$T7+++  	 QQQ[!14>2r4PX>[abcbcbcembm[nooI )
 	AAAxK1A 	 SH%%&&&88KK VQt<<	6ryF++,,
a!UAueUFGLLL.6udGQPQSXZ_afhmouw~..+ueUGV^VRaE6JJJ 5%=%-T71C1CTJJDaaagAdAQQQWF$KE 64Q5&999aE5%$FF    c
                 
   |                                 }|                                 }|                                 }|                                 }|	                                 }	t          j        t          j        |d          t          j        |d          f          }
d}|t          j        |          nd}t          j        |d          }t          j        |d          }t          rc|dk    sJ |dk    sJ |dk    sJ t          j        |d          |k    rt          j        |d          |dz   k    s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 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	        |          
                                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 ||k    r|dk    sJ t          }t          |dz             D ]y}t!          ||||||	          \  }}}}}	}|t"          k    r nOt%          |d|         ||         z
  |	          }| | j        n| |
ddd|f<   t%          ||dd|f         t          j        ||d|f         |df          j        z
  |	          j        |
dd|df<   t+          |
|dd|f          ||          }t-          ||           }||         t          j        t          j        d|dd|f         t%          ||
          z                       z
  }|dk    r|dk     s nBt          |t1          d|z  |z  t2                              }t5          |||          |k    r n{t          rZ||k    r|dk    sJ |||z  z   dk    s@|t"          k    s5|dk    r/t          j        ||          dk    rt          j	        |          rJ |S )z
    This function gets the penalty parameter CPEN so that PREREM = PREREF + CPEN * PREREC > 0.
    See the discussions around equation (9) of the COBYLA paper.
    r   r   Nr,   )copyr1   r2   r3   r   r<   isneginfr;   r=   r6   r5   rC   r4   r   r	   r?   r   r   r   rA   rB   r#   r   rD   r8   r   r   r:   )rL   rM   ri   rz   rj   ry   rm   rx   rk   rl   ra   itolrd   re   rg   ru   iterr   r   r   r   s                        r   r@   r@   2  s\    [[]]F99;;D99;;D
((**C99;;D 	"'#q//2761#5#5677AD #.RWT]]]AFgfa((OwsAH  (!####1}}}}axxxxwvq!!_449K9KxZ[|9[9[9[9[HV$$r{6':'::??AAAAAwt}}1,,D1rx~~-D0A0AAABB -,,wt}}1,,S$"+VZJ[J[9[5\5\,,,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||a D" hl## # #.8vtTSV9=/? /?+dCt $$$E D(Od8n4d;;"&"2!!!WfW*((:!;'&():";h]KKM"NPTV VVW 	
!!!VWW* 1vaaak**E155 A,,h"&1fQQQ[6IGTUWXMM6Y)Z)Z"["[[ 

vzzE 4R&[617;;<<D$%%11E 2  \t||qv%))T5F-F-F1FF!;!;a!?!?TZH[H[!?!?!?Kr   c                 "   t           rGt          j        |          dk    sJ t          j        | d          t          j        |          k    sJ t          j        |  d          }t          j        |  d          }t          |          }t	          |          }t          |d|z  k               rM||k     rGt          j        t          j        |d          |z
  |d|z  k     t          j                  }||z
  |z  }nd}t           r|dk    sJ |S )z
    This function calculates the ratio between the "typical change" of F and that of CONSTR.
    See equations (12)-(13) in Section 3 of the COBYLA paper for the definition of the ratio.
    r   r,   r0   r   )whereinitial)r   r1   r3   r8   rC   r;   r:   inf)ri   rm   cmincmaxfminfmaxdenomrs           r   r>   r>     s     3wt}}!!!!wvq!!RWT]]2222 66'"""D66'"""Dt99Dt99D
4#* $++rz$**T1d
9JTVTZ[[[ D[E!  AvvvvHr   )6__doc__numpyr1   common.checkbreakr   common.constsr   r   r   r   common.infosr	   r
   r   r   r   common.evaluater   common.historyr   common.linalgr   r   r   r   r   r   common.messager   r   r   common.ratior   common.redrhor   common.selectxr   r   updater   r   r    geometryr!   r"   trustregionr#   r$   
initializer%   r&   r   r@   r>    r   r   <module>r      s        . . . . . . @ @ @ @ @ @ @ @ @ @ @ @8 8 8 8 8 8 8 8 8 8 8 8 8 8 & & & & & & % % % % % % M M M M M M M M M M M M M M M M 1 1 1 1 1 1 1 1 1 1 ! ! ! ! ! ! " " " " " " . . . . . . . . 3 3 3 3 3 3 3 3 3 3 ) ) ) ) ) ) ) ) & & & & & & & & ) ) ) ) ) ) ) )QG QG QGjq q qh$ $ $ $ $r   