§
    fŠtj A  ã                   óx   — d Z ddlZddlmZmZmZmZ ddlm	Z	m
Z
 g d¢Zdd„Zd	„ Zd
„ Zd„ Z G d„ de
¦  «        ZdS )z2Nearly exact trust-region optimization subproblem.é    N)ÚnormÚget_lapack_funcsÚsolve_triangularÚ	cho_solveé   )Ú_minimize_trust_regionÚBaseQuadraticSubproblem)Ú_minimize_trustregion_exactÚ estimate_smallest_singular_valueÚsingular_leading_submatrixÚIterativeSubproblem© c                 ó�   — |€t          d¦  «        ‚t          |¦  «        st          d¦  «        ‚t          | |f|||t          dœ|¤ŽS )aÞ  
    Minimization of scalar function of one or more variables using
    a nearly exact trust-region algorithm.

    Options
    -------
    initial_trust_radius : float
        Initial trust-region radius.
    max_trust_radius : float
        Maximum value of the trust-region radius. No steps that are longer
        than this value will be proposed.
    eta : float
        Trust region related acceptance stringency for proposed steps.
    gtol : float
        Gradient norm must be less than ``gtol`` before successful
        termination.
    subproblem_maxiter : int, optional
        Maximum number of iterations to perform per subproblem. Only affects
        trust-exact. Default is 25.

        .. versionadded:: 1.17.0
    Nz9Jacobian is required for trust region exact minimization.z?Hessian matrix is required for trust region exact minimization.)ÚargsÚjacÚhessÚ
subproblem)Ú
ValueErrorÚcallabler   r   )ÚfunÚx0r   r   r   Útrust_region_optionss         ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/optimize/_trustregion_exact.pyr
   r
      sv   € ð0 €{Ýð /ñ 0ô 0ð 	0å�D‰>Œ>ð 0Ýð /ñ 0ô 0ð 	0å! # rð :°¸#ÀDÝ-@ð:ð :à$8ð:ð :ð :ó    c                 ó  — t          j        | ¦  «        } | j        \  }}||k    rt          d¦  «        ‚t          j        |¦  «        }t          j        |¦  «        }t          |¦  «        D ]ã}d||         z
  | j        ||f         z  }d||         z
  | j        ||f         z  }||dz   d…         | j        |dz   d…|f         |z  z   }||dz   d…         | j        |dz   d…|f         |z  z   }	t          |¦  «        t          |d¦  «        z   t          |¦  «        t          |	d¦  «        z   k    r|||<   |||dz   d…<   ŒÔ|||<   |	||dz   d…<   Œät          | |¦  «        }
t          |
¦  «        }t          |¦  «        }||z  }|
|z  }||fS )aY  Given upper triangular matrix ``U`` estimate the smallest singular
    value and the correspondent right singular vector in O(n**2) operations.

    Parameters
    ----------
    U : ndarray
        Square upper triangular matrix.

    Returns
    -------
    s_min : float
        Estimated smallest singular value of the provided matrix.
    z_min : ndarray
        Estimated right singular vector.

    Notes
    -----
    The procedure is based on [1]_ and is done in two steps. First, it finds
    a vector ``e`` with components selected from {+1, -1} such that the
    solution ``w`` from the system ``U.T w = e`` is as large as possible.
    Next it estimate ``U v = w``. The smallest singular value is close
    to ``norm(w)/norm(v)`` and the right singular vector is close
    to ``v/norm(v)``.

    The estimation will be better more ill-conditioned is the matrix.

    References
    ----------
    .. [1] Cline, A. K., Moler, C. B., Stewart, G. W., Wilkinson, J. H.
           An estimate for the condition number of a matrix.  1979.
           SIAM Journal on Numerical Analysis, 16(2), 368-375.
    z.A square triangular matrix should be provided.r   éÿÿÿÿN)ÚnpÚ
