§
    fŠtj(7  ã                   óš   — d Z ddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ dededed	ed
edefd„Zdd„Zdej        dej        ded
efd„ZdS )aÎ  
This module provides subroutines that ensure the returned X is optimal among all the calculated
points in the sense that no other point achieves both lower function value and lower constraint
violation at the same time. This module is needed only in the constrained case.

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é   )Ú	DEBUGGINGÚEPSÚ	CONSTRMAXÚREALMAXÚFUNCMAX)ÚpresentÚf1Úc1Úf2Úc2ÚctolÚreturnc           	      óš  — t           rŽt          t          j        | |g¦  «        t          j        ||g¦  «        z  ¦  «        rJ ‚t          t          j        ||g¦  «        t          j        ||g¦  «        z  ¦  «        rJ ‚|dk    r|dk    sJ ‚|dk    sJ ‚d}|ptt          t          j        | |g¦  «        t          j        | |g¦  «        z  ¦  «        o:t          t          j        ||g¦  «        t          j        ||g¦  «        z  ¦  «         }|p| |k     o||k    }|p| |k    o||k     }dt          t          t          |dt          z  ¦  «        ¦  «        z  }|p8| t          k     o-||k    o'|t          ||¦  «        k    pt          j        |¦  «        }t           r0|r| |k    r||k    rJ ‚|s| |k    r||k     rJ ‚|s| |k     r||k    rJ ‚|S )aæ  
    This function compares whether FC1 = (F1, C1) is (strictly) better than FC2 = (F2, C2), which
    basically means that (F1 < F2 and C1 <= C2) or (F1 <= F2 and C1 < C2).
    It takes care of the cases where some of these values are NaN or Inf, even though some cases
    should never happen due to the moderated extreme barrier.
    At return, BETTER = TRUE if and only if (F1, C1) is better than (F2, C2).
    Here, C means constraint violation, which is a nonnegative number.
    r   Fé
   g{®Gáz„?)
r   ÚanyÚnpÚisnanÚisposinfÚmaxr   Úminr   r   )r
   r   r   r   r   Ú	is_betterÚcrefs          ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/_lib/pyprima/common/selectx.pyÚisbetterr      s&  € õ ð Ý•r”x  R Ñ)Ô)­B¬K¸¸R¸Ñ,AÔ,AÑAÑBÔBÐBÐBÐBÝ•r”x  R Ñ)Ô)­B¬K¸¸R¸Ñ,AÔ,AÑAÑBÔBÐBÐBÐBØ�QŠwˆw˜2 š7˜7˜7Ð"Ø�qŠyˆyˆyˆyð €Ið ð  G�c¥"¤(¨B°¨8Ñ"4Ô"4µr´{ÀBÈÀ8Ñ7LÔ7LÑ"LÑMÔMð  FÕVYÕZ\ÔZbÐdfÐhjÐckÑZlÔZlÕoqÔozÐ|~ð  ACð  |Dñ  pEô  pEñ  [Eñ  WFô  WFð  SF€IàÐ3˜b 2šgÐ2¨"°ª(€IØÐ3˜b BšhÐ2¨2°ª7€Ið
 ••C�˜T 6­IÑ#5Ñ6Ô6Ñ7Ô7Ñ7€DØÐe˜b¥7šlÐd¨r°TªzÐd¸rÅCÈÈdÁOÄOÒ?SÐ?cÕWYÔW_Ð`bÑWcÔWc€Iõ ð 7ØÐ8 "¨¢( (¨r°Rªx¨x¨xÐ8ØÐ6  r¢ ¨b°2ªg¨g¨gÐ6ØÐ6  b¢ ¨R°2ªX¨X¨XÐ6àÐó    c           	      óÖ  ‡ ‡‡— t          |	¦  «        rt          |	¦  «        }nd}t          |¦  «        }t          |¦  «        }t          �rÁ|dk    sJ ‚|dk    sJ ‚‰dk    sJ ‚|dk    r||k    sJ ‚|dk    sJ ‚t          j        |d¦  «        |k    rt          j        |d¦  «        |k    sJ ‚t          j        |¦  «        |k    sJ ‚t          j        |dd…d|…f         ¦  «                             ¦   «         rJ ‚t          t          j        |d|…         ¦  «        t          j        |d|…         ¦  «        z  ¦  «        rJ ‚t          |d|…         dt          j        |d|…         ¦  «        z  t          j        |d|…         ¦  «        z  k     ¦  «        rJ ‚t          t          j        |¦  «        ¦  «        rJ ‚t          j        ‰¦  «        t          j        ‰¦  «        z  rJ ‚‰ dt          j        ‰ ¦  «        z  t          j        ‰ ¦  «        z  k     rJ ‚t          |	¦  «        t          |
¦  «        k    sJ ‚t          |	¦  «        rÁt          t          j        |	¦  «        t          j        |	¦  «        z  ¦  «        rJ ‚t          j        |
d¦  «        |k    rt          j        |
d¦  «        |k    sJ ‚t          j        |
dd…d|…f         ¦  «        t          j        |
dd…d|…f         ¦  «        z                       ¦   «         rJ ‚t          ˆ ˆˆfd„t          |d|…         |d|…         ¦  «        D ¦   «         ¦  «        s:t          t          j
        |d|…         ‰k    |d|…         ‰ k    ¦  «        ¦  «        r|||||
fS t          j        ˆ ˆˆfd„t          |d|…         |d|…         ¦  «        D ¦   «         ¦  «        }t          |¦  «        |k    �rt          j        |‰z
  d¦  «        }|dk    r|}nVt          j        |¦  «        r|}n?t          j        |t           ¦  «        }t          j        |t           ¬¦  «        }|||z  z  }t!          |¦  «        }t!          |||k             ¦  «        }t!          |||k             ¦  «        }t          j                             |||k    ¬¦  «                             ¦   «         }|dk     s|t          |¦  «        k    rd}d||<   t          |¦  «        }t          j        |¦  «        d         }|dd…|f         |dd…d|…f<   ||         |d|…<   ||         |d|…<   |
