§
    fŠtju  ã                   óf  — d dl mZ d dlZd dlmZ ddl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 d d	lmZ d
Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        ZdS )é    )Ú
namedtupleNé   )Úapprox_derivativeÚgroup_columns)ÚHessianUpdateStrategy)ÚLinearOperator)Úarray_namespaceÚxp_copy)Úarray_api_extra)Ú_ScalarFunctionWrapper)z2-pointz3-pointÚcsc                   ó(   — e Zd ZdZ	 	 	 dd„Zdd„ZdS )Ú_ScalarGradWrapperz0
    Wrapper class for gradient calculation
    Nc                 ób   — || _         || _        |€g n|| _        || _        d| _        d| _        d S ©Nr   )ÚfunÚgradÚargsÚfinite_diff_optionsÚngevÚnfev)Úselfr   r   r   r   s        úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/optimize/_differentiable_functions.pyÚ__init__z_ScalarGradWrapper.__init__   s;   € ð ˆŒØˆŒ	Ø˜,�B�B¨DˆŒ	Ø#6ˆÔ ØˆŒ	àˆŒ	ˆ	ˆ	ó    c                 ó@  — t          | j        ¦  «        r8t          j         | j        t          j        |¦  «        g| j        ¢R Ž ¦  «        }nA| j        t          v r3t          | j        |fd|i| j	        ¤Ž\  }}| xj
        |d         z  c_
        | xj        dz  c_        |S )NÚf0r   r   )Úcallabler   ÚnpÚ
atleast_1dÚcopyr   Ú
FD_METHODSr   r   r   r   r   )r   Úxr   ÚkwdsÚgÚdcts         r   Ú__call__z_ScalarGradWrapper.__call__#   s³   € õ �D”IÑÔð 		%Ý”˜i˜dœi­¬°©
¬
Ð?°T´YÐ?Ð?Ð?Ñ@Ô@ˆAˆAØŒY�*Ð$Ð$Ý&Ø”Øðð ð ðð Ô*ð	ð ‰FˆAˆsð ˆIŒI˜˜VœÑ$ˆIŒIàˆ	Œ	�Q‰ˆ	Œ	Øˆr   ©NNN©N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   © r   r   r   r      sQ   € € € € € ðð ð ØØ $ðð ð ð ðð ð ð ð ð r   r   c                   óD   — e Zd ZdZ	 	 	 	 d	d„Zd
d„Zd
d„Zd„ Zd„ Zd„ Z	dS )Ú_ScalarHessWrapperzC
    Wrapper class for hess calculation via finite differences
    Nc                 óX  — || _         || _        |€g n|| _        || _        d| _        d| _        d | _        d | _        t          |¦  «        rÌ |t          j
        |¦  «        g|¢R Ž | _        | xj        dz  c_        t          j        | j        ¦  «        r'd| _        t          j        | j        ¦  «        | _        d S t          | j        t          ¦  «        r	d| _        d S d| _        t          j        t          j        | j        ¦  «        ¦  «        | _        d S |t$          v r	d| _        d S d S )Nr   r   Úsparse_callableÚlinearoperator_callableÚdense_callableÚfd_hess)Úhessr   r   r   r   ÚnhevÚHÚ