atleast_2dÚshaper   ÚzerosÚemptyÚrangeÚTÚabsr   r   )ÚUÚmÚnÚpÚwÚkÚwpÚwmÚppÚpmÚvÚv_normÚw_normÚs_minÚz_mins                  r   r   r   0   sª  € õD 	Œ�aÑÔ€AØŒ7�D€A€qàˆA‚v€vÝÐIÑJÔJÐJõ 	Œ�‰Œ€AÝ
Œ�‰Œ€Aõ �1‰XŒXð ð ˆØ��!”‰f˜œ˜A˜q˜Dœ	Ñ!ˆØ��1”‰g˜œ˜Q ˜TœÑ"ˆØˆq�‰sˆtˆtŒW�q”s˜1˜Q™3˜4˜4 ˜7”| B‘Ñ&ˆØˆq�‰sˆtˆtŒW�q”s˜1˜Q™3˜4˜4 ˜7”| B‘Ñ&ˆåˆr‰7Œ7•T˜"˜a‘[”[Ñ ¥C¨¡G¤G­d°2°q©k¬kÑ$9Ò9Ð9ØˆAˆa‰DØˆAˆa�‰cˆdˆd‰GˆGàˆAˆa‰DØˆAˆa�‰cˆdˆd‰GˆGõ 	˜˜AÑÔ€Aå�!‰WŒW€FÝ�!‰WŒW€Fð �V‰O€Eð �‰J€Eà�%ˆ<Ðr   c                 ó  — t          j        | ¦  «        }t          j        |¦  «        }t          j        t          j        | ¦  «        d¬¦  «        }t          j        ||z   |z
  ¦  «        }t          j        ||z
  |z   ¦  «        }||fS )a  
    Given a square matrix ``H`` compute upper
    and lower bounds for its eigenvalues (Gregoshgorin Bounds).
    Defined ref. [1].

    References
    ----------
    .. [1] Conn, A. R., Gould, N. I., & Toint, P. L.
           Trust region methods. 2000. Siam. pp. 19.
    r   )Úaxis)r   Údiagr$   ÚsumÚminÚmax)ÚHÚH_diagÚ
H_diag_absÚ
H_row_sumsÚlbÚubs         r   Úgershgorin_boundsr@      su   € õ ŒW�Q‰ZŒZ€FÝ”˜‘”€JÝ”�œ˜q™	œ	¨Ð*Ñ*Ô*€JÝ	Œ�˜Ñ# jÑ0Ñ	1Ô	1€BÝ	Œ�˜Ñ# jÑ0Ñ	1Ô	1€Bàˆrˆ6€Mr   c                 óR  — t          j        |d|dz
  …|dz
  f         dz  ¦  «        | |dz
  |dz
  f         z
  }t          | ¦  «        }t          j        |¦  «        }d||dz
  <   |dk    r;t	          |d|dz
  …d|dz
  …f         |d|dz
  …|dz
  f          ¦  «        |d|dz
  …<   ||fS )a  
    Compute term that makes the leading ``k`` by ``k``
    submatrix from ``A`` singular.

    Parameters
    ----------
    A : ndarray
        Symmetric matrix that is not positive definite.
    U : ndarray
        Upper triangular matrix resulting of an incomplete
        Cholesky decomposition of matrix ``A``.
    k : int
        Positive integer such that the leading k by k submatrix from
        `A` is the first non-positive definite leading submatrix.

    Returns
    -------
    delta : float
        Amount that should be added to the element (k, k) of the
        leading k by k submatrix of ``A`` to make it singular.
    v : ndarray
        A vector such that ``v.T B v = 0``. Where B is the matrix A after
        ``delta`` is added to its element (k, k).
    Nr   é   )r   r7   Úlenr    r   )ÚAr%   r*   Údeltar'   r/   s         r   r   r   ”   sÄ   € õ6 ŒF�1�T�a˜‘c�T˜1˜Q™3�Y”< ‘?Ñ#Ô# a¨¨!©¨Q¨q©S¨¤kÑ1€EåˆA‰Œ€Aõ 	Œ�‰Œ€AØ€A€aˆ�c�Fð 	ˆA‚v€vÝ" 1 T a¨¡c T¨4¨A¨a©C¨4 Z¤=°1°T°a¸±c°T¸1¸Q¹3°Y´<°-Ñ@Ô@ˆˆ$ˆ1ˆQ‰3ˆ$‰à�!ˆ8€Or   c                   óf   ‡ — e Zd ZdZdZdZ ej        e¦  «        j	        Z
	 	 d
