def move_objs(
        self,
        obj_pos_pairs,
        update_pos_on_screen=False,
        change_caption=True,
        undo_redo_admin=True,
    ):
        """Move objs.

        obj_pos_pairs (iterable)
            Contains pairs referencing an obj and the new
            position value to be assigned respectively.
        update_pos_on_screen (boolean)
            Whether to update the position of the objs
            on the screen or not (if the objs are already
            in their final positions, then just use False).
        change_caption
            Boolean indicating whether the change made must
            be indicated in the window caption.
        undo_redo_admin
            Boolean indicating whether undo/redo
            administration tasks must be performed
        """
        ### assign new positions
        APP_REFS.gm.update_pos_values(obj_pos_pairs)

        ### if requested, update position of objs on
        ### the screen too

        if update_pos_on_screen:

            for obj, pos in obj_pos_pairs:
                obj.set_pos(pos)

        ### if requested, indicate in the window caption
        ### that a change has been made
        ###
        ### and that the birdseye view state of the window manager must
        ### have its objects updated next time it is set

        if change_caption:

            indicate_unsaved()
            APP_REFS.ea.must_update_birdseye_view_objects = True

        ### if requested, perform undo/redo administration
        ### tasks

        if undo_redo_admin:

            ## gather data

            anim_name = APP_REFS.gm.anim_name
            frame_no = APP_REFS.gm.get_current_frame()

            ## record change

            self.change_stack.append(
                {
                    "operation": "movement",
                    "from": self.relative_pos_map.items(),
                    "to": obj_pos_pairs,
                }
            )

            ## clear redo_stack
            self.redo_stack.clear()
Move objs.

        obj_pos_pairs (iterable)
            Contains pairs referencing an obj and the new
            position value to be assigned respectively.
        update_pos_on_screen (boolean)
            Whether to update the position of the objs
            on the screen or not (if the objs are already
            in their final positions, then just use False).
        change_caption
            Boolean indicating whether the change made must
            be indicated in the window caption.
        undo_redo_admin
            Boolean indicating whether undo/redo
            administration tasks must be performed
        
nodezator/editing/reposition.py