_hess_funcr   r   r!   ÚspsÚissparseÚ	csr_arrayÚ
isinstancer   Ú
atleast_2dÚasarrayr"   )r   r7   Úx0r   r   r   s         r   r   z_ScalarHessWrapper.__init__9   s  € ð ˆŒ	ØˆŒ	Ø˜,�B�B¨DˆŒ	Ø#6ˆÔ àˆŒ	ØˆŒ	ØˆŒØˆŒå�D‰>Œ>ð 	,Ø�T�"œ' "™+œ+Ð-¨Ð-Ð-Ð-ˆDŒFØˆIŒI˜‰NˆIŒIåŒ|˜DœFÑ#Ô#ð ;Ø"3�”Ýœ t¤vÑ.Ô.�”��Ý˜DœF¥NÑ3Ô3ð ;Ø";�”��ð #3�”Ýœ¥r¤z°$´&Ñ'9Ô'9Ñ:Ô:�”��Ø•ZÐÐØ"+�”��ð  Ðr   c                 ó¾   — | j         xdk    r	 | j        }n*xdk    r	 | j        }nxdk    r	 | j        }ndk    r| j        } |t          j        |¦  «        |¬¦  «        S )Nr3   r4   r5   r6   ©r   )r:   Ú_sparse_callableÚ_linearoperator_callableÚ_dense_callableÚ_fd_hessr   r!   )r   r#   r   r$   Ú_hs        r   r'   z_ScalarHessWrapper.__call__[   s}   € ØŒoØ"Ð"Ò"Ð"Ð"ØÔ*��Ø*Ð*Ò*Ð*Ð*ØÔ2��Ø!Ð!Ò!Ð!Ð!ØÔ)��Ø’�Ø”]�àˆr•"”'˜!‘*”* Ð$Ñ$Ô$Ð$r   c                 ó€   — t          | j        |fd|i| j        ¤Ž\  | _        }| xj        |d         z  c_        | j        S )Nr   r   )r   r   r   r9   r   )r   r#   r   r$   r&   s        r   rG   z_ScalarHessWrapper._fd_hessh   sS   € Ý'ØŒI�qð
ð 
Øð
Ø#'Ô#;ð
ð 
‰ˆŒ�ð 	ˆ	Œ	�S˜”[Ñ ˆ	Œ	ØŒvˆr   c                 ó„   — | xj         dz  c_         t          j         | j        |g| j        ¢R Ž ¦  «        | _        | j        S ©Nr   )r8   r;   r=   r7   r   r9   ©r   r#   r$   s      r   rD   z#_ScalarHessWrapper._sparse_callableo   s?   € Øˆ	Œ	�Q‰ˆ	Œ	Ý”˜y˜tœy¨Ð7¨T¬YÐ7Ð7Ð7Ñ8Ô8ˆŒØŒvˆr   c                 ó¨   — | xj         dz  c_         t          j        t          j         | j        |g| j        ¢R Ž ¦  «        ¦  «        | _        | j        S rK   )r8   r   r?   r@   r7   r   r9   rL   s      r   rF   z"_ScalarHessWrapper._dense_callablet   sP   € Øˆ	Œ	�Q‰ˆ	Œ	Ý”ÝŒJ�y�t”y Ð/ T¤YÐ/Ð/Ð/Ñ0Ô0ñ
ô 
ˆŒð Œvˆr   c                 ó`   — | xj         dz  c_          | j        |g| j        ¢R Ž | _        | j        S rK   )r8   r7   r   r9   rL   s      r   rE   z+_ScalarHessWrapper._linearoperator_callable{   s5   € Øˆ	Œ	�Q‰ˆ	Œ	Ø�”˜1Ð)˜tœyÐ)Ð)Ð)ˆŒØŒvˆr   )NNNNr)   )
r+   r,   r-   r.   r   r'   rG   rD   rF   rE   r/   r   r   r1   r1   5   s–   € € € € € ðð ð ØØØ $ð ,ð  ,ð  ,ð  ,ðD%ð %ð %ð %ðð ð ð ðð ð ð
ð ð ðð ð ð ð r   r1   c                   ó®   — e Zd ZdZdej         ej        fddfd„Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚScalarFunctionaÏ  Scalar function and its derivatives.

    This class defines a scalar function F: R^n->R and methods for
    computing or approximating its first and second derivatives.

    Parameters
    ----------
    fun : callable
        evaluates the scalar function. Must be of the form ``fun(x, *args)``,
        where ``x`` is the argument in the form of a 1-D array and ``args`` is
        a tuple of any additional fixed parameters needed to completely specify
        the function. Should return a scalar.
    x0 : array-like
        Provides an initial set of variables for evaluating fun. Array of real
        elements of size (n,), where 'n' is the number of independent
        variables.
    args : tuple, optional
        Any additional fixed parameters needed to completely specify the scalar
        function.
    grad : {callable, '2-point', '3-point', 'cs'}
        Method for computing the gradient vector.
        If it is a callable, it should be a function that returns the gradient
        vector:

            ``grad(x, *args) -> array_like, shape (n,)``

        where ``x`` is an array with shape (n,) and ``args`` is a tuple with
        the fixed parameters.
        Alternatively, the keywords  {'2-point', '3-point', 'cs'} can be used
        to select a finite difference scheme for numerical estimation of the
        gradient with a relative step size. These finite difference schemes
        obey any specified `bounds`.
    hess : {callable, '2-point', '3-point', 'cs', HessianUpdateStrategy}
        Method for computing the Hessian matrix. If it is callable, it should
        return the  Hessian matrix:

            ``hess(x, *args) -> {LinearOperator, spmatrix, array}, (n, n)``

        where x is a (n,) ndarray and `args` is a tuple with the fixed
        parameters. Alternatively, the keywords {'2-point', '3-point', 'cs'}
        select a finite difference scheme for numerical estimation. Or, objects
        implementing `HessianUpdateStrategy` interface can be used to
        approximate the Hessian.
        Whenever the gradient is estimated via finite-differences, the Hessian
        cannot be estimated with options {'2-point', '3-point', 'cs'} and needs
        to be estimated using one of the quasi-Newton strategies.
    finite_diff_rel_step : None or array_like
        Relative step size to use. The absolute step size is computed as
        ``h = finite_diff_rel_step * sign(x0) * max(1, abs(x0))``, possibly
        adjusted to fit into the bounds. For ``method='3-point'`` the sign
        of `h` is ignored. If None then finite_diff_rel_step is selected
        automatically,
    finite_diff_bounds : tuple of array_like
        Lower and upper bounds on independent variables. Defaults to no bounds,
        (-np.inf, np.inf). Each bound must match the size of `x0` or be a
        scalar, in the latter case the bound will be the same for all
        variables. Use it to limit the range of function evaluation.
    epsilon : None or array_like, optional
        Absolute step size to use, possibly adjusted to fit into the bounds.
        For ``method='3-point'`` the sign of `epsilon` is ignored. By default
        relative steps are used, only if ``epsilon is not None`` are absolute
        steps used.
    workers : map-like callable, optional
        A map-like callable, such as `multiprocessing.Pool.map` for evaluating
        any numerical differentiation in parallel.
        This evaluation is carried out as ``workers(fun, iterable)``, or
        ``workers(grad, iterable)``, depending on what is being numerically
        differentiated.
        Alternatively, if `workers` is an int the task is subdivided into `workers`
        sections and the function evaluated in parallel
        (uses `multiprocessing.Pool <multiprocessing>`).
        Supply -1 to use all available CPU cores.
        It is recommended that a map-like be used instead of int, as repeated
        calls to `approx_derivative` will incur large overhead from setting up
        new processes.

        .. versionadded:: 1.16.0

    Notes
    -----
    This class implements a memoization logic. There are methods `fun`,
    `grad`, hess` and corresponding attributes `f`, `g` and `H`. The following
    things should be considered:

        1. Use only public methods `fun`, `grad` and `hess`.
        2. After one of the methods is called, the corresponding attribute
           will be set. However, a subsequent call with a different argument
           of *any* of the methods may overwrite the attribute.
    Nc
                 ó´  — t          |¦  «        s!|t          vrt          dt          › d�¦  «        ‚t          |¦  «        s6|t          v s-t          |t          ¦  «        st          dt          › d�¦  «        ‚|t          v r|t          v rt          d¦  «        ‚t          |¦  «        x| _        }
t          j        |
 	                    |¦  «        d|
¬¦  «        }|
j
        }|
                     |j        d¦  «        r|j        }t          ||¦  «        | _        || _        || _        || _        || _        |
                     ||¦  «        | _        || _        | j        j        | _        d| _        d| _        d| _        d | _        t8          j        | _        |	pt>          }	i }|t          v r||d	<   ||d