�|	�|
dd…|f         |
dd…d|…f<   ||dd…|f<   ‰||<   ‰ ||<   |
�|	�	|	|
dd…|f<   |dz  }t          �r[|dk    r||k    sJ ‚t          j        |d¦  «        |k    rt          j        |d¦  «        |k    sJ ‚t          j        |¦  «        |k    sJ ‚t          j        |¦  «        |k    sJ ‚t          j        |dd…d|…f         ¦  «                             ¦   «         rJ ‚t          t          j        |d|…         ¦  «        t          j        |d|…         ¦  «        z  ¦  «        rJ ‚t          |d|…         dt          j        |d|…         ¦  «        z  t          j        |d|…         ¦  «        z  k     ¦  «        rJ ‚t          ˆ ˆˆfd	„t          |d|…         |d|…         ¦  «        D ¦   «         ¦  «        rJ ‚t          ˆ ˆˆfd
„t          |d|…         |d|…         ¦  «        D ¦   «         ¦  «        rJ ‚t          |
¦  «        r‰t          j        |
d¦  «        |k    rt          j        |
d¦  «        |k    sJ ‚t          j        |
dd…d|…f         ¦  «        t          j        |
dd…d|…f         ¦  «        z                       ¦   «         rJ ‚|||||
fS )aß  
    This subroutine saves X, F, and CSTRV in XFILT, FFILT, and CFILT (and CONSTR in CONFILT
    if they are present), unless a vector in XFILT[:, :NFILT] is better than X.
    If X is better than some vectors in XFILT[:, :NFILT] then these vectors will be
    removed. If X is not better than any of XFILT[:, :NFILT], but NFILT == MAXFILT,
    then we remove a column from XFILT according to the merit function
    PHI = FFILT + CWEIGHT * max(CFILT - CTOL, 0)
    N.B.:
    1. Only XFILT[:, :NFILT] and FFILT[:, :NFILT] etc contains valid information,
    while XFILT[:, NFILT+1:MAXFILT] and FFILT[:, NFILT+1:MAXFILT] etc are not
    initialized yet.
    2. We decide whether and X is better than another by the ISBETTER function
    r   r   Nc              3   óD   •K  — | ]\  }}t          ||‰‰‰¦  «        V — Œd S )N©r   ©Ú.0Úffilt_iÚcfilt_iÚcstrvr   Úfs      €€€r   ú	<genexpr>zsavefilt.<locals>.<genexpr>~   s8   øè è € ÐqÐqÑ;K¸7ÀG�H�W˜g q¨%°Ñ6Ô6ÐqÐqÐqÐqÐqÐqr   c           	      ó<   •— g | ]\  }}t          ‰‰||‰¦  «        ‘ŒS © r   r    s      €€€r   ú
