
    lj25                       d Z ddlmZ g dZddlmZ ddlmZ ddlm	Z	m
Z
 ddlZddlmZ  G d	 d
e
          ZdQdZdQdZedRd            ZedSdTd            ZedRd            ZedRd            ZedRd            ZedSdTd            ZedSdTd            ZedRd            ZedRd            ZedSdTd            ZedUdVd            Ze	 dWdXd"            Zed#fdYd&ZedZd[d)            Z	 	 d\d]d.Z edRd/            Z!ed^d_d2            Z"edRd3            Z#edRd4            Z$edRd5            Z%edRd6            Z&edRd7            Z'edRd8            Z(edRd9            Z)edRd:            Z*edRd;            Z+edRd<            Z,edRd=            Z-edRd>            Z.edRd?            Z/edRd@            Z0edRdA            Z1edRdB            Z2edRdC            Z3edRdD            Z4edRdE            Z5edRdF            Z6edRdG            Z7edRdH            Z8edRdI            Z9edRdJ            Z:edRdK            Z;edRdL            Z<edRdM            Z=edRdN            Z>edRdO            Z?edRdP            Z@dS )`a  A selection of rate functions, i.e., *speed curves* for animations.
Please find a standard list at https://easings.net/. Here is a picture
for the non-standard ones

.. manim:: RateFuncExample
    :save_last_frame:

    class RateFuncExample(Scene):
        def construct(self):
            x = VGroup()
            for k, v in rate_functions.__dict__.items():
                if "function" in str(v):
                    if (
                        not k.startswith("__")
                        and not k.startswith("sqrt")
                        and not k.startswith("bezier")
                    ):
                        try:
                            rate_func = v
                            plot = (
                                ParametricFunction(
                                    lambda x: [x, rate_func(x), 0],
                                    t_range=[0, 1, .01],
                                    use_smoothing=False,
                                    color=YELLOW,
                                )
                                .stretch_to_fit_width(1.5)
                                .stretch_to_fit_height(1)
                            )
                            plot_bg = SurroundingRectangle(plot).set_color(WHITE)
                            plot_title = (
                                Text(rate_func.__name__, weight=BOLD)
                                .scale(0.5)
                                .next_to(plot_bg, UP, buff=0.1)
                            )
                            x.add(VGroup(plot_bg, plot, plot_title))
                        except: # because functions `not_quite_there`, `function squish_rate_func` are not working.
                            pass
            x.arrange_in_grid(cols=8)
            x.height = config.frame_height
            x.width = config.frame_width
            x.move_to(ORIGIN).scale(0.95)
            self.add(x)


There are primarily 3 kinds of standard easing functions:

#. Ease In - The animation has a smooth start.
#. Ease Out - The animation has a smooth end.
#. Ease In Out - The animation has a smooth start as well as smooth end.

.. note:: The standard functions are not exported, so to use them you do something like this:
    rate_func=rate_functions.ease_in_sine
    On the other hand, the non-standard functions, which are used more commonly, are exported and can be used directly.

.. manim:: RateFunctions1Example

    class RateFunctions1Example(Scene):
        def construct(self):
            line1 = Line(3*LEFT, 3*RIGHT).shift(UP).set_color(RED)
            line2 = Line(3*LEFT, 3*RIGHT).set_color(GREEN)
            line3 = Line(3*LEFT, 3*RIGHT).shift(DOWN).set_color(BLUE)

            dot1 = Dot().move_to(line1.get_left())
            dot2 = Dot().move_to(line2.get_left())
            dot3 = Dot().move_to(line3.get_left())

            label1 = Tex("Ease In").next_to(line1, RIGHT)
            label2 = Tex("Ease out").next_to(line2, RIGHT)
            label3 = Tex("Ease In Out").next_to(line3, RIGHT)

            self.play(
                FadeIn(VGroup(line1, line2, line3)),
                FadeIn(VGroup(dot1, dot2, dot3)),
                Write(VGroup(label1, label2, label3)),
            )
            self.play(
                MoveAlongPath(dot1, line1, rate_func=rate_functions.ease_in_sine),
                MoveAlongPath(dot2, line2, rate_func=rate_functions.ease_out_sine),
                MoveAlongPath(dot3, line3, rate_func=rate_functions.ease_in_out_sine),
                run_time=7
            )
            self.wait()
    )annotations)linearsmooth
