<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 jsk_python(self, ctx: commands.Context, *, argument: CodeblockConverter):
 """ Direct evaluation of Python code. """


        arg_dict = get_var_dict_from_ctx(ctx, SCOPE_PREFIX)
        arg_dict["_"] = self.last_result

        scope = self.scope

        try:
            async with ReplResponseReactor(ctx.message):
                with self.submit(ctx):
                    async for result in AsyncCodeExecutor(argument.content, scope, arg_dict=arg_dict):
                        if result is None:
                            continue

                        self.last_result = result

                        if isinstance(result, discord.File):
                            await ctx.send(file=result)
                        elif isinstance(result, discord.Embed):
                            await ctx.send(embed=result)
                        elif isinstance(result, PaginatorInterface):
                            await result.send_to(ctx)
                        else:
                            if not isinstance(result, str):
                                # repr all non-strings
                                result = repr(result)

                            if len(result) > 2000:
                                # inconsistency here, results get wrapped in codeblocks when they are too large
                                #  but don't if they're not. probably not that bad, but noting for later review
                                paginator = WrappedPaginator(prefix='```py', suffix='```', max_size=1985)

                                paginator.add_line(result)

                                interface = PaginatorInterface(ctx.bot, paginator, owner=ctx.author)
                                await interface.send_to(ctx)
                            else:
                                if result.strip() == '':
                                    result = "\u200b"

                                await ctx.send(result.replace(self.bot.http.token, "[token omitted]"))
        finally:
            scope.clear_intersection(arg_dict)