code: def unnest(c, elem, ignore_whitespace=False):
          
          parent = elem.getparent()
          gparent = parent.getparent()
          index = parent.index(elem)
          # put everything up to elem into a new parent element right before the current parent
          preparent = etree.Element(parent.tag)
          preparent.text, parent.text = (parent.text or ''), ''
          for k in parent.attrib.keys():
              preparent.set(k, parent.get(k))
          if index > 0:
              for ch in parent.getchildren()[:index]:
                  preparent.append(ch)
          gparent.insert(gparent.index(parent), preparent)
          XML.remove_if_empty(preparent, leave_tail=True, ignore_whitespace=ignore_whitespace)
          # put the element right before the current parent
          XML.remove(elem, leave_tail=True)
          gparent.insert(gparent.index(parent), elem)
          elem.tail = ''
          # if the original parent is empty, remove it
          XML.remove_if_empty(parent, leave_tail=True, ignore_whitespace=ignore_whitespace)
docs: unnest the element from its parent within doc. MUTABLE CHANGES