Ë
    âQ(hÄ  ã                   ó€   — d Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
  G d„ de«      Z	 	 	 dd	„Zdd
„Zdd„Zd„ Zd„ Zy)z,
Spectral Algorithm for Nonlinear Equations
é    N)ÚOptimizeResult)Ú_check_unknown_optionsé   )Ú_nonmonotone_line_search_cruzÚ_nonmonotone_line_search_chengc                   ó   — e Zd Zy)Ú_NoConvergenceN)Ú__name__Ú
__module__Ú__qualname__© ó    úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/optimize/_spectral.pyr	   r	      s   „ Ør   r	   c           	      ó®  ‡*‡+‡,— t        |«       |dvrt        d|›d�«      ‚dŠ,|
€ˆ*fd„}
|€ˆ+ˆ,fd„}ˆ,fd„}dg}t        | |||||«      \  }}}Š+}}d}‰+Š*|} ||«      }t        j                  ‰+g|	«      }d	}‰*}d
}d}	  ||«      }|rt        d|||fz  «       |�	 |||«       |||z  |z   k  rd}d}nát        |«      d|z  kD  rd|z  t        j                  |«      z  }nt        |«      |k  r|}| |z  } |
|||«      } 	 |dk(  rt        ||||| ¬«      \  }!}"}#}$n|dk(  rt        |||‰+||| ¬«      \  }!}"}#}$}}"|z
  }%$|z
  }&t        j                  |%|%«      t        j                  |%|&«      z  }|"}|$}#Š+|dk(  r|j                  |#«       |dz  }�Œt        |||¬«      }'t        ||«      }(t        |'|||(|d   |d¬«      })|)S # t        $ r Y Œ<w xY w)a›  
    Solve nonlinear equation with the DF-SANE method

    Options
    -------
    ftol : float, optional
        Relative norm tolerance.
    fatol : float, optional
        Absolute norm tolerance.
        Algorithm terminates when ``||func(x)|| < fatol + ftol ||func(x_0)||``.
    fnorm : callable, optional
        Norm to use in the convergence check. If None, 2-norm is used.
    maxfev : int, optional
        Maximum number of function evaluations.
    disp : bool, optional
        Whether to print convergence process to stdout.
    eta_strategy : callable, optional
        Choice of the ``eta_k`` parameter, which gives slack for growth
        of ``||F||**2``.  Called as ``eta_k = eta_strategy(k, x, F)`` with
        `k` the iteration number, `x` the current iterate and `F` the current
        residual. Should satisfy ``eta_k > 0`` and ``sum(eta, k=0..inf) < inf``.
        Default: ``||F||**2 / (1 + k)**2``.
    sigma_eps : float, optional
        The spectral coefficient is constrained to ``sigma_eps < sigma < 1/sigma_eps``.
        Default: 1e-10
    sigma_0 : float, optional
        Initial spectral coefficient.
        Default: 1.0
    M : int, optional
        Number of iterates to include in the nonmonotonic line search.
        Default: 10
    line_search : {'cruz', 'cheng'}
        Type of line search to employ. 'cruz' is the original one defined in
        [Martinez & Raydan. Math. Comp. 75, 1429 (2006)], 'cheng' is
        a modified search defined in [Cheng & Li. IMA J. Numer. Anal. 29, 814 (2009)].
        Default: 'cruz'

    References
    ----------
    .. [1] "Spectral residual method without gradient information for solving
           large-scale nonlinear systems of equations." W. La Cruz,
           J.M. Martinez, M. Raydan. Math. Comp. **75**, 1429 (2006).
    .. [2] W. La Cruz, Opt. Meth. Software, 29, 24 (2014).
    .. [3] W. Cheng, D.-H. Li. IMA J. Numer. Anal. **29**, 814 (2009).

    )ÚchengÚcruzzInvalid value z for 'line_search'é   c                 ó   •— ‰d| z   dz  z  S )Nr   r   r   )ÚkÚxÚFÚf_0s      €r   Úeta_strategyz#_root_df_sane.<locals>.eta_strategyJ   s   ø€ à˜!˜a™% !™Ñ#Ð#r   c                 ó   •— ‰d‰z  z  S )Nç      ð?r   )r   Úf_kÚnexps    €€r   Úfnormz_root_df_sane.<locals>.fnormO   s   ø€ à˜˜T™‘?Ð"r   c                 óH   •— t         j                  j                  | «      ‰z  S ©N)ÚnpÚlinalgÚnorm)r   r   s    €r   Úfmeritz_root_df_sane.<locals>.fmeritS   s   ø€ Ü�y‰y�~‰~˜aÓ  $Ñ&Ð&r   r   r   Fz&too many function evaluations requiredTziter %d: ||F|| = %g, sigma = %gzsuccessful convergencer   r   )Úetar   )Úshapezdf-sane)r   ÚsuccessÚmessageÚfunÚnfevÚnitÚmethod)r   Ú