ˆ fd„	Zd„ Zd	„ Zˆ xZS )r   aÔ  Quadratic subproblem solved by nearly exact iterative method.

    Notes
    -----
    This subproblem solver was based on [1]_, [2]_ and [3]_,
    which implement similar algorithms. The algorithm is basically
    that of [1]_ but ideas from [2]_ and [3]_ were also used.

    References
    ----------
    .. [1] A.R. Conn, N.I. Gould, and P.L. Toint, "Trust region methods",
           Siam, pp. 169-200, 2000.
    .. [2] J. Nocedal and  S. Wright, "Numerical optimization",
           Springer Science & Business Media. pp. 83-91, 2006.
    .. [3] J.J. More and D.C. Sorensen, "Computing a trust region step",
           SIAM Journal on Scientific and Statistical Computing, vol. 4(3),
           pp. 553-572, 1983.
    g{®Gáz„?é   Nçš™™™™™¹?çš™™™™™É?c	                 óL  •— t          ¦   «                              ||||¦  «         d| _        d | _        d| _        || _        || _        |€| j        n|| _        | j        dk     rt          d¦  «        ‚t          d| j        f¦  «        \  | _        t          | j        ¦  «        | _        t          | j        ¦  «        \  | _        | _        t%          | j        t&          j        ¦  «        | _        t%          | j        d¦  «        | _        | j        | j        z  | j        z  | _        d S )Nr   r   zJmaxiter must not be set to a negative number, use np.inf to mean infinite.)ÚpotrfÚfro)ÚsuperÚ__init__Úprevious_tr_radiusÚ	lambda_lbÚniterÚk_easyÚk_hardÚMAXITER_DEFAULTÚmaxiterr   r   r   ÚcholeskyrC   Ú	dimensionr@   Úhess_gershgorin_lbÚhess_gershgorin_ubr   r   ÚinfÚhess_infÚhess_froÚEPSÚCLOSE_TO_ZERO)
ÚselfÚxr   r   r   ÚhessprR   rS   rU   Ú	__class__s
            €r   rN   zIterativeSubproblem.__init__á   s  ø€ õ 	‰Œ×Ò˜˜C  dÑ+Ô+Ð+ð #%ˆÔØˆŒàˆŒ
ð ˆŒØˆŒð
 07¨�tÔ+Ð+ÀGˆŒØŒ<˜!ÒÐÝð >ñ ?ô ?ð ?õ *¨*°t´y°lÑCÔC‰ˆŒõ ˜TœY™œˆŒå&7¸¼	Ñ&BÔ&Bñ	$ˆÔØÔ#Ý˜TœY­¬Ñ/Ô/ˆŒÝ˜TœY¨Ñ.Ô.ˆŒð "œ^¨d¬hÑ6¸¼ÑFˆÔÐÐr   c           
      óö  — t          d| j        |z  t          | j         | j        | j        ¦  «        z   ¦  «        }t          dt          | j                             ¦   «         ¦  «         | j        |z  t          | j        | j        | j        ¦  «        z
  ¦  «        }|| j	        k     rt          | j
        |¦  «        }|dk    rd}n3t          t          j        ||z  ¦  «        || j        ||z
  z  z   ¦  «        }|||fS )zéGiven a trust radius, return a good initial guess for
        the damping factor, the lower bound and the upper bound.
        The values were chosen accordingly to the guidelines on
        section 7.3.8 (p. 192) from [1]_.
        r   )r9   Újac_magr8   rX   r\   r[   r   ÚdiagonalrY   rO   rP   r   ÚsqrtÚUPDATE_COEFF)r_   Ú	tr_radiusÚ	lambda_ubrP   Úlambda_initials        r   Ú_initial_valuesz#IterativeSubproblem._initial_values  s  € õ ˜˜4œ<¨	Ñ1µC¸Ô9PÐ8PØ8<¼Ø8<¼ñ5Gô 5Gñ Gñ Hô Hˆ	õ
 ˜�C ¤	× 2Ò 2Ñ 4Ô 4Ñ5Ô5Ð5Øœ YÑ.µ°TÔ5LØ59´]Ø59´]ñ2Dô 2Dñ DñEô Eˆ	ð �tÔ.Ò.Ð.Ý˜DœN¨IÑ6Ô6ˆIð ˜Š>ˆ>ØˆNˆNå ¥¤¨°YÑ)>Ñ!?Ô!?Ø!*¨TÔ->À	È)Ñ@SÑ-TÑ!TñVô VˆNð ˜y¨)Ð3Ð3r   c                 óä  — |                       |¦  «        \  }}}| j        }d}d}d| _        | j        | j        k     �rœ|rd}n;| j        |t          j        |¦  «        z  z   }|                      |ddd¬¦  «        \  }	}
