code: def login(self, username, password, limit=10, sync=True, device_id=None):
          
          response = self.api.login(
              "m.login.password", user=username, password=password, device_id=device_id
          )
          self.user_id = response["user_id"]
          self.token = response["access_token"]
          self.hs = response["home_server"]
          self.api.token = self.token
          self.device_id = response["device_id"]
  
          if self._encryption:
              self.olm_device = OlmDevice(
                  self.api, self.user_id, self.device_id, **self.encryption_conf)
              self.olm_device.upload_identity_keys()
              self.olm_device.upload_one_time_keys()
  
          if sync:
              """ Limit Filter """
              self.sync_filter = '{ "room": { "timeline" : { "limit" : %i } } }' % limit
              self._sync()
          return self.token
docs: Login to the homeserver.
  
          Args:
              username (str): Account username
              password (str): Account password
              limit (int): Deprecated. How many messages to return when syncing.
                  This will be replaced by a filter API in a later release.
              sync (bool): Optional. Whether to initiate a /sync request after logging in.
              device_id (str): Optional. ID of the client device. The server will
                  auto-generate a device_id if this is not specified.
  
          Returns:
              str: Access token
  
          Raises:
              MatrixRequestError