<   ||d<   ||d<   |	|d<   d|d<   |t          v r||d	<   ||d
<   ||d<   d|d<   |	|d<   d|d<   d| _         |  !                    ¦   «          tE          || j        ||¬¦  «        | _#        |  $                    ¦   «          t          |t          ¦  «        rb|| _%        | j%         &                    | j        d¦  «         d| _        d | _'        d | _(        tS          dddg¦  «        } |dd¬¦  «        | _*        d S t          |¦  «        r2tW          ||||¬¦  «        | _*        | j*        j%        | _%        d| _        d S |t          v ratW          |||| j#        |¬¦  «        | _*        |  $                    ¦   «          |  *                    | j        | j,        ¬¦  «        | _%        d| _        d S d S )Nz)`grad` must be either callable or one of ú.z@`hess` must be either callable, HessianUpdateStrategy or one of z‹Whenever the gradient is estimated via finite-differences, we require the Hessian to be estimated using one of the quasi-Newton strategies.r   ©ÚndimÚxpúreal floatingFÚmethodÚrel_stepÚabs_stepÚboundsÚworkersTÚfull_outputÚas_linear_operatorr   )r   r   r   r7   Ú_FakeCounterr   r8   )r   r8   )rA   r   r   )rA   r   r   r   rC   )-r   r"   Ú
ValueErrorr>   r   r	   rU   ÚxpxÚ
atleast_ndr@   Úfloat64ÚisdtypeÚdtyper   Ú_wrapped_funÚ	_orig_funÚ
_orig_gradÚ
_orig_hessÚ_argsÚastyper#   Úx_dtypeÚsizeÚnÚ	f_updatedÚ	g_updatedÚ	H_updatedÚ	_lowest_xr   ÚinfÚ	_lowest_fÚmapÚ_nfevÚ_update_funr   Ú_wrapped_gradÚ_update_gradr9   Ú
initializeÚx_prevÚg_prevr   Ú_wrapped_hessr1   r%   )r   r   rA   r   r   r7   Úfinite_diff_rel_stepÚfinite_diff_boundsÚepsilonr[   rU   Ú_xÚ_dtyper   r^   s                  r   r   zScalarFunction.__init__Ú   sÝ  € õ ˜‰~Œ~ð 	 $­jÐ"8Ð"8ÝØI½JÐIÐIÐIñô ð õ ˜‘”ð 	 $­*Ð"4Ð"4Ý˜dÕ$9Ñ:Ô:ð #5åð,Ý(ð,ð ,ð ,ñô ð ð
 •:ÐÐ $­*Ð"4Ð"4Ýð 8ñ 9ô 9ð 9õ ' rÑ*Ô*Ð*ˆŒ�"ÝŒ^˜BŸJšJ r™NœN°°rÐ:Ñ:Ô:ˆØ”ˆØ�:Š:�b”h Ñ0Ô0ð 	Ø”XˆFõ 3°3¸Ñ=Ô=ˆÔØˆŒØˆŒØˆŒØˆŒ
ð —’˜2˜vÑ&Ô&ˆŒØˆŒØ””ˆŒØˆŒØˆŒØˆŒàˆŒÝœˆŒð �.�Sˆà ÐØ•:ÐÐØ,0Ð Ñ)Ø.BÐ 
Ñ+Ø.5Ð 
Ñ+Ø,>Ð Ñ)Ø-4Ð 	Ñ*Ø15Ð Ñ.Ø•:ÐÐØ,0Ð Ñ)Ø.BÐ 
Ñ+Ø.5Ð 
Ñ+Ø8<ÐÐ 4Ñ5Ø-4Ð 	Ñ*Ø15Ð Ñ.ð ˆŒ
Ø×ÒÑÔÐõ 0ØØÔ!ØØ 3ð	
ñ 
ô 
ˆÔð 	×ÒÑÔÐõ �dÕ1Ñ2Ô2ð 	&ØˆDŒFØŒF×Ò˜dœf fÑ-Ô-Ð-Ø!ˆDŒNØˆDŒKØˆDŒKÝ% n°v¸vÐ6FÑGÔGˆLØ!- °1¸1Ð!=Ñ!=Ô!=ˆDÔÐÐå˜‰~Œ~ð &Ý%7ØØØØ(;ð	&ñ &ô &�Ô"ð Ô+Ô-�”Ø!%�”��Ø�Ð#Ð#Ý%7ØØØØÔ+Ø(;ð&ñ &ô &�Ô"ð ×!Ò!Ñ#Ô#Ð#Ø×+Ò+¨D¬F°t´vÐ+Ñ>Ô>�”Ø!%�”��ð $Ð#r   c                 ó*   — | j         | j        j        z   S r)   )ru   rw   r   ©r   s    r   r   zScalarFunction.nfevE  s   € àŒz˜DÔ.Ô3Ñ3Ð3r   c                 ó   — | j         j        S r)   )rw   r   rƒ   s    r   r   zScalarFunction.ngevI  ó   € àÔ!Ô&Ð&r   c                 ó   — | j         j        S r)   )r|   r8   rƒ   s    r   r8   zScalarFunction.nhevM  r…   r   c                 óv  — t          | j        t          ¦  «        r°|                      ¦   «          | j        | _        | j        | _        t          j	        | j
                             |¦  «        d| j
        ¬¦  «        }| j
                             || j        ¦  «        | _        d| _        d| _        d| _        |                      ¦   «          d S t          j	        | j
                             |¦  «        d| j
        ¬¦  «        }| j
                             || j        ¦  «        | _        d| _        d| _        d| _        d S ©Nr   rS   F)r>   rh   r   rx   r#   rz   r%   r{   r`   ra   rU   r@   rj   rk   rn   ro   rp   Ú_update_hess©r   r#   r€   s      r   Ú	_update_xzScalarFunction._update_xQ  s  € Ý�d”oÕ'<Ñ=Ô=ð 	#Ø×ÒÑÔÐØœ&ˆDŒKØœ&ˆDŒKõ ” ¤§¢°Ñ 2Ô 2¸¸t¼wÐGÑGÔGˆBØ”W—^’^ B¨¬Ñ5Ô5ˆDŒFØ"ˆDŒNØ"ˆDŒNØ"ˆDŒNØ×ÒÑÔÐÐÐõ ” ¤§¢°Ñ 2Ô 2¸¸t¼wÐGÑGÔGˆBØ”W—^’^ B¨¬Ñ5Ô5ˆDŒFØ"ˆDŒNØ"ˆDŒNØ"ˆDŒNˆNˆNr   c                 óÄ   — | j         sX|                      | j        ¦  «        }| xj        dz  c_        || j        k     r| j        | _        || _        || _        d| _         d S d S ©Nr   T)rn   re   r#   ru   rs   rq   Úf)r   Úfxs     r   rv   zScalarFunction._update_funh  si   € ØŒ~ð 	"Ø×"Ò" 4¤6Ñ*Ô*ˆBØˆJŒJ˜!‰OˆJŒJØ�D”NÒ"Ð"Ø!%¤�”Ø!#�”àˆDŒFØ!ˆDŒNˆNˆNð	"ð 	"r   c                 ó¶   — | j         sQ| j        t          v r|                      ¦   «          |                      | j        | j        ¬¦  «        | _        d| _         d S d S ©NrC   T)ro   rg   r"   rv   rw   r#   rŽ   r%   rƒ   s    r   rx   zScalarFunction._update_grads  s^   € ØŒ~ð 	"ØŒ¥*Ð,Ð,Ø× Ò Ñ"Ô"Ð"Ø×'Ò'¨¬°4´6Ð'Ñ:Ô:ˆDŒFØ!ˆDŒNˆNˆNð		"ð 	"r   c                 ó¾  — | j         sÕ| j        t          v r;|                      ¦   «          |                      | j        | j        ¬¦  «        | _        nƒt          | j        t          ¦  «        rJ|                      ¦   «          | j         
                    | j        | j        z
  | j        | j        z
  ¦  «         n|                      | j        ¦  «        | _        d| _         d S d S r‘   )rp   rh   r"   rx   r|   r#   r%   r9   r>   r   Úupdaterz   r{   rƒ   s    r   r‰   zScalarFunction._update_hessz  sÉ   € ØŒ~ð 
	"ØŒ¥*Ð,Ð,Ø×!Ò!Ñ#Ô#Ð#Ø×+Ò+¨D¬F°t´vÐ+Ñ>Ô>�”�Ý˜DœOÕ-BÑCÔCð 4Ø×!Ò!Ñ#Ô#Ð#Ø”—’˜dœf t¤{Ñ2°D´F¸T¼[Ñ4HÑIÔIÐIÐIà×+Ò+¨D¬FÑ3Ô3�”à!ˆDŒNˆNˆNð
	"ð 
	"r   c                 ó–   — t          j        || j        ¦  «        s|                      |¦  «         |                      ¦   «          | j        S r)   )r   Úarray_equalr#   r‹   rv   rŽ   ©r   r#   s     r   r   zScalarFunction.fun‡  sC   € ÝŒ~˜a ¤Ñ(Ô(ð 	Ø�NŠN˜1ÑÔÐØ×ÒÑÔÐØŒvˆr   c                 ó–   — t          j        || j        ¦  «        s|                      |¦  «         |                      ¦   «          | j        S r)   )r   r•   r#   r‹   rx   r%   r–   s     r   r   zScalarFunction.grad�  óC   € ÝŒ~˜a ¤Ñ(Ô(ð 	Ø�NŠN˜1ÑÔÐØ×ÒÑÔÐØŒvˆr   c                 ó–   — t          j        || j        ¦  «        s|                      |¦  «         |                      ¦   «          | j        S r)   )r   r•   r#   r‹   r‰   r9   r–   s     r   r7   zScalarFunction.hess“  r˜   r   c                 óÌ   — t          j        || j        ¦  «        s|                      |¦  «         |                      ¦   «          |                      ¦   «          | j        | j        fS r)   )r   r•   r#   r‹   rv   rx   rŽ   r%   r–   s     r   Úfun_and_gradzScalarFunction.fun_and_grad™  s\   € ÝŒ~˜a ¤Ñ(Ô(ð 	Ø�NŠN˜1ÑÔÐØ×ÒÑÔÐØ×ÒÑÔÐØŒv�t”vˆ~Ðr   )r+   r,   r-   r.   r   rr   r   Úpropertyr   r   r8   r‹   rv   rx   r‰   r   r   r7   r›   r/   r   r   rP   rP   €   s  € € € € € ðXð Xðr HLØ&(¤f W¨b¬fÐ$5¸tÈTði&ð i&ð i&ð i&ðV ð4ð 4ñ „Xð4ð ð'ð 'ñ „Xð'ð ð'ð 'ñ „Xð'ð#ð #ð #ð.	"ð 	"ð 	"ð"ð "ð "ð"ð "ð "ðð ð ðð ð ðð ð ðð ð ð ð r   rP   c                   ó   — e Zd Zd„ Zd„ ZdS )Ú_VectorFunWrapperc                 ó"   — || _         d| _        d S r   )r   r   )r   r   s     r   r   z_VectorFunWrapper.__init__¢  s   € ØˆŒØˆŒ	ˆ	ˆ	r   c                 óp   — | xj         dz  c_         t          j        |                      |¦  «        ¦  «        S rK   )r   r   r    r   r–   s     r   r'   z_VectorFunWrapper.__call__¦  s+   € Øˆ	Œ	�Q‰ˆ	Œ	ÝŒ}˜TŸXšX a™[œ[Ñ)Ô)Ð)r   N)r+   r,   r-   r   r'   r/   r   r   rž   rž   ¡  s2   € € € € € ðð ð ð*ð *ð *ð *ð *r   rž   c                   ó(   — e Zd ZdZ	 	 	 dd„Zdd„ZdS )Ú_VectorJacWrapperú0
    Wrapper class for Jacobian calculation
    Nc                 óZ   — || _         || _        || _        || _        d| _        d| _        d S r   )r   Újacr   Úsparse_jacobianÚnjevr   )r   r¥   r   r   r¦   s        r   r   z_VectorJacWrapper.__init__¯  s4   € ð ˆŒØˆŒØ#6ˆÔ Ø.ˆÔàˆŒ	àˆŒ	ˆ	ˆ	r   c                 óÔ  — t          | j        ¦  «        r&|                      |¦  «        }| xj        dz  c_        nA| j        t          v r3t	          | j        |fd|i| j        ¤Ž\  }}| xj        |d         z  c_        | j        rt          j
        |¦  «        S t          j        |¦  «        r|                     ¦   «         S t          |t          ¦  «        r|S t          j        |¦  «        S )Nr   r   r   )r   r¥   r§   r"   r   r   r   r   r¦   r;   r=   r<   Útoarrayr>   r   r   r?   )r   r#   r   r$   ÚJr&   s         r   r'   z_VectorJacWrapper.__call__¿  sð   € õ �D”HÑÔð 
	%Ø—’˜‘”ˆAØˆIŒI˜‰NˆIŒIˆIØŒX�Ð#Ð#Ý&Ø”Øðð ð ðð Ô*ð	ð ‰FˆAˆsð ˆIŒI˜˜VœÑ$ˆIŒIàÔð 	$Ý”= Ñ#Ô#Ð#ÝŒ\˜!‰_Œ_ð 	$Ø—9’9‘;”;ÐÝ˜�>Ñ*Ô*ð 	$ØˆHå”= Ñ#Ô#Ð#r   r(   r)   r*   r/   r   r   r¢   r¢   «  sQ   € € € € € ðð ð Ø $Ø ðð ð ð ð $ð $ð $ð $ð $ð $r   r¢   c                   ó:   — e Zd ZdZ	 	 dd„Zd	d„Zd	d„Zd„ Zd„ ZdS )
