Easing Functions
Module: terminaltexteffects.utils.easing
Easing functions take a progress ratio from 0 to 1. Back and elastic functions
can return values below 0 or above 1. Custom curves from make_easing can also
overshoot when their vertical control points are outside [0, 1]. The horizontal
control points, x1 and x2, must be finite values in [0, 1].
EasingTracker preserves overshoot by default; pass clamp=True to limit its
stepped values to [0, 1]. SequenceEaser always clamps its internal tracker
before selecting elements.
from terminaltexteffects.utils import easing
assert easing.in_back(0.5) < 0
assert easing.out_elastic(0.5) > 1
tracker = easing.EasingTracker(lambda _: 1.25, total_steps=1, clamp=True)
assert tracker.step() == 1.0
Functions and Classes for easing calculations.
Easing functions take progress ratios from 0 to 1. Back and elastic functions can return values outside that range, as can custom cubic Bezier curves.
Classes:
| Name | Description |
|---|---|
EasingTracker |
Tracks the progression of an easing function over a set number of steps. |
SequenceEaser |
Eases over the leading portion of a sequence, tracking added, removed, and total elements. |
Functions:
| Name | Description |
|---|---|
linear |
Linear easing function. |
in_sine |
Ease in using a sine function. |
out_sine |
Ease out using a sine function. |
in_out_sine |
Ease in/out using a sine function. |
in_quad |
Ease in using a quadratic function. |
out_quad |
Ease out using a quadratic function. |
in_out_quad |
Ease in/out using a quadratic function. |
in_cubic |
Ease in using a cubic function. |
out_cubic |
Ease out using a cubic function. |
in_out_cubic |
Ease in/out using a cubic function. |
in_quart |
Ease in using a quartic function. |
out_quart |
Ease out using a quartic function. |
in_out_quart |
Ease in/out using a quartic function. |
in_quint |
Ease in using a quintic function. |
out_quint |
Ease out using a quintic function. |
in_out_quint |
Ease in/out using a quintic function. |
in_expo |
Ease in using an exponential function. |
out_expo |
Ease out using an exponential function. |
in_out_expo |
Ease in/out using an exponential function. |
in_circ |
Ease in using a circular function. |
out_circ |
Ease out using a circular function. |
in_out_circ |
Ease in/out using a circular function. |
in_back |
Ease in using a back function. |
out_back |
Ease out using a back function. |
in_out_back |
Ease in/out using a back function. |
in_elastic |
Ease in using an elastic function. |
out_elastic |
Ease out using an elastic function. |
in_out_elastic |
Ease in/out using an elastic function. |
in_bounce |
Ease in using a bounce function. |
out_bounce |
Ease out using a bounce function. |
in_out_bounce |
Ease in/out using a bounce function. |
make_easing |
Create a cubic Bezier easing function using the provided control points. |
EasingFunction = typing.Callable[[float], float]
module-attribute
Easing functions take a progress ratio from 0 to 1 and may overshoot that range.
EasingTracker
dataclass
Describe the progression of items as an easing function is applied over a sequence.
Eased values preserve overshoot by default. Set clamp=True to limit each
stepped value to [0, 1]; this also affects step_delta.
Attributes:
| Name | Type | Description |
|---|---|---|
easing_function |
EasingFunction
|
The easing function being tracked. |
total_steps |
int
|
Positive number of steps for the easing function. |
clamp |
bool
|
Whether eased values should be clamped to the range |
current_step |
int
|
The current step in the easing progression. |
progress_ratio |
float
|
The ratio of the current step to the total steps. |
step_delta |
float
|
The change in eased value from the last step to the current step. |
eased_value |
float
|
The current eased value based on the easing function and progress ratio. |
Methods:
| Name | Description |
|---|---|
step |
Advance the easing tracker by one step and return the new eased value. |
is_complete |
Check if the easing tracker has completed all steps. |
Source code in terminaltexteffects/utils/easing.py
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 | |
__iter__()
Iterate over eased values until completion.
Yields:
| Name | Type | Description |
|---|---|---|
float |
float
|
The eased value at each step. |
__post_init__()
Validate the step count and initialize progression state.
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Source code in terminaltexteffects/utils/easing.py
is_complete()
Check if the easing tracker has completed all steps.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
True if all steps have been completed, False otherwise. |
reset()
Reset the easing tracker to the initial state.
step()
Advance the easing tracker by one step.
If the current step is less than the total steps, increment the current step, update the progress ratio, compute the new eased value using the easing function, and calculate the step delta.
If clamp is enabled, the eased value is constrained between 0 and 1.
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
The new eased value after advancing one step. |
Source code in terminaltexteffects/utils/easing.py
SequenceEaser
dataclass
Bases: Generic[_T]
Eases over the leading portion of a sequence, tracking added, removed, and total elements.
At each step, total is the contiguous slice sequence[:length] determined by
the current eased progress. added and removed describe the change from the
previous step. The internal EasingTracker uses clamp=True, so overshooting
functions cannot select elements outside the sequence.
Attributes:
| Name | Type | Description |
|---|---|---|
sequence |
Sequence[_T]
|
The sequence to ease over. |
easing_function |
EasingFunction
|
The easing function to use. |
total_steps |
int
|
Positive number of steps for the easing function. |
added |
Sequence[_T]
|
Contiguous slice of newly included elements from the current step. |
removed |
Sequence[_T]
|
Contiguous slice of elements removed from the previous step. |
total |
Sequence[_T]
|
Current leading slice of |
Source code in terminaltexteffects/utils/easing.py
696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 | |
__post_init__()
is_complete()
Check if the easing over the sequence is complete.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
True if all steps have been completed, False otherwise. |
reset()
Reset the SequenceEaser to the initial state.
step()
Advance the easing tracker by one step and update sequence state.
total is updated to the current eased leading slice of sequence. If that
slice grows, added contains the newly included elements. If it shrinks,
removed contains the elements that were dropped. If its length is unchanged,
both are empty.
Returns:
| Type | Description |
|---|---|
Sequence[_T]
|
typing.Sequence[_T]: The elements added in the current step. |
Source code in terminaltexteffects/utils/easing.py
in_back(progress_ratio)
Ease in using a back function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value that may fall below 0. |
Source code in terminaltexteffects/utils/easing.py
in_bounce(progress_ratio)
Ease in using a bounce function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_circ(progress_ratio)
Ease in using a circular function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_cubic(progress_ratio)
Ease in using a cubic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_elastic(progress_ratio)
Ease in using an elastic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value that may fall below 0. |
Source code in terminaltexteffects/utils/easing.py
in_expo(progress_ratio)
Ease in using an exponential function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_back(progress_ratio)
Ease in/out using a back function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value that may fall below 0 or exceed 1. |
Source code in terminaltexteffects/utils/easing.py
in_out_bounce(progress_ratio)
Ease in/out using a bounce function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_circ(progress_ratio)
Ease in/out using a circular function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_cubic(progress_ratio)
Ease in/out using a cubic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_elastic(progress_ratio)
Ease in/out using an elastic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value that may fall below 0 or exceed 1. |
Source code in terminaltexteffects/utils/easing.py
in_out_expo(progress_ratio)
Ease in/out using an exponential function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_quad(progress_ratio)
Ease in/out using a quadratic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_quart(progress_ratio)
Ease in/out using a quartic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_quint(progress_ratio)
Ease in/out using a quintic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_out_sine(progress_ratio)
Ease in/out using a sine function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_quad(progress_ratio)
Ease in using a quadratic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_quart(progress_ratio)
Ease in using a quartic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_quint(progress_ratio)
Ease in using a quintic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
in_sine(progress_ratio)
Ease in using a sine function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
linear(progress_ratio)
Linear easing function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
make_easing(x1, y1, x2, y2)
Create a cubic Bezier easing function using the provided control points.
The easing function maps a progress ratio from 0 to 1 to an output value
according to a cubic Bezier curve defined by four points. Horizontal control
points must be finite and lie in [0, 1]; vertical control points may lie
outside that range and produce overshoot:
- Start point: (0, 0)
- First control point: (x1, y1)
- Second control point: (x2, y2)
- End point: (1, 1)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x1
|
float
|
Finite horizontal position of the first control point, from 0 to 1 inclusive. Smaller values make the curve start off steeper, while larger values delay the initial acceleration. |
required |
y1
|
float
|
Vertical position of the first control point; values outside |
required |
x2
|
float
|
Finite horizontal position of the second control point, from 0 to 1 inclusive. Larger values extend the period of change, affecting how late the acceleration or deceleration begins. |
required |
y2
|
float
|
Vertical position of the second control point; values outside |
required |
Note: Use a resource such as cubic-bezier.com to design an appropriate easing curve for your needs.
Returns:
| Name | Type | Description |
|---|---|---|
EasingFunction |
EasingFunction
|
A function that takes |
EasingFunction
|
curve's eased value, which may be outside |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Source code in terminaltexteffects/utils/easing.py
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 | |
out_back(progress_ratio)
Ease out using a back function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value that may exceed 1. |
Source code in terminaltexteffects/utils/easing.py
out_bounce(progress_ratio)
Ease out using a bounce function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
out_circ(progress_ratio)
Ease out using a circular function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
out_cubic(progress_ratio)
Ease out using a cubic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
out_elastic(progress_ratio)
Ease out using an elastic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value that may exceed 1. |
Source code in terminaltexteffects/utils/easing.py
out_expo(progress_ratio)
Ease out using an exponential function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
out_quad(progress_ratio)
Ease out using a quadratic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
out_quart(progress_ratio)
Ease out using a quartic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
out_quint(progress_ratio)
Ease out using a quintic function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |
Source code in terminaltexteffects/utils/easing.py
out_sine(progress_ratio)
Ease out using a sine function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
progress_ratio
|
float
|
Progress ratio from 0 to 1. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Eased value for the given progress ratio. |