
    IR-e                         d Z ddlZddlZddlZddlmZ g dZdZ ej	         ej
        e          j                  ZdZdZ G d d	ej        
          Z G d de          Z G d de          ZdS )z>
Optimization algorithms used in `~astropy.modeling.fitting`.
    N)AstropyUserWarning)OptimizationSLSQPSimplexd   gHz>)l J)l    J)c                       e Zd ZdZg Zd Zed             Zej        d             Zed             Z	e	j        d             Z	ed             Z
e
j        d             Z
d	 Zed
             Zej        d             ZdS )r   aE  
    Base class for optimizers.

    Parameters
    ----------
    opt_method : callable
        Implements optimization method

    Notes
    -----
    The base Optimizer does not support any constraints by default; individual
    optimizers should explicitly set this list to the specific constraints
    it supports.

    c                 \    || _         t          | _        t          | _        t
          | _        d S )N)_opt_methodDEFAULT_MAXITER_maxiterDEFAULT_EPS_epsDEFAULT_ACC_acc)self
opt_methods     ;lib/python3.11/site-packages/astropy/modeling/optimizers.py__init__zOptimization.__init__0   s#    %'				    c                     | j         S )zMaximum number of iterations.r   r   s    r   maxiterzOptimization.maxiter6   s     }r   c                     || _         dS )zSet maxiter.Nr   r   vals     r   r   zOptimization.maxiter;   s     r   c                     | j         S )z>Step for the forward difference approximation of the Jacobian.r   r   s    r   epszOptimization.eps@        yr   c                     || _         dS )zSet eps value.Nr   r   s     r   r   zOptimization.epsE        			r   c                     | j         S )zRequested accuracy.r   r   s    r   acczOptimization.accJ   r    r   c                     || _         dS )zSet accuracy.Nr$   r   s     r   r%   zOptimization.accO   r"   r   c                 $    | j         j         d}|S )Nz())	__class____name__)r   fmts     r   __repr__zOptimization.__repr__T   s    (,,,
r   c                     | j         S )zReturn the optimization method.)r
   r   s    r   r   zOptimization.opt_methodX   s     r   c                      t          d          )Nz'Subclasses should implement this method)NotImplementedErrorr   s    r   __call__zOptimization.__call__]   s    !"KLLLr   N)r)   
__module____qualname____doc__supported_constraintsr   propertyr   setterr   r%   r+   r   abcabstractmethodr/    r   r   r   r      s+                  X ^  ^   X 	Z  Z   X 	Z  Z       X  	M M M M Mr   r   )	metaclassc                   0     e Zd ZdZg dZ fdZd Z xZS )r   a)  
    Sequential Least Squares Programming optimization algorithm.

    The algorithm is described in [1]_. It supports tied and fixed
    parameters, as well as bounded constraints. Uses
    `scipy.optimize.fmin_slsqp`.

    References
    ----------
    .. [1] http://www.netlib.org/toms/733
    )boundseqconsineqconsfixedtiedc                 n    ddl m} t                                          |           d d d d d| _        d S )Nr   )
fmin_slsqp)final_func_valnumiter	exit_modemessage)scipy.optimizerA   superr   fit_info)r   rA   r(   s     r   r   zSLSQP.__init__q   sK    ------$$$"	
 
r   c           
         |                     d| j                  |d<   d|vr
| j        |d<   d|vr
| j        |d<   |                     dd          }|d         fdj        D             }d	 |D             }t          j        |          }|D ]2}|d         t          d         |d<   |d
         t          d
         |d
<   3t          j        |t                    }t          j	        j
                  }	t          j	        j                  }
 | j        ||f|d|||	|
d|\  }}}}}|| j        d<   || j        d<   || j        d<   || j        d<   |dk    rt          j        dt                      || j        fS )  
        Run the solver.

        Parameters
        ----------
        objfunc : callable
            objection function
        initval : iterable
            initial guess for the parameter values
        fargs : tuple
            other arguments to be passed to the statistic function
        kwargs : dict
            other keyword arguments to be passed to the solver

        r   iterepsilonr%   	verblevelNr   c                 0    g | ]}t          |          S r8   )getattr).0namemodels     r   