Ú_VectorHessWrapperr£   Nc                 óL   — || _         || _        || _        d| _        d| _        d S r   )r¥   r7   r   r8   r§   )r   r7   r¥   r   s       r   r   z_VectorHessWrapper.__init__Ü  s,   € ð ˆŒØˆŒ	Ø#6ˆÔ ØˆŒ	àˆŒ	ˆ	ˆ	r   c                 óÆ   — t          | j        ¦  «        r&| xj        dz  c_        |                      ||¦  «        S | j        t          v r|                      |||¬¦  «        S d S )Nr   ©ÚJ0)r   r7   r8   Ú_callable_hessr"   rG   )r   r#   Úvr°   r$   s        r   r'   z_VectorHessWrapper.__call__é  sh   € õ �D”IÑÔð 	.ØˆIŒI˜‰NˆIŒIØ×&Ò& q¨!Ñ,Ô,Ð,ØŒY�*Ð$Ð$Ø—=’=  A¨"�=Ñ-Ô-Ð-ð %Ð$r   c                 ó¼   — |€%|                       |¦  «        }| xj        dz  c_        t          | j        |f|j                             |¦  «        |fdœ| j        ¤Ž}|S )Nr   )r   r   )r¥   r§   r   Ú	jac_dot_vÚTÚdotr   )r   r#   r²   r°   r9   s        r   rG   z_VectorHessWrapper._fd_hessò  sn   € Øˆ:Ø—’˜!‘”ˆBØˆIŒI˜‰NˆIŒIõ ˜dœn¨að :Ø!#¤§¢¨!¡¤Ø$% 4ð:ð :ð !%Ô 8ð:ð :ˆð ˆr   c                 ó|   — | xj         dz  c_         |                      |¦  «        j                             |¦  «        S rK   )r§   r¥   rµ   r¶   ©r   r#   r²   s      r   r´   z_VectorHessWrapper.jac_dot_vþ  s1   € Øˆ	Œ	�Q‰ˆ	Œ	Ø�xŠx˜‰{Œ{Œ}× Ò  Ñ#Ô#Ð#r   c                 óø   — |                       ||¦  «        }t          j        |¦  «        rt          j        |¦  «        S t	          |t
          ¦  «        r|S t          j        t          j        |¦  «        ¦  «        S r)   )	r7   r;   r<   r=   r>   r   r   r?   r@   )r   r#   r²   r9   s       r   r±   z!_VectorHessWrapper._callable_hess  sb   € Ø�IŠI�a˜‰OŒOˆåŒ<˜‰?Œ?ð 	0Ý”= Ñ#Ô#Ð#Ý˜�>Ñ*Ô*ð 	0ØˆHå”=¥¤¨A¡¤Ñ/Ô/Ð/r   )NNr)   )	r+   r,   r-   r.   r   r'   rG   r´   r±   r/   r   r   r¬   r¬   Ø  s€   € € € € € ðð ð Ø $ð	ð ð ð ð.ð .ð .ð .ð
