docs: def relocate_instance(part, target_parent, name=None, include_children=True):
      """
      Move the `Part` instance to target parent.
  
      .. versionadded:: 2.3
  
      :param part: `Part` object to be moved
      :type part: :class:`Part`
      :param target_parent: `Part` object under which the desired `Part` is moved
      :type target_parent: :class:`Part`
      :param name: how the moved top-level `Part` should be called
      :type name: basestring
      :param include_children: True to move also the descendants of `Part`. If False, the children will be lost.
      :type include_children: bool
      :return: moved :class: `Part` instance
      """
      # First, if the user doesn't provide the name, then just use the default "Clone - ..." name
      if not name:
          name = "CLONE - {}".format(part.name)
      # Initially the model of the part needs to be recreated under the model of the target_parent. Retrieve them.
      part_model = part.model()
      target_parent_model = target_parent.model()
  
      # Call the move_part() function for those models.
      relocate_model(part=part_model, target_parent=target_parent_model, name=part_model.name,
                     include_children=include_children)
  
      # Populate the descendants of the Part (category=Instance), in order to avoid to retrieve children for every
      # level and save time. Only need it the children should be included.
      if include_children:
          part.populate_descendants()
  
      # This function will move the part instance under the target_parent instance, and its children if required.
      moved_instance = move_part_instance(part_instance=part, target_parent=target_parent, part_model=part_model,
                                          name=name, include_children=include_children)
      return moved_instance