docs: def playlist_song_move(
  		self,
  		playlist_song,
  		*,
  		after=None,
  		before=None,
  		index=None,
  		position=None
  	):
  		"""Move a song in a playlist.
  
  		Note:
  			* Provide no optional arguments to move to end.
  			* Provide playlist song dicts for ``after`` and/or ``before``.
  			* Provide a zero-based ``index``.
  			* Provide a one-based ``position``.
  
  			Songs are inserted *at* given index or position.
  			It's also possible to move to the end by using
  			``len(songs)`` for index or ``len(songs) + 1`` for position.
  
  		Parameters:
  			playlist_song (dict): A playlist song dict.
  			after (dict, Optional): A playlist song dict ``songs`` will follow.
  			before (dict, Optional): A playlist song dict ``songs`` will precede.
  			index (int, Optional): The zero-based index position to insert ``song``.
  			position (int, Optional): The one-based position to insert ``song``.
  
  		Returns:
  			dict: Playlist dict including songs.
  		"""
  
  		playlist_songs = self.playlist(
  			playlist_song['playlistId'],
  			include_songs=True
  		)['tracks']
  
  		prev, next_ = get_ple_prev_next(
  			playlist_songs,
  			after=after,
  			before=before,
  			index=index,
  			position=position
  		)
  
  		mutation = mc_calls.PlaylistEntriesBatch.update(
  			playlist_song,
  			preceding_entry_id=prev.get('id'),
  			following_entry_id=next_.get('id')
  		)
  		self._call(mc_calls.PlaylistEntriesBatch, mutation)
  
  		return self.playlist(playlist_song['playlistId'], include_songs=True)