ð 
ð 
ð 
ð$ð $ð $ð0ð 0ð 0ð 0ð 0r   r¬   c                   ó°   — e Zd ZdZddej         ej        fddfd„Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚVectorFunctiona‘  Vector function and its derivatives.

    This class defines a vector function F: R^n->R^m and methods for
    computing or approximating its first and second derivatives.

    Notes
    -----
    This class implements a memoization logic. There are methods `fun`,
    `jac`, hess` and corresponding attributes `f`, `J` and `H`. The following
    things should be considered:

        1. Use only public methods `fun`, `jac` and `hess`.
        2. After one of the methods is called, the corresponding attribute
           will be set. However, a subsequent call with a different argument
           of *any* of the methods may overwrite the attribute.
    Nc
                 óÄ	  — t          |¦  «        s!|t          vrt          dt          › d�¦  «        ‚t          |¦  «        s6|t          v s-t          |t          ¦  «        st          dt          › d�¦  «        ‚|t          v r|t          v rt          d¦  «        ‚t          |¦  «        x| _        }
t          j        |
 	                    |¦  «        d|
¬¦  «        }|
j
        }|
                     |j        d¦  «        r|j        }|| _        || _        || _        |
                     ||¦  «        | _        || _        | j        j        | _        d| _        d| _        d| _        d	| _        d	| _        d	| _        |	pt6          }	i }|t          v rO||d
<   ||d<   |�t9          |¦  «        }||f|d<   ||d<   |	|d<   d|d<   t;          j        | j        ¦  «        | _        |t          v r-||d
<   ||d<   d|d<   t;          j        | j        ¦  «        | _        |t          v r|t          v rt          d¦  «        ‚tA          |¦  «        | _!        |  "                    ¦   «          t;          j#        | j$        ¦  «        | _%        | j%        j        | _&        t          |¦  «        r: |tO          | j        ¦  «        ¦  «        | _(        d| _        | xj        dz  c_        nM|t          v rDtS          | j!        | j        fd| j$        i|¤Ž\  | _(        }d| _        | xj        |d         z  c_        d	| _*        |s|€?tW          j,        | j(        ¦  «        r&tW          j-        | j(        ¦  «        | _(        d| _*        nqtW          j,        | j(        ¦  «        r| j(         .                    ¦   «         | _(        n9t          | j(        t^          ¦  «        rnt;          j0        | j(        ¦  «        | _(        tc          || j!        || j*        ¬¦  «        | _2        tg          || j2        |¬¦  «        | _4        t          |¦  «        s	|t          v rc|  4                    tO          | j        ¦  «        | j%        | j(        ¬¦  «        | _5        d| _        t          |¦  «        r| xj        dz  c_        d S d S t          |t          ¦  «        r>|| _5        | j5         6                    | j        d¦  «         d| _        d | _7        d | _8        d S d S )Nz(`jac` must be either callable or one of rR   z?`hess` must be either callable,HessianUpdateStrategy or one of z‹Whenever the Jacobian is estimated via finite-differences, we require the Hessian to be estimated using one of the quasi-Newton strategies.r   rS   rV   r   FrW   rX   ÚsparsityrZ   r[   Tr\   r]   r   r   )r   r   r¦   )r¥   r   r¯   r7   )9r   r"   r_   r>   r   r	   rU   r`   ra   r@   rb   rc   rd   rf   Ú	_orig_jacrh   rj   r#   rk   rl   rm   ru   Ú_njevÚ_nhevrn   Ú	J_updatedrp   rt   r   r   r!   Úx_diffrž   Úfun_wrappedrv   Ú
zeros_likerŽ   r²   Úmr
   rª   r   r¦   r;   r<   r=   r©   r   r?   r¢   Újac_wrappedr¬   Úhess_wrappedr9   ry   rz   ÚJ_prev)r   r   rA   r¥   r7   r}   Úfinite_diff_jac_sparsityr~   r¦   r[   rU   r€   r�   r   Úsparsity_groupsr&   s                   r   r   zVectorFunction.__init__  s  € õ ˜‰}Œ}ð 	W ­JÐ!6Ð!6ÝÐUÍ