smoothstepsmootherstepsmoothererstep	rush_into	rush_from	slow_intodouble_smooththere_and_backthere_and_back_with_pauserunning_startnot_quite_therewigglesquish_rate_func	lingeringexponential_decaywraps)sqrt)AnyProtocolN)sigmoidc                      e Zd Zd	dZdS )
RateFunctiontfloatargsr   kwargsreturnc                    d S N )selfr   r   r    s       U/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/utils/rate_functions.py__call__zRateFunction.__call__w   s          Nr   r   r   r   r    r   r!   r   )__name__
__module____qualname__r'   r$   r(   r&   r   r   v   s        IIIIIIr(   r   functionr!   c                >     t                     d fd            }|S )	Nr   r   r   r   r    r!   c                P    d| cxk    rdk    rn n | g|R i |S | dk     rdS dS Nr      r$   r   r   r    r-   s      r&   wrapperzunit_interval.<locals>.wrapper}   sO    ;;;;Q;;;;;8A///////UU11r(   r)   r   r-   r3   s   ` r&   unit_intervalr5   |   s8    
8__     _ Nr(   c                >     t                     d fd            }|S )	Nr   r   r   r   r    r!   c                @    d| cxk    rdk    rn n | g|R i |S dS r0   r$   r2   s      r&   r3   zzero.<locals>.wrapper   sA    ;;;;Q;;;;;8A///////1r(   r)   r   r4   s   ` r&   zeror8      s8    
8__     _ Nr(   r   r   c                    | S r#   r$   r   s    r&   r   r      s    Hr(         $@
inflectionc           	         t          | dz            }t          t          t          || dz
  z            |z
  dd|z  z
  z  d          d          S )N         ?r1   r   )r   minmax)r   r<   errors      r&   r   r      sZ    ZK!O$$EWZ1s7+,,u4QYGKK	  r(   c                $    d| dz  z  d| dz  z  z
  S )zImplementation of the 1st order SmoothStep sigmoid function.
    The 1st derivative (speed) is zero at the endpoints.
    https://en.wikipedia.org/wiki/Smoothstep
       r>   r$   r:   s    r&   r   r      s     q!t8a!Q$hr(   c                6    d| dz  z  d| dz  z  z
  d| dz  z  z   S )zImplementation of the 2nd order SmoothStep sigmoid function.
    The 1st and 2nd derivatives (speed and acceleration) are zero at the endpoints.
    https://en.wikipedia.org/wiki/Smoothstep
                
   rD   r$   r:   s    r&   r   r      s,     q!t8b1a4i"q!t)++r(   c                H    d| dz  z  d| dz  z  z
  d| dz  z  z   d| dz  z  z
  S )	zImplementation of the 3rd order SmoothStep sigmoid function.
    The 1st, 2nd and 3rd derivatives (speed, acceleration and jerk) are zero at the endpoints.
    https://en.wikipedia.org/wiki/Smoothstep
    #   rI   T   rG   F   rF         r$   r:   s    r&   r   r      s9     19rAqDy 219,rAqDy88r(   c                .    dt          | dz  |          z  S )Nr>          @r   r   r<   s     r&   r	   r	      s    va#gz****r(   c                :    dt          | dz  dz   |          z  dz
  S )Nr>   rR   r?   r1   rS   rT   s     r&   r
   r
      s$    va#gmZ000144r(   c                F    t          j        dd| z
  d| z
  z  z
            }|S Nr1   )npr   r   vals     r&   r   r      s(    a!eA..//CJr(   c                n    | dk     rdt          d| z            z  S ddt          d| z  dz
            z   z  S Nr?   r>   r1   rS   r:   s    r&   r   r      s@    3wwVAE]]""a&Q+++,,r(   c                H    | dk     rd| z  ndd| z
  z  }t          ||          S r\   rS   )r   r<   new_ts      r&   r   r      s/    WWAEE!q1u+E%$$$r(   UUUUUU?pause_ratioc                    dd|z
  z  }| d|dz  z
  k     rt          || z            S | d|dz  z   k     rdS t          ||| z  z
            S )NrR         ?r?   r>   r1   rS   )r   r`   as      r&   r   r      sd    s[ !A3q   a!e}}	
S;?"	"	"qa!a%i   r(         pull_factorc                    | | z  }|| z  }|| z  }|| z  }|| z  }d| z
  }||z  }||z  }	|	|z  }
d|z  |
z  |z  d|z  |	z  |z  z   d|z  |z  z   d|z  |z  z   |z   S )Nr1   rH   rO   rF   r$   )r   re   t2t3t4t5t6mtmt2mt3mt4s              r&   r   r      s    
 
QB	aB	aB	aB	aB	
QB
r'C
(C
(C
 	R##
r'C-+
%	&
r'C-	 b&2+	 		r(   gffffff?func
proportionc                     d fd}|S )	Nr   r   r   r   r    r!   c                "     | g|R i |z  S r#   r$   )r   r   r    rp   rq   s      r&   resultznot_quite_there.<locals>.result  s(    DD4T444V4444r(   r)   r$   )rp   rq   rt   s   `` r&   r   r     s.    5 5 5 5 5 5 5 Mr(   r>   wigglesc                n    t          j        |t           j        z  | z            }t          |           |z  S r#   )rX   sinpir   )r   ru   rZ   s      r&   r   r     s/    "%!+,,C!s""r(   皙?333333?rc   bc                     d fd}|S )	Nr   r   r   r   r    r!   c                f    k    rS | k     rd}n| k    rd}n| z
  z
  z  } |g|R i |S )Ng        rb   r$   )r   r   r    r^   rc   r{   rp   s       r&   rt   z squish_rate_func.<locals>.result  sc    66Hq55EEUUEEUq1u%EtE+D+++F+++r(   r)   r$   )rp   rc   r{   rt   s   ``` r&   r   r     s4    