ValueErrorÚ
_wrap_funcÚcollectionsÚdequeÚprintÚabsr!   Úsignr   r   r	   ÚvdotÚappendÚ_wrap_resultr   )-ÚfuncÚx0ÚargsÚftolÚfatolÚmaxfevr   ÚcallbackÚdispÚMr   Ú	sigma_epsÚsigma_0Úline_searchÚunknown_optionsr$   r*   ÚfÚx_kÚx_shapeÚF_kÚ
is_complexr   Úsigma_kÚF_0_normÚprev_fsÚQÚCÚ	convergedr(   ÚF_k_normÚdr%   ÚalphaÚxpÚfpÚFpÚs_kÚy_kr   r   Úresultr   r   r   s-                                             @@@r   Ú_root_df_sanerX      s‰  ú€ ôb ˜?Ô+àÐ+Ñ+Ü˜>¨+¨Ð8JÐKÓLÐLà€DàÐô	$ð €}õ	#ô'ð ˆ3€DÜ,6°t¸RÀØ7;¸VÀTó-KÑ)€A€sˆG�S˜#˜zð 	
€AØ
€CØ€Gá�S‹z€Hô ×Ñ   qÓ)€Gð 	€AØ€Aà€IØ6€Gà
Ù˜“:ˆáÜÐ3°q¸(ÀGÐ6LÑLÔMàÐÙ�S˜#Ôà�d˜X‘o¨Ñ-Ò-à.ˆGØˆIØô ˆw‹<˜!˜I™+Ò%Ø˜	‘k¤B§G¡G¨GÓ$4Ñ4‰GÜ�‹\˜IÒ%ØˆGð ˆH�s‰Nˆñ ˜1˜c 3Ó'ˆð	Ø˜fÒ$Ü$AÀ!ÀSÈ!ÈWØFIô%KÑ!��r˜2™rà Ò'Ü*HÈÈCÐQRÐTWØIJÈAÐSVô+XÑ'��r˜2˜r 1 að �3‰hˆØ�3‰hˆÜ—'‘'˜#˜sÓ#¤b§g¡g¨c°3Ó&7Ñ7ˆð ˆØˆØˆð ˜&Ò Ø�N‰N˜2Ôà	ˆQ‰ˆñe ôh 	�S˜*¨GÔ4€AÜ�S˜*Ó%€Aä˜a¨Ø$+Ø !¨¨Q©°Q¸yôJ€Fð €Møô5 ò 	Ùð	ús   Ä9G Ç	GÇGc                 óœ  ‡ ‡‡‡‡‡	— t        j                  |«      }|j                  Š	t        j                   ‰ |g‰¢­Ž «      j                  «       }t        j                  |«      xs t        j                  |«      }|j                  «       }d‰d<   |r!ˆˆˆ ˆˆˆ	fd„}t        |«      }t        |«      }n
ˆˆˆ ˆˆˆ	fd„}||‰	 ‰|«      ||fS )a¬  
    Wrap a function and an initial value so that (i) complex values
    are wrapped to reals, and (ii) value for a merit function
    fmerit(x, f) is computed at the same time, (iii) iteration count
    is maintained and an exception is raised if it is exceeded.

    Parameters
    ----------
    func : callable
        Function to wrap
    x0 : ndarray
        Initial value
    fmerit : callable
        Merit function fmerit(f) for computing merit value from residual.
    nfev_list : list
        List to store number of evaluations in. Should be [0] in the beginning.
    maxfev : int
        Maximum number of evaluations before _NoConvergence is raised.
    args : tuple
        Extra arguments to func

    Returns
    -------
    wrap_func : callable
        Wrapped function, to be called as
        ``F, fp = wrap_func(x0)``
    x0_wrap : ndarray of float
        Wrapped initial value; raveled to 1-D and complex
        values mapped to reals.
    x0_shape : tuple
        Shape of the initial value array
    f : float
        Merit function at F
    F : ndarray of float
        Residual at x0_wrap
    is_complex : bool
        Whether complex values were mapped to reals

    r   r   c                 óø   •— ‰	d   ‰k\  r