ÐUÐUÐUÑVÔVÐVå˜‘”ð 	O $­*Ð"4Ð"4Ý˜dÕ$9Ñ:Ô:ð #5åð NÝ@JðNð Nð Nñ Oô Oð Oð •*ÐÐ ­Ð!3Ð!3Ýð +ñ ,ô ,ð ,õ
 ' rÑ*Ô*Ð*ˆŒ�"ÝŒ^˜BŸJšJ r™NœN°°rÐ:Ñ:Ô:ˆØ”ˆØ�:Š:�b”h Ñ0Ô0ð 	Ø”XˆFð ˆŒØˆŒØˆŒð —’˜2˜vÑ&Ô&ˆŒØˆŒà””ˆŒØˆŒ
ØˆŒ
ØˆŒ
ØˆŒØˆŒØˆŒð �.�Sˆà ÐØ•*ÐÐØ,/Ð Ñ)Ø.BÐ 
Ñ+Ø'Ð3Ý"/Ð0HÑ"IÔ"I�Ø3KØ3Bð3DÐ# JÑ/à,>Ð Ñ)Ø-4Ð 	Ñ*Ø15Ð Ñ.Ýœ' $¤&™/œ/ˆDŒKØ•:ÐÐØ,0Ð Ñ)Ø.BÐ 
Ñ+Ø8<ÐÐ 4Ñ5õ
 œ' $¤&™/œ/ˆDŒKØ•*ÐÐ ­Ð!3Ð!3Ýð +ñ ,ô ,ð ,õ
 -¨SÑ1Ô1ˆÔØ×ÒÑÔÐå”˜tœvÑ&Ô&ˆŒØ””ˆŒõ �C‰=Œ=ð 		&Ø�S� ¤™œÑ)Ô)ˆDŒFØ!ˆDŒNØˆJŒJ˜!‰OˆJŒJˆJØ•JÐÐÝ+ØÔ  $¤&ðð Ø-1¬VðØ7Jðð ‰KˆDŒF�Cð "ˆDŒNØˆJŒJ˜#˜fœ+Ñ%ˆJŒJà$ˆÔØð 	+ØÐ'­C¬L¸¼Ñ,@Ô,@Ð'õ ”] 4¤6Ñ*Ô*ˆDŒFØ#'ˆDÔ Ð ÝŒ\˜$œ&Ñ!Ô!ð 	+Ø”V—^’^Ñ%Ô%ˆDŒFˆFÝ˜œ¥Ñ/Ô/ð 	+Øå”] 4¤6Ñ*Ô*ˆDŒFå,ØØÔ Ø 3Ø Ô0ð	
ñ 
ô 
ˆÔõ /Ø�dÔ&Ð<Oð
ñ 
ô 
ˆÔõ
 �D‰>Œ>ð 
	˜T¥ZÐ/Ð/Ø×&Ò&¥w¨t¬v¡¤¸¼À4Ä6Ð&ÑJÔJˆDŒFØ!ˆDŒNÝ˜‰~Œ~ð  Ø�
