docs: def remove_input_data_port(self, data_port_id, force=False, destroy=True):
          """Remove an input data port from the state
  
          :param int data_port_id: the id or the output data port to remove
          :param bool force: if the removal should be forced without checking constraints
          :raises exceptions.AttributeError: if the specified input data port does not exist
          """
          if data_port_id in self._input_data_ports:
              if destroy:
                  self.remove_data_flows_with_data_port_id(data_port_id)
              self._input_data_ports[data_port_id].parent = None
              return self._input_data_ports.pop(data_port_id)
          else:
              raise AttributeError("input data port with name %s does not exit", data_port_id)