<listcomp>zsavefilt.<locals>.<listcomp>ƒ   sA   ø€ ð  Að  Að  AÑJZÈ'ÐSZ�8 A u¨g°wÀÑEÔEð  Að  Að  Ar   )Únan©ÚmaskFc           	      ó<   •— g | ]\  }}t          ||‰‰‰¦  «        ‘ŒS r(   r   r    s      €€€r   r)   zsavefilt.<locals>.<listcomp>Å   s/   ø€ Ð}Ð}Ð}ÑGWÀwÐPW� ¨'°1°e¸TÑBÔBÐ}Ð}Ð}r   c           	      ó<   •— g | ]\  }}t          ‰‰||‰¦  «        ‘ŒS r(   r   r    s      €€€r   r)   zsavefilt.<locals>.<listcomp>Æ   s/   ø€ Ð}Ð}Ð}ÑGWÀwÐPW�  E¨7°G¸TÑBÔBÐ}Ð}Ð}r   )r	   Úlenr   r   Úsizer   r   r   ÚisneginfÚzipÚlogical_andÚlogical_notÚsumÚmaximumr   Ú
nan_to_numr   ÚmaÚarrayÚargmaxÚwhere)r$   r   Úcweightr%   ÚxÚnfiltÚcfiltÚffiltÚxfiltÚconstrÚconfiltÚnum_constraintsÚnum_varsÚmaxfiltÚkeepÚcfilt_shiftedÚphiÚphimaxr   ÚfrefÚkworstÚindex_to_keeps   `` `                  r   ÚsavefiltrN   B   s‘  øøø€ õ  ˆv�„ð Ý˜f™+œ+ˆˆàˆÝ�1‰vŒv€HÝ�%‰jŒj€Gõ ñ ^à˜1Š}ˆ}ˆ}ˆ}à˜!Š|ˆ|ˆ|ˆ|Ø�qŠyˆyˆyˆyà˜Šzˆz˜e wÒ.Ð.Ð.Ð.à˜!Š|ˆ|ˆ|ˆ|ÝŒw�u˜aÑ Ô  HÒ,Ð,µ´¸ÀÑ1BÔ1BÀgÒ1MÐ1MÐ1MÐMÝŒw�u‰~Œ~ Ò(Ð(Ð(Ð(å”H˜U 1 1 1 f u f 9Ô-Ñ.Ô.×3Ò3Ñ5Ô5Ð5Ð5Ð5Ý•r”x  f u f¤Ñ.Ô.µ´¸UÀ6ÀEÀ6¼]Ñ1KÔ1KÑKÑLÔLÐLÐLÐLÝ�u˜V˜e˜V”} q­2¬8°E¸&¸5¸&´MÑ+BÔ+BÑ'BÅRÄ[ÐQVÐW]ÐX]ÐW]ÔQ^ÑE_ÔE_Ñ'_Ò_Ñ`Ô`Ð`Ð`Ð`õ •r”x ‘{”{Ñ#Ô#Ð#Ð#Ð#å”H˜Q‘K”K¥"¤+¨a¡.¤.Ñ0Ð1Ð1Ð1à˜A¥¤¨¡¤Ñ/µ"´+¸eÑ2DÔ2DÑDÒDÐDÐDÐEå�v‰Œ¥'¨'Ñ"2Ô"2Ò2Ð2Ð2Ð2Ý�6‰?Œ?ð 	^å�2œ8 FÑ+Ô+­b¬k¸&Ñ.AÔ.AÑAÑBÔBÐBÐBÐBÝ”7˜7 AÑ&Ô&¨/Ò9Ð9½b¼gÀgÈqÑ>QÔ>QÐU\Ò>\Ð>\Ð>\Ð\Ýœ ¨¨¨¨F¨U¨F¨Ô!3Ñ4Ô4µr´{À7È1È1È1ÈfÈuÈfÈ9ÔCUÑ7VÔ7VÑV×[Ò[Ñ]Ô]Ð]Ð]Ð]õ ÐqÐqÐqÐqÐqÐqÍsÐSXÐY_ÐZ_ÐY_ÔS`ÐbgÐhnÐinÐhnÔboÑOpÔOpÐqÑqÔqÑrÔrð 3Ý�BŒN˜5  % œ=¨AÒ-¨u°V°e°V¬}ÀÒ/EÑFÔFÑGÔGð3à�e˜U E¨7Ð2Ð2õ Œ>ð  Að  Að  Að  Að  Að  AÕ^aÐbgÐhnÐinÐhnÔboÐqvÐw}Ðx}Ðw}Ôq~Ñ^Ô^ð  Añ  Aô  Añ  Bô  B€Dõ ˆ4�y„y�GÒÑÝœ
 5¨4¡<°Ñ3Ô3ˆØ�aŠ<ˆ<ØˆCˆCÝŒ[˜Ñ!Ô!ð 	+ØˆCˆCõ ”*˜U¥W HÑ-Ô-ˆCÝ”- ­'¨Ð2Ñ2Ô2ˆCØ�7˜]Ñ*Ñ*ˆCõ �S‘”ˆÝ�= ¨¢Ô/Ñ0Ô0ˆÝ�5˜¨$Ò.Ô/Ñ0Ô0ˆÝ”—’˜U¨%°$ª,�Ñ8Ô8×?Ò?ÑAÔAˆØ�AŠ:ˆ:˜¥3 t¡9¤9Ò,Ð,ØˆFØˆˆV‰õ �‰IŒI€EÝ”H˜T‘N”N 1Ô%€MØ˜Q˜Q˜Q Ð-Ô.€Eˆ!ˆ!ˆ!ˆVˆeˆVˆ)ÑØ˜-Ô(€Eˆ&ˆ5ˆ&�MØ˜-Ô(€Eˆ&ˆ5ˆ&�MØÐ˜vÐ1Ø$ Q Q Q¨Ð%5Ô6ˆ����6�E�6�	Ñð €Eˆ!ˆ!ˆ!ˆUˆ(�OØ€Eˆ%�LØ€Eˆ%�LØÐ˜vÐ1Ø"ˆ����5�ÑØ	ˆQ�J€Eõ ñ ^à˜Šzˆz˜e wÒ.Ð.Ð.Ð.ÝŒw�u˜aÑ Ô  HÒ,Ð,µ´¸ÀÑ1BÔ1BÀgÒ1MÐ1MÐ1MÐMÝŒw�u‰~Œ~ Ò(Ð(Ð(Ð(ÝŒw�u‰~Œ~ Ò(Ð(Ð(Ð(å”H˜U 1 1 1 f u f 9Ô-Ñ.Ô.×3Ò3Ñ5Ô5Ð5Ð5Ð5Ý•r”x  f u f¤Ñ.Ô.µ´¸UÀ6ÀEÀ6¼]Ñ1KÔ1KÑKÑLÔLÐLÐLÐLÝ�u˜V˜e˜V”} q­2¬8°E¸&¸5¸&´MÑ+BÔ+BÑ'BÅRÄ[ÐQVÐW]ÐX]ÐW]ÔQ^ÑE_ÔE_Ñ'_Ò_Ñ`Ô`Ð`Ð`Ð`åÐ}Ð}Ð}Ð}Ð}Ð}Õ[^Ð_dÐekÐfkÐekÔ_lÐnsÐtzÐuzÐtzÔn{Ñ[|Ô[|Ð}Ñ}Ô}Ñ~Ô~Ð~Ð~Ð~ÝÐ}Ð}Ð}Ð}Ð}Ð}Õ[^Ð_dÐekÐfkÐekÔ_lÐnsÐtzÐuzÐtzÔn{Ñ[|Ô[|Ð}Ñ}Ô}Ñ~Ô~Ð~Ð~Ð~å�7ÑÔð 	^Ý”7˜7 AÑ&Ô&¨/Ò9Ð9½b¼gÀgÈqÑ>QÔ>QÐU\Ò>\Ð>\Ð>\Ð\Ýœ ¨¨¨¨F¨U¨F¨Ô!3Ñ4Ô4µr´{À7È1È1È1ÈfÈuÈfÈ9ÔCUÑ7VÔ7VÑV×[Ò[Ñ]Ô]Ð]Ð]Ð]ð �%˜  wÐ.Ð.r   ÚfhistÚchistr<   c           	      óè  ‡ ‡‡‡— t          ‰ ¦  «        }t          r©|dk    sJ ‚t          j        ‰¦  «        |k    sJ ‚t	          t          j        ‰ ¦  «        t          j        ‰ ¦  «        z  ¦  «        rJ ‚t	          ‰dt          j        ‰¦  «        z  t          j        ‰¦  «        z  k     ¦  «        rJ ‚|dk    sJ ‚‰dk    sJ ‚t	          t          j        ‰ t          k     ‰t          k     ¦  «        ¦  «        rt          }t          }n”t	          t          j        ‰ t          k     ‰t          k     ¦  «        ¦  «        rt          }t          }nQt	          t          j        ‰ t          k     ‰t          k     ¦  «        ¦  «        rt          }t          }nt          }t          }t	          t          j        ‰ |k     ‰|k     ¦  «        ¦  «        s|dz
  Š�nSt          j        ‰‰z
  d¦  «        }t          j        |‰ |k              ¦  «        }t          j        t          d|z  ¦  «        }|dk    r‰ }	n8t          j        |¦  «        r|}	n!t          j        ‰ t           ¦  «        ||z  z   }	t          j        |	t          j        ‰ |k     ||k    ¦  «                 ¦  «        }