<listcomp>z"SLSQP.__call__.<locals>.<listcomp>   s#    CCCt$$CCCr   c                 8    g | ]}|j         	|j        |j        S r8   )r>   r?   r;   )rP   pars     r   rS   z"SLSQP.__call__.<locals>.<listcomp>   s(    LLLSYL#(L#*LLLr      )dtypeT)argsfull_outputdispr;   r<   ieqconsrB   rC   rD   rE   zLThe fit may be unsuccessful; check fit_info['message'] for more information.)popr   r   r   param_namesnpasarrayDEFAULT_BOUNDSfloatarrayr<   r=   r   rH   warningswarnr   )r   objfuncinitvalfargskwargsrZ   parsr;   ir<   r=   	fitparamsrB   rC   rD   messrR   s                   @r   r/   zSLSQP.__call__|   s      It}==vF"" $	F9 IF5Mzz+t,, aCCCC1BCCCLLLLLF## 	) 	)At|%a(!t|%a(!F%000%,''8EN++>Mdo
?
 
?
 
?
 
?
 
?
;	>7It +9&'#*i %.k"#'i >>M<"   $-''r   r)   r0   r1   r2   r3   r   r/   __classcell__r(   s   @r   r   r   b   s`        
 
 NMM	
 	
 	
 	
 	
?( ?( ?( ?( ?( ?( ?(r   r   c                   0     e Zd ZdZg dZ fdZd Z xZS )r   a=  
    Neald-Mead (downhill simplex) algorithm.

    This algorithm [1]_ only uses function values, not derivatives.
    Uses `scipy.optimize.fmin`.

    References
    ----------
    .. [1] Nelder, J.A. and Mead, R. (1965), "A simplex method for function
       minimization", The Computer Journal, 7, pp. 308-313
    )r;   r>   r?   c                 n    ddl m} t                                          |           d d d d d| _        d S )Nr   )fmin)rB   rC   rD   num_function_calls)rF   rr   rG   r   rH   )r   simplexr(   s     r   r   zSimplex.__init__   sK    222222!!!""&	
 
r   c                 0   d|vr
| j         |d<   d|v r"|d         | _        |                    d           d|v r"|d         | _        |                    d           |                    dd          } | j        ||f|| j        |dd|\  }}}}	}
|| j        d<   || j        d	<   |
| j        d
<   |	| j        d<   | j        d
         dk    rt          j        dt                     n+| j        d
         dk    rt          j        dt                     || j        fS )rJ   r   r%   xtolrM   NT)rX   rv   rZ   rY   rB   rC   rD   rs   rV   zLThe fit may be unsuccessful; Maximum number of function evaluations reached.   zBThe fit may be unsuccessful; Maximum number of iterations reached.)r   r   r\   r   rH   rc   rd   r   )r   re   rf   rg   rh   rZ   rk   rB   rC   funcallsrD   s              r   r/   zSimplex.__call__   sn     F"" $F9F??uDIJJuVvDIJJvzz+t,,BQ$/C
 C
 C
 C
 C
?	>7Hi +9&'#*i %.k".6*+=%**MB"   
 ];'1,,MT"   $-''r   rm   ro   s   @r   r   r      s_        
 
 877	
 	
 	
 	
 	
3( 3( 3( 3( 3( 3( 3(r   r   )r2   r6   rc   numpyr^   astropy.utils.exceptionsr   __all__r   sqrtfinfora   r   r   r   r`   ABCMetar   r   r   r8   r   r   <module>r      s4    


      7 7 7 7 7 7
.
.
.  bghbhuoo)** $BM BM BM BM BMS[ BM BM BM BMJY( Y( Y( Y( Y(L Y( Y( Y(xM( M( M( M( M(l M( M( M( M( M(r   