, 
, 
, 
, 
, 
, 
, 
, Mr(   c                >    dd} t          |dd          |           S )Nr   r   r!   c                    | S r#   r$   r:   s    r&   identityzlingering.<locals>.identity.  s    r(   r   g?r   r   r!   r   )r   )r   r   s     r&   r   r   ,  s5        .Ha--a000r(   皙?	half_lifec                <    dt          j        |  |z            z
  }|S rW   )rX   exp)r   r   rZ   s      r&   r   r   5  s#     RVQBN+++CJr(   c                T    dt          j        | t           j        z  dz            z
  }|S Nr1   r>   rX   cosrx   rY   s     r&   ease_in_siner   =  s%    RVQY!O,,,CJr(   c                N    t          j        | t           j        z  dz            }|S )Nr>   )rX   rw   rx   rY   s     r&   ease_out_siner   C  s     RUa((CJr(   c                V    t          j        t           j        | z            dz
   dz  }|S r   r   rY   s     r&   ease_in_out_siner   I  s)    6"%!)$$q()A-CJr(   c                    | | z  S r#   r$   r:   s    r&   ease_in_quadr   O  s    q5Lr(   c                    dd| z
  d| z
  z  z
  S rW   r$   r:   s    r&   ease_out_quadr   T  s    A!a%   r(   c                V    | dk     rd| z  | z  ndt          d| z  dz   d          dz  z
  S )Nr?   r>   r1   powr:   s    r&   ease_in_out_quadr   Y  s8    C1q5199QR!VaZ););a)?%??r(   c                    | | z  | z  S r#   r$   r:   s    r&   ease_in_cubicr   ^  s    q519r(   c                .    dt          d| z
  d          z
  S )Nr1   rD   r   r:   s    r&   ease_out_cubicr   c      s1q5!}}r(   c                \    | dk     rd| z  | z  | z  ndt          d| z  dz   d          dz  z
  S )Nr?   rI   r1   r   r>   rD   r   r:   s    r&   ease_in_out_cubicr   h  s<    GG1q519q==Sa!Q-?-?!-C)CCr(   c                    | | z  | z  | z  S r#   r$   r:   s    r&   ease_in_quartr   m  s    q519q=r(   c                .    dt          d| z
  d          z
  S )Nr1   rI   r   r:   s    r&   ease_out_quartr   r  r   r(   c                b    | dk     rd| z  | z  | z  | z  ndt          d| z  dz   d          dz  z
  S )Nr?      r1   r   r>   rI   r   r:   s    r&   ease_in_out_quartr   w  sB     !C1q519q=1QR!VaZ1C1Ca1G-GGr(   c                    | | z  | z  | z  | z  S r#   r$   r:   s    r&   ease_in_quintr   |  s    q519q=1r(   c                .    dt          d| z
  d          z
  S )Nr1   rG   r   r:   s    r&   ease_out_quintr     r   r(   c                h    | dk     rd| z  | z  | z  | z  | z  ndt          d| z  dz   d          dz  z
  S )Nr?      r1   r   r>   rG   r   r:   s    r&   ease_in_out_quintr     sG    %&WW26A:>A!!!c"q&1*a6H6H16L2LLr(   c                >    | dk    rdnt          dd| z  dz
            S )Nr   r>   rJ   r   r:   s    r&   ease_in_expor     s&    Q11C26B;///r(   c                >    | dk    rdndt          dd| z            z
  S )Nr1   r>   r   r:   s    r&   ease_out_expor     s%    Q11AAsQw//r(   c                    | dk    rdS | dk    rdS | dk     rt          dd| z  dz
            dz  S dt          dd| z  dz             z
  dz  S )Nr   r1   r?   r>   rO   rJ   r   r:   s    r&   ease_in_out_expor     sf    Avvq	
