docs: def input_data_ports(self, input_data_ports):
          """Property for the _input_data_ports field
  
          See Property.
  
          :param dict input_data_ports: Dictionary that maps :class:`int` data_port_ids onto values of type
                                        :class:`rafcon.core.state_elements.data_port.InputDataPort`
          :raises exceptions.TypeError: if the input_data_ports parameter has the wrong type
          :raises exceptions.AttributeError: if the key of the input dictionary and the id of the data port do not match
          """
          if not isinstance(input_data_ports, dict):
              raise TypeError("input_data_ports must be of type dict")
          if [port_id for port_id, port in input_data_ports.items() if not port_id == port.data_port_id]:
              raise AttributeError("The key of the input dictionary and the id of the data port do not match")
  
          # This is a fix for older state machines, which didn't distinguish between input and output ports
          for port_id, port in input_data_ports.items():
              if not isinstance(port, InputDataPort):
                  if isinstance(port, DataPort):
                      port = InputDataPort(port.name, port.data_type, port.default_value, port.data_port_id)
                      input_data_ports[port_id] = port
                  else:
                      raise TypeError("Elements of input_data_ports must be of type InputDataPort, given: {0}".format(
                          type(port).__name__))
  
          old_input_data_ports = self._input_data_ports
          self._input_data_ports = input_data_ports
          for port_id, port in input_data_ports.items():
              try:
                  port.parent = self
              except ValueError:
                  self._input_data_ports = old_input_data_ports
                  raise
  
          # check that all old_input_data_ports are no more referencing self as there parent
          for old_input_data_port in old_input_data_ports.values():
              if old_input_data_port not in self._input_data_ports.values() and old_input_data_port.parent is self:
                  old_input_data_port.parent = None