Repository: ManimCommunity/manim
File: manim/animation/transform.py (Python)

Code before:
from ..utils.paths import path_along_arc, path_along_circles
from ..utils.rate_functions import smooth, squish_rate_func

if TYPE_CHECKING:
    from ..scene.scene import Scene


class Transform(Animation):
    """A Transform transforms a Mobject into a target Mobject.

    Parameters
    ----------
    mobject
        The Mobject to be transformed. The Mobject will be mutated into the target.
    target_mobject
        The Mobject that will be transformed into. Will become invisible and replaced by mobject.
    path_func
        A function defining the path that the mobject will take to target_mobject,
        see `manim.utils.paths`.
    path_arc
        The arc (in radians) that the mobject will take to reach target if using a circular path
        arc, see `path_arc_centers`.
    path_arc_axis
        The axis to rotate along if using a circular path arc, see `path_arc_centers`.
    path_arc_centers
        The center of the circle used in the Transform's radial path.

        If this is set and path_func is not set, then a path_along_circles path will be generated
        using the path_arc parameters and stored in path_func. If path_func is set, this and the
        other path_arc fields are set as attributes, but a path_func is not generated.
    replace_mobject_with_target_in_scene
        Defines which object is replaced when the Transform is complete.

        If set to True, the mobject will be removed from the scene and the target_mobject will
        replace it. Otherwise, the target_mobject will be removed and the mobject will replace it.
    """

    def __init__(
        self,
        mobject: Mobject | None,
        target_mobject: Mobject | None = None,
        path_func: Callable | None = None,
        path_arc: float = 0,
        path_arc_axis: np.ndarray = OUT,
        path_arc_centers: np.ndarray = None,
        replace_mobject_with_target_in_scene: bool = False,
        **kwargs,
    ) -> None:
        self.path_arc_axis: np.ndarray = path_arc_axis
        self.path_arc_centers: np.ndarray = path_arc_centers
        self.path_arc: float = path_arc

Review comment (suggestion):
This parameter is still confusing to me; at the very least it is named terribly. Oh well.

```suggestion
        The center of the circular arcs along which the points of ``mobject`` are
        moved by the transformation.
```

Code after:
from ..utils.paths import path_along_arc, path_along_circles
from ..utils.rate_functions import smooth, squish_rate_func

if TYPE_CHECKING:
    from ..scene.scene import Scene


class Transform(Animation):
    """A Transform transforms a Mobject into a target Mobject.

    Parameters
    ----------
    mobject
        The :class:`.Mobject` to be transformed. It will be mutated to become the ``target_mobject``.
    target_mobject
        The target of the transformation.
    path_func
        A function defining the path that the points of the ``mobject`` are being moved
        along until they match the points of the ``target_mobject``, see :mod:`.utils.paths`.
    path_arc
        The arc angle (in radians) that the points of ``mobject`` will follow to reach
        the points of the target if using a circular path arc, see ``path_arc_centers``.
    path_arc_axis
        The axis to rotate along if using a circular path arc, see ``path_arc_centers``.
    path_arc_centers
        The center of the circular arcs along which the points of ``mobject`` are
        moved by the transformation.

        If this is set and ``path_func`` is not set, then a ``path_along_circles`` path will be generated
        using the ``path_arc`` parameters and stored in ``path_func``. If ``path_func`` is set, this and the
        other ``path_arc`` fields are set as attributes, but a ``path_func`` is not generated from it.
    replace_mobject_with_target_in_scene
        Controls which mobject is replaced when the transformation is complete.

        If set to True, ``mobject`` will be removed from the scene and ``target_mobject`` will
        replace it. Otherwise, ``target_mobject`` is never added and ``mobject`` just takes its shape.
    """

    def __init__(
        self,
        mobject: Mobject | None,
        target_mobject: Mobject | None = None,
        path_func: Callable | None = None,
        path_arc: float = 0,
        path_arc_axis: np.ndarray = OUT,
        path_arc_centers: np.ndarray = None,
        replace_mobject_with_target_in_scene: bool = False,
        **kwargs,
    ) -> None:
        self.path_arc_axis: np.ndarray = path_arc_axis
        self.path_arc_centers: np.ndarray = path_arc_centers