”
˜a‘�
”
�
�
ð ð  å˜Õ3Ñ4Ô4ð 	ØˆDŒFØŒF×Ò˜dœf fÑ-Ô-Ð-Ø!ˆDŒNØˆDŒKØˆDŒKˆKˆKð	ð 	r   c                 ó*   — | j         | j        j        z   S r)   )ru   rÆ   r   rƒ   s    r   r   zVectorFunction.nfev�  s   € àŒz˜DÔ,Ô1Ñ1Ð1r   c                 ó*   — | j         | j        j        z   S r)   )r¿   rÇ   r§   rƒ   s    r   r§   zVectorFunction.njev¡  s   € àŒz˜DÔ-Ô2Ñ2Ð2r   c                 ó   — | j         S r)   )rÀ   rƒ   s    r   r8   zVectorFunction.nhev¥  s
   € àŒzÐr   c                 óZ   — t          j        || j        ¦  «        s|| _        d| _        d S d S )NF)r   r•   r²   rp   )r   r²   s     r   Ú	_update_vzVectorFunction._update_v©  s4   € ÝŒ~˜a ¤Ñ(Ô(ð 	#ØˆDŒFØ"ˆDŒNˆNˆNð	#ð 	#r   c                 ó°  — t          j        || j        ¦  «        �s:t          | j        t
          ¦  «        r°|                      ¦   «          | j        | _        | j        | _	        t          j        | j                             |¦  «        d| j        ¬¦  «        }| j                             || j        ¦  «        | _        d| _        d| _        d| _        |                      ¦   «          d S t          j        | j                             |¦  «        d| j        ¬¦  «        }| j                             || j        ¦  «        | _        d| _        d| _        d| _        d S d S rˆ   )r   r•   r#   r>   rh   r   Ú_update_jacrz   rª   rÈ   r`   ra   rU   r@   rj   rk   rn   rÁ   rp   r‰   rŠ   s      r   r‹   zVectorFunction._update_x®  s  € ÝŒ~˜a ¤Ñ(Ô(ñ 	'Ý˜$œ/Õ+@ÑAÔAð 'Ø× Ò Ñ"Ô"Ð"Ø"œf�”Ø"œf�”Ý”^ D¤G§O¢O°AÑ$6Ô$6¸QÀ4Ä7ÐKÑKÔK�ØœŸš¨¨D¬LÑ9Ô9�”Ø!&�”Ø!&�”Ø!&�”Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#å”^ D¤G§O¢O°AÑ$6Ô$6¸QÀ4Ä7ÐKÑKÔK�ØœŸš¨¨D¬LÑ9Ô9�”Ø!&�”Ø!&�”Ø!&�”��ð!	'ð 	'r   c                 óž   — | j         sE|                      t          | j        ¦  «        ¦  «        | _        | xj        dz  c_        d| _         d S d S r�   )rn   rÃ   r
   r#   rŽ   ru   rƒ   s    r   rv   zVectorFunction._update_funÁ  sM   € ØŒ~ð 	"Ø×%Ò%¥g¨d¬f¡o¤oÑ6Ô6ˆDŒFØˆJŒJ˜!‰OˆJŒJØ!ˆDŒNˆNˆNð	"ð 	"r   c                 óò   — | j         so| j        t          v r|                      ¦   «          n| xj        dz  c_        |                      t          | j        ¦  «        | j        ¬¦  «        | _	        d| _         d S d S )Nr   rC   T)
rÁ   r¾   r"   rv   r¿   rÆ   r
   r#   rŽ   rª   rƒ   s    r   rÑ   zVectorFunction._update_jacÇ  sv   € ØŒ~ð 	"ØŒ~¥Ð+Ð+à× Ò Ñ"Ô"Ð"Ð"à�
”
˜a‘�
”
à×%Ò%¥g¨d¬f¡o¤o¸$¼&Ð%ÑAÔAˆDŒFØ!ˆDŒNˆNˆNð	"ð 	"r   c                 óî  — | j         �slt          | j        ¦  «        rD|                      t	          | j        ¦  «        | j        ¦  «        | _        | xj        dz  c_        �n| j        t          v rN|  
                    ¦   «          |                      t	          | j        ¦  «        | j        | j        ¬¦  «        | _        n¯t          | j        t          ¦  «        r•|  
                    ¦   «          | j        �z| j        �s| j        | j        z
  }| j        j                             | j        ¦  «        | j        j                             | j        ¦  «        z
  }| j                             ||¦  «         d| _         d S d S )Nr   r¯   T)rp   r   rh   rÇ   r
   r#   r²   r9   rÀ   r"   rÑ   rª   r>   r   rz   rÈ   rµ   r¶   r“   )r   Údelta_xÚdelta_gs      r   r‰   zVectorFunction._update_hessÒ  s:  € ØŒ~ñ 	"Ý˜œÑ(Ô(ð 4Ø×*Ò*­7°4´6©?¬?¸D¼FÑCÔC�”Ø�
”
˜a‘�
”
‘
Ø”¥JÐ.Ð.Ø× Ò Ñ"Ô"Ð"Ø×*Ò*­7°4´6©?¬?¸D¼FÀtÄvÐ*ÑNÔN�”�Ý˜DœOÕ-BÑCÔCð 4Ø× Ò Ñ"Ô"Ð"ð ”;Ð*¨t¬{Ð/FØ"œf t¤{Ñ2�GØ"œfœhŸlšl¨4¬6Ñ2Ô2°T´[´]×5FÒ5FÀtÄvÑ5NÔ5NÑN�GØ”F—M’M '¨7Ñ3Ô3Ð3à!ˆDŒNˆNˆNð!	"ð 	"r   c                 ó|   — |                       |¦  «         |                      ¦   «          t          | j        ¦  «        S r)   )r‹   rv   r
   rŽ   r–   s     r   r   zVectorFunction.funå  s6   € Ø�Š�qÑÔÐØ×ÒÑÔÐõ �t”v‰ŒÐr   c                 óÔ   — |                       |¦  «         |                      ¦   «          t          | j        d¦  «        r$| j                             | j        j        ¦  «        S | j        S ©Nrj   )r‹   rÑ   Úhasattrrª   rj   rd   r–   s     r   r¥   zVectorFunction.jacì  s[   € Ø�Š�qÑÔÐØ×ÒÑÔÐÝ�4”6˜8Ñ$Ô$ð 	/ð ”6—=’= ¤¤Ñ.Ô.Ð.ØŒvˆr   c                 óþ   — |                       |¦  «         |                      |¦  «         |                      ¦   «          t          | j        d¦  «        r$| j                             | j        j        ¦  «        S | j        S rÙ   )rÏ   r‹   r‰   rÚ   r9   rj   rd   r¸   s      r   r7   zVectorFunction.hessõ  sm   € à�Š�qÑÔÐØ�Š�qÑÔÐØ×ÒÑÔÐÝ�4”6˜8Ñ$Ô$ð 	/ð ”6—=’= ¤¤Ñ.Ô.Ð.ØŒvˆr   )r+   r,   r-   r.   r   rr   r   rœ   r   r§   r8   rÏ   r‹   rv   rÑ   r‰   r   r¥   r7   r/   r   r   r»   r»     s  € € € € € ðð ð" '+ÀTØ&(¤f W¨b¬fÐ$5ÀtØð}ð }ð }ð }ð~ ð2ð 2ñ „Xð2ð ð3ð 3ñ „Xð3ð ðð ñ „Xðð#ð #ð #ð
