code: def unlink_parameter(self, param):
          
          if not param in self.parameters:
              try:
                  raise HierarchyError("{} does not belong to this object {}, remove parameters directly from their respective parents".format(param._short(), self.name))
              except AttributeError:
                  raise HierarchyError("{} does not seem to be a parameter, remove parameters directly from their respective parents".format(str(param)))
  
          start = sum([p.size for p in self.parameters[:param._parent_index_]])
          self.size -= param.size
          del self.parameters[param._parent_index_]
          self._remove_parameter_name(param)
  
  
          param._disconnect_parent()
          param.remove_observer(self, self._pass_through_notify_observers)
          for name, iop in self._index_operations.items():
              iop.shift_left(start, param.size)
  
          self._connect_parameters()
          self._notify_parent_change()
  
          parent = self._parent_
          while parent is not None:
              parent.size -= param.size
              parent = parent._parent_
  
          self._highest_parent_._connect_parameters()
          self._highest_parent_._connect_fixes()
          self._highest_parent_._notify_parent_change()
docs: :param param: param object to remove from being a parameter of this parameterized object.