<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _store_request_line(self, req_line):
 """ Splits the request line given into three components. Ensures that the version and method are valid for this server, and uses the urllib.parse function to parse the request URI. Note: This method has the additional side effect of updating all request line related attributes of the parser. Returns: tuple: Tuple containing the parsed (method, parsed_url, version) Raises: HTTPErrorBadRequest: If request line is invalid HTTPErrorNotImplemented: If HTTP method is not recognized HTTPErrorVersionNotSupported: If HTTP version is not recognized. """

        if not isinstance(req_line, str):
            try:
                req_line = self.raw_request_line = req_line.decode()
            except UnicodeDecodeError:
                raise HTTPErrorBadRequest

        try:
            self.method_str, self.original_url, self.version = req_line.split()
        except ValueError:
            raise HTTPErrorBadRequest()

        if self.version not in ('HTTP/1.1', 'HTTP/1.0'):
            raise HTTPErrorVersionNotSupported(self.version)

        # allow lowercase methodname?
        # self.method_str = self.method_str.upper()

        # save 'method' and get the correct function to finish processing
        try:
            self.method = HTTPMethod[self.method_str]
        except KeyError:
            # Method not found
            err = "Unknown HTTP Method '{}'".format(self.method_str)
            raise HTTPErrorNotImplemented(err)

        self._process_headers = {
            HTTPMethod.GET: self.process_get_headers,
            HTTPMethod.POST: self.process_post_headers
        }.get(self.method, lambda data: True)

        _, num_str = self.version.split('/', 1)
        self.HTTP_VERSION = tuple(num_str.split('.'))
        self.version_number = float(num_str)

        self.parsed_url = urlparse(self.original_url)
        self.path = unquote(self.parsed_url.path)
        self.query = parse_qs(self.parsed_url.query)

        return self.method, self.parsed_url, self.version