t        «       ‚‰	dxx   dz  cc<   t        | «      j                  ‰
«      }t        j                   ‰|g‰¢­Ž «      j                  «       }t        |«      } ‰|«      }||fS ©Nr   r   )r	   Ú_real2complexÚreshaper!   ÚasarrayÚravelÚ_complex2real)r   ÚzÚvr   rD   r9   r$   r7   r<   Ú	nfev_listÚx0_shapes        €€€€€€r   Ú	wrap_funcz_wrap_func.<locals>.wrap_funcÙ   sv   ø€ Ø˜‰|˜vÒ%Ü$Ó&Ð&Ø�a‹L˜AÑ‹LÜ˜aÓ ×(Ñ(¨Ó2ˆAÜ—
‘
™4 ˜> Dš>Ó*×0Ñ0Ó2ˆAÜ˜aÓ ˆAÙ�q“	ˆAØ�a�4ˆKr   c                 óÐ   •— ‰d   ‰k\  r
t        «       ‚‰dxx   dz  cc<   | j                  ‰«      } t        j                   ‰| g‰¢­Ž «      j	                  «       } ‰|«      }||fS r[   )r	   r]   r!   r^   r_   )	r   r   rD   r9   r$   r7   r<   rc   rd   s	      €€€€€€r   re   z_wrap_func.<locals>.wrap_funcæ   se   ø€ Ø˜‰|˜vÒ%Ü$Ó&Ð&Ø�a‹L˜AÑ‹LØ—	‘	˜(Ó#ˆAÜ—
‘
™4 ˜> Dš>Ó*×0Ñ0Ó2ˆAÙ�q“	ˆAØ�a�4ˆKr   )r!   r^   r&   r_   Úiscomplexobjr`   )
r7   r8   r$   rc   r<   r9   r   rH   re   rd   s
   ` ````   @r   r.   r.   ¨   s±   ý€ ôP 
�‰�B‹€BØ�x‰x€HÜ
�
‰
‘4˜�?˜T’?Ó#×)Ñ)Ó+€AÜ—‘ Ó$Ò:¬¯©¸Ó(:€JØ	�‰‹€Bà€Iˆa�Lá÷	ñ 	ô ˜2ÓˆÜ˜!Ó‰÷	ñ 	ð �b˜(¡F¨1£I¨q°*Ð<Ð<r   c                 óL   — |rt        | «      }n| }|�|j                  |«      }|S )zA
    Convert from real to complex and reshape result arrays.
    )r\   r]   )rW   rH   r&   ra   s       r   r6   r6   ò   s/   € ñ Ü˜&Ó!‰àˆØÐØ�I‰I�eÓˆØ€Hr   c                 ór   — t        j                  | t        ¬«      j                  t         j                  «      S ©N)Údtype)r!   ÚascontiguousarrayÚfloatÚviewÚ
complex128)r   s    r   r\   r\   ÿ   s$   € Ü×Ñ ¬Ô/×4Ñ4´R·]±]ÓCÐCr   c                 ór   — t        j                  | t        ¬«      j                  t         j                  «      S rj   )r!   rl   Úcomplexrn   Úfloat64)ra   s    r   r`   r`     s$   € Ü×Ñ ¬Ô1×6Ñ6´r·z±zÓBÐBr   )r   g:Œ0âŽyE>gYóøÂn¥iè  NNFé
   Ng»½×Ùß|Û=r   r   )r   r    )Ú__doc__r/   Únumpyr!   Úscipy.optimizer   Úscipy.optimize._optimizer   Ú_linesearchr   r   Ú	Exceptionr	   rX   r.   r6   r\   r`   r   r   r   ú<module>rz      sS   ðñó ã Ý )Ý ;ß Vô	�Yô 	ð FJØLPØ<BóVórG=óT
òDóCr   