def METHOD_NAME(self, username, password):
    login_page = self._download_webpage(
        f'{self._AUTH_BASE_URL}/auth', None, 'Downloading login page',
        query={
            'client_id': 'tennis-tv-web',
            'redirect_uri': 'https://tennistv.com',
            'response_mode': 'fragment',
            'response_type': 'code',
            'scope': 'openid'
        })
    post_url = self._html_search_regex(r'action=["\']([^"\']+?)["\']\s+method=["\']post["\']', login_page, 'login POST url')
    temp_page = self._download_webpage(
        post_url, None, 'Sending login data', 'Unable to send login data',
        headers=self._HEADERS, data=urlencode_postdata({
            'username': username,
            'password': password,
            'submitAction': 'Log In'
        }))
    if 'Your username or password was incorrect' in temp_page:
        raise ExtractorError('Your username or password was incorrect', expected=True)
    handle = self._request_webpage(
        f'{self._AUTH_BASE_URL}/auth', None, 'Logging in', headers=self._HEADERS,
        query={
            'client_id': 'tennis-tv-web',
            'redirect_uri': 'https://www.tennistv.com/resources/v1.1.10/html/silent-check-sso.html',
            'state': random_uuidv4(),
            'response_mode': 'fragment',
            'response_type': 'code',
            'scope': 'openid',
            'nonce': random_uuidv4(),
            'prompt': 'none'
        })
    self.get_token(None, {
        'code': urllib.parse.parse_qs(handle.url)['code'][-1],
        'grant_type': 'authorization_code',
        'client_id': 'tennis-tv-web',
        'redirect_uri': 'https://www.tennistv.com/resources/v1.1.10/html/silent-check-sso.html'
    })