* Package: dev-python/rich-13.3.4:0 * Repository: gentoo * Maintainer: python@gentoo.org * USE: abi_x86_64 amd64 elibc_glibc kernel_linux python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 test userland_GNU * FEATURES: network-sandbox preserve-libs sandbox test userpriv usersandbox @@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ This information may help you to understand if this is a duplicate or if this bug exists after you pushed a fix; This ebuild was merged at the following commit: https://github.com/gentoo/gentoo/commit/14cc919fef6b989a216d9408d48b0ed7ba4d2503 (Thu Apr 13 06:04:35 UTC 2023) @@@@@ END @@@@@ @@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ This ebuild was merged (directly or as a dependency) because of the following commit: https://github.com/gentoo/gentoo/commit/233addade4782b56a75c3786f279c60f74e2f6ab @@@@@ END @@@@@ ################## # emerge --info: # ################## Portage 3.0.46 (python 3.11.3-final-0, default/linux/amd64/17.1, gcc-12, glibc-2.37-r1, 5.15.85-gentoo-dist x86_64) ================================================================= System uname: Linux-5.15.85-gentoo-dist-x86_64-AMD_EPYC_7513_32-Core_Processor-with-glibc2.37 KiB Mem: 263532996 total, 158133876 free KiB Swap: 0 total, 0 free sh bash 5.2_p15-r2 ld GNU ld (Gentoo 2.40 p4) 2.40.0 app-misc/pax-utils: 1.3.7::gentoo app-shells/bash: 5.2_p15-r2::gentoo dev-lang/perl: 5.36.0-r2::gentoo dev-lang/python: 3.9.16_p3::gentoo, 3.10.11::gentoo, 3.11.3::gentoo dev-util/cmake: 3.26.3::gentoo dev-util/meson: 1.0.1::gentoo sys-apps/baselayout: 2.13-r1::gentoo sys-apps/openrc: 0.46::gentoo sys-apps/sandbox: 2.30-r1::gentoo sys-devel/autoconf: 2.71-r6::gentoo sys-devel/automake: 1.16.5-r1::gentoo sys-devel/binutils: 2.40-r4::gentoo sys-devel/binutils-config: 5.5::gentoo sys-devel/gcc: 12.2.1_p20230304::gentoo sys-devel/gcc-config: 2.10::gentoo sys-devel/libtool: 2.4.7-r1::gentoo sys-devel/make: 4.4.1::gentoo sys-kernel/linux-headers: 6.2::gentoo (virtual/os-headers) sys-libs/glibc: 2.37-r1::gentoo Repositories: gentoo location: /usr/portage sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 volatile: True sync-rsync-verify-metamanifest: yes sync-rsync-verify-max-age: 24 sync-rsync-verify-jobs: 1 sync-rsync-extra-opts: ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="* MIT" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" DISTDIR="/var/tmp/portage/dev-python/rich-13.3.4/distdir" EMERGE_DEFAULT_OPTS="--with-bdeps=y -1 -k -b" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GDK_PIXBUF_MODULE_FILE GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_STATE_HOME" FCFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms sign split-log strict test unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" GENTOO_MIRRORS="http://mirror.leaseweb.com/gentoo/ http://ftp.snt.utwente.nl/pub/os/linux/gentoo/ http://ftp.belnet.be/pub/rsync.gentoo.org/gentoo/ http://distfiles.gentoo.org" LANG="en_US.utf8" LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--defsym=__gentoo_check_ldflags__=0" LEX="flex" MAKEOPTS="-j25" PKGDIR="/root/tbci/binpkg" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/var/tmp" SHELL="/bin/bash" USE="acl amd64 bzip2 cli crypt debug dri elogind fortran gdbm iconv ipv6 jumbo-build libglvnd libtirpc multilib native-symlinks ncurses nls nptl openmp pam pcre readline seccomp split-usr ssl test test-rust unicode xattr zlib" ABI_X86="64" ELIBC="glibc" KERNEL="linux" PYTHON_TARGETS="pypy3 python3_9 python3_10 python3_11" USERLAND="GNU" Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS ############################## # emerge history (qlop -mv): # ############################## 2023-04-13T08:09:14 >>> dev-python/tomlkit-0.11.7 2023-04-13T08:09:15 >>> dev-python/pathspec-0.11.1 2023-04-13T08:09:17 >>> dev-python/mdurl-0.1.2 2023-04-13T08:09:18 >>> dev-python/pluggy-1.0.0-r2 2023-04-13T08:09:20 >>> dev-python/pygments-2.15.0 2023-04-13T08:09:22 >>> dev-python/colorama-0.4.6 2023-04-13T08:09:25 >>> dev-python/lark-1.1.5 2023-04-13T08:09:27 >>> dev-python/pyrsistent-0.19.3 2023-04-13T08:09:29 >>> dev-python/fqdn-1.5.1-r2 2023-04-13T08:09:31 >>> dev-python/jsonpointer-2.3 2023-04-13T08:09:32 >>> dev-python/uri_template-1.2.0-r1 2023-04-13T08:09:34 >>> dev-python/webcolors-1.13 2023-04-13T08:09:36 >>> dev-python/editables-0.3 2023-04-13T08:09:38 >>> dev-python/trove-classifiers-2023.3.9 2023-04-13T08:09:40 >>> dev-python/regex-2023.3.23 2023-04-13T08:09:41 >>> dev-python/hatchling-1.14.0 2023-04-13T08:09:43 >>> dev-python/rfc3987-1.3.8-r2 2023-04-13T08:09:45 >>> dev-python/hatch-fancy-pypi-readme-22.8.0 2023-04-13T08:09:47 >>> dev-python/rfc3986-validator-0.1.1-r1 2023-04-13T08:09:49 >>> dev-python/strict-rfc3339-0.7-r2 2023-04-13T08:09:51 >>> dev-python/python-dateutil-2.8.2-r1 2023-04-13T08:09:53 >>> dev-python/rfc3339-validator-0.1.4-r1 2023-04-13T08:09:54 >>> dev-python/arrow-1.2.3 2023-04-13T08:09:56 >>> dev-python/zope-interface-6.0 2023-04-13T08:09:58 >>> dev-python/isoduration-20.11.0-r1 2023-04-13T08:10:00 >>> dev-python/attrs-22.2.0 2023-04-13T08:10:03 >>> dev-python/iniconfig-2.0.0 2023-04-13T08:10:05 >>> dev-python/jsonschema-4.17.3 2023-04-13T08:10:07 >>> dev-python/exceptiongroup-1.1.1 2023-04-13T08:10:09 >>> dev-python/poetry-core-1.5.2 2023-04-13T08:10:11 >>> dev-python/pytest-7.3.0 2023-04-13T08:10:13 >>> dev-python/uc-micro-py-1.0.1 2023-04-13T08:10:16 >>> dev-python/calver-2022.06.26 2023-04-13T08:10:18 >>> dev-python/linkify-it-py-2.0.0 2023-04-13T08:10:19 >>> dev-python/hatch-vcs-0.3.0 2023-04-13T08:10:21 >>> dev-python/markdown-it-py-2.2.0 2023-04-13T08:10:23 >>> dev-python/flit_scm-1.7.0 ####################################### # installed packages (qlist -ICvUSS): # ####################################### acct-group/audio-0-r1:0 acct-group/cdrom-0-r1:0 acct-group/dialout-0-r1:0 acct-group/disk-0-r1:0 acct-group/floppy-0:0 acct-group/input-0-r1:0 acct-group/kmem-0-r1:0 acct-group/kvm-0-r1:0 acct-group/lp-0-r1:0 acct-group/man-0-r1:0 acct-group/messagebus-0-r1:0 acct-group/polkitd-0-r1:0 acct-group/portage-0:0 acct-group/render-0-r1:0 acct-group/root-0:0 acct-group/sgx-0:0 acct-group/sshd-0-r1:0 acct-group/tape-0-r1:0 acct-group/tty-0-r1:0 acct-group/usb-0-r1:0 acct-group/video-0-r1:0 acct-user/man-1-r1:0 acct-user/messagebus-0-r1:0 acct-user/polkitd-0-r1:0 acct-user/portage-0:0 acct-user/sshd-0-r1:0 app-admin/eselect-1.4.22:0 -doc -emacs -vim-syntax app-admin/perl-cleaner-2.30-r1:0 -pkgcore app-alternatives/awk-4:0 -busybox gawk -mawk -nawk split-usr app-alternatives/bc-0:0 -gh gnu app-alternatives/bzip2-1:0 -lbzip2 -pbzip2 reference split-usr app-alternatives/gzip-0:0 -pigz reference split-usr app-alternatives/lex-0-r1:0 flex -reflex app-alternatives/sh-0:0 bash -busybox -dash -ksh -lksh -mksh app-alternatives/tar-0:0 gnu -libarchive split-usr app-alternatives/yacc-1-r2:0 bison -byacc -reference app-arch/bzip2-1.0.8-r4:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static -static-libs -verify-sig app-arch/gzip-1.12-r4:0 -pic -static -verify-sig app-arch/libarchive-3.6.2-r1:0/13 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -blake2 bzip2 e2fsprogs -expat iconv -lz4 lzma -lzo -nettle -static-libs -verify-sig xattr -zstd app-arch/tar-1.34-r3:0 acl -minimal nls -selinux -verify-sig xattr app-arch/unzip-6.0_p27-r1:0 bzip2 -natspec unicode app-arch/xz-utils-5.4.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc extra-filters nls split-usr -static-libs -verify-sig app-arch/zstd-1.5.5:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -lz4 lzma split-usr -static-libs -test zlib app-crypt/gnupg-2.4.0:0 bzip2 -doc -ldap nls readline -selinux smartcard ssl -test tofu -tools -tpm -usb -user-socket -verify-sig -wks-server app-crypt/gpgme-1.19.0:1/11.6.15.2 -common-lisp cxx -python python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -qt5 -static-libs -test -verify-sig app-crypt/libb2-0.98.1-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -native-cflags openmp -static-libs app-crypt/pinentry-1.2.1-r1:0 -caps -efl -emacs -gnome-keyring -gtk ncurses -qt5 -verify-sig app-crypt/rhash-1.4.3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug nls ssl -static-libs app-editors/nano-7.2:0 -debug -justify -magic -minimal ncurses nls spell -static unicode app-eselect/eselect-fontconfig-20220403:0 app-eselect/eselect-iptables-20220320:0 app-eselect/eselect-lib-bin-symlink-0.1.1-r1:0 app-eselect/eselect-pinentry-0.7.2-r1:0 app-i18n/man-pages-ja-20180315-r1:0 app-i18n/man-pages-l10n-4.17.0:0 l10n_cs l10n_da l10n_de l10n_el l10n_es l10n_fi l10n_fr l10n_hu l10n_id l10n_it l10n_mk l10n_nb l10n_nl l10n_pl l10n_pt-BR l10n_ro l10n_ru l10n_sr l10n_sv l10n_uk l10n_vi app-i18n/man-pages-zh_CN-1.6.3.6:0 app-misc/ca-certificates-20230311.3.89:0 -cacert app-misc/editor-wrapper-4-r1:0 app-misc/mime-types-2.1.53:0 -nginx app-misc/pax-utils-1.3.7:0 -caps -man -python python_single_target_python3_10 -python_single_target_python3_11 -python_single_target_python3_9 -seccomp -test app-misc/tmux-3.3a-r1:0 debug -selinux -systemd -utempter -vim-syntax app-portage/eix-0.36.6:0 debug -doc nls -sqlite app-portage/elt-patches-20221210:0 app-portage/gemato-20.1:0 gpg -pretty-log python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test -tools app-portage/gentoolkit-0.6.1-r3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test app-portage/portage-utils-0.95:0 openmp qmanifest qtegrity -static app-shells/bash-5.2_p15-r2:0 -afs -bashlogger -examples -mem-scramble net nls -pgo -plugins readline -verify-sig app-shells/bash-completion-2.11:0 eselect -test app-shells/gentoo-bashcomp-20230313:0 app-shells/push-3.4:0 app-shells/quoter-4.2:0 app-text/ansifilter-2.18:0 -qt5 app-text/build-docbook-catalog-2.3-r1:0 app-text/docbook-xml-dtd-4.5-r2:4.5 app-text/docbook-xml-dtd-4.4-r3:4.4 app-text/docbook-xml-dtd-4.2-r3:4.2 app-text/docbook-xml-dtd-4.1.2-r7:4.1.2 app-text/docbook-xsl-ns-stylesheets-1.79.1:0 -ruby app-text/docbook-xsl-stylesheets-1.79.1-r4:0 -ruby app-text/manpager-1:0 app-text/opensp-1.5.2-r10:0 -doc nls -static-libs -test app-text/po4a-0.69:0 -test -test app-text/sgml-common-0.6.3-r7:0 app-text/xmlto-0.0.28-r10:0 -latex text dev-db/sqlite-3.41.2-r1:3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -doc -icu readline -secure-delete -static-libs -tcl -test -tools dev-lang/duktape-2.7.0-r3:0/2.7.0 dev-lang/execline-2.9.2.1:0/2.9 dev-lang/perl-5.36.0-r2:0/5.36 -berkdb debug -doc gdbm ithreads -minimal -quadmath dev-lang/python-3.11.3:3.11 -bluetooth -build ensurepip -examples gdbm -hardened -libedit -lto ncurses -pgo readline sqlite ssl -test -tk -valgrind -verify-sig dev-lang/python-3.10.11:3.10 -bluetooth -build ensurepip -examples gdbm -hardened -libedit -lto ncurses -pgo readline sqlite ssl -test -tk -valgrind -verify-sig xml dev-lang/python-3.9.16_p3:3.9 -bluetooth -build ensurepip -examples gdbm -hardened -lto ncurses -pgo readline sqlite ssl -test -tk -valgrind -verify-sig xml dev-lang/python-exec-2.4.10:2 native-symlinks python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-lang/python-exec-conf-2.4.6:2 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 dev-lang/tcl-8.6.13-r1:0/8.6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug threads dev-libs/boehm-gc-8.2.2-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cxx large -static-libs threads dev-libs/elfutils-0.189-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -lzma nls -static-libs -test utils -valgrind -verify-sig -zstd dev-libs/expat-2.5.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples -static-libs unicode dev-libs/glib-2.76.1:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -dbus debug elf -gtk-doc mime -selinux -static-libs -sysprof -systemtap -test -utils xattr dev-libs/gmp-6.2.1-r5:0/10.4 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm cpudetection cxx -doc -pic -static-libs dev-libs/gobject-introspection-1.76.1:0 -doctool -gtk-doc python_single_target_python3_10 -python_single_target_python3_11 -python_single_target_python3_9 -test dev-libs/gobject-introspection-common-1.76.1:0 dev-libs/isl-0.26:0/23 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/jsoncpp-1.9.5:0/25 -doc -test dev-libs/libassuan-2.5.5:0 dev-libs/libatomic_ops-7.8.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 dev-libs/libevent-2.1.12-r1:0/2.1-7 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 clock-gettime debug -malloc-replacement ssl -static-libs -test -verbose-debug dev-libs/libffi-3.4.4-r1:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -exec-static-trampoline -pax-kernel -static-libs -test dev-libs/libgcrypt-1.10.2:0/20 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_aes -cpu_flags_arm_neon -cpu_flags_arm_sha1 -cpu_flags_arm_sha2 -cpu_flags_ppc_altivec -cpu_flags_ppc_vsx2 -cpu_flags_ppc_vsx3 cpu_flags_x86_aes cpu_flags_x86_avx cpu_flags_x86_avx2 -cpu_flags_x86_padlock -cpu_flags_x86_sha cpu_flags_x86_sse4_1 -doc getentropy -static-libs -verify-sig dev-libs/libgpg-error-1.47:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -common-lisp nls -static-libs -test -verify-sig dev-libs/libksba-1.6.3:0 -static-libs -verify-sig dev-libs/libltdl-2.4.7-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/libpcre2-10.42-r1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 jit -libedit pcre16 pcre32 readline split-usr -static-libs unicode -verify-sig zlib dev-libs/libpipeline-1.5.7:0 -test dev-libs/libtasn1-4.19.0:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -test -valgrind -verify-sig dev-libs/libunistring-1.1-r1:0/5 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs dev-libs/libuv-1.44.2-r1:0/1 dev-libs/libxml2-2.10.4:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -examples ftp -icu -lzma python python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 readline -static-libs -test dev-libs/libxslt-1.1.37-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 crypt debug -examples -python python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -static-libs dev-libs/lzo-2.10:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples split-usr -static-libs dev-libs/mpc-1.3.1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/mpfr-4.2.0:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -verify-sig dev-libs/nettle-3.8.1:0/8-6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_aes -cpu_flags_arm_neon -cpu_flags_arm_sha1 -cpu_flags_arm_sha2 -cpu_flags_ppc_altivec cpu_flags_x86_aes cpu_flags_x86_pclmul -cpu_flags_x86_sha -doc gmp -static-libs -verify-sig dev-libs/npth-1.6-r1:0 -test dev-libs/openssl-3.0.8-r3:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm cpu_flags_x86_sse2 -fips -ktls -rfc3779 -sctp -static-libs -test -tls-compression -vanilla -verify-sig -verify-sig -weak-ssl-ciphers dev-libs/popt-1.19:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static-libs dev-libs/skalibs-2.13.1.0:0/2.13 dev-perl/Clone-0.460.0:0 -test dev-perl/Devel-CheckLib-1.160.0:0 -test dev-perl/Encode-EUCJPASCII-0.30.0-r1:0 -test dev-perl/Encode-HanExtra-0.230.0-r3:0 dev-perl/Encode-Locale-1.50.0-r1:0 -test dev-perl/ExtUtils-CChecker-0.110.0:0 -test dev-perl/File-BaseDir-0.90.0:0 -test dev-perl/File-DesktopEntry-0.220.0-r1:0 -test dev-perl/File-Listing-6.150.0:0 -test -test dev-perl/File-MimeInfo-0.300.0:0 -test dev-perl/HTML-Parser-3.760.0:0 -test dev-perl/HTML-Tagset-3.200.0-r2:0 dev-perl/HTTP-Cookies-6.100.0:0 -test dev-perl/HTTP-Date-6.50.0:0 dev-perl/HTTP-Message-6.440.0:0 -test -test dev-perl/HTTP-Negotiate-6.10.0-r2:0 -test dev-perl/IO-HTML-1.4.0:0 -test dev-perl/IO-Socket-INET6-2.720.0-r2:0 -test dev-perl/IO-Socket-SSL-2.81.0:0 -examples -idn -test dev-perl/IPC-System-Simple-1.300.0:0 -test dev-perl/libwww-perl-6.600.0-r1:0 ssl -test dev-perl/Locale-gettext-1.70.0-r1:0 -test dev-perl/LWP-MediaTypes-6.40.0:0 -test dev-perl/LWP-Protocol-https-6.100.0:0 -test dev-perl/MIME-Charset-1.13.1:0 l10n_ja l10n_zh -test dev-perl/Module-Build-0.423.100:0 -test dev-perl/Mozilla-CA-20999999-r1:0 -test dev-perl/Net-HTTP-6.220.0:0 -minimal -test -test dev-perl/Net-SSLeay-1.920.0:0 -examples -examples -minimal -test dev-perl/Pod-Parser-1.630.0-r1:0 -test dev-perl/SGMLSpm-1.1-r2:0 -test dev-perl/Socket6-0.290.0:0 -test dev-perl/Sub-Name-0.260.0:0 -suggested -test dev-perl/Syntax-Keyword-Try-0.270.0:0 -test dev-perl/TermReadKey-2.380.0-r1:0 -examples -test dev-perl/Text-CharWidth-0.40.0-r2:0 -test dev-perl/Text-WrapI18N-0.60.0-r2:0 -test dev-perl/TimeDate-2.330.0-r1:0 -test dev-perl/Try-Tiny-0.310.0:0 -minimal -test dev-perl/Unicode-LineBreak-2019.1.0:0 dev-perl/URI-5.110.0:0 -test dev-perl/WWW-RobotRules-6.20.0-r2:0 -test dev-perl/XML-Parser-2.460.0-r2:0 dev-perl/XS-Parse-Keyword-0.250.0:0 -test dev-perl/YAML-Tiny-1.730.0-r1:0 -minimal -test dev-python/arrow-1.2.3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/attrs-22.2.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/autocommand-2.2.2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/calver-2022.06.26:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/certifi-3021.3.16-r3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/charset_normalizer-3.1.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/colorama-0.4.6:0 -examples python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/cython-0.29.34:0 -doc -emacs python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/editables-0.3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/ensurepip-pip-23.0.1:0 dev-python/ensurepip-setuptools-67.6.1:0 dev-python/ensurepip-wheels-100:0 dev-python/exceptiongroup-1.1.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/flit_core-3.8.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/flit_scm-1.7.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 dev-python/fqdn-1.5.1-r2:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/gentoo-common-1:0 dev-python/gpep517-13:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/hatch-fancy-pypi-readme-22.8.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/hatch-vcs-0.3.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/hatchling-1.14.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/idna-3.4:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/importlib_metadata-6.3.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/inflect-6.0.4:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/iniconfig-2.0.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/installer-0.7.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/isoduration-20.11.0-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/jaraco-context-4.3.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/jaraco-functools-3.6.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/jaraco-text-3.11.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/jinja-3.1.2:0 -doc -examples python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/jsonpointer-2.3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 dev-python/jsonschema-4.17.3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/lark-1.1.5:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/linkify-it-py-2.0.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/markdown-it-py-2.2.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/markupsafe-2.1.2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/mdurl-0.1.2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/more-itertools-9.1.0:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/nspektr-0.4.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/ordered-set-4.1.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/packaging-23.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/pathspec-0.11.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/platformdirs-3.2.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/pluggy-1.0.0-r2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/poetry-core-1.5.2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/pydantic-1.10.7:0 native-extensions python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/pygments-2.15.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/pyparsing-3.0.9:0 -examples python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/pypy3-7.3.11_p1:0/pypy39-pp73-336 ensurepip gdbm jit ncurses sqlite -tk dev-python/pypy3-exe-bin-7.3.11:3.9-7.3.11 dev-python/pyrsistent-0.19.3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/PySocks-1.7.1-r2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 dev-python/pytest-7.3.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/python-dateutil-2.8.2-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/regex-2023.3.23:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/requests-2.28.2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -socks5 -test test-rust dev-python/rfc3339-validator-0.1.4-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/rfc3986-validator-0.1.1-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/rfc3987-1.3.8-r2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 dev-python/setuptools-67.6.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/setuptools-scm-7.1.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/six-1.16.0-r1:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/strict-rfc3339-0.7-r2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/tomli-2.0.1-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/tomlkit-0.11.7:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/trove-classifiers-2023.3.9:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/typing-extensions-4.5.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/uc-micro-py-1.0.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/uri_template-1.2.0-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 dev-python/urllib3-1.26.15:0 -brotli python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/webcolors-1.13:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/wheel-0.40.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/zipp-3.15.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-python/zope-interface-6.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-util/checkbashisms-2.22.2:0 dev-util/cmake-3.26.3:0 -doc -emacs ncurses -qt5 -test -test -verify-sig dev-util/desktop-file-utils-0.26-r2:0 -emacs dev-util/glib-utils-2.76.1:0 python_single_target_python3_10 -python_single_target_python3_11 -python_single_target_python3_9 dev-util/gperf-3.1-r1:0 dev-util/gtk-doc-am-1.33.2:0 dev-util/intltool-0.51.0-r3:0 dev-util/meson-1.0.1:0 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -test dev-util/meson-format-array-0:0 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 dev-util/ninja-1.11.1-r2:0 -doc -emacs -test dev-util/pkgconf-1.8.1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -test dev-util/re2c-2.2:0 debug -test dev-vcs/git-2.40.0:0 blksha1 -cgi curl -cvs -doc -gnome-keyring gpg -highlight iconv -mediawiki nls pcre -perforce -perl python_single_target_python3_10 -python_single_target_python3_11 -python_single_target_python3_9 safe-directory -selinux -subversion -test -tk webdav -xinetd media-fonts/liberation-fonts-2.1.5:0 -X -X -fontforge media-gfx/graphite2-1.3.14_p20210810-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -perl -test media-libs/fontconfig-2.14.2:1.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc nls -test media-libs/freetype-2.13.0:2 -X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 adobe-cff -brotli bzip2 cleartype-hinting debug -doc -fontforge harfbuzz -infinality png -static-libs -svg -utils media-libs/harfbuzz-7.1.0:0/6.0.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cairo debug -doc -experimental glib graphite -icu introspection -test truetype media-libs/libpng-1.6.39:0/16 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -apng -cpu_flags_arm_neon cpu_flags_x86_sse -static-libs net-dns/c-ares-1.19.0:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -test -verify-sig net-dns/libidn2-2.3.4:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static-libs -verify-sig net-firewall/iptables-1.8.9:0/1.8.3 -conntrack -netlink -nftables -pcap split-usr -static-libs net-libs/gnutls-3.8.0:0/30.30 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -brotli cxx -dane -doc -examples idn nls openssl -pkcs11 seccomp -sslv2 -sslv3 -static-libs -test -test-full tls-heartbeat -tools -valgrind -verify-sig zlib -zstd net-libs/libmnl-1.0.5:0/0.2.0 -examples -verify-sig net-libs/libnsl-2.0.0-r1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs net-libs/libtirpc-1.3.3:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -kerberos split-usr -static-libs net-libs/nghttp2-1.52.0:0/1.14 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -hpack-tools -jemalloc -static-libs -systemd -test -utils -xml net-misc/curl-8.0.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 adns -alt-svc -brotli -curl_ssl_gnutls -curl_ssl_mbedtls -curl_ssl_nss curl_ssl_openssl -curl_ssl_rustls ftp -gnutls -gopher -hsts http2 -idn imap -kerberos -ldap -mbedtls -nghttp3 -nss openssl pop3 progress-meter -rtmp -rustls -samba smtp -ssh ssl -sslv3 -static-libs -telnet -test tftp -verify-sig -websockets -zstd net-misc/dhcpcd-9.5.0:0 debug embedded ipv6 -privsep udev net-misc/iputils-20221126-r1:0 arping -caps -clockdiff -doc filecaps -idn nls -test -tracepath net-misc/netifrc-0.7.3-r1:0 dhcp net-misc/openssh-9.3_p1:0 -X -X509 -abi_mips_n32 -audit -debug -hpn -kerberos -ldns -libedit -livecd pam -pie -sctp -security-key -selinux ssl -static -test -verify-sig -xmss net-misc/rsync-3.2.7-r2:0 acl -examples iconv -lz4 python_single_target_python3_10 -python_single_target_python3_11 -python_single_target_python3_9 -rrsync ssl -stunnel -system-zlib -verify-sig xattr -xxhash -zstd net-misc/wget-1.21.3-r1:0 -cookie-check debug -gnutls -idn ipv6 -metalink nls -ntlm pcre ssl -static -test -uuid -verify-sig zlib perl-core/Compress-Raw-Zlib-2.202.0:0 perl-core/File-Temp-0.231.100:0 sec-keys/openpgp-keys-gentoo-release-20230329:0 -test sys-apps/acl-2.3.1-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls split-usr -static-libs sys-apps/attr-2.5.1-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug nls split-usr -static-libs sys-apps/baselayout-2.13-r1:0 -build split-usr sys-apps/coreutils-9.2-r2:0 acl -caps -gmp -hostname -kill -multicall nls openssl -selinux split-usr -static -test -vanilla -verify-sig xattr sys-apps/dbus-1.15.4-r1:0 -X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 debug -doc elogind -selinux -static-libs -systemd -test -test sys-apps/debianutils-5.7:0 installkernel -static sys-apps/diffutils-3.9-r1:0 nls -verify-sig sys-apps/file-5.44-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -lzip -lzma -python python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -seccomp -static-libs -verify-sig zlib -zstd sys-apps/findutils-4.9.0-r2:0 nls -selinux -static -test -verify-sig sys-apps/gawk-5.2.1:0 -mpfr nls -pma readline -verify-sig sys-apps/gentoo-functions-0.19:0 sys-apps/grep-3.10:0 egrep-fgrep nls pcre -static -verify-sig sys-apps/groff-1.22.4:0 -X -examples -uchardet sys-apps/help2man-1.49.3:0 nls sys-apps/install-xattr-0.8-r1:0 sys-apps/iproute2-6.2.0-r1:0 -atm -berkdb -bpf -caps -elf iptables -libbsd -minimal -nfs -selinux split-usr sys-apps/kbd-2.5.1:0 nls pam -test sys-apps/kmod-30-r1:0 debug -doc lzma -pkcs7 -python python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -static-libs tools zlib zstd sys-apps/less-608-r2:0 pcre unicode sys-apps/man-db-2.11.2:0 manpager nls seccomp -selinux -static-libs zlib sys-apps/man-pages-6.04:0 l10n_cs l10n_da l10n_de l10n_el l10n_es l10n_fi l10n_fr l10n_hu l10n_id l10n_it l10n_ja l10n_mk l10n_nb l10n_nl l10n_pl l10n_pt-BR l10n_ro l10n_ru l10n_sr l10n_sv l10n_uk l10n_vi l10n_zh-CN sys-apps/miscfiles-1.5-r4:0 -minimal sys-apps/net-tools-2.10:0 arp hostname ipv6 -nis nls -plipconfig -selinux -slattach -static sys-apps/openrc-0.46:0 -audit -bash debug ncurses netifrc -newnet pam -selinux -sysv-utils unicode sys-apps/portage-3.0.46:0 -apidoc -build -doc -gentoo-dev ipc native-extensions python_targets_pypy3 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 rsync-verify -selinux -test xattr sys-apps/s6-2.11.3.0:0/2.11 execline sys-apps/s6-linux-init-1.1.0.0:0/1.1 sysv-utils sys-apps/sandbox-2.30-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 abi_x86_32 abi_x86_64 -abi_x86_x32 nnp sys-apps/sed-4.9:0 acl nls -selinux -static -verify-sig sys-apps/shadow-4.13-r2:0/4 acl -audit -bcrypt -cracklib nls pam -selinux -skey split-usr -su -verify-sig xattr sys-apps/systemd-utils-252.9:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -boot kmod -selinux split-usr -split-usr -sysusers -test tmpfiles udev sys-apps/texinfo-7.0.3:0 nls standalone -static sys-apps/util-linux-2.38.1-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -build -caps cramfs -cryptsetup -fdformat hardlink -kill logger -magic ncurses nls pam -python python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 readline -rtas -selinux -slang split-usr -static-libs su suid -systemd -test -tty-helpers -udev unicode -verify-sig sys-apps/which-2.21:0 sys-auth/elogind-246.10-r2:0 acl -audit cgroup-hybrid debug -doc pam policykit -selinux -test sys-auth/pambase-20220214:0 -caps -debug elogind -gnome-keyring -homed -minimal -mktemp nullok -pam_krb5 -pam_ssh passwdqc -pwhistory -pwquality -securetty -selinux sha512 -systemd -yescrypt sys-auth/passwdqc-2.0.2-r1:0 sys-auth/polkit-122-r1:0 daemon duktape -examples -gtk introspection -kde pam -selinux -systemd -test sys-devel/autoconf-2.71-r6:2.71 -emacs sys-devel/autoconf-archive-2023.02.20:0 sys-devel/autoconf-wrapper-20221207-r1:0 sys-devel/automake-1.16.5-r1:1.16 -test sys-devel/automake-wrapper-20221207:0 sys-devel/bc-1.07.1-r6:0 -libedit readline -static sys-devel/binutils-2.40-r4:2.40 -cet -doc -gold -gprofng -multitarget nls -pgo plugins -static-libs -test -vanilla -zstd sys-devel/binutils-config-5.5:0 native-symlinks sys-devel/bison-3.8.2-r2:0 -examples nls -static -test -verify-sig sys-devel/flex-2.6.4-r6:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static -test sys-devel/gcc-12.2.1_p20230304:12 -ada -cet -custom-cflags cxx -d -debug -default-stack-clash-protection -default-znow -doc -fixed-point fortran -go graphite -hardened -ieee-long-double -jit -libssp lto multilib nls nptl -objc -objc++ -objc-gc openmp -pch -pgo pie sanitize -ssp -systemtap -test -valgrind -vanilla -vtv -zstd sys-devel/gcc-config-2.10:0 cc-wrappers native-symlinks sys-devel/gettext-0.21.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl cxx -doc -emacs -git -java -java ncurses nls openmp -static-libs -verify-sig sys-devel/gnuconfig-20221007:0 sys-devel/libtool-2.4.7-r1:2 -vanilla sys-devel/m4-1.4.19-r1:0 -examples nls -verify-sig sys-devel/make-4.4.1:0 -guile nls -static -verify-sig sys-devel/patch-2.7.6-r5:0 -static -test -verify-sig xattr sys-fs/e2fsprogs-1.47.0-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cron -fuse nls split-usr -static-libs -test tools sys-fs/udev-init-scripts-35:0 sys-kernel/installkernel-gentoo-7:0 -grub sys-kernel/linux-headers-6.2:0 -headers-only sys-libs/gdbm-1.23:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 berkdb nls readline -static-libs -test -verify-sig sys-libs/glibc-2.37-r1:2.2 -audit -caps -cet -compile-locales -crypt -custom-cflags -doc -gd -hash-sysv-compat -headers-only multiarch multilib -multilib-bootstrap -nscd -perl -profile -selinux -ssp stack-realign static-libs -suid -systemd -systemtap -test -vanilla sys-libs/libcap-2.68:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 pam split-usr -static-libs -tools sys-libs/libseccomp-2.5.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -experimental-loong -python python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 -static-libs -test sys-libs/libxcrypt-4.4.33:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 abi_x86_32 abi_x86_64 -abi_x86_x32 compat -headers-only split-usr -static-libs system -test sys-libs/ncurses-6.4_p20230408:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -ada cxx debug -doc -gpm -minimal -profile split-usr -split-usr stack-realign -static-libs -test tinfo -trace -verify-sig sys-libs/pam-1.5.2-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -berkdb -debug filecaps -nis -selinux split-usr sys-libs/readline-8.2_p1:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static-libs unicode -utils -verify-sig sys-libs/timezone-data-2023c:0 -leaps-timezone nls -zic-slim sys-libs/zlib-1.2.13-r1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 minizip split-usr -static-libs -verify-sig sys-process/procps-3.3.17-r1:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 elogind kill -modern-top ncurses nls -selinux split-usr -static-libs -systemd -test unicode sys-process/psmisc-23.6:0 -X -apparmor nls -selinux -test virtual/acl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs virtual/dev-manager-0-r2:0 virtual/editor-0-r5:0 virtual/libc-1-r1:0 virtual/libcrypt-2-r1:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs virtual/libelf-3-r1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libiconv-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libintl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libudev-232-r7:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -systemd virtual/man-0-r4:0 virtual/os-headers-0-r2:0 virtual/package-manager-1:0 virtual/pager-0-r1:0 virtual/perl-Carp-1.520.0-r2:0 virtual/perl-Compress-Raw-Bzip2-2.103.0-r3:0 virtual/perl-Compress-Raw-Zlib-2.202.0:0 virtual/perl-CPAN-2.330.0:0 virtual/perl-CPAN-Meta-2.150.10-r6:0 virtual/perl-CPAN-Meta-Requirements-2.140.0-r8:0 virtual/perl-CPAN-Meta-YAML-0.18.0-r8:0 virtual/perl-Data-Dumper-2.184.0:0 virtual/perl-Digest-MD5-2.580.0-r1:0 virtual/perl-Encode-3.170.0:0 virtual/perl-Exporter-5.770.0:0 virtual/perl-ExtUtils-CBuilder-0.280.236-r1:0 virtual/perl-ExtUtils-Install-2.200.0-r1:0 virtual/perl-ExtUtils-MakeMaker-7.640.0:0 virtual/perl-ExtUtils-Manifest-1.730.0-r1:0 virtual/perl-ExtUtils-ParseXS-3.450.0:0 virtual/perl-File-Path-2.180.0-r1:0 virtual/perl-File-Spec-3.840.0:0 virtual/perl-File-Temp-0.231.100:0 virtual/perl-Getopt-Long-2.520.0-r1:0 virtual/perl-IO-1.500.0:0 virtual/perl-IO-Compress-2.106.0:0 virtual/perl-IO-Socket-IP-0.410.0-r1:0 virtual/perl-JSON-PP-4.70.0:0 virtual/perl-libnet-3.140.0:0 ssl virtual/perl-MIME-Base64-3.160.0-r1:0 virtual/perl-Module-Metadata-1.0.37-r2:0 virtual/perl-parent-0.238.0-r2:0 virtual/perl-Parse-CPAN-Meta-2.150.10-r6:0 virtual/perl-Perl-OSType-1.10.0-r6:0 virtual/perl-podlators-4.140.0-r3:0 virtual/perl-Scalar-List-Utils-1.620.0:0 virtual/perl-Test-Harness-3.440.0:0 virtual/perl-Text-ParseWords-3.310.0:0 virtual/perl-Time-Local-1.300.0-r1:0 virtual/perl-version-0.992.900:0 virtual/perl-XSLoader-0.310.0:0 virtual/pkgconfig-2-r1:0 virtual/service-manager-1-r1:0 virtual/ssh-0-r1:0 -minimal virtual/tmpfiles-0-r3:0 virtual/ttf-fonts-1-r2:0 virtual/udev-217-r5:0 virtual/w3m-1:0 www-client/pybugz-0.13-r2:0 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 www-client/w3m-0.5.3_p20230121:0 -X -fbcon -gdk-pixbuf -gpm -imlib l10n_ja -lynxkeymap nls -nntp ssl unicode -xface x11-apps/xprop-1.2.6:0 x11-apps/xset-1.2.5:0 x11-base/xcb-proto-1.15.2:0 python_targets_python3_10 python_targets_python3_11 python_targets_python3_9 x11-base/xorg-proto-2022.2:0 -test x11-libs/cairo-1.17.8:0 X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -aqua -debug glib -gtk-doc -test x11-libs/libICE-1.1.1-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 x11-libs/libSM-1.2.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc uuid x11-libs/libX11-1.8.4-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -test x11-libs/libXau-1.0.11:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libxcb-1.15-r1:0/1.12 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -doc -selinux -test xkb x11-libs/libXdmcp-1.1.4-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXext-1.3.5:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXmu-1.1.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXrender-0.9.11:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 x11-libs/libXt-1.3.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -test x11-libs/pixman-0.42.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_iwmmxt -cpu_flags_arm_iwmmxt2 -cpu_flags_arm_neon -cpu_flags_ppc_altivec cpu_flags_x86_mmxext cpu_flags_x86_sse2 cpu_flags_x86_ssse3 -loongson2f -static-libs -test x11-libs/xtrans-1.4.0:0 -doc x11-misc/compose-tables-1.8.4-r1:0 x11-misc/shared-mime-info-2.2:0 -test x11-misc/xdg-utils-1.1.3_p20210805-r1:0 -dbus -doc -gnome ####################### # build.log # ####################### >>> Unpacking source... >>> Unpacking rich-13.3.4.gh.tar.gz to /var/tmp/portage/dev-python/rich-13.3.4/work >>> Source unpacked in /var/tmp/portage/dev-python/rich-13.3.4/work >>> Preparing source in /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4 ... * Build system packages: * dev-python/gpep517 : 13 * dev-python/installer : 0.7.0 * dev-python/poetry-core : 1.5.2 >>> Source prepared. >>> Configuring source in /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4 ... >>> Source configured. >>> Compiling source in /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4 ... * pypy3: running distutils-r1_run_phase distutils-r1_python_compile * Building the wheel for rich-13.3.4 via poetry.core.masonry.api gpep517 build-wheel --backend poetry.core.masonry.api --output-fd 3 --wheel-dir /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/wheel 2023-04-13 08:10:30,485 gpep517 INFO Building wheel via backend poetry.core.masonry.api 2023-04-13 08:10:30,957 poetry.core.masonry.builders.wheel INFO Building wheel 2023-04-13 08:10:31,061 poetry.core.masonry.builders.wheel INFO Built rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:31,062 gpep517 INFO The backend produced /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/wheel/rich-13.3.4-py3-none-any.whl * Installing rich-13.3.4-py3-none-any.whl to /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/install gpep517 install-wheel --destdir=/var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/install --interpreter=/usr/bin/pypy3 --prefix=/usr --optimize=all /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/wheel/rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:31,253 gpep517 INFO Installing /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/wheel/rich-13.3.4-py3-none-any.whl into /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/install 2023-04-13 08:10:31,889 gpep517 INFO Installation complete * python3_9: running distutils-r1_run_phase distutils-r1_python_compile * Building the wheel for rich-13.3.4 via poetry.core.masonry.api gpep517 build-wheel --backend poetry.core.masonry.api --output-fd 3 --wheel-dir /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_9/wheel 2023-04-13 08:10:32,205 gpep517 INFO Building wheel via backend poetry.core.masonry.api 2023-04-13 08:10:32,386 poetry.core.masonry.builders.wheel INFO Building wheel 2023-04-13 08:10:32,421 poetry.core.masonry.builders.wheel INFO Built rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:32,421 gpep517 INFO The backend produced /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_9/wheel/rich-13.3.4-py3-none-any.whl * Installing rich-13.3.4-py3-none-any.whl to /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_9/install gpep517 install-wheel --destdir=/var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_9/install --interpreter=/usr/bin/python3.9 --prefix=/usr --optimize=all /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_9/wheel/rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:32,525 gpep517 INFO Installing /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_9/wheel/rich-13.3.4-py3-none-any.whl into /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_9/install 2023-04-13 08:10:32,975 gpep517 INFO Installation complete * python3_10: running distutils-r1_run_phase distutils-r1_python_compile * Building the wheel for rich-13.3.4 via poetry.core.masonry.api gpep517 build-wheel --backend poetry.core.masonry.api --output-fd 3 --wheel-dir /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_10/wheel 2023-04-13 08:10:33,235 gpep517 INFO Building wheel via backend poetry.core.masonry.api 2023-04-13 08:10:33,418 poetry.core.masonry.builders.wheel INFO Building wheel 2023-04-13 08:10:33,456 poetry.core.masonry.builders.wheel INFO Built rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:33,457 gpep517 INFO The backend produced /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_10/wheel/rich-13.3.4-py3-none-any.whl * Installing rich-13.3.4-py3-none-any.whl to /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_10/install gpep517 install-wheel --destdir=/var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_10/install --interpreter=/usr/bin/python3.10 --prefix=/usr --optimize=all /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_10/wheel/rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:33,558 gpep517 INFO Installing /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_10/wheel/rich-13.3.4-py3-none-any.whl into /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_10/install 2023-04-13 08:10:33,999 gpep517 INFO Installation complete * python3_11: running distutils-r1_run_phase distutils-r1_python_compile * Building the wheel for rich-13.3.4 via poetry.core.masonry.api gpep517 build-wheel --backend poetry.core.masonry.api --output-fd 3 --wheel-dir /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_11/wheel 2023-04-13 08:10:34,266 gpep517 INFO Building wheel via backend poetry.core.masonry.api 2023-04-13 08:10:34,427 poetry.core.masonry.builders.wheel INFO Building wheel 2023-04-13 08:10:34,459 poetry.core.masonry.builders.wheel INFO Built rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:34,459 gpep517 INFO The backend produced /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_11/wheel/rich-13.3.4-py3-none-any.whl * Installing rich-13.3.4-py3-none-any.whl to /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_11/install gpep517 install-wheel --destdir=/var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_11/install --interpreter=/usr/bin/python3.11 --prefix=/usr --optimize=all /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_11/wheel/rich-13.3.4-py3-none-any.whl 2023-04-13 08:10:34,561 gpep517 INFO Installing /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_11/wheel/rich-13.3.4-py3-none-any.whl into /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-python3_11/install 2023-04-13 08:10:35,025 gpep517 INFO Installation complete >>> Source compiled. >>> Test phase: dev-python/rich-13.3.4 * pypy3: running distutils-r1_run_phase python_test pypy3 -m pytest -vv -ra -l -Wdefault --color=no -o console_output_style=count -p no:cov -p no:flake8 -p no:flakes -p no:pylint -p no:markdown -p no:sugar -p no:xvfb -p no:tavern --deselect tests/test_console.py::test_size_can_fall_back_to_std_descriptors --deselect tests/test_inspect.py::test_inspect_integer_with_methods_python38_and_python39 --deselect tests/test_syntax.py::test_python_render_simple_indent_guides --deselect tests/test_syntax.py::test_python_render_line_range_indent_guides -p no:pytest-qt ============================= test session starts ============================== platform linux -- Python 3.9.16[pypy-7.3.11-final], pytest-7.3.0, pluggy-1.0.0 -- /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4-pypy3/install/usr/bin/pypy3 cachedir: .pytest_cache rootdir: /var/tmp/portage/dev-python/rich-13.3.4/work/rich-13.3.4 configfile: pyproject.toml testpaths: tests collecting ... collected 797 items / 9 deselected / 788 selected tests/test_align.py::test_bad_align_legal PASSED [ 1/788] tests/test_align.py::test_repr PASSED [ 2/788] tests/test_align.py::test_align_left PASSED [ 3/788] tests/test_align.py::test_align_center PASSED [ 4/788] tests/test_align.py::test_align_right PASSED [ 5/788] tests/test_align.py::test_align_top PASSED [ 6/788] tests/test_align.py::test_align_middle PASSED [ 7/788] tests/test_align.py::test_align_bottom PASSED [ 8/788] tests/test_align.py::test_align_center_middle PASSED [ 9/788] tests/test_align.py::test_align_fit PASSED [ 10/788] tests/test_align.py::test_align_right_style PASSED [ 11/788] tests/test_align.py::test_measure PASSED [ 12/788] tests/test_align.py::test_align_no_pad PASSED [ 13/788] tests/test_align.py::test_align_width PASSED [ 14/788] tests/test_align.py::test_shortcuts PASSED [ 15/788] tests/test_align.py::test_vertical_center PASSED [ 16/788] tests/test_ansi.py::test_decode FAILED [ 17/788] tests/test_ansi.py::test_decode_example FAILED [ 18/788] tests/test_ansi.py::test_decode_issue_2688[\x1b[31mFound 4 errors in 2 files (checked 18 source files)\x1b(B\x1b[m\n-Found 4 errors in 2 files (checked 18 source files)] PASSED [ 19/788] tests/test_ansi.py::test_decode_issue_2688[Hallo-Hallo] PASSED [ 20/788] tests/test_ansi.py::test_decode_issue_2688[\x1b(BHallo-Hallo] PASSED [ 21/788] tests/test_ansi.py::test_decode_issue_2688[\x1b(JHallo-Hallo] PASSED [ 22/788] tests/test_ansi.py::test_decode_issue_2688[\x1b(BHal\x1b(Jlo-Hallo] PASSED [ 23/788] tests/test_bar.py::test_init PASSED [ 24/788] tests/test_bar.py::test_update PASSED [ 25/788] tests/test_bar.py::test_render FAILED [ 26/788] tests/test_bar.py::test_measure PASSED [ 27/788] tests/test_bar.py::test_zero_total PASSED [ 28/788] tests/test_bar.py::test_pulse FAILED [ 29/788] tests/test_bar.py::test_get_pulse_segments PASSED [ 30/788] tests/test_block_bar.py::test_repr PASSED [ 31/788] tests/test_block_bar.py::test_render FAILED [ 32/788] tests/test_block_bar.py::test_measure PASSED [ 33/788] tests/test_block_bar.py::test_zero_total PASSED [ 34/788] tests/test_box.py::test_str PASSED [ 35/788] tests/test_box.py::test_repr PASSED [ 36/788] tests/test_box.py::test_get_top PASSED [ 37/788] tests/test_box.py::test_get_row PASSED [ 38/788] tests/test_box.py::test_get_bottom PASSED [ 39/788] tests/test_box.py::test_box_substitute PASSED [ 40/788] tests/test_card.py::test_card_render FAILED [ 41/788] tests/test_cells.py::test_cell_len_long_string PASSED [ 42/788] tests/test_cells.py::test_cell_len_short_string PASSED [ 43/788] tests/test_cells.py::test_set_cell_size PASSED [ 44/788] tests/test_cells.py::test_set_cell_size_infinite PASSED [ 45/788] tests/test_color.py::test_str PASSED [ 46/788] tests/test_color.py::test_repr PASSED [ 47/788] tests/test_color.py::test_color_system_repr PASSED [ 48/788] tests/test_color.py::test_rich PASSED [ 49/788] tests/test_color.py::test_system PASSED [ 50/788] tests/test_color.py::test_windows PASSED [ 51/788] tests/test_color.py::test_truecolor PASSED [ 52/788] tests/test_color.py::test_parse_success PASSED [ 53/788] tests/test_color.py::test_from_triplet PASSED [ 54/788] tests/test_color.py::test_from_rgb PASSED [ 55/788] tests/test_color.py::test_from_ansi PASSED [ 56/788] tests/test_color.py::test_default PASSED [ 57/788] tests/test_color.py::test_parse_error PASSED [ 58/788] tests/test_color.py::test_get_ansi_codes PASSED [ 59/788] tests/test_color.py::test_downgrade PASSED [ 60/788] tests/test_color.py::test_parse_rgb_hex PASSED [ 61/788] tests/test_color.py::test_blend_rgb PASSED [ 62/788] tests/test_color_triplet.py::test_hex PASSED [ 63/788] tests/test_color_triplet.py::test_rgb PASSED [ 64/788] tests/test_color_triplet.py::test_normalized PASSED [ 65/788] tests/test_columns.py::test_render PASSED [ 66/788] tests/test_columns_align.py::test_align PASSED [ 67/788] tests/test_console.py::test_dumb_terminal PASSED [ 68/788] tests/test_console.py::test_soft_wrap PASSED [ 69/788] tests/test_console.py::test_16color_terminal PASSED [ 70/788] tests/test_console.py::test_truecolor_terminal PASSED [ 71/788] tests/test_console.py::test_kitty_terminal PASSED [ 72/788] tests/test_console.py::test_console_options_update PASSED [ 73/788] tests/test_console.py::test_console_options_update_height PASSED [ 74/788] tests/test_console.py::test_init PASSED [ 75/788] tests/test_console.py::test_size PASSED [ 76/788] tests/test_console.py::test_repr PASSED [ 77/788] tests/test_console.py::test_print PASSED [ 78/788] tests/test_console.py::test_print_multiple PASSED [ 79/788] tests/test_console.py::test_print_text PASSED [ 80/788] tests/test_console.py::test_print_text_multiple PASSED [ 81/788] tests/test_console.py::test_print_json FAILED [ 82/788] tests/test_console.py::test_print_json_error PASSED [ 83/788] tests/test_console.py::test_print_json_data FAILED [ 84/788] tests/test_console.py::test_print_json_ensure_ascii FAILED [ 85/788] tests/test_console.py::test_print_json_with_default_ensure_ascii FAILED [ 86/788] tests/test_console.py::test_print_json_indent_none FAILED [ 87/788] tests/test_console.py::test_console_null_file PASSED [ 88/788] tests/test_console.py::test_log PASSED [ 89/788] tests/test_console.py::test_log_milliseconds PASSED [ 90/788] tests/test_console.py::test_print_empty PASSED [ 91/788] tests/test_console.py::test_markup_highlight FAILED [ 92/788] tests/test_console.py::test_print_style PASSED [ 93/788] tests/test_console.py::test_show_cursor PASSED [ 94/788] tests/test_console.py::test_clear PASSED [ 95/788] tests/test_console.py::test_clear_no_terminal PASSED [ 96/788] tests/test_console.py::test_get_style PASSED [ 97/788] tests/test_console.py::test_get_style_default PASSED [ 98/788] tests/test_console.py::test_get_style_error PASSED [ 99/788] tests/test_console.py::test_render_error PASSED [100/788] tests/test_console.py::test_control PASSED [101/788] tests/test_console.py::test_capture PASSED [102/788] tests/test_console.py::test_capture_and_record PASSED [103/788] tests/test_console.py::test_input PASSED [104/788] tests/test_console.py::test_input_password PASSED [105/788] tests/test_console.py::test_status PASSED [106/788] tests/test_console.py::test_justify_none PASSED [107/788] tests/test_console.py::test_justify_left PASSED [108/788] tests/test_console.py::test_justify_center PASSED [109/788] tests/test_console.py::test_justify_right PASSED [110/788] tests/test_console.py::test_justify_renderable_none PASSED [111/788] tests/test_console.py::test_justify_renderable_left PASSED [112/788] tests/test_console.py::test_justify_renderable_center PASSED [113/788] tests/test_console.py::test_justify_renderable_right PASSED [114/788] tests/test_console.py::test_render_broken_renderable PASSED [115/788] tests/test_console.py::test_export_text PASSED [116/788] tests/test_console.py::test_export_html PASSED [117/788] tests/test_console.py::test_export_html_inline PASSED [118/788] tests/test_console.py::test_export_svg PASSED [119/788] tests/test_console.py::test_export_svg_specified_unique_id PASSED [120/788] tests/test_console.py::test_save_svg PASSED [121/788] tests/test_console.py::test_save_text PASSED [122/788] tests/test_console.py::test_save_html PASSED [123/788] tests/test_console.py::test_no_wrap PASSED [124/788] tests/test_console.py::test_unicode_error PASSED [125/788] tests/test_console.py::test_bell PASSED [126/788] tests/test_console.py::test_pager PASSED [127/788] tests/test_console.py::test_out PASSED [128/788] tests/test_console.py::test_render_group PASSED [129/788] tests/test_console.py::test_render_group_fit PASSED [130/788] tests/test_console.py::test_get_time PASSED [131/788] tests/test_console.py::test_console_style FAILED [132/788] tests/test_console.py::test_no_color PASSED [133/788] tests/test_console.py::test_quiet PASSED [134/788] tests/test_console.py::test_no_nested_live PASSED [135/788] tests/test_console.py::test_screen PASSED [136/788] tests/test_console.py::test_screen_update PASSED [137/788] tests/test_console.py::test_height PASSED [138/788] tests/test_console.py::test_columns_env PASSED [139/788] tests/test_console.py::test_lines_env PASSED [140/788] tests/test_console.py::test_screen_update_class PASSED [141/788] tests/test_console.py::test_is_alt_screen PASSED [142/788] tests/test_console.py::test_set_console_title PASSED [143/788] tests/test_console.py::test_update_screen PASSED [144/788] tests/test_console.py::test_update_screen_lines PASSED [145/788] tests/test_console.py::test_update_options_markup PASSED [146/788] tests/test_console.py::test_print_width_zero PASSED [147/788] tests/test_console.py::test_size_properties PASSED [148/788] tests/test_console.py::test_print_newline_start PASSED [149/788] tests/test_console.py::test_is_terminal_broken_file PASSED [150/788] tests/test_console.py::test_detect_color_system PASSED [151/788] tests/test_console.py::test_reset_height PASSED [152/788] tests/test_console.py::test_render_lines_height_minus_vertical_pad_is_negative PASSED [153/788] tests/test_console.py::test_recording_no_stdout_and_no_stderr_files PASSED [154/788] tests/test_console.py::test_capturing_no_stdout_and_no_stderr_files PASSED [155/788] tests/test_console.py::test_force_color PASSED [156/788] tests/test_console.py::test_force_color_jupyter PASSED [157/788] tests/test_constrain.py::test_width_of_none PASSED [158/788] tests/test_containers.py::test_renderables_measure PASSED [159/788] tests/test_containers.py::test_renderables_empty PASSED [160/788] tests/test_containers.py::test_lines_rich_console PASSED [161/788] tests/test_containers.py::test_lines_justify PASSED [162/788] tests/test_control.py::test_control PASSED [163/788] tests/test_control.py::test_strip_control_codes PASSED [164/788] tests/test_control.py::test_escape_control_codes PASSED [165/788] tests/test_control.py::test_control_move_to PASSED [166/788] tests/test_control.py::test_control_move PASSED [167/788] tests/test_control.py::test_move_to_column PASSED [168/788] tests/test_control.py::test_title PASSED [169/788] tests/test_emoji.py::test_no_emoji PASSED [170/788] tests/test_emoji.py::test_str_repr PASSED [171/788] tests/test_emoji.py::test_replace PASSED [172/788] tests/test_emoji.py::test_render PASSED [173/788] tests/test_emoji.py::test_variant PASSED [174/788] tests/test_emoji.py::test_variant_non_default PASSED [175/788] tests/test_file_proxy.py::test_empty_bytes PASSED [176/788] tests/test_file_proxy.py::test_flush PASSED [177/788] tests/test_file_proxy.py::test_new_lines PASSED [178/788] tests/test_filesize.py::test_traditional PASSED [179/788] tests/test_filesize.py::test_pick_unit_and_suffix PASSED [180/788] tests/test_getfileno.py::test_get_fileno PASSED [181/788] tests/test_getfileno.py::test_get_fileno_missing PASSED [182/788] tests/test_getfileno.py::test_get_fileno_broken PASSED [183/788] tests/test_highlighter.py::test_wrong_type PASSED [184/788] tests/test_highlighter.py::test_highlight_regex[-spans0] PASSED [185/788] tests/test_highlighter.py::test_highlight_regex[ -spans1] PASSED [186/788] tests/test_highlighter.py::test_highlight_regex[-spans2] PASSED [187/788] tests/test_highlighter.py::test_highlight_regex[-spans3] PASSED [188/788] tests/test_highlighter.py::test_highlight_regex[>-spans4] PASSED [189/788] tests/test_highlighter.py::test_highlight_regex[False True None-spans5] PASSED [190/788] tests/test_highlighter.py::test_highlight_regex[foo=bar-spans6] PASSED [191/788] tests/test_highlighter.py::test_highlight_regex[foo="bar"-spans7] PASSED [192/788] tests/test_highlighter.py::test_highlight_regex[-spans8] PASSED [193/788] tests/test_highlighter.py::test_highlight_regex[( )-spans9] PASSED [194/788] tests/test_highlighter.py::test_highlight_regex[[ ]-spans10] PASSED [195/788] tests/test_highlighter.py::test_highlight_regex[{ }-spans11] PASSED [196/788] tests/test_highlighter.py::test_highlight_regex[ 1 -spans12] PASSED [197/788] tests/test_highlighter.py::test_highlight_regex[ 1.2 -spans13] PASSED [198/788] tests/test_highlighter.py::test_highlight_regex[ 0xff -spans14] PASSED [199/788] tests/test_highlighter.py::test_highlight_regex[ 1e10 -spans15] PASSED [200/788] tests/test_highlighter.py::test_highlight_regex[ 1j -spans16] PASSED [201/788] tests/test_highlighter.py::test_highlight_regex[ 3.14j -spans17] PASSED [202/788] tests/test_highlighter.py::test_highlight_regex[ (3.14+2.06j) -spans18] PASSED [203/788] tests/test_highlighter.py::test_highlight_regex[ (3+2j) -spans19] PASSED [204/788] tests/test_highlighter.py::test_highlight_regex[ (123456.4321-1234.5678j) -spans20] PASSED [205/788] tests/test_highlighter.py::test_highlight_regex[ (-123123-2.1312342342423422e+25j) -spans21] PASSED [206/788] tests/test_highlighter.py::test_highlight_regex[ /foo -spans22] PASSED [207/788] tests/test_highlighter.py::test_highlight_regex[ /foo/bar.html -spans23] PASSED [208/788] tests/test_highlighter.py::test_highlight_regex[01-23-45-67-89-AB-spans24] PASSED [209/788] tests/test_highlighter.py::test_highlight_regex[01-23-45-FF-FE-67-89-AB-spans25] PASSED [210/788] tests/test_highlighter.py::test_highlight_regex[01:23:45:67:89:AB-spans26] PASSED [211/788] tests/test_highlighter.py::test_highlight_regex[01:23:45:FF:FE:67:89:AB-spans27] PASSED [212/788] tests/test_highlighter.py::test_highlight_regex[0123.4567.89AB-spans28] PASSED [213/788] tests/test_highlighter.py::test_highlight_regex[0123.45FF.FE67.89AB-spans29] PASSED [214/788] tests/test_highlighter.py::test_highlight_regex[ed-ed-ed-ed-ed-ed-spans30] PASSED [215/788] tests/test_highlighter.py::test_highlight_regex[ED-ED-ED-ED-ED-ED-spans31] PASSED [216/788] tests/test_highlighter.py::test_highlight_regex[Ed-Ed-Ed-Ed-Ed-Ed-spans32] PASSED [217/788] tests/test_highlighter.py::test_highlight_regex[0-00-1-01-2-02-spans33] PASSED [218/788] tests/test_highlighter.py::test_highlight_regex[ https://example.org -spans34] PASSED [219/788] tests/test_highlighter.py::test_highlight_regex[ http://example.org -spans35] PASSED [220/788] tests/test_highlighter.py::test_highlight_regex[ http://example.org/index.html -spans36] PASSED [221/788] tests/test_highlighter.py::test_highlight_regex[No place like 127.0.0.1-spans37] PASSED [222/788] tests/test_highlighter.py::test_highlight_regex[''-spans38] PASSED [223/788] tests/test_highlighter.py::test_highlight_regex['hello'-spans39] PASSED [224/788] tests/test_highlighter.py::test_highlight_regex['''hello'''-spans40] PASSED [225/788] tests/test_highlighter.py::test_highlight_regex[""-spans41] PASSED [226/788] tests/test_highlighter.py::test_highlight_regex["hello"-spans42] PASSED [227/788] tests/test_highlighter.py::test_highlight_regex["""hello"""-spans43] PASSED [228/788] tests/test_highlighter.py::test_highlight_regex[\\'foo'-spans44] PASSED [229/788] tests/test_highlighter.py::test_highlight_regex[it's no 'string'-spans45] PASSED [230/788] tests/test_highlighter.py::test_highlight_regex[78351748-9b32-4e08-ad3e-7e9ff124d541-spans46] PASSED [231/788] tests/test_highlighter.py::test_highlight_json_with_indent PASSED [232/788] tests/test_highlighter.py::test_highlight_json_string_only PASSED [233/788] tests/test_highlighter.py::test_highlight_json_empty_string_only PASSED [234/788] tests/test_highlighter.py::test_highlight_json_no_indent PASSED [235/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-08-spans0] PASSED [236/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-08-30-spans1] PASSED [237/788] tests/test_highlighter.py::test_highlight_iso8601_regex[20080830-spans2] PASSED [238/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-243-spans3] PASSED [239/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008243-spans4] PASSED [240/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-W35-spans5] PASSED [241/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008W35-spans6] PASSED [242/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-W35-6-spans7] PASSED [243/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008W356-spans8] PASSED [244/788] tests/test_highlighter.py::test_highlight_iso8601_regex[17:21-spans9] PASSED [245/788] tests/test_highlighter.py::test_highlight_iso8601_regex[1721-spans10] PASSED [246/788] tests/test_highlighter.py::test_highlight_iso8601_regex[172159-spans11] PASSED [247/788] tests/test_highlighter.py::test_highlight_iso8601_regex[Z-spans12] PASSED [248/788] tests/test_highlighter.py::test_highlight_iso8601_regex[+07-spans13] PASSED [249/788] tests/test_highlighter.py::test_highlight_iso8601_regex[+07:00-spans14] PASSED [250/788] tests/test_highlighter.py::test_highlight_iso8601_regex[17:21:59+07:00-spans15] PASSED [251/788] tests/test_highlighter.py::test_highlight_iso8601_regex[172159+0700-spans16] PASSED [252/788] tests/test_highlighter.py::test_highlight_iso8601_regex[172159+07-spans17] PASSED [253/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-08-30 17:21:59-spans18] PASSED [254/788] tests/test_highlighter.py::test_highlight_iso8601_regex[20080830 172159-spans19] PASSED [255/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-08-30-spans20] PASSED [256/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-08-30+07:00-spans21] PASSED [257/788] tests/test_highlighter.py::test_highlight_iso8601_regex[01:45:36-spans22] PASSED [258/788] tests/test_highlighter.py::test_highlight_iso8601_regex[01:45:36.123+07:00-spans23] PASSED [259/788] tests/test_highlighter.py::test_highlight_iso8601_regex[01:45:36.123+07:00-spans24] PASSED [260/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-08-30T01:45:36-spans25] PASSED [261/788] tests/test_highlighter.py::test_highlight_iso8601_regex[2008-08-30T01:45:36.123Z-spans26] PASSED [262/788] tests/test_inspect.py::test_render PASSED [263/788] tests/test_inspect.py::test_inspect_text SKIPPED (rendered differently on pypy3) [264/788] tests/test_inspect.py::test_inspect_empty_dict SKIPPED (rendered differently on pypy3) [265/788] tests/test_inspect.py::test_inspect_builtin_function_except_python311 SKIPPED (rendered differently on pypy3) [266/788] tests/test_inspect.py::test_inspect_builtin_function_only_python311 SKIPPED (rendered differently on pypy3) [267/788] tests/test_inspect.py::test_inspect_coroutine SKIPPED (rendered differently on pypy3) [268/788] tests/test_inspect.py::test_inspect_integer PASSED [269/788] tests/test_inspect.py::test_inspect_integer_with_value PASSED [270/788] tests/test_inspect.py::test_inspect_integer_with_methods_python310only SKIPPED (rendered differently on py3.9) [271/788] tests/test_inspect.py::test_inspect_integer_with_methods_python311_and_above SKIPPED (rendered differently on py3.9) [272/788] tests/test_inspect.py::test_broken_call_attr SKIPPED (rendered differently on pypy3) [273/788] tests/test_inspect.py::test_inspect_swig_edge_case PASSED [274/788] tests/test_inspect.py::test_inspect_module_with_class PASSED [275/788] tests/test_inspect.py::test_can_handle_special_characters_in_docstrings[\x07-\\a] PASSED [276/788] tests/test_inspect.py::test_can_handle_special_characters_in_docstrings[\x08-\\b] PASSED [277/788] tests/test_inspect.py::test_can_handle_special_characters_in_docstrings[\x0c-\\f] PASSED [278/788] tests/test_inspect.py::test_can_handle_special_characters_in_docstrings[\r-\\r] PASSED [279/788] tests/test_inspect.py::test_can_handle_special_characters_in_docstrings[\x0b-\\v] PASSED [280/788] tests/test_inspect.py::test_object_types_mro[object-expected_result0] PASSED [281/788] tests/test_inspect.py::test_object_types_mro[obj1-expected_result1] PASSED [282/788] tests/test_inspect.py::test_object_types_mro[hi-expected_result2] PASSED [283/788] tests/test_inspect.py::test_object_types_mro[str-expected_result3] PASSED [284/788] tests/test_inspect.py::test_object_types_mro[obj4-expected_result4] PASSED [285/788] tests/test_inspect.py::test_object_types_mro[Foo-expected_result5] PASSED [286/788] tests/test_inspect.py::test_object_types_mro[obj6-expected_result6] PASSED [287/788] tests/test_inspect.py::test_object_types_mro[FooSubclass-expected_result7] PASSED [288/788] tests/test_inspect.py::test_object_types_mro_as_strings[hi-expected_result0] PASSED [289/788] tests/test_inspect.py::test_object_types_mro_as_strings[str-expected_result1] PASSED [290/788] tests/test_inspect.py::test_object_types_mro_as_strings[obj2-expected_result2] PASSED [291/788] tests/test_inspect.py::test_object_types_mro_as_strings[Foo-expected_result3] PASSED [292/788] tests/test_inspect.py::test_object_types_mro_as_strings[obj4-expected_result4] PASSED [293/788] tests/test_inspect.py::test_object_types_mro_as_strings[FooSubclass-expected_result5] PASSED [294/788] tests/test_inspect.py::test_object_is_one_of_types[hi-types0-True] PASSED [295/788] tests/test_inspect.py::test_object_is_one_of_types[str-types1-True] PASSED [296/788] tests/test_inspect.py::test_object_is_one_of_types[hi-types2-True] PASSED [297/788] tests/test_inspect.py::test_object_is_one_of_types[str-types3-True] PASSED [298/788] tests/test_inspect.py::test_object_is_one_of_types[obj4-types4-True] PASSED [299/788] tests/test_inspect.py::test_object_is_one_of_types[Foo-types5-True] PASSED [300/788] tests/test_inspect.py::test_object_is_one_of_types[obj6-types6-True] PASSED [301/788] tests/test_inspect.py::test_object_is_one_of_types[Foo-types7-True] PASSED [302/788] tests/test_inspect.py::test_object_is_one_of_types[obj8-types8-False] PASSED [303/788] tests/test_inspect.py::test_object_is_one_of_types[Foo-types9-False] PASSED [304/788] tests/test_inspect.py::test_object_is_one_of_types[obj10-types10-True] PASSED [305/788] tests/test_inspect.py::test_object_is_one_of_types[Foo-types11-True] PASSED [306/788] tests/test_json.py::test_print_json_data_with_default PASSED [307/788] tests/test_jupyter.py::test_jupyter PASSED [308/788] tests/test_jupyter.py::test_jupyter_columns_env PASSED [309/788] tests/test_jupyter.py::test_jupyter_lines_env PASSED [310/788] tests/test_layout.py::test_no_layout PASSED [311/788] tests/test_layout.py::test_add_split PASSED [312/788] tests/test_layout.py::test_unsplit PASSED [313/788] tests/test_layout.py::test_render PASSED [314/788] tests/test_layout.py::test_tree PASSED [315/788] tests/test_layout.py::test_refresh_screen PASSED [316/788] tests/test_live.py::test_live_state PASSED [317/788] tests/test_live.py::test_growing_display PASSED [318/788] tests/test_live.py::test_growing_display_transient PASSED [319/788] tests/test_live.py::test_growing_display_overflow_ellipsis PASSED [320/788] tests/test_live.py::test_growing_display_overflow_crop PASSED [321/788] tests/test_live.py::test_growing_display_overflow_visible PASSED [322/788] tests/test_live.py::test_growing_display_autorefresh PASSED [323/788] tests/test_live.py::test_growing_display_console_redirect PASSED [324/788] tests/test_live.py::test_growing_display_file_console PASSED [325/788] tests/test_live.py::test_live_screen PASSED [326/788] tests/test_live_render.py::test_renderable PASSED [327/788] tests/test_live_render.py::test_position_cursor PASSED [328/788] tests/test_live_render.py::test_restore_cursor PASSED [329/788] tests/test_live_render.py::test_rich_console PASSED [330/788] tests/test_log.py::test_log FAILED [331/788] tests/test_log.py::test_log_caller_frame_info PASSED [332/788] tests/test_log.py::test_justify PASSED [333/788] tests/test_logging.py::test_exception PASSED [334/788] tests/test_logging.py::test_exception_with_extra_lines PASSED [335/788] tests/test_logging.py::test_stderr_and_stdout_are_none PASSED [336/788] tests/test_logging.py::test_markup_and_highlight PASSED [337/788] tests/test_markdown.py::test_markdown_render FAILED [338/788] tests/test_markdown.py::test_inline_code FAILED [339/788] tests/test_markdown_no_hyperlinks.py::test_markdown_render FAILED [340/788] tests/test_markup.py::test_re_no_match PASSED [341/788] tests/test_markup.py::test_re_match PASSED [342/788] tests/test_markup.py::test_escape PASSED [343/788] tests/test_markup.py::test_render_escape PASSED [344/788] tests/test_markup.py::test_parse PASSED [345/788] tests/test_markup.py::test_parse_link PASSED [346/788] tests/test_markup.py::test_render PASSED [347/788] tests/test_markup.py::test_render_not_tags PASSED [348/788] tests/test_markup.py::test_render_link PASSED [349/788] tests/test_markup.py::test_render_combine PASSED [350/788] tests/test_markup.py::test_render_overlap PASSED [351/788] tests/test_markup.py::test_adjoint PASSED [352/788] tests/test_markup.py::test_render_close PASSED [353/788] tests/test_markup.py::test_render_close_ambiguous PASSED [354/788] tests/test_markup.py::test_markup_error PASSED [355/788] tests/test_markup.py::test_markup_escape PASSED [356/788] tests/test_markup.py::test_escape_escape PASSED [357/788] tests/test_markup.py::test_events PASSED [358/788] tests/test_markup.py::test_events_broken PASSED [359/788] tests/test_markup.py::test_render_meta PASSED [360/788] tests/test_measure.py::test_span PASSED [361/788] tests/test_measure.py::test_no_renderable PASSED [362/788] tests/test_measure.py::test_measure_renderables PASSED [363/788] tests/test_measure.py::test_clamp PASSED [364/788] tests/test_null_file.py::test_null_file PASSED [365/788] tests/test_padding.py::test_repr PASSED [366/788] tests/test_padding.py::test_indent PASSED [367/788] tests/test_padding.py::test_unpack PASSED [368/788] tests/test_padding.py::test_expand_false PASSED [369/788] tests/test_padding.py::test_rich_console PASSED [370/788] tests/test_palette.py::test_rich_cast PASSED [371/788] tests/test_panel.py::test_render_panel[panel0-\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502Hello, World \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n] PASSED [372/788] tests/test_panel.py::test_render_panel[panel1-\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502Hello, World\u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n] PASSED [373/788] tests/test_panel.py::test_render_panel[panel2-\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502Hello, World\u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n] PASSED [374/788] tests/test_panel.py::test_render_panel[panel3-\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502Hello,\u2502\n\u2502World \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n] PASSED [375/788] tests/test_panel.py::test_render_panel[panel4-\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u2502\n\u2502\u2502Hello, World \u2502\u2502\n\u2502\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n] PASSED [376/788] tests/test_panel.py::test_render_panel[panel5-\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 FOO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502Hello, World \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n] PASSED [377/788] tests/test_panel.py::test_render_panel[panel6-\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502Hello, World \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 FOO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n] PASSED [378/788] tests/test_panel.py::test_console_width PASSED [379/788] tests/test_panel.py::test_fixed_width PASSED [380/788] tests/test_panel.py::test_render_size PASSED [381/788] tests/test_pick.py::test_pick_bool PASSED [382/788] tests/test_pretty.py::test_install PASSED [383/788] tests/test_pretty.py::test_install_max_depth PASSED [384/788] tests/test_pretty.py::test_ipy_display_hook__repr_html PASSED [385/788] tests/test_pretty.py::test_ipy_display_hook__multiple_special_reprs PASSED [386/788] tests/test_pretty.py::test_ipy_display_hook__no_special_repr_methods PASSED [387/788] tests/test_pretty.py::test_ipy_display_hook__special_repr_raises_exception PASSED [388/788] tests/test_pretty.py::test_ipy_display_hook__console_renderables_on_newline PASSED [389/788] tests/test_pretty.py::test_pretty PASSED [390/788] tests/test_pretty.py::test_pretty_dataclass PASSED [391/788] tests/test_pretty.py::test_empty_dataclass PASSED [392/788] tests/test_pretty.py::test_pretty_namedtuple PASSED [393/788] tests/test_pretty.py::test_pretty_namedtuple_length_one_no_trailing_comma PASSED [394/788] tests/test_pretty.py::test_pretty_namedtuple_empty PASSED [395/788] tests/test_pretty.py::test_pretty_namedtuple_custom_repr PASSED [396/788] tests/test_pretty.py::test_pretty_namedtuple_fields_invalid_type PASSED [397/788] tests/test_pretty.py::test_pretty_namedtuple_max_depth PASSED [398/788] tests/test_pretty.py::test_small_width PASSED [399/788] tests/test_pretty.py::test_ansi_in_pretty_repr PASSED [400/788] tests/test_pretty.py::test_broken_repr PASSED [401/788] tests/test_pretty.py::test_broken_getattr PASSED [402/788] tests/test_pretty.py::test_reference_cycle_container PASSED [403/788] tests/test_pretty.py::test_reference_cycle_namedtuple PASSED [404/788] tests/test_pretty.py::test_reference_cycle_dataclass PASSED [405/788] tests/test_pretty.py::test_reference_cycle_attrs PASSED [406/788] tests/test_pretty.py::test_reference_cycle_custom_repr PASSED [407/788] tests/test_pretty.py::test_max_depth PASSED [408/788] tests/test_pretty.py::test_max_depth_rich_repr PASSED [409/788] tests/test_pretty.py::test_max_depth_attrs PASSED [410/788] tests/test_pretty.py::test_max_depth_dataclass PASSED [411/788] tests/test_pretty.py::test_defaultdict PASSED [412/788] tests/test_pretty.py::test_array PASSED [413/788] tests/test_pretty.py::test_tuple_of_one PASSED [414/788] tests/test_pretty.py::test_node PASSED [415/788] tests/test_pretty.py::test_indent_lines PASSED [416/788] tests/test_pretty.py::test_pprint PASSED [417/788] tests/test_pretty.py::test_pprint_max_values PASSED [418/788] tests/test_pretty.py::test_pprint_max_items PASSED [419/788] tests/test_pretty.py::test_pprint_max_string PASSED [420/788] tests/test_pretty.py::test_tuples PASSED [421/788] tests/test_pretty.py::test_newline PASSED [422/788] tests/test_pretty.py::test_empty_repr PASSED [423/788] tests/test_pretty.py::test_attrs PASSED [424/788] tests/test_pretty.py::test_attrs_empty PASSED [425/788] tests/test_pretty.py::test_attrs_broken PASSED [426/788] tests/test_pretty.py::test_attrs_broken_310 SKIPPED (rendered differently on py3.9) [427/788] tests/test_pretty.py::test_user_dict PASSED [428/788] tests/test_pretty.py::test_lying_attribute PASSED [429/788] tests/test_pretty.py::test_measure_pretty PASSED [430/788] tests/test_pretty.py::test_tuple_rich_repr PASSED [431/788] tests/test_pretty.py::test_tuple_rich_repr_default PASSED [432/788] tests/test_progress.py::test_bar_columns PASSED [433/788] tests/test_progress.py::test_text_column PASSED [434/788] tests/test_progress.py::test_time_elapsed_column PASSED [435/788] tests/test_progress.py::test_time_remaining_column PASSED [436/788] tests/test_progress.py::test_compact_time_remaining_column[None---:--] PASSED [437/788] tests/test_progress.py::test_compact_time_remaining_column[0-00:00] PASSED [438/788] tests/test_progress.py::test_compact_time_remaining_column[59-00:59] PASSED [439/788] tests/test_progress.py::test_compact_time_remaining_column[71-01:11] PASSED [440/788] tests/test_progress.py::test_compact_time_remaining_column[4210-1:10:10] PASSED [441/788] tests/test_progress.py::test_time_remaining_column_elapsed_when_finished PASSED [442/788] tests/test_progress.py::test_renderable_column PASSED [443/788] tests/test_progress.py::test_spinner_column PASSED [444/788] tests/test_progress.py::test_download_progress_uses_decimal_units PASSED [445/788] tests/test_progress.py::test_download_progress_uses_binary_units PASSED [446/788] tests/test_progress.py::test_task_ids PASSED [447/788] tests/test_progress.py::test_finished PASSED [448/788] tests/test_progress.py::test_expand_bar PASSED [449/788] tests/test_progress.py::test_progress_with_none_total_renders_a_pulsing_bar PASSED [450/788] tests/test_progress.py::test_render PASSED [451/788] tests/test_progress.py::test_track PASSED [452/788] tests/test_progress.py::test_progress_track PASSED [453/788] tests/test_progress.py::test_columns PASSED [454/788] tests/test_progress.py::test_using_default_columns PASSED [455/788] tests/test_progress.py::test_task_create PASSED [456/788] tests/test_progress.py::test_task_start PASSED [457/788] tests/test_progress.py::test_task_zero_total PASSED [458/788] tests/test_progress.py::test_progress_create PASSED [459/788] tests/test_progress.py::test_track_thread PASSED [460/788] tests/test_progress.py::test_reset PASSED [461/788] tests/test_progress.py::test_progress_max_refresh PASSED [462/788] tests/test_progress.py::test_live_is_started_if_progress_is_enabled PASSED [463/788] tests/test_progress.py::test_live_is_not_started_if_progress_is_disabled PASSED [464/788] tests/test_progress.py::test_no_output_if_progress_is_disabled PASSED [465/788] tests/test_progress.py::test_open PASSED [466/788] tests/test_progress.py::test_open_text_mode PASSED [467/788] tests/test_progress.py::test_wrap_file PASSED [468/788] tests/test_progress.py::test_wrap_file_task_total PASSED [469/788] tests/test_progress.py::test_task_progress_column_speed PASSED [470/788] tests/test_prompt.py::test_prompt_str PASSED [471/788] tests/test_prompt.py::test_prompt_str_default PASSED [472/788] tests/test_prompt.py::test_prompt_int PASSED [473/788] tests/test_prompt.py::test_prompt_confirm_no PASSED [474/788] tests/test_prompt.py::test_prompt_confirm_yes PASSED [475/788] tests/test_prompt.py::test_prompt_confirm_default PASSED [476/788] tests/test_protocol.py::test_rich_cast PASSED [477/788] tests/test_protocol.py::test_rich_cast_fake PASSED [478/788] tests/test_protocol.py::test_rich_cast_container PASSED [479/788] tests/test_protocol.py::test_abc PASSED [480/788] tests/test_protocol.py::test_cast_deep PASSED [481/788] tests/test_protocol.py::test_cast_recursive PASSED [482/788] tests/test_ratio.py::test_ratio_reduce[20-ratios0-maximums0-values0-result0] PASSED [483/788] tests/test_ratio.py::test_ratio_reduce[20-ratios1-maximums1-values1-result1] PASSED [484/788] tests/test_ratio.py::test_ratio_reduce[20-ratios2-maximums2-values2-result2] PASSED [485/788] tests/test_ratio.py::test_ratio_reduce[3-ratios3-maximums3-values3-result3] PASSED [486/788] tests/test_ratio.py::test_ratio_reduce[3-ratios4-maximums4-values4-result4] PASSED [487/788] tests/test_ratio.py::test_ratio_reduce[3-ratios5-maximums5-values5-result5] PASSED [488/788] tests/test_ratio.py::test_ratio_resolve PASSED [489/788] tests/test_repr.py::test_rich_repr PASSED [490/788] tests/test_repr.py::test_rich_repr_positional_only PASSED [491/788] tests/test_repr.py::test_rich_angular PASSED [492/788] tests/test_repr.py::test_rich_repr_auto PASSED [493/788] tests/test_repr.py::test_rich_repr_auto_angular PASSED [494/788] tests/test_repr.py::test_broken_egg PASSED [495/788] tests/test_repr.py::test_rich_pretty PASSED [496/788] tests/test_repr.py::test_rich_pretty_angular PASSED [497/788] tests/test_rich_print.py::test_get_console PASSED [498/788] tests/test_rich_print.py::test_reconfigure_console PASSED [499/788] tests/test_rich_print.py::test_rich_print PASSED [500/788] tests/test_rich_print.py::test_rich_print_json PASSED [501/788] tests/test_rich_print.py::test_rich_print_json_round_trip PASSED [502/788] tests/test_rich_print.py::test_rich_print_json_no_truncation PASSED [503/788] tests/test_rich_print.py::test_rich_print_X PASSED [504/788] tests/test_rule.py::test_rule PASSED [505/788] tests/test_rule.py::test_rule_error PASSED [506/788] tests/test_rule.py::test_rule_align PASSED [507/788] tests/test_rule.py::test_rule_cjk PASSED [508/788] tests/test_rule.py::test_rule_not_enough_space_for_title_text[center-\u2500\u2500\u2500\n] PASSED [509/788] tests/test_rule.py::test_rule_not_enough_space_for_title_text[left-\u2026 \u2500\n] PASSED [510/788] tests/test_rule.py::test_rule_not_enough_space_for_title_text[right-\u2500 \u2026\n] PASSED [511/788] tests/test_rule.py::test_rule_center_aligned_title_not_enough_space_for_rule PASSED [512/788] tests/test_rule.py::test_rule_side_aligned_not_enough_space_for_rule[left] PASSED [513/788] tests/test_rule.py::test_rule_side_aligned_not_enough_space_for_rule[right] PASSED [514/788] tests/test_rule.py::test_rule_just_enough_width_available_for_title[center-\u2500 \u2026 \u2500\n] PASSED [515/788] tests/test_rule.py::test_rule_just_enough_width_available_for_title[left-AB\u2026 \u2500\n] PASSED [516/788] tests/test_rule.py::test_rule_just_enough_width_available_for_title[right-\u2500 AB\u2026\n] PASSED [517/788] tests/test_rule.py::test_characters PASSED [518/788] tests/test_rule.py::test_repr PASSED [519/788] tests/test_rule.py::test_error PASSED [520/788] tests/test_rule_in_table.py::test_rule_in_unexpanded_table[expand_kwarg0] PASSED [521/788] tests/test_rule_in_table.py::test_rule_in_unexpanded_table[expand_kwarg1] PASSED [522/788] tests/test_rule_in_table.py::test_rule_in_expanded_table PASSED [523/788] tests/test_rule_in_table.py::test_rule_in_ratio_table PASSED [524/788] tests/test_screen.py::test_screen PASSED [525/788] tests/test_segment.py::test_repr PASSED [526/788] tests/test_segment.py::test_line PASSED [527/788] tests/test_segment.py::test_apply_style PASSED [528/788] tests/test_segment.py::test_split_lines PASSED [529/788] tests/test_segment.py::test_split_and_crop_lines PASSED [530/788] tests/test_segment.py::test_adjust_line_length PASSED [531/788] tests/test_segment.py::test_get_line_length PASSED [532/788] tests/test_segment.py::test_get_shape PASSED [533/788] tests/test_segment.py::test_set_shape PASSED [534/788] tests/test_segment.py::test_simplify PASSED [535/788] tests/test_segment.py::test_filter_control PASSED [536/788] tests/test_segment.py::test_strip_styles PASSED [537/788] tests/test_segment.py::test_strip_links PASSED [538/788] tests/test_segment.py::test_remove_color PASSED [539/788] tests/test_segment.py::test_is_control PASSED [540/788] tests/test_segment.py::test_segments_renderable PASSED [541/788] tests/test_segment.py::test_divide PASSED [542/788] tests/test_segment.py::test_divide_complex FAILED [543/788] tests/test_segment.py::test_divide_emoji PASSED [544/788] tests/test_segment.py::test_divide_edge PASSED [545/788] tests/test_segment.py::test_divide_edge_2 PASSED [546/788] tests/test_segment.py::test_split_cells_emoji[XX-4-result0] PASSED [547/788] tests/test_segment.py::test_split_cells_emoji[X-1-result1] PASSED [548/788] tests/test_segment.py::test_split_cells_emoji[\U0001f4a9-1-result2] PASSED [549/788] tests/test_segment.py::test_split_cells_emoji[XY-1-result3] PASSED [550/788] tests/test_segment.py::test_split_cells_emoji[\U0001f4a9X-1-result4] PASSED [551/788] tests/test_segment.py::test_split_cells_emoji[\U0001f4a9\U0001f4a9-1-result5] PASSED [552/788] tests/test_segment.py::test_split_cells_emoji[X\U0001f4a9Y-2-result6] PASSED [553/788] tests/test_segment.py::test_split_cells_emoji[X\U0001f4a9YZ-2-result7] PASSED [554/788] tests/test_segment.py::test_split_cells_emoji[X\U0001f4a9\U0001f4a9Z-2-result8] PASSED [555/788] tests/test_segment.py::test_split_cells_emoji[X\U0001f4a9\U0001f4a9Z-3-result9] PASSED [556/788] tests/test_segment.py::test_split_cells_emoji[X\U0001f4a9\U0001f4a9Z-4-result10] PASSED [557/788] tests/test_segment.py::test_split_cells_emoji[X\U0001f4a9\U0001f4a9Z-5-result11] PASSED [558/788] tests/test_segment.py::test_split_cells_emoji[X\U0001f4a9\U0001f4a9Z-6-result12] PASSED [559/788] tests/test_segment.py::test_split_cells_emoji[XYZABC\U0001f4a9\U0001f4a9-6-result13] PASSED [560/788] tests/test_segment.py::test_split_cells_emoji[XYZABC\U0001f4a9\U0001f4a9-7-result14] PASSED [561/788] tests/test_segment.py::test_split_cells_emoji[XYZABC\U0001f4a9\U0001f4a9-8-result15] PASSED [562/788] tests/test_segment.py::test_split_cells_emoji[XYZABC\U0001f4a9\U0001f4a9-9-result16] PASSED [563/788] tests/test_segment.py::test_split_cells_emoji[XYZABC\U0001f4a9\U0001f4a9-10-result17] PASSED [564/788] tests/test_segment.py::test_split_cells_emoji[\U0001f4a9\U0001f4a9\U0001f4a9\U0001f4a9\U0001f4a9-3-result18] PASSED [565/788] tests/test_segment.py::test_split_cells_emoji[\U0001f4a9\U0001f4a9\U0001f4a9\U0001f4a9\U0001f4a9-4-result19] PASSED [566/788] tests/test_segment.py::test_split_cells_emoji[\U0001f4a9X\U0001f4a9Y\U0001f4a9Z\U0001f4a9A\U0001f4a9-4-result20] PASSED [567/788] tests/test_segment.py::test_split_cells_emoji[XYZABC-4-result21] PASSED [568/788] tests/test_segment.py::test_split_cells_emoji[XYZABC-5-result22] PASSED [569/788] tests/test_segment.py::test_split_cells_emoji[a1\u3042\uff11\uff11bcdaef-9-result23] PASSED [570/788] tests/test_segment.py::test_segment_lines_renderable PASSED [571/788] tests/test_segment.py::test_align_top PASSED [572/788] tests/test_segment.py::test_align_middle PASSED [573/788] tests/test_segment.py::test_align_bottom PASSED [574/788] tests/test_spinner.py::test_spinner_create PASSED [575/788] tests/test_spinner.py::test_spinner_render PASSED [576/788] tests/test_spinner.py::test_spinner_update PASSED [577/788] tests/test_spinner.py::test_rich_measure PASSED [578/788] tests/test_spinner.py::test_spinner_markup PASSED [579/788] tests/test_stack.py::test_stack PASSED [580/788] tests/test_status.py::test_status PASSED [581/788] tests/test_status.py::test_renderable PASSED [582/788] tests/test_style.py::test_str PASSED [583/788] tests/test_style.py::test_ansi_codes PASSED [584/788] tests/test_style.py::test_repr PASSED [585/788] tests/test_style.py::test_eq PASSED [586/788] tests/test_style.py::test_hash PASSED [587/788] tests/test_style.py::test_empty PASSED [588/788] tests/test_style.py::test_bool PASSED [589/788] tests/test_style.py::test_color_property PASSED [590/788] tests/test_style.py::test_bgcolor_property PASSED [591/788] tests/test_style.py::test_parse PASSED [592/788] tests/test_style.py::test_link_id PASSED [593/788] tests/test_style.py::test_get_html_style PASSED [594/788] tests/test_style.py::test_chain PASSED [595/788] tests/test_style.py::test_copy PASSED [596/788] tests/test_style.py::test_render PASSED [597/788] tests/test_style.py::test_test PASSED [598/788] tests/test_style.py::test_add PASSED [599/788] tests/test_style.py::test_iadd PASSED [600/788] tests/test_style.py::test_style_stack PASSED [601/788] tests/test_style.py::test_pick_first PASSED [602/788] tests/test_style.py::test_background_style PASSED [603/788] tests/test_style.py::test_without_color PASSED [604/788] tests/test_style.py::test_meta PASSED [605/788] tests/test_style.py::test_from_meta PASSED [606/788] tests/test_style.py::test_on PASSED [607/788] tests/test_style.py::test_clear_meta_and_links PASSED [608/788] tests/test_styled.py::test_styled PASSED [609/788] tests/test_syntax.py::test_blank_lines FAILED [610/788] tests/test_syntax.py::test_python_render FAILED [611/788] tests/test_syntax.py::test_python_render_simple FAILED [612/788] tests/test_syntax.py::test_python_render_simple_passing_lexer_instance FAILED [613/788] tests/test_syntax.py::test_python_render_indent_guides FAILED [614/788] tests/test_syntax.py::test_pygments_syntax_theme_non_str PASSED [615/788] tests/test_syntax.py::test_pygments_syntax_theme PASSED [616/788] tests/test_syntax.py::test_get_line_color_none PASSED [617/788] tests/test_syntax.py::test_highlight_background_color PASSED [618/788] tests/test_syntax.py::test_get_number_styles PASSED [619/788] tests/test_syntax.py::test_get_style_for_token PASSED [620/788] tests/test_syntax.py::test_option_no_wrap FAILED [621/788] tests/test_syntax.py::test_syntax_highlight_ranges FAILED [622/788] tests/test_syntax.py::test_ansi_theme PASSED [623/788] tests/test_syntax.py::test_from_path PASSED [624/788] tests/test_syntax.py::test_from_path_unknown_lexer PASSED [625/788] tests/test_syntax.py::test_from_path_lexer_override PASSED [626/788] tests/test_syntax.py::test_from_path_lexer_override_invalid_lexer PASSED [627/788] tests/test_syntax.py::test_syntax_guess_lexer PASSED [628/788] tests/test_syntax.py::test_syntax_padding PASSED [629/788] tests/test_syntax.py::test_syntax_measure PASSED [630/788] tests/test_table.py::test_render_table PASSED [631/788] tests/test_table.py::test_not_renderable PASSED [632/788] tests/test_table.py::test_init_append_column PASSED [633/788] tests/test_table.py::test_rich_measure PASSED [634/788] tests/test_table.py::test_min_width PASSED [635/788] tests/test_table.py::test_no_columns PASSED [636/788] tests/test_table.py::test_get_row_style PASSED [637/788] tests/test_table.py::test_vertical_align_top PASSED [638/788] tests/test_table.py::test_table_show_header_false_substitution[None- 1 2 \n 3 4 \n] PASSED [639/788] tests/test_table.py::test_table_show_header_false_substitution[box1-\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n\u2502 1 \u2502 2 \u2502\n\u2502 3 \u2502 4 \u2502\n\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n] PASSED [640/788] tests/test_table.py::test_table_show_header_false_substitution[box2-\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2510\n\u2502 1 \u2502 2 \u2502\n\u2502 3 \u2502 4 \u2502\n\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2518\n] PASSED [641/788] tests/test_table.py::test_table_show_header_false_substitution[box3- \u2577 \n 1 \u2502 2 \n 3 \u2502 4 \n \u2575 \n] PASSED [642/788] tests/test_table.py::test_table_show_header_false_substitution[box4- \u2577 \n 1 \u2502 2 \n 3 \u2502 4 \n \u2575 \n] PASSED [643/788] tests/test_table.py::test_table_show_header_false_substitution[box5-+---+---+\n| 1 | 2 |\n| 3 | 4 |\n+---+---+\n] PASSED [644/788] tests/test_table.py::test_section PASSED [645/788] tests/test_text.py::test_span PASSED [646/788] tests/test_text.py::test_span_split PASSED [647/788] tests/test_text.py::test_span_move PASSED [648/788] tests/test_text.py::test_span_right_crop PASSED [649/788] tests/test_text.py::test_len PASSED [650/788] tests/test_text.py::test_cell_len PASSED [651/788] tests/test_text.py::test_bool PASSED [652/788] tests/test_text.py::test_str PASSED [653/788] tests/test_text.py::test_repr PASSED [654/788] tests/test_text.py::test_add PASSED [655/788] tests/test_text.py::test_eq PASSED [656/788] tests/test_text.py::test_contain PASSED [657/788] tests/test_text.py::test_plain_property PASSED [658/788] tests/test_text.py::test_plain_property_setter PASSED [659/788] tests/test_text.py::test_from_markup PASSED [660/788] tests/test_text.py::test_from_ansi PASSED [661/788] tests/test_text.py::test_copy PASSED [662/788] tests/test_text.py::test_rstrip PASSED [663/788] tests/test_text.py::test_rstrip_end PASSED [664/788] tests/test_text.py::test_stylize PASSED [665/788] tests/test_text.py::test_stylize_before PASSED [666/788] tests/test_text.py::test_stylize_negative_index PASSED [667/788] tests/test_text.py::test_highlight_regex PASSED [668/788] tests/test_text.py::test_highlight_regex_callable PASSED [669/788] tests/test_text.py::test_highlight_words PASSED [670/788] tests/test_text.py::test_set_length PASSED [671/788] tests/test_text.py::test_console_width PASSED [672/788] tests/test_text.py::test_join PASSED [673/788] tests/test_text.py::test_trim_spans PASSED [674/788] tests/test_text.py::test_pad_left PASSED [675/788] tests/test_text.py::test_pad_right PASSED [676/788] tests/test_text.py::test_append PASSED [677/788] tests/test_text.py::test_append_text PASSED [678/788] tests/test_text.py::test_end PASSED [679/788] tests/test_text.py::test_split PASSED [680/788] tests/test_text.py::test_split_spans PASSED [681/788] tests/test_text.py::test_divide PASSED [682/788] tests/test_text.py::test_right_crop PASSED [683/788] tests/test_text.py::test_wrap_3 PASSED [684/788] tests/test_text.py::test_wrap_4 PASSED [685/788] tests/test_text.py::test_wrap_wrapped_word_length_greater_than_available_width PASSED [686/788] tests/test_text.py::test_wrap_cjk PASSED [687/788] tests/test_text.py::test_wrap_cjk_width_mid_character PASSED [688/788] tests/test_text.py::test_wrap_long PASSED [689/788] tests/test_text.py::test_wrap_overflow PASSED [690/788] tests/test_text.py::test_wrap_overflow_long PASSED [691/788] tests/test_text.py::test_wrap_long_words PASSED [692/788] tests/test_text.py::test_wrap_long_words_2 PASSED [693/788] tests/test_text.py::test_wrap_long_words_justify_left PASSED [694/788] tests/test_text.py::test_no_wrap_no_crop PASSED [695/788] tests/test_text.py::test_fit PASSED [696/788] tests/test_text.py::test_wrap_tabs PASSED [697/788] tests/test_text.py::test_render PASSED [698/788] tests/test_text.py::test_render_simple PASSED [699/788] tests/test_text.py::test_print[.-.\n] PASSED [700/788] tests/test_text.py::test_print[print_text1-. .\n] PASSED [701/788] tests/test_text.py::test_print[print_text2-Hello World !\n] PASSED [702/788] tests/test_text.py::test_print_sep_end[.-.X] PASSED [703/788] tests/test_text.py::test_print_sep_end[print_text1-..X] PASSED [704/788] tests/test_text.py::test_print_sep_end[print_text2-HelloWorld!X] PASSED [705/788] tests/test_text.py::test_tabs_to_spaces PASSED [706/788] tests/test_text.py::test_markup_switch PASSED [707/788] tests/test_text.py::test_emoji PASSED [708/788] tests/test_text.py::test_emoji_switch PASSED [709/788] tests/test_text.py::test_assemble PASSED [710/788] tests/test_text.py::test_assemble_meta PASSED [711/788] tests/test_text.py::test_styled PASSED [712/788] tests/test_text.py::test_strip_control_codes PASSED [713/788] tests/test_text.py::test_get_style_at_offset PASSED [714/788] tests/test_text.py::test_truncate_ellipsis[Hello-10-Hello] PASSED [715/788] tests/test_text.py::test_truncate_ellipsis[Hello-5-Hello] PASSED [716/788] tests/test_text.py::test_truncate_ellipsis[Hello-4-Hel\u2026] PASSED [717/788] tests/test_text.py::test_truncate_ellipsis[Hello-3-He\u2026] PASSED [718/788] tests/test_text.py::test_truncate_ellipsis[Hello-2-H\u2026] PASSED [719/788] tests/test_text.py::test_truncate_ellipsis[Hello-1-\u2026] PASSED [720/788] tests/test_text.py::test_truncate_ellipsis_pad[Hello-5-Hello] PASSED [721/788] tests/test_text.py::test_truncate_ellipsis_pad[Hello-10-Hello ] PASSED [722/788] tests/test_text.py::test_truncate_ellipsis_pad[Hello-3-He\u2026] PASSED [723/788] tests/test_text.py::test_pad PASSED [724/788] tests/test_text.py::test_align_left PASSED [725/788] tests/test_text.py::test_align_right PASSED [726/788] tests/test_text.py::test_align_center PASSED [727/788] tests/test_text.py::test_detect_indentation PASSED [728/788] tests/test_text.py::test_indentation_guides PASSED [729/788] tests/test_text.py::test_slice PASSED [730/788] tests/test_text.py::test_wrap_invalid_style PASSED [731/788] tests/test_text.py::test_apply_meta PASSED [732/788] tests/test_text.py::test_on PASSED [733/788] tests/test_text.py::test_markup_property PASSED [734/788] tests/test_theme.py::test_inherit PASSED [735/788] tests/test_theme.py::test_config PASSED [736/788] tests/test_theme.py::test_from_file PASSED [737/788] tests/test_theme.py::test_read PASSED [738/788] tests/test_theme.py::test_theme_stack PASSED [739/788] tests/test_tools.py::test_loop_first PASSED [740/788] tests/test_tools.py::test_loop_last PASSED [741/788] tests/test_tools.py::test_loop_first_last PASSED [742/788] tests/test_tools.py::test_ratio_distribute PASSED [743/788] tests/test_traceback.py::test_handler PASSED [744/788] tests/test_traceback.py::test_capture PASSED [745/788] tests/test_traceback.py::test_no_exception PASSED [746/788] tests/test_traceback.py::test_print_exception PASSED [747/788] tests/test_traceback.py::test_print_exception_no_msg PASSED [748/788] tests/test_traceback.py::test_print_exception_locals PASSED [749/788] tests/test_traceback.py::test_syntax_error PASSED [750/788] tests/test_traceback.py::test_nested_exception PASSED [751/788] tests/test_traceback.py::test_caused_exception PASSED [752/788] tests/test_traceback.py::test_filename_with_bracket PASSED [753/788] tests/test_traceback.py::test_filename_not_a_file PASSED [754/788] tests/test_traceback.py::test_traceback_console_theme_applies PASSED [755/788] tests/test_traceback.py::test_broken_str PASSED [756/788] tests/test_traceback.py::test_guess_lexer PASSED [757/788] tests/test_traceback.py::test_guess_lexer_yaml_j2 PASSED [758/788] tests/test_traceback.py::test_recursive PASSED [759/788] tests/test_traceback.py::test_suppress PASSED [760/788] tests/test_traceback.py::test_rich_traceback_omit_optional_local_flag[True-3-expected_frame_names0] PASSED [761/788] tests/test_traceback.py::test_rich_traceback_omit_optional_local_flag[False-4-expected_frame_names1] PASSED [762/788] tests/test_tree.py::test_render_single_node PASSED [763/788] tests/test_tree.py::test_render_single_branch PASSED [764/788] tests/test_tree.py::test_render_double_branch PASSED [765/788] tests/test_tree.py::test_render_ascii PASSED [766/788] tests/test_tree.py::test_render_tree_non_win32 PASSED [767/788] tests/test_tree.py::test_render_tree_win32 SKIPPED (Windows specific) [768/788] tests/test_tree.py::test_render_tree_hide_root_non_win32 PASSED [769/788] tests/test_tree.py::test_render_tree_hide_root_win32 SKIPPED (Windows specific) [770/788] tests/test_tree.py::test_tree_measure PASSED [771/788] tests/test_windows_renderer.py::test_text_only SKIPPED (windows only) [772/788] tests/test_windows_renderer.py::test_text_multiple_segments SKIPPED (windows only) [773/788] tests/test_windows_renderer.py::test_text_with_style SKIPPED (windows only) [774/788] tests/test_windows_renderer.py::test_control_cursor_move_to SKIPPED (windows only) [775/788] tests/test_windows_renderer.py::test_control_carriage_return SKIPPED (windows only) [776/788] tests/test_windows_renderer.py::test_control_home SKIPPED (windows only) [777/788] tests/test_windows_renderer.py::test_control_cursor_single_cell_movement[ControlType.CURSOR_UP-move_cursor_up] SKIPPED (windows only) [778/788] tests/test_windows_renderer.py::test_control_cursor_single_cell_movement[ControlType.CURSOR_DOWN-move_cursor_down] SKIPPED (windows only) [779/788] tests/test_windows_renderer.py::test_control_cursor_single_cell_movement[ControlType.CURSOR_FORWARD-move_cursor_forward] SKIPPED (windows only) [780/788] tests/test_windows_renderer.py::test_control_cursor_single_cell_movement[ControlType.CURSOR_BACKWARD-move_cursor_backward] SKIPPED (windows only) [781/788] tests/test_windows_renderer.py::test_control_erase_line[0-erase_end_of_line] SKIPPED (windows only) [782/788] tests/test_windows_renderer.py::test_control_erase_line[1-erase_start_of_line] SKIPPED (windows only) [783/788] tests/test_windows_renderer.py::test_control_erase_line[2-erase_line] SKIPPED (windows only) [784/788] tests/test_windows_renderer.py::test_control_show_cursor SKIPPED (windows only) [785/788] tests/test_windows_renderer.py::test_control_hide_cursor SKIPPED (windows only) [786/788] tests/test_windows_renderer.py::test_control_cursor_move_to_column SKIPPED (windows only) [787/788] tests/test_windows_renderer.py::test_control_set_terminal_window_title SKIPPED (windows only) [788/788] =================================== FAILURES =================================== _________________________________ test_decode __________________________________ def test_decode(): console = Console( force_terminal=True, legacy_windows=False, color_system="truecolor" ) console.begin_capture() console.print("Hello") console.print("[b]foo[/b]") console.print("[link http://example.org]bar") console.print("[#ff0000 on color(200)]red") console.print("[color(200) on #ff0000]red") terminal_codes = console.end_capture() decoder = AnsiDecoder() lines = list(decoder.decode(terminal_codes)) expected = [ Text("Hello"), Text("foo", spans=[Span(0, 3, Style.parse("bold"))]), Text("bar", spans=[Span(0, 3, Style.parse("link http://example.org"))]), Text("red", spans=[Span(0, 3, Style.parse("#ff0000 on color(200)"))]), Text("red", spans=[Span(0, 3, Style.parse("color(200) on #ff0000"))]), ] > assert lines == expected E AssertionError: assert [, , , , ] == [, , , , ] E At index 3 diff: != E Full diff: E [ E , E , E , E - , E - , E + , E + , E ] console = decoder = expected = [, , , , ] lines = [, , , , ] terminal_codes = ('Hello\n' '\x1b[1mfoo\x1b[0m\n' '\x1b]8;id=757453;http://example.org\x1b\\bar\x1b]8;;\x1b\\\n' 'red\n' 'red\n') tests/test_ansi.py:32: AssertionError _____________________________ test_decode_example ______________________________ def test_decode_example(): ansi_bytes = b"\x1b[01m\x1b[KC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[m\x1b[K In function '\x1b[01m\x1b[Kmain\x1b[m\x1b[K':\n\x1b[01m\x1b[KC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[m\x1b[K \x1b[01;35m\x1b[Kwarning: \x1b[m\x1b[Kunused variable '\x1b[01m\x1b[Ka\x1b[m\x1b[K' [\x1b[01;35m\x1b[K-Wunused-variable\x1b[m\x1b[K]\n 3 | int \x1b[01;35m\x1b[Ka\x1b[m\x1b[K=1;\n | \x1b[01;35m\x1b[K^\x1b[m\x1b[K\n" ansi_text = ansi_bytes.decode("utf-8") text = Text.from_ansi(ansi_text) console = Console( force_terminal=True, legacy_windows=False, color_system="truecolor" ) with console.capture() as capture: console.print(text) result = capture.get() print(repr(result)) expected = "\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[0m In function '\x1b[1mmain\x1b[0m':\n\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[0m \x1b[1;35mwarning: \x1b[0munused variable '\x1b[1ma\x1b[0m' \n[\x1b[1;35m-Wunused-variable\x1b[0m]\n 3 | int \x1b[1;35ma\x1b[0m=1;\n | \x1b[1;35m^\x1b[0m\n" > assert result == expected E assert "\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[0m In function '\x1b[1mmain\x1b[0m':\n\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[0m \x1b[1mwarning: \x1b[0munused variable '\x1b[1ma\x1b[0m' \n[\x1b[1m-Wunused-variable\x1b[0m]\n 3 | int \x1b[1ma\x1b[0m=1;\n | \x1b[1m^\x1b[0m\n" == "\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[0m In function '\x1b[1mmain\x1b[0m':\n\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[0m \x1b[1;35mwarning: \x1b[0munused variable '\x1b[1ma\x1b[0m' \n[\x1b[1;35m-Wunused-variable\x1b[0m]\n 3 | int \x1b[1;35ma\x1b[0m=1;\n | \x1b[1;35m^\x1b[0m\n" E C:\Users\stefa\AppData\Local\Temp\tmp3ydingba: In function 'main': E - C:\Users\stefa\AppData\Local\Temp\tmp3ydingba:3:5: warning: unused variable 'a' E ? --- E + C:\Users\stefa\AppData\Local\Temp\tmp3ydingba:3:5: warning: unused variable 'a' E - [-Wunused-variable] E ? --- E + [-Wunused-variable] E - 3 | int a=1; E ? --- E + 3 | int a=1; E - | ^ E ? --- E + | ^ ansi_bytes = (b'\x1b[01m\x1b[KC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[' b"m\x1b[K In function '\x1b[01m\x1b[Kmain\x1b[m\x1b[K':\n\x1b[01m\x1b[KC:\\Us" b'ers\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[m\x1b[K \x1b[01;35m' b"\x1b[Kwarning: \x1b[m\x1b[Kunused variable '\x1b[01m\x1b[Ka\x1b[m\x1b[K' " b'[\x1b[01;35m\x1b[K-Wunused-variable\x1b[m\x1b[K]\n 3 | int \x1b[01;35' b'm\x1b[Ka\x1b[m\x1b[K=1;\n | \x1b[01;35m\x1b[K^\x1b[m\x1b[K\n') ansi_text = ('\x1b[01m\x1b[KC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[m\x1b[K ' "In function '\x1b[01m\x1b[Kmain\x1b[m\x1b[K':\n" '\x1b[01m\x1b[KC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[m\x1b[K ' '\x1b[01;35m\x1b[Kwarning: \x1b[m\x1b[Kunused variable ' "'\x1b[01m\x1b[Ka\x1b[m\x1b[K' " '[\x1b[01;35m\x1b[K-Wunused-variable\x1b[m\x1b[K]\n' ' 3 | int \x1b[01;35m\x1b[Ka\x1b[m\x1b[K=1;\n' ' | \x1b[01;35m\x1b[K^\x1b[m\x1b[K\n') capture = console = expected = ('\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[0m In ' "function '\x1b[1mmain\x1b[0m':\n" '\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[0m ' "\x1b[1;35mwarning: \x1b[0munused variable '\x1b[1ma\x1b[0m' \n" '[\x1b[1;35m-Wunused-variable\x1b[0m]\n' ' 3 | int \x1b[1;35ma\x1b[0m=1;\n' ' | \x1b[1;35m^\x1b[0m\n') result = ('\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[0m In ' "function '\x1b[1mmain\x1b[0m':\n" '\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[0m ' "\x1b[1mwarning: \x1b[0munused variable '\x1b[1ma\x1b[0m' \n" '[\x1b[1m-Wunused-variable\x1b[0m]\n' ' 3 | int \x1b[1ma\x1b[0m=1;\n' ' | \x1b[1m^\x1b[0m\n') text = tests/test_ansi.py:49: AssertionError ----------------------------- Captured stdout call ----------------------------- "\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:\x1b[0m In function '\x1b[1mmain\x1b[0m':\n\x1b[1mC:\\Users\\stefa\\AppData\\Local\\Temp\\tmp3ydingba:3:5:\x1b[0m \x1b[1mwarning: \x1b[0munused variable '\x1b[1ma\x1b[0m' \n[\x1b[1m-Wunused-variable\x1b[0m]\n 3 | int \x1b[1ma\x1b[0m=1;\n | \x1b[1m^\x1b[0m\n" _________________________________ test_render __________________________________ def test_render(): bar = ProgressBar(completed=11, width=50) bar_render = render(bar) > assert bar_render == expected[0] E AssertionError: assert '━━━━━╸' == '\x1b[38;2;249;38;114m━━━━━\x1b[0m\x1b[38;2;249;38;114m╸\x1b[0m\x1b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\x1b[0m' E - ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E + ━━━━━╸ bar = bar_render = '━━━━━╸' tests/test_bar.py:36: AssertionError __________________________________ test_pulse __________________________________ def test_pulse(): bar = ProgressBar(pulse=True, animation_time=10) bar_render = render(bar) print(repr(bar_render)) expected = "\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m" > assert bar_render == expected E AssertionError: assert ' ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━' == '\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m' E - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E + ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ bar = bar_render = (' ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ ' '━━━━━━━━━━ ━━━━━━━━━━') expected = '\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;249;38;114m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;58;58;58m━\x1b[0m\x1b[38;2;62;57;59m━\x1b[0m\x1b[38;2;76;56;63m━\x1b[0m\x1b[38;2;97;53;69m━\x1b[0m\x1b[38;2;123;51;77m━\x1b[0m\x1b[38;2;153;48;86m━\x1b[0m\x1b[38;2;183;44;94m━\x1b[0m\x1b[38;2;209;42;102m━\x1b[0m\x1b[38;2;230;39;108m━\x1b[0m\x1b[38;2;244;38;112m━\x1b[0m' tests/test_bar.py:61: AssertionError ----------------------------- Captured stdout call ----------------------------- ' ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━' _________________________________ test_render __________________________________ def test_render(): bar = Bar(size=100, begin=11, end=62, width=50) bar_render = render(bar) > assert bar_render == expected[0] E AssertionError: assert ' ▐█████████████████████████ \n' == '\x1b[39;49m ▐█████████████████████████ \x1b[0m\n' E - ▐█████████████████████████ E ? -------- ---- E + ▐█████████████████████████ bar = Bar(100, 11, 62) bar_render = ' ▐█████████████████████████ \n' tests/test_block_bar.py:22: AssertionError _______________________________ test_card_render _______________________________ def test_card_render(): card = make_test_card() result = render(card) > assert result == expected E assert '\x1b[3m Rich features \x1b[0m\n\x1b[1m \x1b[0m \n\x1b[1m \x1b[0m\x1b[1m Colors \x1b[0m\x1b[1m \x1b[0m✓ \x1b[1m4-bit color\x1b[0m ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n\x1b[1m \x1b[0m✓ \x1b[1m8-bit color\x1b[0m ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n\x1b[1m \x1b[0m✓ \x1b[1mTruecolor (16.7 million)\x1b[0m ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n\x1b[1m \x1b[0m✓ \x1b[1mDumb terminals\x1b[0m ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n\x1b[1m \x1b[0m✓ \x1b[1mAutomatic color conversion\x1b[0m ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n\x1b[1m \x1b[0m \n\x1b[1m \x1b[0m\x1b[1m Styles \x1b[0m\x1b[1m \x1b[0mAll ansi styles: \x1b[1mbold\x1b[0m, \x1b[2mdim\x1b[0m, \x1b[3mitalic\x1b[0m, \x1b[4munderline\x1b[0m, \x1b[9mstrikethrough\x1b[0m, \x1b[7mreverse\x1b[0m, and even \n\x1b[1m \x1b[0m\x1b[5mblink\x1b[0m. \n\x1b[1m \x1b[0m \n\x1b[1m \x1b[0m\x1b[1m Text \x1b[0m\x1b[1m \x1b[0mWord wrap text. Justify left, center, right or full. \n\x1b[1m \x1b[0m \n\x1b[1m \x1b[0mLorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor sit \n\x1b[1m \x1b[0msit amet, sit amet, sit amet, amet, consectetur \n\x1b[1m \x1b[0mconsectetur consectetur consectetur adipiscing elit. \n\x1b[1m \x1b[0madipiscing elit. adipiscing elit. adipiscing elit. Quisque in metus sed \n\x1b[1m \x1b[0mQuisque in metus sed Quisque in metus sed Quisque in metus sed sapien ultricies \n\x1b[1m \x1b[0msapien ultricies sapien ultricies sapien ultricies pretium a at justo. \n\x1b[1m \x1b[0mpretium a at justo. pretium a at justo. pretium a at justo. Maecenas luctus velit \n\x1b[1m \x1b[0mMaecenas luctus Maecenas luctus Maecenas luctus et auctor maximus. \n\x1b[1m \x1b[0mvelit et auctor velit et auctor velit et auctor \n\x1b[1m \x1b[0mmaximus. maximus. maximus. \n\x1b[1m \x1b[0m \n\x1b[1m \x1b[0m\x1b[1m Asian \x1b[0m\x1b[1m \x1b[0m、日本、のテキストをサ、日本、のテキストをサポートしています \n\x1b[1;31m \x1b[0m\x1b[1;31m support \x1b[0m\x1b[1;31m \x1b[0m🇰🇷 이 라이브러리는 중국어, 일본어 및 한국어 텍스트를 지n\x1b[1;31m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31m Markup \x1b[0m\x1b[1;31m \x1b[0m\x1b[1;35mRich\x1b[0m supports a simple \x1b[3mbbcode\x1b[0m-like \x1b[1mmarkup\x1b[0m for \x1b[33mcolor\x1b[0m, \x1b[4mstyle\x1b[0m, and emoji! 👍 🍎 🐜 🐻 … \n\x1b[1;31m \x1b[0m🚌 \n\x1b[1;31m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31m Tables \x1b[0m\x1b[1;31m \x1b[0m\x1b[1m \x1b[0m\x1b[1;32mDate\x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m \x1b[1m \x1b[0m\x1b[1;34mTitle\x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m \x1b[1m \x1b[0m\x1b[1;36mProduction Budget\x1b[0m\x1b[1m \x1b[0m \x1b[1m \x1b[0m\x1b[1m \x1b[0m\x1b[1;35mBox Office\x1b[0m\x1b[1m \x1b[0m \n\x1b[1;31m \x1b[0m───────────────────────────────────────────────────────────────────────────────────── \n\x1b[1;31m \x1b[0m\x1b[32m \x1b[0m\x1b[32mDec 20, 2019\x1b[0m\x1b[32m \x1b[0m \x1b[34m \x1b[0m\x1b[34mStar Wars: The Rise of \x1b[0m\x1b[34m \x1b[0m \x1b[36m \x1b[0m\x1b[36m $275,000,000\x1b[0m\x1b[36m \x1b[0m \x1b[35m \x1b[0m\x1b[35m $375,126,118\x1b[0m\x1b[35m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[32m \x1b[0m \x1b[34m \x1b[0m\x1b[34mSkywalker \x1b[0m\x1b[34m \x1b[0m \x1b[36m \x1b[0m \x1b[35m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[2;32m \x1b[0m\x1b[2;32mMay 25, 2018\x1b[0m\x1b[2;32m \x1b[0m \x1b[2;34m \x1b[0m\x1b[1;2;34mSolo\x1b[0m\x1b[2;34m: A Star Wars Story \x1b[0m\x1b[2;34m \x1b[0m \x1b[2;36m \x1b[0m\x1b[2;36m $275,000,000\x1b[0m\x1b[2;36m \x1b[0m \x1b[2;35m \x1b[0m\x1b[2;35m $393,151,347\x1b[0m\x1b[2;35m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[32m \x1b[0m\x1b[32mDec 15, 2017\x1b[0m\x1b[32m \x1b[0m \x1b[34m \x1b[0m\x1b[34mStar Wars Ep. VIII: The Last \x1b[0m\x1b[34m \x1b[0m \x1b[36m \x1b[0m\x1b[36m $262,000,000\x1b[0m\x1b[36m \x1b[0m \x1b[35m \x1b[0m\x1b[1;35m$1,332,539,889\x1b[0m\x1b[35m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[32m \x1b[0m \x1b[34m \x1b[0m\x1b[34mJedi \x1b[0m\x1b[34m \x1b[0m \x1b[36m \x1b[0m \x1b[35m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[2;32m \x1b[0m\x1b[2;32mMay 19, 1999\x1b[0m\x1b[2;32m \x1b[0m \x1b[2;34m \x1b[0m\x1b[2;34mStar Wars Ep. \x1b[0m\x1b[1;2;34mI\x1b[0m\x1b[2;34m: \x1b[0m\x1b[2;3;34mThe phantom \x1b[0m\x1b[2;34m \x1b[0m\x1b[2;34m \x1b[0m \x1b[2;36m \x1b[0m\x1b[2;36m $115,000,000\x1b[0m\x1b[2;36m \x1b[0m \x1b[2;35m \x1b[0m\x1b[2;35m$1,027,044,677\x1b[0m\x1b[2;35m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[2;32m \x1b[0m \x1b[2;34m \x1b[0m\x1b[2;3;34mMenace\x1b[0m\x1b[2;34m \x1b[0m\x1b[2;34m \x1b[0m \x1b[2;36m \x1b[0m \x1b[2;35m \x1b[0m \n\x1b[1;31m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31m Syntax \x1b[0m\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 1 \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mdef\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34miter_last\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m>\x1b[0m \x1b[1m{\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31mhighlighting\x1b[0m\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple w\x1b[0m \x1b[2;32m│ \x1b[0m\x1b[32m\'foo\'\x1b[0m: \x1b[1m[\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31m & \x1b[0m\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[2;32m│ │ \x1b[0m\x1b[1;36m3.1427\x1b[0m, \n\x1b[1;31m \x1b[0m\x1b[1;31m pretty \x1b[0m\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[2;32m│ │ \x1b[0m\x1b[1m(\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31m printing \x1b[0m\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_va\x1b[0m \x1b[2;32m│ │ │ \x1b[0m\x1b[32m\'Paul Atreides\'\x1b[0m, \n\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[2;32m│ │ │ \x1b[0m\x1b[32m\'Vladimir Harkonnen\'\x1b[0m, \n\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[2;32m│ │ │ \x1b[0m\x1b[32m\'Thufir Hawat\'\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[2;32m│ │ \x1b[0m\x1b[1m)\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[2;32m│ \x1b[0m\x1b[1m]\x1b[0m, \n\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[2;32m│ \x1b[0m\x1b[32m\'atomic\'\x1b[0m: \x1b[1m(\x1b[0m\x1b[3;91mFalse\x1b[0m, \x1b[3;92mTrue\x1b[0m, \x1b[3;35mNone\x1b[0m\x1b[1m)\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m11 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m \x1b[1m}\x1b[0m \n\x1b[1;31m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31m Markdown \x1b[0m\x1b[1;31m \x1b[0m\x1b[36m# Markdown\x1b[0m ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \n\x1b[1;31m \x1b[0m ┃ \x1b[1mMarkdown\x1b[0m ┃ \n\x1b[1;31m \x1b[0m\x1b[36mSupports much of the *markdown* \x1b[0m ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\x1b[1;31m \x1b[0m\x1b[36m__syntax__!\x1b[0m \n\x1b[1;31m \x1b[0m Supports much of the \x1b[3mmarkdown\x1b[0m \x1b[1msyntax\x1b[0m! \n\x1b[1;31m \x1b[0m\x1b[36m- Headers\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[36m- Basic formatting: **bold**, *italic*, \x1b[0m \x1b[1;33m • \x1b[0mHeaders \n\x1b[1;31m \x1b[0m\x1b[36m`code`\x1b[0m \x1b[1;33m • \x1b[0mBasic formatting: \x1b[1mbold\x1b[0m, \x1b[3mitalic\x1b[0m, \x1b[1;36;40mcode\x1b[0m \n\x1b[1;31m \x1b[0m\x1b[36m- Block quotes\x1b[0m \x1b[1;33m • \x1b[0mBlock quotes \n\x1b[1;31m \x1b[0m\x1b[36m- Lists, and more...\x1b[0m \x1b[1;33m • \x1b[0mLists, and more... \n\x1b[1;31m \x1b[0m\x1b[36m \x1b[0m \n\x1b[1;31m \x1b[0m \n\x1b[1;31m \x1b[0m\x1b[1;31m +more! \x1b[0m\x1b[1;31m \x1b[0mProgress bars, columns, styled logging handler, tracebacks, etc... \n\x1b[1;31m \x1b[0m \n' E Rich features E - E ? --- E + E - Colors ✓ 4-bit color ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E - ✓ 8-bit color ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E - ✓ Truecolor (16.7 million) ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E - ✓ Dumb terminals ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E - ✓ Automatic color conversion ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E + Colors ✓ 4-bit color ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E + ✓ 8-bit color ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E + ✓ Truecolor (16.7 million) ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E + ✓ Dumb terminals ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E + ✓ Automatic color conversion ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ E - E ? --- E + E - Styles All ansi styles: bold, dim, italic, underline, strikethrough, reverse, and even E ? --- --- --- E + Styles All ansi styles: bold, dim, italic, underline, strikethrough, reverse, and even E - blink. E ? --- E + blink. E - E ? --- E + E - Text Word wrap text. Justify left, center, right or full. E ? --- --- --- ----- ---- ----- ---- ----- ---- ----- ---- E + Text Word wrap text. Justify left, center, right or full. E - E ? --- E + E - Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor sit E - sit amet, sit amet, sit amet, amet, consectetur E - consectetur consectetur consectetur adipiscing elit. E - adipiscing elit. adipiscing elit. adipiscing elit. Quisque in metus sed E - Quisque in metus sed Quisque in metus sed Quisque in metus sed sapien ultricies E - sapien ultricies sapien ultricies sapien ultricies pretium a at justo. E - pretium a at justo. pretium a at justo. pretium a at justo. Maecenas luctus velit E + Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor sit E + sit amet, sit amet, sit amet, amet, consectetur E + consectetur consectetur consectetur adipiscing elit. E + adipiscing elit. adipiscing elit. adipiscing elit. Quisque in metus sed E + Quisque in metus sed Quisque in metus sed Quisque in metus sed sapien ultricies E + sapien ultricies sapien ultricies sapien ultricies pretium a at justo. E + pretium a at justo. pretium a at justo. pretium a at justo. Maecenas luctus velit E - Maecenas luctus Maecenas luctus Maecenas luctus et auctor maximus. E ? --- ----- ^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^ ---- E + Maecenas luctus Maecenas luctus Maecenas luctus et auctor maximus. E ? ^ ^ ^ E - velit et auctor velit et auctor velit et auctor E ? --- ----- ^^^^^^^^^^ ^^^^^^^^^^ ---- E + velit et auctor velit et auctor velit et auctor E ? ^ ^ E - maximus. maximus. maximus. E ? --- ----- ^^^^^^^^^^ ^^^^^^^^^^ ---- E + maximus. maximus. maximus. E ? ^ ^ E - E ? --- E + E - Asian 🇨🇳 该库支持中文,日文和韩文文本! E ? --- --- --- E + Asian 🇨🇳 该库支持中文,日文和韩文文本! E - language 、日本、のテキストをサポートしています E ? --- --- --- E + language 、日本、のテキストをサポートしています E - support 🇰🇷 이 라이브러리는 중국어, 일본어 및 한국어 텍스트를 지합니다 E ? --- --- --- E + support 🇰🇷 이 라이브러리는 중국어, 일본어 및 한국어 텍스트를 지합니다 E - E ? --- E + E - Markup Rich supports a simple bbcode-like markup for color, style, and emoji! 👍 🍎 🐜 🐻 … E ? --- --- --- --- ----- ---- E + Markup Rich supports a simple bbcode-like markup for color, style, and emoji! 👍 🍎 🐜 🐻 … E - 🚌 E ? --- E + 🚌 E - E ? --- E + E - Tables Date Title Production Budget Box Office E ? ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ --- --- --- E + Tables Date Title Production Budget Box Office E ? ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ E - ───────────────────────────────────────────────────────────────────────────────────── E ? --- E + ───────────────────────────────────────────────────────────────────────────────────── E - Dec 20, 2019 Star Wars: The Rise of $275,000,000 $375,126,118 E - Skywalker E - May 25, 2018 Solo: A Star Wars Story $275,000,000 $393,151,347 E - Dec 15, 2017 Star Wars Ep. VIII: The Last $262,000,000 $1,332,539,889 E - Jedi E - May 19, 1999 Star Wars Ep. I: The phantom $115,000,000 $1,027,044,677 E + Dec 20, 2019 Star Wars: The Rise of $275,000,000 $375,126,118 E + Skywalker E + May 25, 2018 Solo: A Star Wars Story $275,000,000 $393,151,347 E + Dec 15, 2017 Star Wars Ep. VIII: The Last $262,000,000 $1,332,539,889 E + Jedi E + May 19, 1999 Star Wars Ep. I: The phantom $115,000,000 $1,027,044,677 E - Menace E ? --- ----------------------------------------- --- --- --- --- E + Menace E ? ++++++++++++++++++++++++++++++++ E - E ? --- E + E - Syntax 1 def iter_last(values: Iterable[T]) -> { E - highlighting 2 │ """Iterate and generate a tuple w │ 'foo': [ E - & 3 │ iter_values = iter(values) │ │ 3.1427, E - pretty 4 │ try: │ │ ( E - printing 5 │ │ previous_value = next(iter_va │ │ │ 'Paul Atreides', E - 6 │ except StopIteration: │ │ │ 'Vladimir Harkonnen', E - 7 │ │ return │ │ │ 'Thufir Hawat' E - 8 │ for value in iter_values: │ │ ) E - 9 │ │ yield False, previous_value │ ], E - 10 │ │ previous_value = value │ 'atomic': (False, True, None) E - 11 │ yield True, previous_value } E + Syntax 1 def iter_last(values: Iterable[T]) -> { E + highlighting 2 │ """Iterate and generate a tuple w │ 'foo': [ E + & 3 │ iter_values = iter(values) │ │ 3.1427, E + pretty 4 │ try: │ │ ( E + printing 5 │ │ previous_value = next(iter_va │ │ │ 'Paul Atreides', E + 6 │ except StopIteration: │ │ │ 'Vladimir Harkonnen', E + 7 │ │ return │ │ │ 'Thufir Hawat' E + 8 │ for value in iter_values: │ │ ) E + 9 │ │ yield False, previous_value │ ], E + 10 │ │ previous_value = value │ 'atomic': (False, True, None) E + 11 │ yield True, previous_value } E - E ? --- E + E - Markdown # Markdown ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ E ? --- --- --- ----- ---- E + Markdown # Markdown ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ E - ┃ Markdown ┃ E ? --- E + ┃ Markdown ┃ E - Supports much of the *markdown* ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E ? --- ----- ---- E + Supports much of the *markdown* ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E - __syntax__! E ? --- ----- ---- E + __syntax__! E - Supports much of the markdown syntax! E ? --- E + Supports much of the markdown syntax! E - - Headers E ? --- ----- ---- E + - Headers E - - Basic formatting: **bold**, *italic*, • Headers E ? --- ----- ---- --- E + - Basic formatting: **bold**, *italic*, • Headers E - `code` • Basic formatting: bold, italic, code E ? --- ----- ---- --- ------ E + `code` • Basic formatting: bold, italic, code E - - Block quotes • Block quotes E ? --- ----- ---- --- E + - Block quotes • Block quotes E - - Lists, and more... • Lists, and more... E ? --- ----- ---- --- E + - Lists, and more... • Lists, and more... E - E - E ? --- E + E - +more! Progress bars, columns, styled logging handler, tracebacks, etc... E - E ? --- E + E + +more! Progress bars, columns, styled logging handler, tracebacks, etc... E + card = result = ('\x1b[3m Rich ' 'features \x1b[0m\n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Colors \x1b[0m\x1b[1m \x1b[0m✓ \x1b[1m4-bit ' 'color\x1b[0m ' '▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n' '\x1b[1m \x1b[0m✓ \x1b[1m8-bit color\x1b[0m ' '▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n' '\x1b[1m \x1b[0m✓ \x1b[1mTruecolor (16.7 million)\x1b[0m ' '▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n' '\x1b[1m \x1b[0m✓ \x1b[1mDumb terminals\x1b[0m ' '▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n' '\x1b[1m \x1b[0m✓ \x1b[1mAutomatic color conversion\x1b[0m ' '▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Styles \x1b[0m\x1b[1m \x1b[0mAll ansi styles: ' '\x1b[1mbold\x1b[0m, \x1b[2mdim\x1b[0m, \x1b[3mitalic\x1b[0m, ' '\x1b[4munderline\x1b[0m, \x1b[9mstrikethrough\x1b[0m, \x1b[7mreverse\x1b[0m, ' 'and even \n' '\x1b[1m ' '\x1b[0m\x1b[5mblink\x1b[0m. \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Text \x1b[0m\x1b[1m \x1b[0mWord wrap text. ' 'Justify left, center, right or full. \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0mLorem ipsum dolor Lorem ipsum dolor ' 'Lorem ipsum dolor Lorem ipsum dolor sit \n' '\x1b[1m \x1b[0msit amet, sit ' 'amet, sit amet, amet, consectetur \n' '\x1b[1m \x1b[0mconsectetur ' 'consectetur consectetur adipiscing elit. \n' '\x1b[1m \x1b[0madipiscing elit. adipiscing elit. ' 'adipiscing elit. Quisque in metus sed \n' '\x1b[1m \x1b[0mQuisque in metus sed Quisque in metus sed ' 'Quisque in metus sed sapien ultricies \n' '\x1b[1m \x1b[0msapien ultricies sapien ultricies ' 'sapien ultricies pretium a at justo. \n' '\x1b[1m \x1b[0mpretium a at justo. pretium a at justo. ' 'pretium a at justo. Maecenas luctus velit \n' '\x1b[1m \x1b[0mMaecenas luctus Maecenas luctus ' 'Maecenas luctus et auctor maximus. \n' '\x1b[1m \x1b[0mvelit et auctor velit et auctor ' 'velit et auctor \n' '\x1b[1m \x1b[0mmaximus. ' 'maximus. maximus. \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Asian \x1b[0m\x1b[1m \x1b[0m🇨🇳 ' '该库支持中文,日文和韩文文本! \n' '\x1b[1m \x1b[0m\x1b[1m language \x1b[0m\x1b[1m \x1b[0m🇯🇵 ' 'ライブラリは中n' '\x1b[1m \x1b[0m\x1b[1m support \x1b[0m\x1b[1m \x1b[0m🇰🇷 이 라이브러리는 중국어, ' '일본어 및 한국어 텍스트를 지n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Markup \x1b[0m\x1b[1m \x1b[0m\x1b[1mRich\x1b[0m ' 'supports a simple \x1b[3mbbcode\x1b[0m-like \x1b[1mmarkup\x1b[0m for color, ' '\x1b[4mstyle\x1b[0m, and emoji! 👍 🍎 🐜 🐻 … \n' '\x1b[1m ' '\x1b[0m🚌 \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Tables \x1b[0m\x1b[1m \x1b[0m\x1b[1m ' '\x1b[0m\x1b[1mDate\x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m \x1b[1m ' '\x1b[0m\x1b[1mTitle\x1b[0m\x1b[1m \x1b[0m\x1b[1m ' '\x1b[0m \x1b[1m \x1b[0m\x1b[1mProduction Budget\x1b[0m\x1b[1m \x1b[0m ' '\x1b[1m \x1b[0m\x1b[1m \x1b[0m\x1b[1mBox Office\x1b[0m\x1b[1m \x1b[0m \n' '\x1b[1m ' '\x1b[0m───────────────────────────────────────────────────────────────────────────────────── \n' '\x1b[1m \x1b[0m Dec 20, 2019 Star Wars: The Rise ' 'of $275,000,000 $375,126,118 \n' '\x1b[1m \x1b[0m ' 'Skywalker \n' '\x1b[1m \x1b[0m\x1b[2m \x1b[0m\x1b[2mMay 25, 2018\x1b[0m\x1b[2m ' '\x1b[0m \x1b[2m \x1b[0m\x1b[1;2mSolo\x1b[0m\x1b[2m: A Star Wars Story ' '\x1b[0m\x1b[2m \x1b[0m \x1b[2m \x1b[0m\x1b[2m $275,000,000\x1b[0m\x1b[2m ' '\x1b[0m \x1b[2m \x1b[0m\x1b[2m $393,151,347\x1b[0m\x1b[2m \x1b[0m \n' '\x1b[1m \x1b[0m Dec 15, 2017 Star Wars Ep. VIII: The ' 'Last $262,000,000 \x1b[1m$1,332,539,889\x1b[0m \n' '\x1b[1m \x1b[0m ' 'Jedi \n' '\x1b[1m \x1b[0m\x1b[2m \x1b[0m\x1b[2mMay 19, 1999\x1b[0m\x1b[2m ' '\x1b[0m \x1b[2m \x1b[0m\x1b[2mStar Wars Ep. \x1b[0m\x1b[1;2mI\x1b[0m\x1b[2m: ' '\x1b[0m\x1b[2;3mThe phantom \x1b[0m\x1b[2m \x1b[0m\x1b[2m \x1b[0m \x1b[2m ' '\x1b[0m\x1b[2m $115,000,000\x1b[0m\x1b[2m \x1b[0m \x1b[2m ' '\x1b[0m\x1b[2m$1,027,044,677\x1b[0m\x1b[2m \x1b[0m \n' '\x1b[1m \x1b[0m\x1b[2m \x1b[0m \x1b[2m ' '\x1b[0m\x1b[2;3mMenace\x1b[0m\x1b[2m \x1b[0m\x1b[2m ' '\x1b[0m \x1b[2m \x1b[0m \x1b[2m \x1b[0m \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Syntax \x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m 1 ' 'def iter_last(values: Iterable[T]) -> ' '\x1b[1m{\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1mhighlighting\x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m 2 ' '\x1b[2m│ \x1b[0m"""Iterate and generate a tuple w \x1b[2m│ ' "\x1b[0m'foo': \x1b[1m[\x1b[0m \n" '\x1b[1m \x1b[0m\x1b[1m & \x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m 3 ' '\x1b[2m│ \x1b[0miter_values = iter(values) \x1b[2m│ │ ' '\x1b[0m\x1b[1m3.1427\x1b[0m, \n' '\x1b[1m \x1b[0m\x1b[1m pretty \x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m 4 ' '\x1b[2m│ \x1b[0mtry: \x1b[2m│ │ ' '\x1b[0m\x1b[1m(\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m printing \x1b[0m\x1b[1m \x1b[0m\x1b[1m \x1b[0m 5 ' '\x1b[2m│ │ \x1b[0mprevious_value = next(iter_va \x1b[2m│ │ │ ' "\x1b[0m'Paul Atreides', \n" '\x1b[1m \x1b[0m\x1b[1m \x1b[0m 6 \x1b[2m│ \x1b[0mexcept ' "StopIteration: \x1b[2m│ │ │ \x1b[0m'Vladimir " "Harkonnen', \n" '\x1b[1m \x1b[0m\x1b[1m \x1b[0m 7 \x1b[2m│ │ ' "\x1b[0mreturn \x1b[2m│ │ │ \x1b[0m'Thufir " "Hawat' \n" '\x1b[1m \x1b[0m\x1b[1m \x1b[0m 8 \x1b[2m│ \x1b[0mfor value ' 'in iter_values: \x1b[2m│ │ ' '\x1b[0m\x1b[1m)\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m \x1b[0m 9 \x1b[2m│ │ \x1b[0myield ' 'False, previous_value \x1b[2m│ ' '\x1b[0m\x1b[1m]\x1b[0m, \n' '\x1b[1m \x1b[0m\x1b[1m \x1b[0m10 \x1b[2m│ │ ' "\x1b[0mprevious_value = value \x1b[2m│ \x1b[0m'atomic': " '\x1b[1m(\x1b[0m\x1b[3mFalse\x1b[0m, \x1b[3mTrue\x1b[0m, ' '\x1b[3mNone\x1b[0m\x1b[1m)\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m \x1b[0m11 \x1b[2m│ \x1b[0myield True, ' 'previous_value ' '\x1b[1m}\x1b[0m \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m Markdown \x1b[0m\x1b[1m \x1b[0m# ' 'Markdown ' '┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \n' '\x1b[1m \x1b[0m ' '┃ \x1b[1mMarkdown\x1b[0m ┃ \n' '\x1b[1m \x1b[0mSupports much of the *markdown* ' '┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n' '\x1b[1m ' '\x1b[0m__syntax__! \n' '\x1b[1m \x1b[0m ' 'Supports much of the \x1b[3mmarkdown\x1b[0m \x1b[1msyntax\x1b[0m! \n' '\x1b[1m \x1b[0m- ' 'Headers \n' '\x1b[1m \x1b[0m- Basic formatting: **bold**, *italic*, ' '\x1b[1m • \x1b[0mHeaders \n' '\x1b[1m \x1b[0m`code` ' '\x1b[1m • \x1b[0mBasic formatting: \x1b[1mbold\x1b[0m, \x1b[3mitalic\x1b[0m, ' '\x1b[1mcode\x1b[0m \n' '\x1b[1m \x1b[0m- Block quotes ' '\x1b[1m • \x1b[0mBlock quotes \n' '\x1b[1m \x1b[0m- Lists, and more... ' '\x1b[1m • \x1b[0mLists, and more... \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m\x1b[1m +more! \x1b[0m\x1b[1m \x1b[0mProgress bars, ' 'columns, styled logging handler, tracebacks, etc... \n' '\x1b[1m ' '\x1b[0m \n') tests/test_card.py:32: AssertionError _______________________________ test_print_json ________________________________ def test_print_json(): console = Console(file=io.StringIO(), color_system="truecolor") console.print_json('[false, true, null, "foo"]', indent=4) result = console.file.getvalue() print(repr(result)) expected = '\x1b[1m[\x1b[0m\n \x1b[3;91mfalse\x1b[0m,\n \x1b[3;92mtrue\x1b[0m,\n \x1b[3;35mnull\x1b[0m,\n \x1b[32m"foo"\x1b[0m\n\x1b[1m]\x1b[0m\n' > assert result == expected E assert '\x1b[1m[\x1b[0m\n \x1b[3mfalse\x1b[0m,\n \x1b[3mtrue\x1b[0m,\n \x1b[3mnull\x1b[0m,\n "foo"\n\x1b[1m]\x1b[0m\n' == '\x1b[1m[\x1b[0m\n \x1b[3;91mfalse\x1b[0m,\n \x1b[3;92mtrue\x1b[0m,\n \x1b[3;35mnull\x1b[0m,\n \x1b[32m"foo"\x1b[0m\n\x1b[1m]\x1b[0m\n' E [ E - false, E ? --- E + false, E - true, E ? --- E + true, E - null, E ? --- E + null, E - "foo" E + "foo" E ] console = expected = ('\x1b[1m[\x1b[0m\n' ' \x1b[3;91mfalse\x1b[0m,\n' ' \x1b[3;92mtrue\x1b[0m,\n' ' \x1b[3;35mnull\x1b[0m,\n' ' \x1b[32m"foo"\x1b[0m\n' '\x1b[1m]\x1b[0m\n') result = ('\x1b[1m[\x1b[0m\n' ' \x1b[3mfalse\x1b[0m,\n' ' \x1b[3mtrue\x1b[0m,\n' ' \x1b[3mnull\x1b[0m,\n' ' "foo"\n' '\x1b[1m]\x1b[0m\n') tests/test_console.py:216: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[1m[\x1b[0m\n \x1b[3mfalse\x1b[0m,\n \x1b[3mtrue\x1b[0m,\n \x1b[3mnull\x1b[0m,\n "foo"\n\x1b[1m]\x1b[0m\n' _____________________________ test_print_json_data _____________________________ def test_print_json_data(): console = Console(file=io.StringIO(), color_system="truecolor") console.print_json(data=[False, True, None, "foo"], indent=4) result = console.file.getvalue() print(repr(result)) expected = '\x1b[1m[\x1b[0m\n \x1b[3;91mfalse\x1b[0m,\n \x1b[3;92mtrue\x1b[0m,\n \x1b[3;35mnull\x1b[0m,\n \x1b[32m"foo"\x1b[0m\n\x1b[1m]\x1b[0m\n' > assert result == expected E assert '\x1b[1m[\x1b[0m\n \x1b[3mfalse\x1b[0m,\n \x1b[3mtrue\x1b[0m,\n \x1b[3mnull\x1b[0m,\n "foo"\n\x1b[1m]\x1b[0m\n' == '\x1b[1m[\x1b[0m\n \x1b[3;91mfalse\x1b[0m,\n \x1b[3;92mtrue\x1b[0m,\n \x1b[3;35mnull\x1b[0m,\n \x1b[32m"foo"\x1b[0m\n\x1b[1m]\x1b[0m\n' E [ E - false, E ? --- E + false, E - true, E ? --- E + true, E - null, E ? --- E + null, E - "foo" E + "foo" E ] console = expected = ('\x1b[1m[\x1b[0m\n' ' \x1b[3;91mfalse\x1b[0m,\n' ' \x1b[3;92mtrue\x1b[0m,\n' ' \x1b[3;35mnull\x1b[0m,\n' ' \x1b[32m"foo"\x1b[0m\n' '\x1b[1m]\x1b[0m\n') result = ('\x1b[1m[\x1b[0m\n' ' \x1b[3mfalse\x1b[0m,\n' ' \x1b[3mtrue\x1b[0m,\n' ' \x1b[3mnull\x1b[0m,\n' ' "foo"\n' '\x1b[1m]\x1b[0m\n') tests/test_console.py:231: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[1m[\x1b[0m\n \x1b[3mfalse\x1b[0m,\n \x1b[3mtrue\x1b[0m,\n \x1b[3mnull\x1b[0m,\n "foo"\n\x1b[1m]\x1b[0m\n' _________________________ test_print_json_ensure_ascii _________________________ def test_print_json_ensure_ascii(): console = Console(file=io.StringIO(), color_system="truecolor") console.print_json(data={"foo": "💩"}, ensure_ascii=False) result = console.file.getvalue() print(repr(result)) expected = '\x1b[1m{\x1b[0m\n \x1b[1;34m"foo"\x1b[0m: \x1b[32m"💩"\x1b[0m\n\x1b[1m}\x1b[0m\n' > assert result == expected E assert '\x1b[1m{\x1b[0m\n \x1b[1m"foo"\x1b[0m: "💩"\n\x1b[1m}\x1b[0m\n' == '\x1b[1m{\x1b[0m\n \x1b[1;34m"foo"\x1b[0m: \x1b[32m"💩"\x1b[0m\n\x1b[1m}\x1b[0m\n' E { E - "foo": "💩" E ? --- ----- ---- E + "foo": "💩" E } console = expected = ('\x1b[1m{\x1b[0m\n' ' \x1b[1;34m"foo"\x1b[0m: \x1b[32m"💩"\x1b[0m\n' '\x1b[1m}\x1b[0m\n') result = '\x1b[1m{\x1b[0m\n \x1b[1m"foo"\x1b[0m: "💩"\n\x1b[1m}\x1b[0m\n' tests/test_console.py:240: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[1m{\x1b[0m\n \x1b[1m"foo"\x1b[0m: "💩"\n\x1b[1m}\x1b[0m\n' __________________ test_print_json_with_default_ensure_ascii ___________________ def test_print_json_with_default_ensure_ascii(): console = Console(file=io.StringIO(), color_system="truecolor") console.print_json(data={"foo": "💩"}) result = console.file.getvalue() print(repr(result)) expected = '\x1b[1m{\x1b[0m\n \x1b[1;34m"foo"\x1b[0m: \x1b[32m"💩"\x1b[0m\n\x1b[1m}\x1b[0m\n' > assert result == expected E assert '\x1b[1m{\x1b[0m\n \x1b[1m"foo"\x1b[0m: "💩"\n\x1b[1m}\x1b[0m\n' == '\x1b[1m{\x1b[0m\n \x1b[1;34m"foo"\x1b[0m: \x1b[32m"💩"\x1b[0m\n\x1b[1m}\x1b[0m\n' E { E - "foo": "💩" E ? --- ----- ---- E + "foo": "💩" E } console = expected = ('\x1b[1m{\x1b[0m\n' ' \x1b[1;34m"foo"\x1b[0m: \x1b[32m"💩"\x1b[0m\n' '\x1b[1m}\x1b[0m\n') result = '\x1b[1m{\x1b[0m\n \x1b[1m"foo"\x1b[0m: "💩"\n\x1b[1m}\x1b[0m\n' tests/test_console.py:249: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[1m{\x1b[0m\n \x1b[1m"foo"\x1b[0m: "💩"\n\x1b[1m}\x1b[0m\n' _________________________ test_print_json_indent_none __________________________ def test_print_json_indent_none(): console = Console(file=io.StringIO(), color_system="truecolor") data = {"name": "apple", "count": 1} console.print_json(data=data, indent=None) result = console.file.getvalue() expected = '\x1b[1m{\x1b[0m\x1b[1;34m"name"\x1b[0m: \x1b[32m"apple"\x1b[0m, \x1b[1;34m"count"\x1b[0m: \x1b[1;36m1\x1b[0m\x1b[1m}\x1b[0m\n' > assert result == expected E assert '\x1b[1m{\x1b[0m\x1b[1m"name"\x1b[0m: "apple", \x1b[1m"count"\x1b[0m: \x1b[1m1\x1b[0m\x1b[1m}\x1b[0m\n' == '\x1b[1m{\x1b[0m\x1b[1;34m"name"\x1b[0m: \x1b[32m"apple"\x1b[0m, \x1b[1;34m"count"\x1b[0m: \x1b[1;36m1\x1b[0m\x1b[1m}\x1b[0m\n' E - {"name": "apple", "count": 1} E ? --- ----- ---- --- --- E + {"name": "apple", "count": 1} console = data = {'count': 1, 'name': 'apple'} expected = ('\x1b[1m{\x1b[0m\x1b[1;34m"name"\x1b[0m: \x1b[32m"apple"\x1b[0m, ' '\x1b[1;34m"count"\x1b[0m: \x1b[1;36m1\x1b[0m\x1b[1m}\x1b[0m\n') result = ('\x1b[1m{\x1b[0m\x1b[1m"name"\x1b[0m: "apple", \x1b[1m"count"\x1b[0m: ' '\x1b[1m1\x1b[0m\x1b[1m}\x1b[0m\n') tests/test_console.py:258: AssertionError ____________________________ test_markup_highlight _____________________________ def test_markup_highlight(): console = Console(file=io.StringIO(), color_system="truecolor") console.print("'[bold]foo[/bold]'") > assert ( console.file.getvalue() == "\x1b[32m'\x1b[0m\x1b[1;32mfoo\x1b[0m\x1b[32m'\x1b[0m\n" ) E assert "'\x1b[1mfoo\x1b[0m'\n" == "\x1b[32m'\x1b[0m\x1b[1;32mfoo\x1b[0m\x1b[32m'\x1b[0m\n" E - 'foo' E + 'foo' console = tests/test_console.py:307: AssertionError ______________________________ test_console_style ______________________________ def test_console_style() -> None: console = Console( file=io.StringIO(), color_system="truecolor", force_terminal=True, style="red" ) console.print("foo") expected = "\x1b[31mfoo\x1b[0m\n" result = console.file.getvalue() > assert result == expected E AssertionError: assert 'foo\n' == '\x1b[31mfoo\x1b[0m\n' E - foo E + foo console = expected = '\x1b[31mfoo\x1b[0m\n' result = 'foo\n' tests/test_console.py:710: AssertionError ___________________________________ test_log ___________________________________ def test_log(): expected = replace_link_ids( "\x1b[2;36m[TIME]\x1b[0m\x1b[2;36m \x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m32\x1b[0m\x1b]8;;\x1b\\\n\x1b[2;36m \x1b[0m\x1b[2;36m \x1b[0mHello from \x1b[1m<\x1b[0m\x1b[1;95mconsole\x1b[0m\x1b[39m \x1b[0m\x1b[33mwidth\x1b[0m\x1b[39m=\x1b[0m\x1b[1;36m80\x1b[0m\x1b[39m ColorSystem.TRUECOLOR\x1b[0m\x1b[1m>\x1b[0m ! \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m33\x1b[0m\x1b]8;;\x1b\\\n\x1b[2;36m \x1b[0m\x1b[2;36m \x1b[0m\x1b[1m[\x1b[0m\x1b[1;36m1\x1b[0m, \x1b[1;36m2\x1b[0m, \x1b[1;36m3\x1b[0m\x1b[1m]\x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m34\x1b[0m\x1b]8;;\x1b\\\n\x1b[2;36m \x1b[0m\x1b[34m╭─\x1b[0m\x1b[34m─────────────────────\x1b[0m\x1b[34m \x1b[0m\x1b[3;34mlocals\x1b[0m\x1b[34m \x1b[0m\x1b[34m─────────────────────\x1b[0m\x1b[34m─╮\x1b[0m \x1b[2m \x1b[0m\n\x1b[2;36m \x1b[0m\x1b[34m│\x1b[0m \x1b[3;33mconsole\x1b[0m\x1b[31m =\x1b[0m \x1b[1m<\x1b[0m\x1b[1;95mconsole\x1b[0m\x1b[39m \x1b[0m\x1b[33mwidth\x1b[0m\x1b[39m=\x1b[0m\x1b[1;36m80\x1b[0m\x1b[39m ColorSystem.TRUECOLOR\x1b[0m\x1b[1m>\x1b[0m \x1b[34m│\x1b[0m \x1b[2m \x1b[0m\n\x1b[2;36m \x1b[0m\x1b[34m╰────────────────────────────────────────────────────╯\x1b[0m \x1b[2m \x1b[0m\n" ) rendered = render_log() print(repr(rendered)) > assert rendered == expected E AssertionError: assert '\x1b[2m[TIME]\x1b[0m\x1b[2m \x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m32\x1b[0m\x1b]8;;\x1b\\\n\x1b[2m \x1b[0m\x1b[2m \x1b[0mHello from \x1b[1m<\x1b[0m\x1b[1mconsole\x1b[0m width=\x1b[1m80\x1b[0m ColorSystem.TRUECOLOR\x1b[1m>\x1b[0m ! \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m33\x1b[0m\x1b]8;;\x1b\\\n\x1b[2m \x1b[0m\x1b[2m \x1b[0m\x1b[1m[\x1b[0m\x1b[1m1\x1b[0m, \x1b[1m2\x1b[0m, \x1b[1m3\x1b[0m\x1b[1m]\x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m34\x1b[0m\x1b]8;;\x1b\\\n\x1b[2m \x1b[0m╭────────────────────── \x1b[3mlocals\x1b[0m ──────────────────────╮ \x1b[2m \x1b[0m\n\x1b[2m \x1b[0m│ \x1b[3mconsole\x1b[0m = \x1b[1m<\x1b[0m\x1b[1mconsole\x1b[0m width=\x1b[1m80\x1b[0m ColorSystem.TRUECOLOR\x1b[1m>\x1b[0m │ \x1b[2m \x1b[0m\n\x1b[2m \x1b[0m╰────────────────────────────────────────────────────╯ \x1b[2m \x1b[0m\n' == '\x1b[2;36m[TIME]\x1b[0m\x1b[2;36m \x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m32\x1b[0m\x1b]8;;\x1b\\\n\x1b[2;36m \x1b[0m\x1b[2;36m \x1b[0mHello from \x1b[1m<\x1b[0m\x1b[1;95mconsole\x1b[0m\x1b[39m \x1b[0m\x1b[33mwidth\x1b[0m\x1b[39m=\x1b[0m\x1b[1;36m80\x1b[0m\x1b[39m ColorSystem.TRUECOLOR\x1b[0m\x1b[1m>\x1b[0m ! \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m33\x1b[0m\x1b]8;;\x1b\\\n\x1b[2;36m \x1b[0m\x1b[2;36m \x1b[0m\x1b[1m[\x1b[0m\x1b[1;36m1\x1b[0m, \x1b[1;36m2\x1b[0m, \x1b[1;36m3\x1b[0m\x1b[1m]\x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m34\x1b[0m\x1b]8;;\x1b\\\n\x1b[2;36m \x1b[0m\x1b[34m╭─\x1b[0m\x1b[34m─────────────────────\x1b[0m\x1b[34m \x1b[0m\x1b[3;34mlocals\x1b[0m\x1b[34m \x1b[0m\x1b[34m─────────────────────\x1b[0m\x1b[34m─╮\x1b[0m \x1b[2m \x1b[0m\n\x1b[2;36m \x1b[0m\x1b[34m│\x1b[0m \x1b[3;33mconsole\x1b[0m\x1b[31m =\x1b[0m \x1b[1m<\x1b[0m\x1b[1;95mconsole\x1b[0m\x1b[39m \x1b[0m\x1b[33mwidth\x1b[0m\x1b[39m=\x1b[0m\x1b[1;36m80\x1b[0m\x1b[39m ColorSystem.TRUECOLOR\x1b[0m\x1b[1m>\x1b[0m \x1b[34m│\x1b[0m \x1b[2m \x1b[0m\n\x1b[2;36m \x1b[0m\x1b[34m╰────────────────────────────────────────────────────╯\x1b[0m \x1b[2m \x1b[0m\n' E - [TIME] 8;id=0;foo\source.py8;;\:8;id=0;foo\328;;\ E ? --- --- E + [TIME] 8;id=0;foo\source.py8;;\:8;id=0;foo\328;;\ E - Hello from ! 8;id=0;foo\source.py8;;\:8;id=0;foo\338;;\ E ? --- --- --- ^^^^^^^^^^^^^^^ --------- ---- --- ----- ---- E + Hello from ! 8;id=0;foo\source.py8;;\:8;id=0;foo\338;;\ E ? ^ E - [1, 2, 3] 8;id=0;foo\source.py8;;\:8;id=0;foo\348;;\ E + [1, 2, 3] 8;id=0;foo\source.py8;;\:8;id=0;foo\348;;\ E - ╭────────────────────── locals ──────────────────────╮ E ? --- ----- ---------- ^^^^ ------------- ^^^^^^^^^^^^^^^ --------- ---- E + ╭────────────────────── locals ──────────────────────╮ E ? ^^ ^ E - │ console = │ E ? --- -------------- ----- ---- --- ^^^^^^^^^^^^^^^ --------- ---- --- ----- ---- ----- ---- E + │ console = │ E ? ++ ^ E - ╰────────────────────────────────────────────────────╯ E ? --- ----- ---- E + ╰────────────────────────────────────────────────────╯ expected = ('\x1b[2;36m[TIME]\x1b[0m\x1b[2;36m ' '\x1b[0m ' '\x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m32\x1b[0m\x1b]8;;\x1b\\\n' '\x1b[2;36m \x1b[0m\x1b[2;36m \x1b[0mHello from ' '\x1b[1m<\x1b[0m\x1b[1;95mconsole\x1b[0m\x1b[39m ' '\x1b[0m\x1b[33mwidth\x1b[0m\x1b[39m=\x1b[0m\x1b[1;36m80\x1b[0m\x1b[39m ' 'ColorSystem.TRUECOLOR\x1b[0m\x1b[1m>\x1b[0m ! ' '\x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m33\x1b[0m\x1b]8;;\x1b\\\n' '\x1b[2;36m \x1b[0m\x1b[2;36m \x1b[0m\x1b[1m[\x1b[0m\x1b[1;36m1\x1b[0m, ' '\x1b[1;36m2\x1b[0m, ' '\x1b[1;36m3\x1b[0m\x1b[1m]\x1b[0m ' '\x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m34\x1b[0m\x1b]8;;\x1b\\\n' '\x1b[2;36m ' '\x1b[0m\x1b[34m╭─\x1b[0m\x1b[34m─────────────────────\x1b[0m\x1b[34m ' '\x1b[0m\x1b[3;34mlocals\x1b[0m\x1b[34m ' '\x1b[0m\x1b[34m─────────────────────\x1b[0m\x1b[34m─╮\x1b[0m ' '\x1b[2m \x1b[0m\n' '\x1b[2;36m \x1b[0m\x1b[34m│\x1b[0m \x1b[3;33mconsole\x1b[0m\x1b[31m ' '=\x1b[0m \x1b[1m<\x1b[0m\x1b[1;95mconsole\x1b[0m\x1b[39m ' '\x1b[0m\x1b[33mwidth\x1b[0m\x1b[39m=\x1b[0m\x1b[1;36m80\x1b[0m\x1b[39m ' 'ColorSystem.TRUECOLOR\x1b[0m\x1b[1m>\x1b[0m \x1b[34m│\x1b[0m ' '\x1b[2m \x1b[0m\n' '\x1b[2;36m ' '\x1b[0m\x1b[34m╰────────────────────────────────────────────────────╯\x1b[0m ' '\x1b[2m \x1b[0m\n') rendered = ('\x1b[2m[TIME]\x1b[0m\x1b[2m ' '\x1b[0m ' '\x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m32\x1b[0m\x1b]8;;\x1b\\\n' '\x1b[2m \x1b[0m\x1b[2m \x1b[0mHello from ' '\x1b[1m<\x1b[0m\x1b[1mconsole\x1b[0m width=\x1b[1m80\x1b[0m ' 'ColorSystem.TRUECOLOR\x1b[1m>\x1b[0m ! ' '\x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m33\x1b[0m\x1b]8;;\x1b\\\n' '\x1b[2m \x1b[0m\x1b[2m \x1b[0m\x1b[1m[\x1b[0m\x1b[1m1\x1b[0m, ' '\x1b[1m2\x1b[0m, ' '\x1b[1m3\x1b[0m\x1b[1m]\x1b[0m ' '\x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m34\x1b[0m\x1b]8;;\x1b\\\n' '\x1b[2m \x1b[0m╭────────────────────── \x1b[3mlocals\x1b[0m ' '──────────────────────╮ \x1b[2m \x1b[0m\n' '\x1b[2m \x1b[0m│ \x1b[3mconsole\x1b[0m = ' '\x1b[1m<\x1b[0m\x1b[1mconsole\x1b[0m width=\x1b[1m80\x1b[0m ' 'ColorSystem.TRUECOLOR\x1b[1m>\x1b[0m │ \x1b[2m \x1b[0m\n' '\x1b[2m ' '\x1b[0m╰────────────────────────────────────────────────────╯ ' '\x1b[2m \x1b[0m\n') tests/test_log.py:44: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[2m[TIME]\x1b[0m\x1b[2m \x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m32\x1b[0m\x1b]8;;\x1b\\\n\x1b[2m \x1b[0m\x1b[2m \x1b[0mHello from \x1b[1m<\x1b[0m\x1b[1mconsole\x1b[0m width=\x1b[1m80\x1b[0m ColorSystem.TRUECOLOR\x1b[1m>\x1b[0m ! \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m33\x1b[0m\x1b]8;;\x1b\\\n\x1b[2m \x1b[0m\x1b[2m \x1b[0m\x1b[1m[\x1b[0m\x1b[1m1\x1b[0m, \x1b[1m2\x1b[0m, \x1b[1m3\x1b[0m\x1b[1m]\x1b[0m \x1b]8;id=0;foo\x1b\\\x1b[2msource.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:\x1b[0m\x1b]8;id=0;foo\x1b\\\x1b[2m34\x1b[0m\x1b]8;;\x1b\\\n\x1b[2m \x1b[0m╭────────────────────── \x1b[3mlocals\x1b[0m ──────────────────────╮ \x1b[2m \x1b[0m\n\x1b[2m \x1b[0m│ \x1b[3mconsole\x1b[0m = \x1b[1m<\x1b[0m\x1b[1mconsole\x1b[0m width=\x1b[1m80\x1b[0m ColorSystem.TRUECOLOR\x1b[1m>\x1b[0m │ \x1b[2m \x1b[0m\n\x1b[2m \x1b[0m╰────────────────────────────────────────────────────╯ \x1b[2m \x1b[0m\n' _____________________________ test_markdown_render _____________________________ def test_markdown_render(): markdown = Markdown(MARKDOWN) rendered_markdown = render(markdown) expected = "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1;36;40mmonospace\x1b[0m. \n\nHorizontal rule: \n\n\x1b[33m────────────────────────────────────────────────────────────────────────────────────────────────────\x1b[0m\nBullet list: \n\n\x1b[1;33m • \x1b[0mapples \n\x1b[1;33m • \x1b[0moranges \n\x1b[1;33m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1;33m 1 \x1b[0mlather \n\x1b[1;33m 2 \x1b[0mrinse \n\x1b[1;33m 3 \x1b[0mrepeat \n\nAn \x1b]8;id=0;foo\x1b\\\x1b[4;34mexample\x1b[0m\x1b]8;;\x1b\\. \n\n\x1b[35m▌ \x1b[0m\x1b[35mMarkdown uses email-style > characters for blockquoting.\x1b[0m\x1b[35m \x1b[0m\n\x1b[35m▌ \x1b[0m\x1b[35mLorem ipsum\x1b[0m\x1b[35m \x1b[0m\n\n🌆 \x1b]8;id=0;foo\x1b\\progress\x1b]8;;\x1b\\ \n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34ma=1 \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34mimport\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mthis\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mfoobar \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mimport this \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[1;33m 1 \x1b[0mList item \n\x1b[1;33m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[1;33m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mCode block \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[1;33m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n" > assert rendered_markdown == expected E AssertionError: assert '┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1mmonospace\x1b[0m. \n\nHorizontal rule: \n\n────────────────────────────────────────────────────────────────────────────────────────────────────\nBullet list: \n\n\x1b[1m • \x1b[0mapples \n\x1b[1m • \x1b[0moranges \n\x1b[1m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1m 1 \x1b[0mlather \n\x1b[1m 2 \x1b[0mrinse \n\x1b[1m 3 \x1b[0mrepeat \n\nAn \x1b]8;id=0;foo\x1b\\\x1b[4mexample\x1b[0m\x1b]8;;\x1b\\. \n\n▌ Markdown uses email-style > characters for blockquoting. \n▌ Lorem ipsum \n\n🌆 \x1b]8;id=0;foo\x1b\\progress\x1b]8;;\x1b\\ \n\n \n a=1 \n \n\n \n import this \n \n\n \n foobar \n \n\n \n import this \n \n\n\x1b[1m 1 \x1b[0mList item \n\x1b[1m \x1b[0m \n\x1b[1m \x1b[0m Code block \n\x1b[1m \x1b[0m \n' == '┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1;36;40mmonospace\x1b[0m. \n\nHorizontal rule: \n\n\x1b[33m────────────────────────────────────────────────────────────────────────────────────────────────────\x1b[0m\nBullet list: \n\n\x1b[1;33m • \x1b[0mapples \n\x1b[1;33m • \x1b[0moranges \n\x1b[1;33m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1;33m 1 \x1b[0mlather \n\x1b[1;33m 2 \x1b[0mrinse \n\x1b[1;33m 3 \x1b[0mrepeat \n\nAn \x1b]8;id=0;foo\x1b\\\x1b[4;34mexample\x1b[0m\x1b]8;;\x1b\\. \n\n\x1b[35m▌ \x1b[0m\x1b[35mMarkdown uses email-style > characters for blockquoting.\x1b[0m\x1b[35m \x1b[0m\n\x1b[35m▌ \x1b[0m\x1b[35mLorem ipsum\x1b[0m\x1b[35m \x1b[0m\n\n🌆 \x1b]8;id=0;foo\x1b\\progress\x1b]8;;\x1b\\ \n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34ma=1 \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34mimport\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mthis\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mfoobar \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mimport this \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[1;33m 1 \x1b[0mList item \n\x1b[1;33m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[1;33m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mCode block \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[1;33m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' E ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ E ┃ Heading ┃ E ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E E E Sub-heading E E Heading E E H4 Heading E E H5 Heading E E H6 Heading E E Paragraphs are separated by a blank line. E E Two spaces at the end of a line E produces a line break. E E - Text attributes italic, bold, monospace. E ? ------ E + Text attributes italic, bold, monospace. E E Horizontal rule: E E - ──────────────────────────────────────────────────────────────────────────────────────────────────── E ? ----- ---- E + ──────────────────────────────────────────────────────────────────────────────────────────────────── E Bullet list: E E - • apples E ? --- E + • apples E - • oranges E ? --- E + • oranges E - • pears E ? --- E + • pears E E Numbered list: E E - 1 lather E ? --- E + 1 lather E - 2 rinse E ? --- E + 2 rinse E - 3 repeat E ? ^ ---- E + 3 repeat E ? ^^ E E - An 8;id=0;foo\example8;;\. E ? --- E + An 8;id=0;foo\example8;;\. E E - ▌ Markdown uses email-style > characters for blockquoting. E - ▌ Lorem ipsum E + ▌ Markdown uses email-style > characters for blockquoting. E + ▌ Lorem ipsum E E 🌆 8;id=0;foo\progress8;;\ E E - E + E - a=1 E ? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ E + a=1 E ? ^ ^ E - E + E E - E - import this E - E + E + import this E + E E - E + E - foobar E ? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ E + foobar E ? ^ ^ E - E + E E - E + E - import this E ? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ E + import this E ? ^ ^ E - E + E E - 1 List item E ? --- E + 1 List item E - E + E - Code block E ? --- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ E + Code block E ? ^ ^ E - E + expected = ('┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n' '┃ ' '\x1b[1mHeading\x1b[0m ┃\n' '┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n' '\n' '\n' ' ' '\x1b[1;4mSub-heading\x1b[0m \n' '\n' ' ' '\x1b[1mHeading\x1b[0m \n' '\n' ' \x1b[1;2mH4 ' 'Heading\x1b[0m \n' '\n' ' \x1b[4mH5 ' 'Heading\x1b[0m \n' '\n' ' \x1b[3mH6 ' 'Heading\x1b[0m \n' '\n' 'Paragraphs are separated by a blank ' 'line. \n' '\n' 'Two spaces at the end of a ' 'line \n' 'produces a line ' 'break. \n' '\n' 'Text attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, ' '\x1b[1;36;40mmonospace\x1b[0m. \n' '\n' 'Horizontal ' 'rule: \n' '\n' '\x1b[33m────────────────────────────────────────────────────────────────────────────────────────────────────\x1b[0m\n' 'Bullet ' 'list: \n' '\n' '\x1b[1;33m • ' '\x1b[0mapples \n' '\x1b[1;33m • ' '\x1b[0moranges \n' '\x1b[1;33m • ' '\x1b[0mpears \n' '\n' 'Numbered ' 'list: \n' '\n' '\x1b[1;33m 1 ' '\x1b[0mlather \n' '\x1b[1;33m 2 ' '\x1b[0mrinse \n' '\x1b[1;33m 3 ' '\x1b[0mrepeat \n' '\n' 'An ' '\x1b]8;id=0;foo\x1b\\\x1b[4;34mexample\x1b[0m\x1b]8;;\x1b\\. \n' '\n' '\x1b[35m▌ \x1b[0m\x1b[35mMarkdown uses email-style > characters for ' 'blockquoting.\x1b[0m\x1b[35m \x1b[0m\n' '\x1b[35m▌ \x1b[0m\x1b[35mLorem ' 'ipsum\x1b[0m\x1b[35m ' '\x1b[0m\n' '\n' '🌆 ' '\x1b]8;id=0;foo\x1b\\progress\x1b]8;;\x1b\\ \n' '\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[48;2;39;40;34ma=1 ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34mimport\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mthis\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[48;2;39;40;34mfoobar ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mimport ' 'this ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\n' '\x1b[1;33m 1 \x1b[0mList ' 'item \n' '\x1b[1;33m ' '\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[1;33m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mCode ' 'block ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[1;33m ' '\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n') markdown = rendered_markdown = ('┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n' '┃ ' '\x1b[1mHeading\x1b[0m ┃\n' '┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n' '\n' '\n' ' ' '\x1b[1;4mSub-heading\x1b[0m \n' '\n' ' ' '\x1b[1mHeading\x1b[0m \n' '\n' ' \x1b[1;2mH4 ' 'Heading\x1b[0m \n' '\n' ' \x1b[4mH5 ' 'Heading\x1b[0m \n' '\n' ' \x1b[3mH6 ' 'Heading\x1b[0m \n' '\n' 'Paragraphs are separated by a blank ' 'line. \n' '\n' 'Two spaces at the end of a ' 'line \n' 'produces a line ' 'break. \n' '\n' 'Text attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, ' '\x1b[1mmonospace\x1b[0m. \n' '\n' 'Horizontal ' 'rule: \n' '\n' '────────────────────────────────────────────────────────────────────────────────────────────────────\n' 'Bullet ' 'list: \n' '\n' '\x1b[1m • ' '\x1b[0mapples \n' '\x1b[1m • ' '\x1b[0moranges \n' '\x1b[1m • ' '\x1b[0mpears \n' '\n' 'Numbered ' 'list: \n' '\n' '\x1b[1m 1 ' '\x1b[0mlather \n' '\x1b[1m 2 ' '\x1b[0mrinse \n' '\x1b[1m 3 ' '\x1b[0mrepeat \n' '\n' 'An ' '\x1b]8;id=0;foo\x1b\\\x1b[4mexample\x1b[0m\x1b]8;;\x1b\\. \n' '\n' '▌ Markdown uses email-style > characters for ' 'blockquoting. \n' '▌ Lorem ' 'ipsum \n' '\n' '🌆 ' '\x1b]8;id=0;foo\x1b\\progress\x1b]8;;\x1b\\ \n' '\n' ' \n' ' ' 'a=1 \n' ' \n' '\n' ' \n' ' import ' 'this \n' ' \n' '\n' ' \n' ' ' 'foobar \n' ' \n' '\n' ' \n' ' import ' 'this \n' ' \n' '\n' '\x1b[1m 1 \x1b[0mList ' 'item \n' '\x1b[1m ' '\x1b[0m \n' '\x1b[1m \x1b[0m Code ' 'block \n' '\x1b[1m ' '\x1b[0m \n') tests/test_markdown.py:103: AssertionError ----------------------------- Captured stdout call ----------------------------- '┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1mmonospace\x1b[0m. \n\nHorizontal rule: \n\n────────────────────────────────────────────────────────────────────────────────────────────────────\nBullet list: \n\n\x1b[1m • \x1b[0mapples \n\x1b[1m • \x1b[0moranges \n\x1b[1m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1m 1 \x1b[0mlather \n\x1b[1m 2 \x1b[0mrinse \n\x1b[1m 3 \x1b[0mrepeat \n\nAn \x1b]8;id=0;foo\x1b\\\x1b[4mexample\x1b[0m\x1b]8;;\x1b\\. \n\n▌ Markdown uses email-style > characters for blockquoting. \n▌ Lorem ipsum \n\n🌆 \x1b]8;id=0;foo\x1b\\progress\x1b]8;;\x1b\\ \n\n \n a=1 \n \n\n \n import this \n \n\n \n foobar \n \n\n \n import this \n \n\n\x1b[1m 1 \x1b[0mList item \n\x1b[1m \x1b[0m \n\x1b[1m \x1b[0m Code block \n\x1b[1m \x1b[0m \n' _______________________________ test_inline_code _______________________________ def test_inline_code(): markdown = Markdown( "inline `import this` code", inline_code_lexer="python", inline_code_theme="emacs", ) result = render(markdown) expected = "inline \x1b[1;38;2;170;34;255;48;2;248;248;248mimport\x1b[0m\x1b[38;2;0;0;0;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m code \n" print(result) print(repr(result)) > assert result == expected E AssertionError: assert 'inline \x1b[1mimport\x1b[0m \x1b[1mthis\x1b[0m code \n' == 'inline \x1b[1;38;2;170;34;255;48;2;248;248;248mimport\x1b[0m\x1b[38;2;0;0;0;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m code \n' E - inline import this code E + inline import this code expected = ('inline ' '\x1b[1;38;2;170;34;255;48;2;248;248;248mimport\x1b[0m\x1b[38;2;0;0;0;48;2;248;248;248m ' '\x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m ' 'code \n') markdown = result = ('inline \x1b[1mimport\x1b[0m \x1b[1mthis\x1b[0m ' 'code \n') tests/test_markdown.py:116: AssertionError ----------------------------- Captured stdout call ----------------------------- 'inline \x1b[1mimport\x1b[0m \x1b[1mthis\x1b[0m code \n' inline import this code 'inline \x1b[1mimport\x1b[0m \x1b[1mthis\x1b[0m code \n' _____________________________ test_markdown_render _____________________________ def test_markdown_render(): markdown = Markdown(MARKDOWN, hyperlinks=False) rendered_markdown = render(markdown) print(repr(rendered_markdown)) expected = "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1;36;40mmonospace\x1b[0m. \n\nHorizontal rule: \n\n\x1b[33m────────────────────────────────────────────────────────────────────────────────────────────────────\x1b[0m\nBullet list: \n\n\x1b[1;33m • \x1b[0mapples \n\x1b[1;33m • \x1b[0moranges \n\x1b[1;33m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1;33m 1 \x1b[0mlather \n\x1b[1;33m 2 \x1b[0mrinse \n\x1b[1;33m 3 \x1b[0mrepeat \n\nAn \x1b[94mexample\x1b[0m (\x1b[4;34mhttp://example.com\x1b[0m). \n\n\x1b[35m▌ \x1b[0m\x1b[35mMarkdown uses email-style > characters for blockquoting.\x1b[0m\x1b[35m \x1b[0m\n\x1b[35m▌ \x1b[0m\x1b[35mLorem ipsum\x1b[0m\x1b[35m \x1b[0m\n\n🌆 progress \n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34ma=1 \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34mimport\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mthis\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mfoobar \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n" > assert rendered_markdown == expected E AssertionError: assert '┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1mmonospace\x1b[0m. \n\nHorizontal rule: \n\n────────────────────────────────────────────────────────────────────────────────────────────────────\nBullet list: \n\n\x1b[1m • \x1b[0mapples \n\x1b[1m • \x1b[0moranges \n\x1b[1m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1m 1 \x1b[0mlather \n\x1b[1m 2 \x1b[0mrinse \n\x1b[1m 3 \x1b[0mrepeat \n\nAn example (\x1b[4mhttp://example.com\x1b[0m). \n\n▌ Markdown uses email-style > characters for blockquoting. \n▌ Lorem ipsum \n\n🌆 progress \n\n \n a=1 \n \n\n \n import this \n \n\n \n foobar \n \n' == '┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1;36;40mmonospace\x1b[0m. \n\nHorizontal rule: \n\n\x1b[33m────────────────────────────────────────────────────────────────────────────────────────────────────\x1b[0m\nBullet list: \n\n\x1b[1;33m • \x1b[0mapples \n\x1b[1;33m • \x1b[0moranges \n\x1b[1;33m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1;33m 1 \x1b[0mlather \n\x1b[1;33m 2 \x1b[0mrinse \n\x1b[1;33m 3 \x1b[0mrepeat \n\nAn \x1b[94mexample\x1b[0m (\x1b[4;34mhttp://example.com\x1b[0m). \n\n\x1b[35m▌ \x1b[0m\x1b[35mMarkdown uses email-style > characters for blockquoting.\x1b[0m\x1b[35m \x1b[0m\n\x1b[35m▌ \x1b[0m\x1b[35mLorem ipsum\x1b[0m\x1b[35m \x1b[0m\n\n🌆 progress \n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34ma=1 \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34mimport\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mthis\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n\n\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\x1b[48;2;39;40;34mfoobar \x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[48;2;39;40;34m \x1b[0m\n' E ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ E ┃ Heading ┃ E ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E E E Sub-heading E E Heading E E H4 Heading E E H5 Heading E E H6 Heading E E Paragraphs are separated by a blank line. E E Two spaces at the end of a line E produces a line break. E E - Text attributes italic, bold, monospace. E ? ------ E + Text attributes italic, bold, monospace. E E Horizontal rule: E E - ──────────────────────────────────────────────────────────────────────────────────────────────────── E ? ----- ---- E + ──────────────────────────────────────────────────────────────────────────────────────────────────── E Bullet list: E E - • apples E ? --- E + • apples E - • oranges E ? --- E + • oranges E - • pears E ? --- E + • pears E E Numbered list: E E - 1 lather E ? --- E + 1 lather E - 2 rinse E ? --- E + 2 rinse E - 3 repeat E ? ^ ---- E + 3 repeat E ? ^^ E E - An example (http://example.com). E ? ----- ---- --- E + An example (http://example.com). E E - ▌ Markdown uses email-style > characters for blockquoting. E - ▌ Lorem ipsum E + ▌ Markdown uses email-style > characters for blockquoting. E + ▌ Lorem ipsum E E 🌆 progress E E - E + E - a=1 E ? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ E + a=1 E ? ^ ^ E - E + E E - E - import this E - E + E + import this E + E E - E + E - foobar E ? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ E + foobar E ? ^ ^ E - E + expected = ('┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n' '┃ ' '\x1b[1mHeading\x1b[0m ┃\n' '┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n' '\n' '\n' ' ' '\x1b[1;4mSub-heading\x1b[0m \n' '\n' ' ' '\x1b[1mHeading\x1b[0m \n' '\n' ' \x1b[1;2mH4 ' 'Heading\x1b[0m \n' '\n' ' \x1b[4mH5 ' 'Heading\x1b[0m \n' '\n' ' \x1b[3mH6 ' 'Heading\x1b[0m \n' '\n' 'Paragraphs are separated by a blank ' 'line. \n' '\n' 'Two spaces at the end of a ' 'line \n' 'produces a line ' 'break. \n' '\n' 'Text attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, ' '\x1b[1;36;40mmonospace\x1b[0m. \n' '\n' 'Horizontal ' 'rule: \n' '\n' '\x1b[33m────────────────────────────────────────────────────────────────────────────────────────────────────\x1b[0m\n' 'Bullet ' 'list: \n' '\n' '\x1b[1;33m • ' '\x1b[0mapples \n' '\x1b[1;33m • ' '\x1b[0moranges \n' '\x1b[1;33m • ' '\x1b[0mpears \n' '\n' 'Numbered ' 'list: \n' '\n' '\x1b[1;33m 1 ' '\x1b[0mlather \n' '\x1b[1;33m 2 ' '\x1b[0mrinse \n' '\x1b[1;33m 3 ' '\x1b[0mrepeat \n' '\n' 'An \x1b[94mexample\x1b[0m ' '(\x1b[4;34mhttp://example.com\x1b[0m). \n' '\n' '\x1b[35m▌ \x1b[0m\x1b[35mMarkdown uses email-style > characters for ' 'blockquoting.\x1b[0m\x1b[35m \x1b[0m\n' '\x1b[35m▌ \x1b[0m\x1b[35mLorem ' 'ipsum\x1b[0m\x1b[35m ' '\x1b[0m\n' '\n' '🌆 ' 'progress \n' '\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[48;2;39;40;34ma=1 ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34mimport\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mthis\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\x1b[48;2;39;40;34mfoobar ' '\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' '\x1b[48;2;39;40;34m ' '\x1b[0m\n') markdown = rendered_markdown = ('┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n' '┃ ' '\x1b[1mHeading\x1b[0m ┃\n' '┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n' '\n' '\n' ' ' '\x1b[1;4mSub-heading\x1b[0m \n' '\n' ' ' '\x1b[1mHeading\x1b[0m \n' '\n' ' \x1b[1;2mH4 ' 'Heading\x1b[0m \n' '\n' ' \x1b[4mH5 ' 'Heading\x1b[0m \n' '\n' ' \x1b[3mH6 ' 'Heading\x1b[0m \n' '\n' 'Paragraphs are separated by a blank ' 'line. \n' '\n' 'Two spaces at the end of a ' 'line \n' 'produces a line ' 'break. \n' '\n' 'Text attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, ' '\x1b[1mmonospace\x1b[0m. \n' '\n' 'Horizontal ' 'rule: \n' '\n' '────────────────────────────────────────────────────────────────────────────────────────────────────\n' 'Bullet ' 'list: \n' '\n' '\x1b[1m • ' '\x1b[0mapples \n' '\x1b[1m • ' '\x1b[0moranges \n' '\x1b[1m • ' '\x1b[0mpears \n' '\n' 'Numbered ' 'list: \n' '\n' '\x1b[1m 1 ' '\x1b[0mlather \n' '\x1b[1m 2 ' '\x1b[0mrinse \n' '\x1b[1m 3 ' '\x1b[0mrepeat \n' '\n' 'An example ' '(\x1b[4mhttp://example.com\x1b[0m). \n' '\n' '▌ Markdown uses email-style > characters for ' 'blockquoting. \n' '▌ Lorem ' 'ipsum \n' '\n' '🌆 ' 'progress \n' '\n' ' \n' ' ' 'a=1 \n' ' \n' '\n' ' \n' ' import ' 'this \n' ' \n' '\n' ' \n' ' ' 'foobar \n' ' \n') tests/test_markdown_no_hyperlinks.py:97: AssertionError ----------------------------- Captured stdout call ----------------------------- '┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ \x1b[1mHeading\x1b[0m ┃\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━n\n\n \x1b[1;4mSub-heading\x1b[0m \n\n \x1b[1mHeading\x1b[0m \n\n \x1b[1;2mH4 Heading\x1b[0m \n\n \x1b[4mH5 Heading\x1b[0m \n\n \x1b[3mH6 Heading\x1b[0m \n\nParagraphs are separated by a blank line. \n\nTwo spaces at the end of a line \nproduces a line break. \n\nText attributes \x1b[3mitalic\x1b[0m, \x1b[1mbold\x1b[0m, \x1b[1mmonospace\x1b[0m. \n\nHorizontal rule: \n\n────────────────────────────────────────────────────────────────────────────────────────────────────\nBullet list: \n\n\x1b[1m • \x1b[0mapples \n\x1b[1m • \x1b[0moranges \n\x1b[1m • \x1b[0mpears \n\nNumbered list: \n\n\x1b[1m 1 \x1b[0mlather \n\x1b[1m 2 \x1b[0mrinse \n\x1b[1m 3 \x1b[0mrepeat \n\nAn example (\x1b[4mhttp://example.com\x1b[0m). \n\n▌ Markdown uses email-style > characters for blockquoting. \n▌ Lorem ipsum \n\n🌆 progress \n\n \n a=1 \n \n\n \n import this \n \n\n \n foobar \n \n' _____________________________ test_divide_complex ______________________________ def test_divide_complex(): MAP = ( "[on orange4] [on green]XX[on orange4] \n" " \n" " \n" " \n" " [bright_red on black]Y[on orange4] \n" "[on green]X[on orange4] [on green]X[on orange4] \n" " [on green]X[on orange4] [on green]X\n" "[on orange4] \n" " [on green]XX[on orange4] \n" ) from rich.console import Console from rich.text import Text text = Text.from_markup(MAP) console = Console( color_system="truecolor", width=30, force_terminal=True, file=StringIO() ) console.print(text) result = console.file.getvalue() print(repr(result)) expected = "\x1b[48;5;94m \x1b[0m\x1b[42mXX\x1b[0m\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\x1b[91;40mY\x1b[0m\x1b[91;48;5;94m \x1b[0m\n\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m \x1b[0m\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m \x1b[0m\n\x1b[91;48;5;94m \x1b[0m\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m \x1b[0m\x1b[91;42mX\x1b[0m\n\x1b[91;48;5;94m \x1b[0m\n\x1b[91;48;5;94m \x1b[0m\x1b[91;42mXX\x1b[0m\x1b[91;48;5;94m \x1b[0m\n\n" > assert result == expected E AssertionError: assert ' XX \n \n \n \n Y \nX X \n X X\n \n XX \n\n' == '\x1b[48;5;94m \x1b[0m\x1b[42mXX\x1b[0m\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\n\x1b[48;5;94m \x1b[0m\x1b[91;40mY\x1b[0m\x1b[91;48;5;94m \x1b[0m\n\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m \x1b[0m\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m \x1b[0m\n\x1b[91;48;5;94m \x1b[0m\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m \x1b[0m\x1b[91;42mX\x1b[0m\n\x1b[91;48;5;94m \x1b[0m\n\x1b[91;48;5;94m \x1b[0m\x1b[91;42mXX\x1b[0m\x1b[91;48;5;94m \x1b[0m\n\n' E - XX E - E - E - E - Y E - X X E - X X E - E - XX E + XX E + E + E + E + Y E + X X E + X X E + E + XX Console = MAP = ('[on orange4] [on green]XX[on orange4] \n' ' \n' ' \n' ' \n' ' [bright_red on black]Y[on orange4] \n' '[on green]X[on orange4] [on green]X[on orange4] \n' ' [on green]X[on orange4] [on green]X\n' '[on orange4] \n' ' [on green]XX[on orange4] \n') Text = console = expected = ('\x1b[48;5;94m \x1b[0m\x1b[42mXX\x1b[0m\x1b[48;5;94m ' '\x1b[0m\n' '\x1b[48;5;94m \x1b[0m\n' '\x1b[48;5;94m \x1b[0m\n' '\x1b[48;5;94m \x1b[0m\n' '\x1b[48;5;94m \x1b[0m\x1b[91;40mY\x1b[0m\x1b[91;48;5;94m ' '\x1b[0m\n' '\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m ' '\x1b[0m\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m \x1b[0m\n' '\x1b[91;48;5;94m ' '\x1b[0m\x1b[91;42mX\x1b[0m\x1b[91;48;5;94m ' '\x1b[0m\x1b[91;42mX\x1b[0m\n' '\x1b[91;48;5;94m \x1b[0m\n' '\x1b[91;48;5;94m ' '\x1b[0m\x1b[91;42mXX\x1b[0m\x1b[91;48;5;94m \x1b[0m\n' '\n') result = (' XX \n' ' \n' ' \n' ' \n' ' Y \n' 'X X \n' ' X X\n' ' \n' ' XX \n' '\n') text = tests/test_segment.py:193: AssertionError ----------------------------- Captured stdout call ----------------------------- ' XX \n \n \n \n Y \nX X \n X X\n \n XX \n\n' _______________________________ test_blank_lines _______________________________ def test_blank_lines(): code = "\n\nimport this\n\n" syntax = Syntax( code, lexer="python", theme="ascii_light", code_width=30, line_numbers=True ) result = render(syntax) print(repr(result)) > assert ( result == "\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m1 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m2 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m3 \x1b[0m\x1b[1;38;2;0;128;0;48;2;248;248;248mimport\x1b[0m\x1b[38;2;0;0;0;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m4 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m5 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n" ) E AssertionError: assert '\x1b[1m \x1b[0m1 \n\x1b[1m \x1b[0m2 \n\x1b[1m \x1b[0m3 \x1b[1mimport\x1b[0m \x1b[1mthis\x1b[0m \n\x1b[1m \x1b[0m4 \n\x1b[1m \x1b[0m5 \n' == '\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m1 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m2 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m3 \x1b[0m\x1b[1;38;2;0;128;0;48;2;248;248;248mimport\x1b[0m\x1b[38;2;0;0;0;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m4 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m5 \x1b[0m\x1b[48;2;248;248;248m \x1b[0m\n' E - 1 E - 2 E - 3 import this E - 4 E - 5 E + 1 E + 2 E + 3 import this E + 4 E + 5 code = '\n\nimport this\n\n' result = ('\x1b[1m \x1b[0m1 \n' '\x1b[1m \x1b[0m2 \n' '\x1b[1m \x1b[0m3 \x1b[1mimport\x1b[0m ' '\x1b[1mthis\x1b[0m \n' '\x1b[1m \x1b[0m4 \n' '\x1b[1m \x1b[0m5 \n') syntax = tests/test_syntax.py:50: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[1m \x1b[0m1 \n\x1b[1m \x1b[0m2 \n\x1b[1m \x1b[0m3 \x1b[1mimport\x1b[0m \x1b[1mthis\x1b[0m \n\x1b[1m \x1b[0m4 \n\x1b[1m \x1b[0m5 \n' ______________________________ test_python_render ______________________________ def test_python_render(): syntax = Panel.fit( Syntax( CODE, lexer="python", line_numbers=True, line_range=(2, 10), theme="monokai", code_width=60, word_wrap=True, ), padding=0, ) rendered_syntax = render(syntax) print(repr(rendered_syntax)) expected = '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first \x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34mand last value."""\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n╰─────────────────────────────────────────────────────────────────╯\n' > assert rendered_syntax == expected E assert '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1m \x1b[0m 2 """Iterate and generate a tuple with a flag for first │\n│ and last value.""" │\n│\x1b[1m \x1b[0m 3 iter_values = iter(values) │\n│\x1b[1m \x1b[0m 4 try: │\n│\x1b[1m \x1b[0m 5 previous_value = next(iter_values) │\n│\x1b[1m \x1b[0m 6 except StopIteration: │\n│\x1b[1m \x1b[0m 7 return │\n│\x1b[1m \x1b[0m 8 first = True │\n│\x1b[1m \x1b[0m 9 for value in iter_values: │\n│\x1b[1m \x1b[0m10 yield first, False, previous_value │\n╰─────────────────────────────────────────────────────────────────╯\n' == '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first \x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34mand last value."""\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n╰─────────────────────────────────────────────────────────────────╯\n' E ╭─────────────────────────────────────────────────────────────────╮ E - │ 2 """Iterate and generate a tuple with a flag for first │ E - │ and last value.""" │ E - │ 3 iter_values = iter(values) │ E - │ 4 try: │ E - │ 5 previous_value = next(iter_values) │ E - │ 6 except StopIteration: │ E - │ 7 return │ E - │ 8 first = True │ E - │ 9 for value in iter_values: │ E - │ 10 yield first, False, previous_value │ E + │ 2 """Iterate and generate a tuple with a flag for first │ E + │ and last value.""" │ E + │ 3 iter_values = iter(values) │ E + │ 4 try: │ E + │ 5 previous_value = next(iter_values) │ E + │ 6 except StopIteration: │ E + │ 7 return │ E + │ 8 first = True │ E + │ 9 for value in iter_values: │ E + │ 10 yield first, False, previous_value │ E ╰─────────────────────────────────────────────────────────────────╯ expected = ('╭─────────────────────────────────────────────────────────────────╮\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple ' 'with a flag for first \x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n' '│\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34mand last ' 'value."""\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '╰─────────────────────────────────────────────────────────────────╯\n') rendered_syntax = ('╭─────────────────────────────────────────────────────────────────╮\n' '│\x1b[1m \x1b[0m 2 """Iterate and generate a tuple with a flag for ' 'first │\n' '│ and last value.""" │\n' '│\x1b[1m \x1b[0m 3 iter_values = ' 'iter(values) │\n' '│\x1b[1m \x1b[0m 4 ' 'try: │\n' '│\x1b[1m \x1b[0m 5 previous_value = ' 'next(iter_values) │\n' '│\x1b[1m \x1b[0m 6 except ' 'StopIteration: │\n' '│\x1b[1m \x1b[0m 7 ' 'return │\n' '│\x1b[1m \x1b[0m 8 first = ' 'True │\n' '│\x1b[1m \x1b[0m 9 for value in ' 'iter_values: │\n' '│\x1b[1m \x1b[0m10 yield first, False, ' 'previous_value │\n' '╰─────────────────────────────────────────────────────────────────╯\n') syntax = tests/test_syntax.py:72: AssertionError ----------------------------- Captured stdout call ----------------------------- '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1m \x1b[0m 2 """Iterate and generate a tuple with a flag for first │\n│ and last value.""" │\n│\x1b[1m \x1b[0m 3 iter_values = iter(values) │\n│\x1b[1m \x1b[0m 4 try: │\n│\x1b[1m \x1b[0m 5 previous_value = next(iter_values) │\n│\x1b[1m \x1b[0m 6 except StopIteration: │\n│\x1b[1m \x1b[0m 7 return │\n│\x1b[1m \x1b[0m 8 first = True │\n│\x1b[1m \x1b[0m 9 for value in iter_values: │\n│\x1b[1m \x1b[0m10 yield first, False, previous_value │\n╰─────────────────────────────────────────────────────────────────╯\n' __________________________ test_python_render_simple ___________________________ def test_python_render_simple(): syntax = Syntax( CODE, lexer="python", line_numbers=False, theme="monokai", code_width=60, word_wrap=False, ) rendered_syntax = render(syntax) print(repr(rendered_syntax)) expected = '\x1b[38;2;102;217;239;48;2;39;40;34mdef\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_first_last\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mb\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first an\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' > assert rendered_syntax == expected E assert 'def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b\n """Iterate and generate a tuple with a flag for first an\n iter_values = iter(values) \n try: \n previous_value = next(iter_values) \n except StopIteration: \n return \n first = True \n for value in iter_values: \n yield first, False, previous_value \n first = False \n previous_value = value \n yield first, True, previous_value \n' == '\x1b[38;2;102;217;239;48;2;39;40;34mdef\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_first_last\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mb\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first an\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' E - def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b E - """Iterate and generate a tuple with a flag for first an E - iter_values = iter(values) E - try: E - previous_value = next(iter_values) E - except StopIteration: E - return E - first = True E - for value in iter_values: E - yield first, False, previous_value E - first = False E - previous_value = value E - yield first, True, previous_value E + def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b E + """Iterate and generate a tuple with a flag for first an E + iter_values = iter(values) E + try: E + previous_value = next(iter_values) E + except StopIteration: E + return E + first = True E + for value in iter_values: E + yield first, False, previous_value E + first = False E + previous_value = value E + yield first, True, previous_value expected = ('\x1b[38;2;102;217;239;48;2;39;40;34mdef\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_first_last\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mb\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple ' 'with a flag for first an\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n') rendered_syntax = ('def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b\n' ' """Iterate and generate a tuple with a flag for first an\n' ' iter_values = iter(values) \n' ' try: \n' ' previous_value = next(iter_values) \n' ' except StopIteration: \n' ' return \n' ' first = True \n' ' for value in iter_values: \n' ' yield first, False, previous_value \n' ' first = False \n' ' previous_value = value \n' ' yield first, True, previous_value \n') syntax = tests/test_syntax.py:87: AssertionError ----------------------------- Captured stdout call ----------------------------- 'def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b\n """Iterate and generate a tuple with a flag for first an\n iter_values = iter(values) \n try: \n previous_value = next(iter_values) \n except StopIteration: \n return \n first = True \n for value in iter_values: \n yield first, False, previous_value \n first = False \n previous_value = value \n yield first, True, previous_value \n' _______________ test_python_render_simple_passing_lexer_instance _______________ def test_python_render_simple_passing_lexer_instance(): syntax = Syntax( CODE, lexer=PythonLexer(), line_numbers=False, theme="monokai", code_width=60, word_wrap=False, ) rendered_syntax = render(syntax) print(repr(rendered_syntax)) expected = '\x1b[38;2;102;217;239;48;2;39;40;34mdef\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_first_last\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mb\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first an\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' > assert rendered_syntax == expected E assert 'def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b\n """Iterate and generate a tuple with a flag for first an\n iter_values = iter(values) \n try: \n previous_value = next(iter_values) \n except StopIteration: \n return \n first = True \n for value in iter_values: \n yield first, False, previous_value \n first = False \n previous_value = value \n yield first, True, previous_value \n' == '\x1b[38;2;102;217;239;48;2;39;40;34mdef\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_first_last\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mb\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first an\x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m\n' E - def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b E - """Iterate and generate a tuple with a flag for first an E - iter_values = iter(values) E - try: E - previous_value = next(iter_values) E - except StopIteration: E - return E - first = True E - for value in iter_values: E - yield first, False, previous_value E - first = False E - previous_value = value E - yield first, True, previous_value E + def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b E + """Iterate and generate a tuple with a flag for first an E + iter_values = iter(values) E + try: E + previous_value = next(iter_values) E + except StopIteration: E + return E + first = True E + for value in iter_values: E + yield first, False, previous_value E + first = False E + previous_value = value E + yield first, True, previous_value expected = ('\x1b[38;2;102;217;239;48;2;39;40;34mdef\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_first_last\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mb\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple ' 'with a flag for first an\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n' '\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m\n') rendered_syntax = ('def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b\n' ' """Iterate and generate a tuple with a flag for first an\n' ' iter_values = iter(values) \n' ' try: \n' ' previous_value = next(iter_values) \n' ' except StopIteration: \n' ' return \n' ' first = True \n' ' for value in iter_values: \n' ' yield first, False, previous_value \n' ' first = False \n' ' previous_value = value \n' ' yield first, True, previous_value \n') syntax = tests/test_syntax.py:102: AssertionError ----------------------------- Captured stdout call ----------------------------- 'def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[b\n """Iterate and generate a tuple with a flag for first an\n iter_values = iter(values) \n try: \n previous_value = next(iter_values) \n except StopIteration: \n return \n first = True \n for value in iter_values: \n yield first, False, previous_value \n first = False \n previous_value = value \n yield first, True, previous_value \n' _______________________ test_python_render_indent_guides _______________________ def test_python_render_indent_guides(): syntax = Panel.fit( Syntax( CODE, lexer="python", line_numbers=True, line_range=(2, 10), theme="monokai", code_width=60, word_wrap=True, indent_guides=True, ), padding=0, ) rendered_syntax = render(syntax) print(repr(rendered_syntax)) expected = '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first \x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34mand last value."""\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n╰─────────────────────────────────────────────────────────────────╯\n' > assert rendered_syntax == expected E assert '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1m \x1b[0m 2 \x1b[2m│ \x1b[0m"""Iterate and generate a tuple with a flag for first │\n│ and last value.""" │\n│\x1b[1m \x1b[0m 3 \x1b[2m│ \x1b[0miter_values = iter(values) │\n│\x1b[1m \x1b[0m 4 \x1b[2m│ \x1b[0mtry: │\n│\x1b[1m \x1b[0m 5 \x1b[2m│ │ \x1b[0mprevious_value = next(iter_values) │\n│\x1b[1m \x1b[0m 6 \x1b[2m│ \x1b[0mexcept StopIteration: │\n│\x1b[1m \x1b[0m 7 \x1b[2m│ │ \x1b[0mreturn │\n│\x1b[1m \x1b[0m 8 \x1b[2m│ \x1b[0mfirst = True │\n│\x1b[1m \x1b[0m 9 \x1b[2m│ \x1b[0mfor value in iter_values: │\n│\x1b[1m \x1b[0m10 \x1b[2m│ │ \x1b[0myield first, False, previous_value │\n╰─────────────────────────────────────────────────────────────────╯\n' == '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first \x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34mand last value."""\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n│\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 \x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n╰─────────────────────────────────────────────────────────────────╯\n' E ╭─────────────────────────────────────────────────────────────────╮ E - │ 2 │ """Iterate and generate a tuple with a flag for first │ E - │ and last value.""" │ E - │ 3 │ iter_values = iter(values) │ E - │ 4 │ try: │ E - │ 5 │ │ previous_value = next(iter_values) │ E - │ 6 │ except StopIteration: │ E - │ 7 │ │ return │ E - │ 8 │ first = True │ E - │ 9 │ for value in iter_values: │ E - │ 10 │ │ yield first, False, previous_value │ E + │ 2 │ """Iterate and generate a tuple with a flag for first │ E + │ and last value.""" │ E + │ 3 │ iter_values = iter(values) │ E + │ 4 │ try: │ E + │ 5 │ │ previous_value = next(iter_values) │ E + │ 6 │ except StopIteration: │ E + │ 7 │ │ return │ E + │ 8 │ first = True │ E + │ 9 │ for value in iter_values: │ E + │ 10 │ │ yield first, False, previous_value │ E ╰─────────────────────────────────────────────────────────────────╯ expected = ('╭─────────────────────────────────────────────────────────────────╮\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ ' '\x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple ' 'with a flag for first \x1b[0m\x1b[48;2;39;40;34m \x1b[0m│\n' '│\x1b[48;2;39;40;34m \x1b[0m\x1b[38;2;230;219;116;48;2;39;40;34mand last ' 'value."""\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '│\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 ' '\x1b[0m\x1b[2;38;2;117;113;94;48;2;39;40;34m│ │ ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[48;2;39;40;34m ' '\x1b[0m│\n' '╰─────────────────────────────────────────────────────────────────╯\n') rendered_syntax = ('╭─────────────────────────────────────────────────────────────────╮\n' '│\x1b[1m \x1b[0m 2 \x1b[2m│ \x1b[0m"""Iterate and generate a tuple with a ' 'flag for first │\n' '│ and last value.""" │\n' '│\x1b[1m \x1b[0m 3 \x1b[2m│ \x1b[0miter_values = ' 'iter(values) │\n' '│\x1b[1m \x1b[0m 4 \x1b[2m│ ' '\x1b[0mtry: │\n' '│\x1b[1m \x1b[0m 5 \x1b[2m│ │ \x1b[0mprevious_value = ' 'next(iter_values) │\n' '│\x1b[1m \x1b[0m 6 \x1b[2m│ \x1b[0mexcept ' 'StopIteration: │\n' '│\x1b[1m \x1b[0m 7 \x1b[2m│ │ ' '\x1b[0mreturn │\n' '│\x1b[1m \x1b[0m 8 \x1b[2m│ \x1b[0mfirst = ' 'True │\n' '│\x1b[1m \x1b[0m 9 \x1b[2m│ \x1b[0mfor value in ' 'iter_values: │\n' '│\x1b[1m \x1b[0m10 \x1b[2m│ │ \x1b[0myield first, False, ' 'previous_value │\n' '╰─────────────────────────────────────────────────────────────────╯\n') syntax = tests/test_syntax.py:157: AssertionError ----------------------------- Captured stdout call ----------------------------- '╭─────────────────────────────────────────────────────────────────╮\n│\x1b[1m \x1b[0m 2 \x1b[2m│ \x1b[0m"""Iterate and generate a tuple with a flag for first │\n│ and last value.""" │\n│\x1b[1m \x1b[0m 3 \x1b[2m│ \x1b[0miter_values = iter(values) │\n│\x1b[1m \x1b[0m 4 \x1b[2m│ \x1b[0mtry: │\n│\x1b[1m \x1b[0m 5 \x1b[2m│ │ \x1b[0mprevious_value = next(iter_values) │\n│\x1b[1m \x1b[0m 6 \x1b[2m│ \x1b[0mexcept StopIteration: │\n│\x1b[1m \x1b[0m 7 \x1b[2m│ │ \x1b[0mreturn │\n│\x1b[1m \x1b[0m 8 \x1b[2m│ \x1b[0mfirst = True │\n│\x1b[1m \x1b[0m 9 \x1b[2m│ \x1b[0mfor value in iter_values: │\n│\x1b[1m \x1b[0m10 \x1b[2m│ │ \x1b[0myield first, False, previous_value │\n╰─────────────────────────────────────────────────────────────────╯\n' _____________________________ test_option_no_wrap ______________________________ def test_option_no_wrap(): syntax = Syntax( CODE, lexer="python", line_numbers=True, line_range=(2, 10), code_width=60, word_wrap=False, background_color="red", ) rendered_syntax = render(syntax, True) print(repr(rendered_syntax)) expected = '\x1b[1;39;41m \x1b[0m\x1b[39;41m 2 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;230;219;116;41m"""Iterate and generate a tuple with a flag for first and last value."""\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 3 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41miter\x1b[0m\x1b[38;2;248;248;242;41m(\x1b[0m\x1b[38;2;248;248;242;41mvalues\x1b[0m\x1b[38;2;248;248;242;41m)\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 4 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mtry\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 5 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mprevious_value\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mnext\x1b[0m\x1b[38;2;248;248;242;41m(\x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m)\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 6 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mexcept\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;166;226;46;41mStopIteration\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 7 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mreturn\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 8 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mfirst\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mTrue\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 9 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mfor\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mvalue\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41min\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m10 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41myield\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mfirst\x1b[0m\x1b[38;2;248;248;242;41m,\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mFalse\x1b[0m\x1b[38;2;248;248;242;41m,\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mprevious_value\x1b[0m\n' > assert rendered_syntax == expected E assert '\x1b[1m \x1b[0m 2 """Iterate and generate a tuple with a flag for first and last value."""\n\x1b[1m \x1b[0m 3 iter_values = iter(values)\n\x1b[1m \x1b[0m 4 try:\n\x1b[1m \x1b[0m 5 previous_value = next(iter_values)\n\x1b[1m \x1b[0m 6 except StopIteration:\n\x1b[1m \x1b[0m 7 return\n\x1b[1m \x1b[0m 8 first = True\n\x1b[1m \x1b[0m 9 for value in iter_values:\n\x1b[1m \x1b[0m10 yield first, False, previous_value\n' == '\x1b[1;39;41m \x1b[0m\x1b[39;41m 2 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;230;219;116;41m"""Iterate and generate a tuple with a flag for first and last value."""\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 3 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41miter\x1b[0m\x1b[38;2;248;248;242;41m(\x1b[0m\x1b[38;2;248;248;242;41mvalues\x1b[0m\x1b[38;2;248;248;242;41m)\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 4 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mtry\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 5 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mprevious_value\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mnext\x1b[0m\x1b[38;2;248;248;242;41m(\x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m)\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 6 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mexcept\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;166;226;46;41mStopIteration\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 7 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mreturn\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 8 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mfirst\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mTrue\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m 9 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mfor\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mvalue\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;249;38;114;41min\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n\x1b[1;39;41m \x1b[0m\x1b[39;41m10 \x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41myield\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mfirst\x1b[0m\x1b[38;2;248;248;242;41m,\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;102;217;239;41mFalse\x1b[0m\x1b[38;2;248;248;242;41m,\x1b[0m\x1b[38;2;248;248;242;41m \x1b[0m\x1b[38;2;248;248;242;41mprevious_value\x1b[0m\n' E - 2 """Iterate and generate a tuple with a flag for first and last value.""" E - 3 iter_values = iter(values) E - 4 try: E - 5 previous_value = next(iter_values) E - 6 except StopIteration: E - 7 return E - 8 first = True E - 9 for value in iter_values: E - 10 yield first, False, previous_value E + 2 """Iterate and generate a tuple with a flag for first and last value.""" E + 3 iter_values = iter(values) E + 4 try: E + 5 previous_value = next(iter_values) E + 6 except StopIteration: E + 7 return E + 8 first = True E + 9 for value in iter_values: E + 10 yield first, False, previous_value expected = ('\x1b[1;39;41m \x1b[0m\x1b[39;41m 2 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;230;219;116;41m"""Iterate and generate a tuple with a flag ' 'for first and last value."""\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m 3 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41miter\x1b[0m\x1b[38;2;248;248;242;41m(\x1b[0m\x1b[38;2;248;248;242;41mvalues\x1b[0m\x1b[38;2;248;248;242;41m)\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m 4 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;102;217;239;41mtry\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m 5 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41mprevious_value\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41mnext\x1b[0m\x1b[38;2;248;248;242;41m(\x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m)\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m 6 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;102;217;239;41mexcept\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;166;226;46;41mStopIteration\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m 7 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;102;217;239;41mreturn\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m 8 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41mfirst\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;249;38;114;41m=\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;102;217;239;41mTrue\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m 9 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;102;217;239;41mfor\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41mvalue\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;249;38;114;41min\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41miter_values\x1b[0m\x1b[38;2;248;248;242;41m:\x1b[0m\n' '\x1b[1;39;41m \x1b[0m\x1b[39;41m10 \x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;102;217;239;41myield\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41mfirst\x1b[0m\x1b[38;2;248;248;242;41m,\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;102;217;239;41mFalse\x1b[0m\x1b[38;2;248;248;242;41m,\x1b[0m\x1b[38;2;248;248;242;41m ' '\x1b[0m\x1b[38;2;248;248;242;41mprevious_value\x1b[0m\n') rendered_syntax = ('\x1b[1m \x1b[0m 2 """Iterate and generate a tuple with a flag for first ' 'and last value."""\n' '\x1b[1m \x1b[0m 3 iter_values = iter(values)\n' '\x1b[1m \x1b[0m 4 try:\n' '\x1b[1m \x1b[0m 5 previous_value = next(iter_values)\n' '\x1b[1m \x1b[0m 6 except StopIteration:\n' '\x1b[1m \x1b[0m 7 return\n' '\x1b[1m \x1b[0m 8 first = True\n' '\x1b[1m \x1b[0m 9 for value in iter_values:\n' '\x1b[1m \x1b[0m10 yield first, False, previous_value\n') syntax = tests/test_syntax.py:247: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[1m \x1b[0m 2 """Iterate and generate a tuple with a flag for first and last value."""\n\x1b[1m \x1b[0m 3 iter_values = iter(values)\n\x1b[1m \x1b[0m 4 try:\n\x1b[1m \x1b[0m 5 previous_value = next(iter_values)\n\x1b[1m \x1b[0m 6 except StopIteration:\n\x1b[1m \x1b[0m 7 return\n\x1b[1m \x1b[0m 8 first = True\n\x1b[1m \x1b[0m 9 for value in iter_values:\n\x1b[1m \x1b[0m10 yield first, False, previous_value\n' _________________________ test_syntax_highlight_ranges _________________________ def test_syntax_highlight_ranges(): syntax = Syntax( CODE, lexer="python", line_numbers=True, word_wrap=False, ) stylized_ranges = [ _SyntaxHighlightRange( # overline the 2nd char of the 1st line: start=(1, 1), end=(1, 2), style=Style(overline=True), ), _SyntaxHighlightRange( start=(1, len("def loop_")), end=(1, len("def loop_first_last")), style=Style(underline=True), ), _SyntaxHighlightRange( start=(1, len("def loop_first")), end=(3, len(" iter_values = iter")), style=Style(bold=True), ), _SyntaxHighlightRange( start=(9, len(" for ")), end=(9, len(" for value in")), style=Style(strike=True), ), _SyntaxHighlightRange( start=(6, len(" except ")), end=(6, len(" except StopIteration")), style=Style(reverse=True), ), _SyntaxHighlightRange( start=(10, len(" yield first,")), # `column_index` is out of range: should be clamped to the line length: end=(10, 300), style=Style(bold=True), ), # For this one the end `line_number` is out of range, so it should have no impact: _SyntaxHighlightRange( start=(1, 1), end=(30, 2), style=Style(bold=True), ), ] for range_ in stylized_ranges: syntax.stylize_range(range_.style, range_.start, range_.end) rendered_syntax = render(syntax, True) print(repr(rendered_syntax)) expected = '\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 1 \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34md\x1b[0m\x1b[53;38;2;102;217;239;48;2;39;40;34me\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mf\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_\x1b[0m\x1b[4;38;2;166;226;46;48;2;39;40;34mfirst\x1b[0m\x1b[1;4;38;2;166;226;46;48;2;39;40;34m_last\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mbool\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mbool\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first and last value."""\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[7;38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[9;38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[9;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[9;38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m11 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m12 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m13 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\n' > assert rendered_syntax == expected E assert '\x1b[1m \x1b[0m 1 d\x1b[53me\x1b[0mf loop_\x1b[4mfirst\x1b[0m\x1b[1;4m_last\x1b[0m\x1b[1m(\x1b[0m\x1b[1mvalues\x1b[0m\x1b[1m:\x1b[0m\x1b[1m \x1b[0m\x1b[1mIterable\x1b[0m\x1b[1m[\x1b[0m\x1b[1mT\x1b[0m\x1b[1m]\x1b[0m\x1b[1m)\x1b[0m\x1b[1m \x1b[0m\x1b[1m-\x1b[0m\x1b[1m>\x1b[0m\x1b[1m \x1b[0m\x1b[1mIterable\x1b[0m\x1b[1m[\x1b[0m\x1b[1mTuple\x1b[0m\x1b[1m[\x1b[0m\x1b[1mbool\x1b[0m\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mbool\x1b[0m\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mT\x1b[0m\x1b[1m]\x1b[0m\x1b[1m]\x1b[0m\x1b[1m:\x1b[0m\n\x1b[1m \x1b[0m 2 \x1b[1m \x1b[0m\x1b[1m"""Iterate and generate a tuple with a flag for first and last value."""\x1b[0m\n\x1b[1m \x1b[0m 3 \x1b[1m \x1b[0m\x1b[1miter_values\x1b[0m\x1b[1m \x1b[0m\x1b[1m=\x1b[0m\x1b[1m \x1b[0m\x1b[1miter\x1b[0m(values)\n\x1b[1m \x1b[0m 4 try:\n\x1b[1m \x1b[0m 5 previous_value = next(iter_values)\n\x1b[1m \x1b[0m 6 except \x1b[7mStopIteration\x1b[0m:\n\x1b[1m \x1b[0m 7 return\n\x1b[1m \x1b[0m 8 first = True\n\x1b[1m \x1b[0m 9 for \x1b[9mvalue\x1b[0m\x1b[9m \x1b[0m\x1b[9min\x1b[0m iter_values:\n\x1b[1m \x1b[0m10 yield first\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mFalse\x1b[0m\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mprevious_value\x1b[0m\n\x1b[1m \x1b[0m11 first = False\n\x1b[1m \x1b[0m12 previous_value = value\n\x1b[1m \x1b[0m13 yield first, True, previous_value\n' == '\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 1 \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34md\x1b[0m\x1b[53;38;2;102;217;239;48;2;39;40;34me\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mf\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_\x1b[0m\x1b[4;38;2;166;226;46;48;2;39;40;34mfirst\x1b[0m\x1b[1;4;38;2;166;226;46;48;2;39;40;34m_last\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mbool\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mbool\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple with a flag for first and last value."""\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[7;38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[9;38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[9;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[9;38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m11 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m12 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\n\x1b[1;38;2;227;227;221;48;2;39;40;34m \x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m13 \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m \x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\n' E - 1 def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]: E - 2 """Iterate and generate a tuple with a flag for first and last value.""" E - 3 iter_values = iter(values) E - 4 try: E - 5 previous_value = next(iter_values) E - 6 except StopIteration: E - 7 return E - 8 first = True E - 9 for value in iter_values: E - 10 yield first, False, previous_value E - 11 first = False E - 12 previous_value = value E - 13 yield first, True, previous_value E + 1 def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]: E + 2 """Iterate and generate a tuple with a flag for first and last value.""" E + 3 iter_values = iter(values) E + 4 try: E + 5 previous_value = next(iter_values) E + 6 except StopIteration: E + 7 return E + 8 first = True E + 9 for value in iter_values: E + 10 yield first, False, previous_value E + 11 first = False E + 12 previous_value = value E + 13 yield first, True, previous_value expected = ('\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 1 ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34md\x1b[0m\x1b[53;38;2;102;217;239;48;2;39;40;34me\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mf\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;166;226;46;48;2;39;40;34mloop_\x1b[0m\x1b[4;38;2;166;226;46;48;2;39;40;34mfirst\x1b[0m\x1b[1;4;38;2;166;226;46;48;2;39;40;34m_last\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m:\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m)\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m-\x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m>\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mIterable\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mTuple\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m[\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mbool\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mbool\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mT\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m]\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 2 ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;230;219;116;48;2;39;40;34m"""Iterate and generate a tuple ' 'with a flag for first and last value."""\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 3 ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34miter\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalues\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 4 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mtry\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 5 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mnext\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m(\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m)\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 6 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mexcept\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[7;38;2;166;226;46;48;2;39;40;34mStopIteration\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 7 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mreturn\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 8 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m 9 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mfor\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[9;38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\x1b[9;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[9;38;2;249;38;114;48;2;39;40;34min\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34miter_values\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m:\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m10 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[1;38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m11 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mFalse\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m12 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;249;38;114;48;2;39;40;34m=\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mvalue\x1b[0m\n' '\x1b[1;38;2;227;227;221;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;101;102;96;48;2;39;40;34m13 ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34myield\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mfirst\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;102;217;239;48;2;39;40;34mTrue\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m,\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34m ' '\x1b[0m\x1b[38;2;248;248;242;48;2;39;40;34mprevious_value\x1b[0m\n') range_ = _SyntaxHighlightRange(style=Style(bold=True), start=(1, 1), end=(30, 2)) rendered_syntax = ('\x1b[1m \x1b[0m 1 d\x1b[53me\x1b[0mf ' 'loop_\x1b[4mfirst\x1b[0m\x1b[1;4m_last\x1b[0m\x1b[1m(\x1b[0m\x1b[1mvalues\x1b[0m\x1b[1m:\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1mIterable\x1b[0m\x1b[1m[\x1b[0m\x1b[1mT\x1b[0m\x1b[1m]\x1b[0m\x1b[1m)\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1m-\x1b[0m\x1b[1m>\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1mIterable\x1b[0m\x1b[1m[\x1b[0m\x1b[1mTuple\x1b[0m\x1b[1m[\x1b[0m\x1b[1mbool\x1b[0m\x1b[1m,\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1mbool\x1b[0m\x1b[1m,\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1mT\x1b[0m\x1b[1m]\x1b[0m\x1b[1m]\x1b[0m\x1b[1m:\x1b[0m\n' '\x1b[1m \x1b[0m 2 \x1b[1m \x1b[0m\x1b[1m"""Iterate and generate a tuple ' 'with a flag for first and last value."""\x1b[0m\n' '\x1b[1m \x1b[0m 3 \x1b[1m \x1b[0m\x1b[1miter_values\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1m=\x1b[0m\x1b[1m \x1b[0m\x1b[1miter\x1b[0m(values)\n' '\x1b[1m \x1b[0m 4 try:\n' '\x1b[1m \x1b[0m 5 previous_value = next(iter_values)\n' '\x1b[1m \x1b[0m 6 except \x1b[7mStopIteration\x1b[0m:\n' '\x1b[1m \x1b[0m 7 return\n' '\x1b[1m \x1b[0m 8 first = True\n' '\x1b[1m \x1b[0m 9 for \x1b[9mvalue\x1b[0m\x1b[9m ' '\x1b[0m\x1b[9min\x1b[0m iter_values:\n' '\x1b[1m \x1b[0m10 yield first\x1b[1m,\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1mFalse\x1b[0m\x1b[1m,\x1b[0m\x1b[1m ' '\x1b[0m\x1b[1mprevious_value\x1b[0m\n' '\x1b[1m \x1b[0m11 first = False\n' '\x1b[1m \x1b[0m12 previous_value = value\n' '\x1b[1m \x1b[0m13 yield first, True, previous_value\n') stylized_ranges = [_SyntaxHighlightRange(style=Style(), start=(1, 1), end=(1, 2)), _SyntaxHighlightRange(style=Style(underline=True), start=(1, 9), end=(1, 19)), _SyntaxHighlightRange(style=Style(bold=True), start=(1, 14), end=(3, 22)), _SyntaxHighlightRange(style=Style(strike=True), start=(9, 8), end=(9, 16)), _SyntaxHighlightRange(style=Style(reverse=True), start=(6, 11), end=(6, 24)), _SyntaxHighlightRange(style=Style(bold=True), start=(10, 19), end=(10, 300)), _SyntaxHighlightRange(style=Style(bold=True), start=(1, 1), end=(30, 2))] syntax = tests/test_syntax.py:302: AssertionError ----------------------------- Captured stdout call ----------------------------- '\x1b[1m \x1b[0m 1 d\x1b[53me\x1b[0mf loop_\x1b[4mfirst\x1b[0m\x1b[1;4m_last\x1b[0m\x1b[1m(\x1b[0m\x1b[1mvalues\x1b[0m\x1b[1m:\x1b[0m\x1b[1m \x1b[0m\x1b[1mIterable\x1b[0m\x1b[1m[\x1b[0m\x1b[1mT\x1b[0m\x1b[1m]\x1b[0m\x1b[1m)\x1b[0m\x1b[1m \x1b[0m\x1b[1m-\x1b[0m\x1b[1m>\x1b[0m\x1b[1m \x1b[0m\x1b[1mIterable\x1b[0m\x1b[1m[\x1b[0m\x1b[1mTuple\x1b[0m\x1b[1m[\x1b[0m\x1b[1mbool\x1b[0m\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mbool\x1b[0m\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mT\x1b[0m\x1b[1m]\x1b[0m\x1b[1m]\x1b[0m\x1b[1m:\x1b[0m\n\x1b[1m \x1b[0m 2 \x1b[1m \x1b[0m\x1b[1m"""Iterate and generate a tuple with a flag for first and last value."""\x1b[0m\n\x1b[1m \x1b[0m 3 \x1b[1m \x1b[0m\x1b[1miter_values\x1b[0m\x1b[1m \x1b[0m\x1b[1m=\x1b[0m\x1b[1m \x1b[0m\x1b[1miter\x1b[0m(values)\n\x1b[1m \x1b[0m 4 try:\n\x1b[1m \x1b[0m 5 previous_value = next(iter_values)\n\x1b[1m \x1b[0m 6 except \x1b[7mStopIteration\x1b[0m:\n\x1b[1m \x1b[0m 7 return\n\x1b[1m \x1b[0m 8 first = True\n\x1b[1m \x1b[0m 9 for \x1b[9mvalue\x1b[0m\x1b[9m \x1b[0m\x1b[9min\x1b[0m iter_values:\n\x1b[1m \x1b[0m10 yield first\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mFalse\x1b[0m\x1b[1m,\x1b[0m\x1b[1m \x1b[0m\x1b[1mprevious_value\x1b[0m\n\x1b[1m \x1b[0m11 first = False\n\x1b[1m \x1b[0m12 previous_value = value\n\x1b[1m \x1b[0m13 yield first, True, previous_value\n' =============================== warnings summary =============================== ../../../../../../../usr/lib/pypy3.9/site-packages/pkg_resources/__init__.py:121 /usr/lib/pypy3.9/site-packages/pkg_resources/__init__.py:121: DeprecationWarning: pkg_resources is deprecated as an API warnings.warn("pkg_resources is deprecated as an API", DeprecationWarning) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ SKIPPED [1] tests/test_inspect.py:98: rendered differently on pypy3 SKIPPED [1] tests/test_inspect.py:115: rendered differently on pypy3 SKIPPED [1] tests/test_inspect.py:138: rendered differently on pypy3 SKIPPED [1] tests/test_inspect.py:156: rendered differently on pypy3 SKIPPED [1] tests/test_inspect.py:177: rendered differently on pypy3 SKIPPED [1] tests/test_inspect.py:248: rendered differently on py3.9 SKIPPED [1] tests/test_inspect.py:289: rendered differently on py3.9 SKIPPED [1] tests/test_inspect.py:332: rendered differently on pypy3 SKIPPED [1] tests/test_pretty.py:622: rendered differently on py3.9 SKIPPED [1] tests/test_tree.py:81: Windows specific SKIPPED [1] tests/test_tree.py:121: Windows specific SKIPPED [1] tests/test_windows_renderer.py:23: windows only SKIPPED [1] tests/test_windows_renderer.py:31: windows only SKIPPED [1] tests/test_windows_renderer.py:41: windows only SKIPPED [1] tests/test_windows_renderer.py:51: windows only SKIPPED [1] tests/test_windows_renderer.py:61: windows only SKIPPED [1] tests/test_windows_renderer.py:69: windows only SKIPPED [4] tests/test_windows_renderer.py:77: windows only SKIPPED [3] tests/test_windows_renderer.py:96: windows only SKIPPED [1] tests/test_windows_renderer.py:112: windows only SKIPPED [1] tests/test_windows_renderer.py:120: windows only SKIPPED [1] tests/test_windows_renderer.py:128: windows only SKIPPED [1] tests/test_windows_renderer.py:136: windows only FAILED tests/test_ansi.py::test_decode - AssertionError: assert [