t          j        |t          j        ‰ |k     |	|
k    ¦  «                 ¦  «        }t          j        ‰ ||k             ¦  «        }t          j                             ‰‰ |k    ¬¦  «                             ¦   «         Št          rL‰dk    r‰|k     sJ ‚t	          ˆˆˆ ˆfd„t#          ‰ d|…         ‰d|…         ¦  «        D ¦   «         ¦  «        rJ ‚‰S )aS  
    This subroutine selects X according to FHIST and CHIST, which represents (a part of) history
    of F and CSTRV. Normally, FHIST and CHIST are not the full history but only a filter, e.g. ffilt
    and CFILT generated by SAVEFILT. However, we name them as FHIST and CHIST because the [F, CSTRV]
    in a filter should not dominate each other, but this subroutine does NOT assume such a property.
    N.B.: CTOL is the tolerance of the constraint violation (CSTRV). A point is considered feasible if
    its constraint violation is at most CTOL. Not that CTOL is absolute, not relative.
    r   r   é   r+   c           	      óT   •— g | ]$\  }}t          ||‰‰         ‰‰         ‰¦  «        ‘Œ%S r(   r   )r!   ÚfhistiÚchistirP   r   rO   Úkopts      €€€€r   r)   zselectx.<locals>.<listcomp>&  sJ   ø€ ð  Jð  Jð  JÑUcÐU[Ð]c� ¨°°t´¸eÀD¼kÈ4ÑPÔPð  Jð  Jð  Jr   N)r/   r   r   r0   r   r   r   r3   r   r   r   r6   r   r   r8   r9   Úargminr2   )rO   rP   r<   r   ÚnhistrK   r   Úchist_shiftedÚcminrI   ÚphiminrV   s   `` `       @r   Úselectxr\   Ð   so  øøøø€ õ �‰JŒJ€Eõ ð Ø˜ŠzˆzˆzˆzÝŒw�u‰~Œ~ Ò&Ð&Ð&Ð&Ý•r”x ‘”­¬°UÑ);Ô);Ñ;Ñ<Ô<Ð<Ð<Ð<Ý�u˜q¥2¤8¨E¡?¤?Ñ2µR´[ÀÑ5GÔ5GÑGÒGÑHÔHÐHÐHÐHØ˜!Š|ˆ|ˆ|ˆ|Ø�qŠyˆyˆyˆyõ �2Œ>˜%¥'š/¨5µ9Ò+<Ñ=Ô=Ñ>Ô>ð ÝˆÝˆˆÝ	�RŒ^˜E¥GšO¨UµYÒ->Ñ?Ô?Ñ	@Ô	@ð ÝˆÝˆˆÝ	�RŒ^˜E¥GšO¨UµWª_Ñ=Ô=Ñ	>Ô	>ð ÝˆÝˆˆåˆÝˆå�rŒ~˜e dšl¨E°DªLÑ9Ô9Ñ:Ô:ð $@Ø�q‰yˆ‰õ œ
 5¨4¡<°Ñ3Ô3ˆåŒv�m E¨D¢LÔ1Ñ2Ô2ˆõ Œz�#˜q ™vÑ&Ô&ˆà�aŠ<ˆ<ØˆCˆCÝŒ[˜Ñ!Ô!ð 	HØˆCˆCõ ”*˜U¥W HÑ-Ô-°¸-Ñ0GÑGˆCõ ”˜�BœN¨5°4ª<¸È$Ò9NÑOÔOÔPÑQÔQˆÝŒv�m¥B¤N°5¸4²<ÀÈÂÑ$OÔ$OÔPÑQÔQˆÝŒv�e˜M¨TÒ1Ô2Ñ3Ô3ˆåŒu�{Š{˜5¨°ªˆ{Ñ6Ô6×=Ò=Ñ?Ô?ˆõ ð KØ�qŠyˆy˜T Eš\˜\˜\Ð)Ýð  Jð  Jð  Jð  Jð  Jð  Jð  JÕgjÐkpÐqwÐrwÐqwÔkxÐzð  AGð  BGð  AGô  {Hñ  hIô  hIð  Jñ  Jô  Jñ  Kô  Kð  	Kð  	Kð  Kà€Kr   )NN)Ú__doc__Únumpyr   Únumpy.typingÚtypingÚnptÚconstsr   r   r   r   r   r	   ÚfloatÚboolr   rN   ÚNDArrayr\   r(   r   r   ú<module>rf      s  ðð
ð 
ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð ð-�ð -˜Eð - uð -°%ð -¸uð -Èð -ð -ð -ð -ð`K/ð K/ð K/ð K/ð\X�3”;ð X s¤{ð X¸Uð XÈ%ð Xð Xð Xð Xð Xð Xr   