Repository: ManimCommunity/manim
File: manim/mobject/mobject.py (Python)

Code before:
        --------
        :meth:`move_to`

        """
        if config.renderer == "opengl":
            self.apply_points_function(
                lambda points: scale_factor * points,
                works_on_bounding_box=True,
                **kwargs,
            )
            return self
        else:
            self.apply_points_function_about_point(
                lambda points: scale_factor * points, **kwargs
            )
            return self

    def rotate_about_origin(self, angle, axis=OUT, axes=[]):
        """Rotates the :class:`~.Mobject` about the ORIGIN, which is at [0,0,0]."""
        return self.rotate(angle, axis, about_point=ORIGIN)

    def rotate(
        self,
        angle,
        about_point: Union[np.ndarray, List, None] = None,
        axis=OUT,
        **kwargs,
    ):
        """Rotates the :class:`~.Mobject` about a certain point."""
        if config.renderer == "opengl":
            rot_matrix_T = rotation_matrix_transpose(angle, axis)
            self.apply_points_function(
                lambda points: np.dot(points, rot_matrix_T), **kwargs
            )
            return self
        else:
            rot_matrix = rotation_matrix(angle, axis)
            self.apply_points_function_about_point(
                lambda points: np.dot(points, rot_matrix.T), about_point, **kwargs
            )
            return self

    def flip(self, axis=UP, **kwargs):
        """Flips/Mirrors an mobject about its center.

        Examples
        --------

        .. manim:: FlipExample
            :save_last_frame:


Review comment (suggestion):
```suggestion
        about_point: Union[np.ndarray, List, None] = None,
        axis=OUT,
```
```suggestion
        axis=OUT,
        about_point: Union[np.ndarray, List, None] = None
```

Code after:
        if config.renderer == "opengl":
            self.apply_points_function(
                lambda points: points + vectors[0],
                about_edge=None,
                works_on_bounding_box=True,
            )
            return self
        else:
            total_vector = reduce(op.add, vectors)
            for mob in self.family_members_with_points():
                mob.points = mob.points.astype("float")
                mob.points += total_vector
                if hasattr(mob, "data") and "points" in mob.data:
                    mob.data["points"] += total_vector
            return self

    def scale(self, scale_factor: float, **kwargs) -> "Mobject":
        """Scale the size by a factor.

        Default behavior is to scale about the center of the mobject.

        Parameters
        ----------
        scale_factor
            The scaling factor. Values 0 < |`scale_factor`| < 1 will shrink the mobject, 1 < |`scale_factor`| will increase it's size. A `scale_factor`<0 resuls in  additionally flipping by 180°.
        kwargs :
            Additional keyword arguments passed to :meth:`apply_points_function_about_point`.

        Returns
        -------
        :class:`Mobject`
            ``self``

        See also
        --------
        :meth:`move_to`

        """
        if config.renderer == "opengl":
            self.apply_points_function(
                lambda points: scale_factor * points,
                works_on_bounding_box=True,
                **kwargs,
            )
            return self
        else:
            self.apply_points_function_about_point(
                lambda points: scale_factor * points, **kwargs
            )
            return self