<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _add_model(self, model_list_or_dict, core_element, model_class, model_key=None, load_meta_data=True):
 """Adds one model for a given core element. The method will add a model for a given core object and checks if there is a corresponding model object in the future expected model list. The method does not check if an object with corresponding model has already been inserted. :param model_list_or_dict: could be a list or dictionary of one model type :param core_element: the core element to a model for, can be state or state element :param model_class: model-class of the elements that should be insert :param model_key: if model_list_or_dict is a dictionary the key is the id of the respective element (e.g. 'state_id') :param load_meta_data: specific argument for loading meta data :return: """


        found_model = self._get_future_expected_model(core_element)
        if found_model:
            found_model.parent = self

        if model_class is IncomeModel:
            self.income = found_model if found_model else IncomeModel(core_element, self)
            return

        if model_key is None:
            model_list_or_dict.append(found_model if found_model else model_class(core_element, self))
        else:
            model_list_or_dict[model_key] = found_model if found_model else model_class(core_element, self,
                                                                                        load_meta_data=load_meta_data)