def remove(self, state_element, recursive=True, force=False, destroy=True):
        """Remove item from state

        :param StateElement state_element: State element to be removed
        :param bool recursive: Only applies to removal of state and decides whether the removal should be called
            recursively on all child states
        :param bool force: if the removal should be forced without checking constraints
        :param bool destroy: a flag that signals that the state element will be fully removed and disassembled
        """
        if isinstance(state_element, Income):
            self.remove_income(force, destroy=destroy)
        if isinstance(state_element, Outcome):
            return self.remove_outcome(state_element.outcome_id, force=force, destroy=destroy)
        elif isinstance(state_element, InputDataPort):
            return self.remove_input_data_port(state_element.data_port_id, force, destroy=destroy)
        elif isinstance(state_element, OutputDataPort):
            return self.remove_output_data_port(state_element.data_port_id, force, destroy=destroy)
        else:
            raise ValueError("Cannot remove state_element with invalid type")