<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def construct_arguments(self, args, kwargs, options, bound=False):
 """ Construct args list and kwargs dictionary for this signature. They are created such that: - the original explicit call arguments (args, kwargs) are preserved - missing arguments are filled in by name using options (if possible) - default arguments are overridden by options - TypeError is thrown if: * kwargs contains one or more unexpected keyword arguments * conflicting values for a parameter in both args and kwargs * there is an unfilled parameter at the end of this process """

        expected_args = self._get_expected_args(bound)
        self._assert_no_unexpected_args(expected_args, args)
        self._assert_no_unexpected_kwargs(expected_args, kwargs)
        self._assert_no_duplicate_args(expected_args, args, kwargs)

        args, kwargs = self._fill_in_options(args, kwargs, options, bound)

        self._assert_no_missing_args(args, kwargs, bound)
        return args, kwargs