<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def authenticate(self, is_global=True):
 """Authenticates against the API server. :param is_global: If True, authenticate globally. Local login if False. :raise AuthenticationException: Raises if there was an issue with authenticating or logging in. :raise MyGeotabException: Raises when an exception occurs on the MyGeotab server. :raise TimeoutException: Raises when the request does not respond after some time. :return: A Credentials object with a session ID created by the server. :rtype: Credentials """

        auth_data = dict(database=self.credentials.database, userName=self.credentials.username,
                         password=self.credentials.password)
        auth_data['global'] = is_global
        try:
            result = _query(self._server, 'Authenticate', auth_data, self.timeout,
                            verify_ssl=self._is_verify_ssl)
            if result:
                new_server = result['path']
                server = self.credentials.server
                if new_server != 'ThisServer':
                    server = new_server
                credentials = result['credentials']
                self.credentials = Credentials(credentials['userName'], credentials['sessionId'],
                                               credentials['database'], server)
                return self.credentials
        except MyGeotabException as exception:
            if exception.name == 'InvalidUserException':
                raise AuthenticationException(self.credentials.username,
                                              self.credentials.database,
                                              self.credentials.server)
            raise