<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def populate(self, fields=None, **fields_kwargs):
 """take the passed in fields, combine them with missing fields that should be there and then run all those through appropriate methods to hydrate this orm. The method replaces cls.hydrate() since it was becoming hard to understand what was going on with all these methods that did things just a little bit different. This is used to completely set all the fields of self. If you just want to set certain fields, you can use the submethod _populate :param fields: dict, the fields in a dict :param **fields_kwargs: dict, if you would like to pass the fields as key=val this picks those up and combines them with fields """


        # this will run all the fields of the Orm, not just the fields in fields
        # dict, another name would be hydrate
        pop_fields = {}
        fields = self.make_dict(fields, fields_kwargs)
        for k in self.schema.fields.keys():
            pop_fields[k] = fields.get(k, None)

        self._populate(pop_fields)