'ð 'ð 'ð&"ð "ð "ð	"ð 	"ð 	"ð"ð "ð "ð&ð ð ðð ð ð	ð 	ð 	ð 	ð 	r   r»   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚLinearVectorFunctionzüLinear vector function and its derivatives.

    Defines a linear function F = A x, where x is N-D vector and
    A is m-by-n matrix. The Jacobian is constant and equals to A. The Hessian
    is identically zero and it is returned as a csr matrix.
    c                 óx  — |s|€5t          j        |¦  «        r!t          j        |¦  «        | _        d| _        ngt          j        |¦  «        r!|                     ¦   «         | _        d| _        n2t          j        t          j        |¦  «        ¦  «        | _        d| _        | j        j	        \  | _
        | _        t          |¦  «        x| _        }t          j        |                     |¦  «        d|¬¦  «        }|j        }|                     |j        d¦  «        r|j        }|                     ||¦  «        | _        || _        | j                             | j        ¦  «        | _        d| _        t          j        | j
        t4          ¬¦  «        | _        t          j        | j        | j        f¦  «        | _        d S )NTFr   rS   rV   )rd   )r;   r<   r=   rª   r¦   r©   r   r?   r@   ÚshaperÅ   rm   r	   rU   r`   ra   rb   rc   rd   rj   r#   rk   r¶   rŽ   rn   ÚzerosÚfloatr²   r9   )r   ÚArA   r¦   rU   r€   r�   s          r   r   zLinearVectorFunction.__init__  sb  € Øð 		)˜oÐ5½#¼,Àq¹/¼/Ð5Ý”] 1Ñ%Ô%ˆDŒFØ#'ˆDÔ Ð ÝŒ\˜!‰_Œ_ð 	)Ø—Y’Y‘[”[ˆDŒFØ#(ˆDÔ Ð õ ”]¥2¤:¨a¡=¤=Ñ1Ô1ˆDŒFØ#(ˆDÔ àœœ‰ˆŒ�”å& rÑ*Ô*Ð*ˆŒ�"ÝŒ^˜BŸJšJ r™NœN°°rÐ:Ñ:Ô:ˆØ”ˆØ�:Š:�b”h Ñ0Ô0ð 	Ø”XˆFð —’˜2˜vÑ&Ô&ˆŒØˆŒà”—’˜DœFÑ#Ô#ˆŒØˆŒå”˜$œ&­Ð.Ñ.Ô.ˆŒÝ” ¤¨¬Ð/Ñ0Ô0ˆŒˆˆr   c                 óþ   — t          j        || j        ¦  «        sbt          j        | j                             |¦  «        d| j        ¬¦  «        }| j                             || j        ¦  «        | _        d| _	        d S d S rˆ   )
r   r•   r#   r`   ra   rU   r@   rj   rk   rn   rŠ   s      r   r‹   zLinearVectorFunction._update_x&  sl   € ÝŒ~˜a ¤Ñ(Ô(ð 	#Ý” ¤§¢°Ñ 2Ô 2¸¸t¼wÐGÑGÔGˆBØ”W—^’^ B¨¬Ñ5Ô5ˆDŒFØ"ˆDŒNˆNˆNð	#ð 	#r   c                 ó”   — |                       |¦  «         | j        s&| j                             |¦  «        | _        d| _        | j        S )NT)r‹   rn   rª   r¶   rŽ   r–   s     r   r   zLinearVectorFunction.fun,  s?   € Ø�Š�qÑÔÐØŒ~ð 	"Ø”V—Z’Z ‘]”]ˆDŒFØ!ˆDŒNØŒvˆr   c                 ó:   — |                       |¦  «         | j        S r)   )r‹   rª   r–   s     r   r¥   zLinearVectorFunction.jac3  s   € Ø�Š�qÑÔÐØŒvˆr   c                 óH   — |                       |¦  «         || _        | j        S r)   )r‹   r²   r9   r¸   s      r   r7   zLinearVectorFunction.hess7  s"   € Ø�Š�qÑÔÐØˆŒØŒvˆr   N)	r+   r,   r-   r.   r   r‹   r   r¥   r7   r/   r   r   rÝ   rÝ     si   € € € € € ðð ð1ð 1ð 1ð<#ð #ð #ðð ð ðð ð ðð ð ð ð r   rÝ   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚIdentityVectorFunctionzþIdentity vector function and its derivatives.

    The Jacobian is the identity matrix, returned as a dense array when
    `sparse_jacobian=False` and as a csr matrix otherwise. The Hessian is
    identically zero and it is returned as a csr matrix.
    c                 óÒ   •— t          |¦  «        }|s|€t          j        |d¬¦  «        }d}nt          j        |¦  «        }d}t          ¦   «                              |||¦  «         d S )NÚcsr)ÚformatTF)Úlenr;   Ú	eye_arrayr   ÚeyeÚsuperr   )r   rA   r¦   rm   râ   Ú	__class__s        €r   r   zIdentityVectorFunction.__init__D  sj   ø€ Ý�‰GŒGˆØð 	$˜oÐ5Ý”˜a¨Ð.Ñ.Ô.ˆAØ"ˆOˆOå”�q‘	”	ˆAØ#ˆOÝ‰Œ×Ò˜˜B Ñ0Ô0Ð0Ð0Ð0r   )r+   r,   r-   r.   r   Ú__classcell__)rð   s   @r   rè   rè   =  sB   ø€ € € € € ðð ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r   rè   ) Úcollectionsr   Únumpyr   Úscipy.sparseÚsparser;   Ú_numdiffr   r   Ú_hessian_update_strategyr   Úscipy.sparse.linalgr   Úscipy._lib._array_apir	   r
   Ú
scipy._libr   r`   Úscipy._lib._utilr   r"   r   r1   rP   rž   r¢   r¬   r»   rÝ   rè   r/   r   r   ú<module>rü      sH  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø .Ð .Ð .Ð .Ð .Ð .Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð *€
ð"ð "ð "ð "ð "ñ "ô "ð "ðJIð Ið Ið Ið Iñ Iô Ið IðV^ð ^ð ^ð ^ð ^ñ ^ô ^ð ^ðB	*ð *ð *ð *ð *ñ *ô *ð *ð*$ð *$ð *$ð *$ð *$ñ *$ô *$ð *$ðZ20ð 20ð 20ð 20ð 20ñ 20ô 20ð 20ðjqð qð qð qð qñ qô qð qðh9ð 9ð 9ð 9ð 9ñ 9ô 9ð 9ðx1ð 1ð 1ð 1ð 1Ð1ñ 1ô 1ð 1ð 1ð 1r   