<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def stop_poll(self, chat_id: typing.Union[base.String, base.Integer], message_id: base.Integer, reply_markup: typing.Union[types.InlineKeyboardMarkup, None] = None) -> types.Poll: """ Use this method to stop a poll which was sent by the bot. On success, the stopped Poll with the final results is returned. :param chat_id: Unique identifier for the target chat or username of the target channel :type chat_id: :obj:`typing.Union[base.String, base.Integer]` :param message_id: Identifier of the original message with the poll :type message_id: :obj:`base.Integer` :param reply_markup: A JSON-serialized object for a new message inline keyboard. :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]` :return: On success, the stopped Poll with the final results is returned. :rtype: :obj:`types.Poll` """

        payload = generate_payload(**locals())

        result = await self.request(api.Methods.STOP_POLL, payload)
        return types.Poll(**result)