def __call__(self, **kwargs):
call_kwargs = self.validate_inputs(kwargs)<EOL>if self.name:<EOL><INDENT>logger.info('<STR_LIT>'.format(self.name))<EOL><DEDENT>start = time.time()<EOL>try:<EOL><INDENT>ret = self.execute(**call_kwargs)<EOL><DEDENT>except:<EOL><INDENT>if self.name:<EOL><INDENT>logger.exception('<STR_LIT>'.format(self.name))<EOL><DEDENT>raise<EOL><DEDENT>if self.name:<EOL><INDENT>logger.info('<STR_LIT>'.format(self.name, time.time() - start))<EOL><DEDENT>if isinstance(ret, ParameterCollection):<EOL><INDENT>outputs = ret<EOL><DEDENT>else:<EOL><INDENT>outputs = ParameterCollection(self.outputs)<EOL>if self.outputs:<EOL><INDENT>outputs[self.outputs[<NUM_LIT:0>].name] = ret<EOL><DEDENT><DEDENT>return outputs<EOL>
Performs parameter validation and calls `self.execute()` with cleaned parameters. Always returns a
`ParameterCollection` object representing the task output(s).