aq	
S1b1frk""Q&&C37R<(((A--r(   c                H    dt          dt          | d          z
            z
  S r   r   r   r:   s    r&   ease_in_circr     s!    tAAq		M""""r(   c                H    t          dt          | dz
  d          z
            S r   r   r:   s    r&   ease_out_circr     s!    CAqMM!"""r(   c                    | dk     r)dt          dt          d| z  d          z
            z
  dz  n+t          dt          d| z  dz   d          z
            dz   dz  S )Nr?   r1   r>   r   r   r:   s    r&   ease_in_out_circr     si     s77 
T!c!a%mm#$$	$))1s26A:q)))**Q.!3r(   c                8    d}|dz   }|| z  | z  | z  || z  | z  z
  S )Naq89?r1   r$   r   c1c3s      r&   ease_in_backr     s/    	B	aB6A:>BFQJ&&r(   c                p    d}|dz   }d|t          | dz
  d          z  z   |t          | dz
  d          z  z   S )Nr   r1   rD   r>   r   r   s      r&   ease_out_backr     sB    	B	aBrCAqMM!!BQUA$666r(   c                    d}|dz  }| dk     r%t          d| z  d          |dz   dz  | z  |z
  z  dz  n-t          d| z  dz
  d          |dz   | dz  dz
  z  |z   z  dz   dz  S )Nr   gffffff?r?   r>   r1   r   )r   r   c2s      r&   ease_in_out_backr     s    	B	eB s77 
QUA26Q,*R/	0A55!a%!)QBFq1uqy#9B#>?!CqHr(   c                    dt           j        z  dz  }| dk    rdS | dk    rdS t          dd| z  dz
             t          j        | dz  dz
  |z            z  }|S )Nr>   rD   r   r1   rJ   g     %@rX   rx   r   rw   r   c4rZ   s      r&   ease_in_elasticr     sh    
be)qBAvvq	
aq!R!Vb[)))BFAFUNb3H,I,II
r(   c                    dt           j        z  dz  }| dk    rdS | dk    rdS t          dd| z            t          j        | dz  dz
  |z            z  dz   }|S )Nr>   rD   r   r1   r   rJ         ?r   r   s      r&   ease_out_elasticr     sd    
be)qBAvvq	
aqC!G__rvq2v}.B'C'CCaG
r(   c                >   dt           j        z  dz  }| dk    rdS | dk    rdS | dk     r:t          dd| z  dz
            t          j        d| z  dz
  |z            z   dz  }|S t          dd	| z  dz             t          j        d| z  dz
  |z            z  dz  dz   }|S )
Nr>   g      @r   r1   r?   rO   rJ   g     @&@r   r   )r   c5rZ   s      r&   ease_in_out_elasticr     s    
be)s	BAvvq	
aq	
S1b1frk**RVR!Vf_4J-K-KKLqP
1cAgl##bfb1fvo-C&D&DDIAM
r(   c                ,    dt          d| z
            z
  S rW   ease_out_bouncer:   s    r&   ease_in_bouncer     s    q1u%%%%r(   c                    d}d}| d|z  k     r|| z  | z  S | d|z  k     r|| d|z  z
  z  | d|z  z
  z  dz   S | d|z  k     r|| d|z  z
  z  | d|z  z
  z  d	z   S || d
|z  z
  z  | d
|z  z
  z  dz   S )Ng     @@g      @r1   r>   g      ?r   g      @g      @g      ?g      @g     ?r$   )r   n1d1s      r&   r   r     s    	B	B1r6zzAvz	
QVQr\"a#(l3d::	
S2XQ]#q4"9}5>>Q^$EBJ7(BBr(   c                z    | dk     rdt          dd| z  z
            z
  dz  S dt          d| z  dz
            z   dz  S )Nr?   r1   r>   r   r:   s    r&   ease_in_out_bouncer     sK    3wwOAAI...!33OAEAI...!33r(   )r-   r   r!   r   r   )r;   )r   r   r<   r   r!   r   )r_   )r   r   r`   r   r!   r   )rd   )r   r   re   r   r!   r   )rp   r   rq   r   r!   r   )r>   )r   r   ru   r   r!   r   )ry   rz   )rp   r   rc   r   r{   r   r!   r   )r   )r   r   r   r   r!   r   )A__doc__
__future__r   __all__	functoolsr   mathr   typingr   r   numpyrX   manim.utils.simple_functionsr   r   r5   r8   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r(   r&   <module>r      s  S Sj # " " " " "  (                                 0 0 0 0 0 0J J J J J8 J J J
 
 
 
                 , , , , 9 9 9 9 + + + + + 5 5 5 5 5    
 - - - - % % % % %
 ! ! ! ! !      4       # # # # #     4 1 1 1 1         
    
    
     ! ! ! ! @ @ @ @         D D D D         H H H H         M M M M 0 0 0 0 0 0 0 0 . . . . # # # # # # # #     ' ' ' ' 7 7 7 7                 & & & & C C C C 4 4 4 4 4 4r(   