a
    5ghÛ  ã                   @   s8   d Z dd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )zp
Common test functions for optimizers.

Also see: https://en.wikipedia.org/wiki/Test_functions_for_optimization
c                 C   s    d|  d d|| d  d   S )zk
    Rosenbrock function. Minimum: f(1, 1) = 0.

    https://en.wikipedia.org/wiki/Rosenbrock_function
    é   é   éd   © ©ÚxÚyr   r   ú_/mounts/lovelace/software/anaconda3/envs/metaDMG/lib/python3.9/site-packages/iminuit/testing.pyÚ
rosenbrock   s    r	   c                 C   s6   d|  | d  |  d|   d d| d  d|  fS )z Gradient of Rosenbrock function.ipþÿÿr   i8ÿÿÿéÈ   r   r   r   r   r   Úrosenbrock_grad   s    r   c           	      C   sz   ddl m}m}m}m}m} d|d|d| d |d   ƒ ƒ }|d|d| |  ƒ|d| | ƒ  ƒ }|| d | S )zc
    Ackley function. Minimum: f(0, 0) = 0.

    https://en.wikipedia.org/wiki/Ackley_function
    é    )ÚsqrtÚexpÚcosÚpiÚeiìÿÿÿgš™™™™™É¿g      à?r   é   )Úmathr   r   r   r   r   )	r   r   r   r   r   r   r   Úterm1Úterm2r   r   r   Úackley   s    $*r   c                 C   sP   d|  | |  }d|  | |d   }d|  | |d   }|| ||  ||  S )zt
    Beale function. Minimum: f(3, 0.5) = 0.

    https://en.wikipedia.org/wiki/Test_functions_for_optimization
    g      ø?g      @r   g      @é   r   )r   r   r   r   Zterm3r   r   r   Úbeale#   s    r   c                 C   s    d| d |d   d|  |  S )zs
    Matyas function. Minimum: f(0, 0) = 0.

    https://en.wikipedia.org/wiki/Test_functions_for_optimization
    g¤p=
×£Ð?r   g¸…ëQ¸Þ?r   r   r   r   r   Úmatyas/   s    r   c                 C   s   ddl }| | d ¡S )z™
    Sphere function for variable number of arguments. Minimum: f(0, ..., 0) = 0.

    https://en.wikipedia.org/wiki/Test_functions_for_optimization
    r   Nr   )ÚnumpyÚsum)r   Únpr   r   r   Ú	sphere_np8   s    r   N)Ú__doc__r	   r   r   r   r   r   r   r   r   r   Ú<module>   s   		