
    Џkh<                        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 Z5y)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                 r   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kD  sJ t        t        j                  |            sJ d|cxk  r|	cxk  rdk  sJ  J d|cxk  rdcxk  r|k  sJ  J d|k  sJ d|k  sJ d|cxk  r|k  sJ  J |t        j                  |      ||fk(  sJ t        t        |      |cxk  r|k  sJ  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        k7  r|'}-t!        |*d|, |(d|, ||      }.|+dd|.f   }|*|.   }|)dd|.f   }|(|.   }/t#        ||-||&|||/|       t        rk|&|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|'}- ndt        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        jF                  t        jH                  d|!dd|f   t;        |;|      z               z
  }>|=|2|>z  z   }?|?dt        |2d      z  |0z  kD   }@|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        |jK                  |d      |#dd|f   jK                  |d      |#ddd|f   z   z
        d      |d| t        jL                  |      }A||A   t9        d|z        k  r|%A   }|!dd|Af   }|"|A   }/nntO        | ||||      \  }}t        jF                  t        jH                  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kD  }Ct[        |C|;|1|0|#|$      }5t]        |5||2|/|;||!|"|%|#|$      \  }#}$}%}!}"}'|'t4        k(  r|'}- n>t_        ||&|/|||
|      }'|'t        k7  r|'}- n|3xs @xs |4dk  xs |5du }D|Dxr |9 }EDxr |9xr tG        |1|<      |0k  }FErt        t7        t9        |#ddd|f         d      dt9        |1      z  k        st        j`                  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        |jK                  |d      |#dd|f   jK                  |d      |#ddd|f   z   z
        d      |d| t        jL                  |      }A||A   t9        d|z        k  r|%A   }|!dd|Af   }|"|A   }/nntO        | ||||      \  }}t        jF                  t        jH                  d|            }/|&dz  }&tQ        ||||||/|||	       tS        |/|||||,|(|*|+||)      \  },}(}*}+})tU        |d||&|1|||/|	       t]        G||2|/|;||!|"|%|#|$      \  }#}$}%}!}"}'|'t4        k(  r|'}- nt_        ||&|/|||
|      }'|'t        k7  r|'}- nFr|0|k  rtd        }- ntG        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|'}- n2|ss ||#dd|f   |%|   |&|8|"|   |!dd|f         }I|Istj        }- n |#dd|f   ;z   }|-td        k(  r|3rtC        ||#dd|f   z
        d|z  kD  r|&|k  rtO        | ||||      \  }}t        jF                  t        jH                  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                                                                             \/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/_lib/pyprima/cobyla/cobylb.pycobylbr      s    EEEG F