| xj        dz  c_        |
dk    �rü| j        | j	        k    �rët          |	df| j         ¦  «        }t          |¦  «        }||k    r
|dk    rd}�nýt          |	|d¬¦  «        }t          |¦  «        }||z  dz  ||z
  z  |z  }||z   }||k     �rNt          |	¦  «        \  }}|                      |||¦  «        \  }}t!          ||gt"          ¬	¦  «        }t          j        |t          j        ||¦  «        ¦  «        }|dz  |dz  z  |||dz  z  z   z  }|| j        k    r
|||z  z  }�n'|}t)          |||dz  z
  ¦  «        }| j        |t          j        |¦  «        z  z   }|                      |ddd¬¦  «        \  }}
|
dk    r|}d}�n·t)          ||¦  «        }t)          t          j        t          j        ||z  ¦  «        ¦  «        || j        ||z
  z  z   ¦  «        }�n`t#          ||z
  ¦  «        |z  }|| j        k    r�nO|}|}�n8|
dk    r±| j        | j	        k    r¡|dk    rt          j        |¦  «        }d}�nt          |	¦  «        \  }}|}||z  }|dz  |dz  z  | j        |z  |dz  z  k    rnÞ|}t)          |||dz  z
  ¦  «        }t)          t          j        ||z  ¦  «        || j        ||z
  z  z   ¦  «        }n�t3          ||	|
¦  «        \  }}t          |¦  «        }t)          ||||dz  z  z   ¦  «        }t)          t          j        t          j        ||z  ¦  «        ¦  «        || j        ||z
  z  z   ¦  «        }| j        | j        k     �°œ|| _        || _        || _        ||fS )
zSolve quadratic subproblemTFr   )ÚlowerÚoverwrite_aÚcleanr   r#   )ÚtransrB   )Úkey)rk   rW   rQ   rU   r   r   ÚeyerV   rd   r^   r   r   r   r   r   Úget_boundaries_intersectionsr8   r$   ÚdotrS   r9   rf   rg   rR   r    r   rP   Úlambda_currentrO   )r_   rh   ru   rP   ri   r'   Úhits_boundaryÚalready_factorizedr:   r%   Úinfor(   Úp_normr)   r1   Údelta_lambdaÚ
lambda_newr2   r3   ÚtaÚtbÚstep_lenÚquadratic_termÚrelative_errorÚcrE   r/   r0   s                               r   ÚsolvezIterativeSubproblem.solve1  s³  € ð 04×/CÒ/CÀIÑ/NÔ/NÑ,ˆ˜	 9ØŒNˆØˆØ"ÐØˆŒ
àŒj˜4œ<Ò'Ñ'ð "ð 4Ø%*Ð"Ð"à”I˜n­R¬V°A©Y¬YÑ6Ñ6�ØŸ-š-¨°Ø49Ø.2ð (ñ 4ô 4‘��4ð ˆJŒJ˜!‰OˆJŒJð �qŠy‰y˜Tœ\¨DÔ,>Ò>Ñ>õ ˜q %˜j¨4¬8¨)Ñ4Ô4�å˜a™œ�ð ˜YÒ&Ð&¨>¸QÒ+>Ð+>Ø$)�MÙõ % Q¨°Ð5Ñ5Ô5�å˜a™œ�ð !' v¡°Ñ1°V¸IÑ5EÑFÀyÑP�Ø+¨lÑ:�
à˜IÒ%Ñ%Ý#CÀAÑ#FÔ#F‘L�E˜5à!×>Ò>¸qÀ%Ø?HñJô J‘F�B˜õ  # B¨ 8µÐ5Ñ5Ô5�Hõ &(¤V¨A­r¬v°a¸©|¬|Ñ%<Ô%<�Nð (0°¡{°U¸A±XÑ'=Ø)7¸.ÈÐTUÉÑ:UÑ)Uñ'W�Nà%¨¬Ò4Ð4Ø˜X¨Ñ-Ñ-˜Ùð !/�IÝ # I¨~ÀÀqÁÑ/HÑ IÔ I�Ið œ	 J­r¬v°a©y¬yÑ$8Ñ8�AØ"Ÿmšm¨A°UØ8=Ø26ð ,ñ 8ô 8‘G�A�tð ˜q’y�yà)3˜Ø-1Ð*Ñ*õ %(¨	°:Ñ$>Ô$>˜	õ *-ÝœG¥B¤F¨9°yÑ+@Ñ$AÔ$AÑBÔBØ%¨Ô(9¸9ÀYÑ;NÑ(OÑOñ*ô *˜™õ &)¨°)Ñ);Ñ%<Ô%<¸yÑ%H�NØ%¨¬Ò4Ð4Ùð !/�Ið &0�N‘Nà˜’�˜tœ|¨tÔ/AÒAÐAð " QÒ&Ð&Ýœ ™œ�AØ$)�MÙå?ÀÑBÔB‘��uØ$�à˜uÑ$�à˜a‘K %¨¡(Ñ*Ø”{ ^Ñ3°iÀ±lÑBòCð Càð +�	Ý 	¨>¸EÀ1¹HÑ+DÑEÔE�	õ "%Ý”G˜I¨	Ñ1Ñ2Ô2Ø Ô 1°9¸YÑ3FÑ GÑGñ"ô "��õ 6°a¸¸DÑAÔA‘��qÝ˜a™œ�õ   	¨>¸EÀ&È!Á)¹OÑ+KÑLÔL�	õ "%Ý”G�BœF 9¨yÑ#8Ñ9Ô9Ñ:Ô:Ø Ô 1°9¸YÑ3FÑ GÑGñ"ô "�ðO Œj˜4œ<Ò'Ñ'ðX #ˆŒØ,ˆÔØ"+ˆÔà�-ÐÐr   )NrH   rI   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rg   rT   r   ÚfinfoÚfloatÚepsr]   rN   rk   r‚   Ú__classcell__)rb   s   @r   r   r   ¾   s™   ø€ € € € € ðð ð, €Lð €Oà
ˆ"Œ(�5‰/Œ/Ô
€Cà04Ø15ð/Gð /Gð /Gð /Gð /Gð /Gðb4ð 4ð 4ð>Y ð Y ð Y ð Y ð Y ð Y ð Y r   r   )r   NN)r†   Únumpyr   Úscipy.linalgr   r   r   r   Ú_trustregionr   r	   Ú__all__r
   r   r@   r   r   r   r   r   ú<module>r�      s  ðØ 8Ð 8Ø Ð Ð Ð ð%ð %ð %ð %ð %ð %ð %ð %ð %ð %ð %ð %à KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kð"ð "ð "€ð :ð  :ð  :ð  :ðFLð Lð Lð^ð ð ð*'ð 'ð 'ðTL ð L ð L ð L ð L Ð1ñ L ô L ð L ð L ð L r   