
    7 d                     :    d dl Zd dlmZmZ  G d de          ZdS )    N)IterableTuplec                      e Zd ZdZe	 ddededed	eee         ee         f         fd
            Z	ed	eee         ee         f         fd            Z
ed	eee         ee         f         fd            Zed	eee         ee         f         fd            Zed	eee         ee         f         fd            Zed	eee         ee         f         fd            Zed	eee         ee         f         fd            ZdS )DataGeneratorz+Generate synthetic data to work with kneed.2   
   d   *   musigmaNreturnc                    t           j                            |           t           j                            | ||          }t          j        |          }t          j        t          |                    t          |          z  }||fS )aw  Recreate NoisyGaussian from the orignial kneedle paper.

        :param mu: The mean value to build a normal distribution around
        :param sigma: The standard deviation of the distribution.
        :param N: The number of samples to draw from to build the normal distribution.
        :param seed: An integer to set the random seed.
        :return: tuple(x, y)
        )locscalesize)nprandomseednormalsortarrayrangefloat)r   r   r   r   zxys          4lib/python3.11/site-packages/kneed/data_generator.pynoisy_gaussianzDataGenerator.noisy_gaussian	   sj     		tI5q99GAJJHU1XXq)!t    c                      t          j        d          5  t          j        ddd          } | t          j        d| dz             dz   fcd	d	d	           S # 1 swxY w Y   d	S )
zgRecreate the values in figure 2 from the original kneedle paper.

        :return: tuple(x, y)
        ignore)divideg           r   g?   N)r   errstatelinspacetrue_divide)r   s    r   figure2zDataGenerator.figure2   s     [))) 	6 	6CB''AbnRS11A55	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   3AAAc                  `    t          j        dd          } t          j        g d          }| |fS )zTGenerate a sample increasing convex function.

        :return: tuple(x, y)
        r   r   )
r$            r&   r         (   r	   r   aranger   )r   y_convex_incs     r   convex_increasingzDataGenerator.convex_increasing%   5     Iax D D DEE,r    c                  `    t          j        dd          } t          j        g d          }| |fS )zTGenerate a sample decreasing convex function.

        :return: tuple(x, y)
        r   r   )
r	   r1   r0   r/   r   r&   r.   r-   r,   r$   r2   )r   y_convex_decs     r   convex_decreasingzDataGenerator.convex_decreasing/   r6   r    c                  `    t          j        dd          } t          j        g d          }| |fS )zUGenerate a sample decreasing concave function.

        :return: tuple(x, y)
        r   r   )
c   b   a   `   _   Z   U   P   <   r   r2   )r   y_concave_decs     r   concave_decreasingz DataGenerator.concave_decreasing9   6     Ia!H!H!HII-r    c                  `    t          j        dd          } t          j        g d          }| |fS )zUGenerate a sample increasing concave function.

        :return: tuple(x, y)
        r   r   )
r   rC   rB   rA   r@   r?   r>   r=   r<   r;   r2   )r   y_concave_incs     r   concave_increasingz DataGenerator.concave_increasingC   rF   r    c                  J    t          t          d                    } g d}| |fS )z[Generate a sample function with local minima/maxima.

        :return: tuple(x, y)
        r@   )Zg     @g     C@g
@g33333?@g    @g̠@g̐@g     @gn@g33333@g̈@g     k@g3333@g     N@g33333@g~@g3333α@g@g;@g     @g@g+@g@g     m@g     8@g@gB@gج@g33333{@gD@g@g`@g@gfffff@gl@gfffff@g33333ʩ@g33333_@g@g     ب@gfffff@g     #@g33333˧@g     Z@g33333c@g@g33333w@gd@g33333$@g33333¥@gfffff@gfffff@g33333@@g33333Ȥ@gfffff@gfffff@g̑@g33333@g     @gfffff@g̢@g33333w@g     @g     E@gfffff@g     @g     @g33333@g33333I@g     >@g@g     @gfffff@gfffff@gw@g@g     Z@gfffff5@g@g33333@g     @gfffff@gfffff@g     l@gj@g$@g4@gfffff@g33333 @g@)listr   )x_bumpyy_bumpys     r   bumpyzDataGenerator.bumpyM   s7     uRyy//[
 [
 [
x r    N)r   r   r	   r
   )__name__
__module____qualname____doc__staticmethodr   intr   r   r   r*   r5   r9   rE   rI   rN    r    r   r   r      s       55>@ $.1	x/	0   \" 6U8E?HUO;< 6 6 6 \6 uXe_huo%EF    \ uXe_huo%EF    \  huox&F G       \   huox&F G       \  b 5%(5/9: b  b  b  \b  b  b r    r   )numpyr   typingr   r   objectr   rU   r    r   <module>rY      sg        " " " " " " " "j  j  j  j  j F j  j  j  j  j r    