"''!*bggfo./AXXbggaj1n%F G #.RWWT]AFggfoO&GwwqzH 6{a&(Vq[881}}A%%%FQJ..2;;q>"""D$D$1$$$$$6&A&&&&&&DyyG||G%v%%%%%|rxx~&(1CCCC;'7<f<<<<< =DFFfdD$7FAUE7G=-9IvtS$b' HHRZZ

7A 6?@Ehh89GHHRWWU^$EHHbggaj"''%.12EVT7D$YwE#E , uVe}eFUmWdC!T'N$KD!dvtVRAuf=<<771:)#bhhqk2BBBr{{1~66 !VUBueWdJJ CE::grzz%1FGHDFEH ZZ2::dVmS9:F KED El \ tT64udCdS 2<D&$PT<?2G.dCw ''D 8Ic!YhY,.?$@qIQQZ[`QaMaab T)8_tH~5="&"2!WfW*((:!;''&():";h]KMM"NPTVVWVW 	
!VW* 1vak**E15E47# 39$ A,h"&&1fQ[6IGTUWXM6Y)Z"[[
 $-'vD!4s::;V SLE$ AxK 1$A'	!c!X+6F2F(GHF8 (199Xq3IQ[!))(A6Q		\9JJ4L *MST!VF9H		&!AayIdVm44G1Q %VQtD	6ryyF34a!UAueUFGT6>udGUV?@%PU?Dfg7W3ueUG UAq%P 8ntd8n'<<TE\AQRF 6640E< %dFFEJEs
" 
I
 ")QsCFH 6?xQUW\^_abdjlprvx{  ~B  6C2CtVT7++ %VRa!LG,& GvG!Gx47G
 5%5MLMS5F#5M
l s8Ic!YhY,6G,Hq#QUVYbchYiUi#ij: 		(9SIXI5F+Ga"PWXYI 1WF	4vtT64QUVA AxK 1$A'	!c!X+6F2F(GHF8 (199Xq3IQ[!))(A6Q		\9JJ4L *MST!VF9H		&!AayIdVm44G1Q %VQtD	6ryyF34a!UAueUFGT6>udGUV?@%PU?Dfg7W3ueUG
 VR1eVL5>y&RVX]_`bcekmqswy|  C  6D2CtVT7++ %VRa!LG,&
 f}&c	6#v#67Ef%C ::grzz$8M'NOD662tH~sC8<LdS[n^defhpep^qswx5?fdTXZ]_c5d2FD$T7++  Q[!14>2r4PX>[abcembm[noI)y
\B 	AxK1ASH%%&&8K VQt<	6ryyF+,
a!UAueUFGL.6udGQPQSXZ_afhmouw~.+ueUGV^VRaE6J 5%=%-T71CTJDagAdAQWF$KE 64Q5&9aE5%$FF    c
                 	   |j                         }|j                         }|j                         }|j                         }|	j                         }	t        j                  t        j                  |d      t        j                  |d      f      }
d}|t        j                  |      nd}t        j                  |d      }t        j                  |d      }t        r?|dk\  sJ |dk\  sJ |dkD  sJ t        j                  |d      |k(  rt        j                  |d      |dz   k(  sJ t        j
                  |      t        j                  |      z  j                         rJ t        j                  |      |dz   k(  r:t        |dt        j
                  |      z  t        j                  |      z  k        rJ t        j                  |      |dz   k(  r4t        t        j
                  |      t        j                  |      z        rJ t        j                  |d      |k(  rt        j                  |d      |dz   k(  sJ t        j                  |      j                         sJ t        t        j                  t        |ddd|f         d      dkD        sJ t        j                  |	d      |k(  rt        j                  |	d      |k(  sJ t        j                  |	      j                         sJ t        |ddd|f   |	|      sJ ||k\  r|dkD  sJ t        }t        |dz         D ]J  }t!        ||||||	      \  }}}}}	}|t"        k(  r n't%        |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kD  r|dk  s n5t        |t1        d|z  |z  t2                    }t5        |||      |k(  sK n t        rU||k\  r|dkD  sJ |z  z   dkD  s>|t"        k(  s5|dk\  r0t        j6                  ||      dkD  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/27761#567AD #.RWWT]AFggfa(OwwsAH !###1}}axxwwvq!_49KxZ[|9[[[HHV$r{{6'::??AAAwwt}1,D1rxx~-D0AAAB	C Cwwt}1,S$"++VZJ[9[5\\\wwsA(*rwwsA(Q,/NNN{{3##%%%266#c!YhY,/0q9A=>>>wwtQ8+a0@H0LLL{{4 $$&&&SIXI&d333|a'' D" hl# #.8vtTSV9=/?+dCt $$ D(Od8n4d;"&"2!WfW*((:!;''&():";h]KMM"NPTVVWVW 	
!VW* 1vak**E15 A,h"&&1fQ[6IGTUWXM6Y)Z"[[ 
vz 4R&[617;<D$%1G#T t|q((v%)T5F-F1FF!;a!?TZH[	\ \ Kr   c                    t         rHt        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        rQ||k  rLt        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     wwt}!!!wwvq!RWWT]222 666'"D666'"Dt9Dt9D
4#*$+rzz$*T1d
9JTVTZTZ[ D[E! Avv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 & % M M 1 1 ! " . 3 3 ) & )QGjqh$r   