<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># Note! This file is aimed specifically at pandas.io.formats.printing utility
# functions, not the general printing of pandas objects.
import string

import pandas._config.config as cf

from pandas.io.formats import printing


def test_adjoin():
    data = [["a", "b", "c"], ["dd", "ee", "ff"], ["ggg", "hhh", "iii"]]
    expected = "a  dd  ggg\nb  ee  hhh\nc  ff  iii"

    adjoined = printing.adjoin(2, *data)

    assert adjoined == expected


class TestPPrintThing:
    def test_repr_binary_type(self):
        letters = string.ascii_letters
        try:
            raw = bytes(letters, encoding=cf.get_option("display.encoding"))
        except TypeError:
            raw = bytes(letters)
        b = str(raw.decode("utf-8"))
        res = printing.pprint_thing(b, quote_strings=True)
        assert res == repr(b)
        res = printing.pprint_thing(b, quote_strings=False)
        assert res == b

    def test_repr_obeys_max_seq_limit(self):
        with cf.option_context("display.max_seq_items", 2000):
            assert len(printing.pprint_thing(list(range(1000)))) &gt; 1000

        with cf.option_context("display.max_seq_items", 5):
            assert len(printing.pprint_thing(list(range(1000)))) &lt; 100

        with cf.option_context("display.max_seq_items", 1):
            assert len(printing.pprint_thing(list(range(1000)))) &lt; 9

    def test_repr_set(self):
        assert printing.pprint_thing({1}) == "{1}"


class TestFormatBase:
    def test_adjoin(self):
        data = [["a", "b", "c"], ["dd", "ee", "ff"], ["ggg", "hhh", "iii"]]
        expected = "a  dd  ggg\nb  ee  hhh\nc  ff  iii"

        adjoined = printing.adjoin(2, *data)

        assert adjoined == expected

    def test_adjoin_unicode(self):
        data = [["ã‚", "b", "c"], ["dd", "ãˆãˆ", "ff"], ["ggg", "hhh", "ã„ã„ã„"]]
        expected = "ã‚  dd  ggg\nb  ãˆãˆ  hhh\nc  ff  ã„ã„ã„"
        adjoined = printing.adjoin(2, *data)
        assert adjoined == expected

        adj = printing._EastAsianTextAdjustment()

        expected = """ã‚  dd    ggg
b   ãˆãˆ  hhh
c   ff    ã„ã„ã„"""

        adjoined = adj.adjoin(2, *data)
        assert adjoined == expected
        cols = adjoined.split("\n")
        assert adj.len(cols[0]) == 13
        assert adj.len(cols[1]) == 13
        assert adj.len(cols[2]) == 16

        expected = """ã‚       dd         ggg
b        ãˆãˆ       hhh
c        ff         ã„ã„ã„"""

        adjoined = adj.adjoin(7, *data)
        assert adjoined == expected
        cols = adjoined.split("\n")
        assert adj.len(cols[0]) == 23
        assert adj.len(cols[1]) == 23
        assert adj.len(cols[2]) == 26

    def test_justify(self):
        adj = printing._EastAsianTextAdjustment()

        def just(x, *args, **kwargs):
            # wrapper to test single str
            return adj.justify([x], *args, **kwargs)[0]

        assert just("abc", 5, mode="left") == "abc  "
        assert just("abc", 5, mode="center") == " abc "
        assert just("abc", 5, mode="right") == "  abc"
        assert just("abc", 5, mode="left") == "abc  "
        assert just("abc", 5, mode="center") == " abc "
        assert just("abc", 5, mode="right") == "  abc"

        assert just("ãƒ‘ãƒ³ãƒ€", 5, mode="left") == "ãƒ‘ãƒ³ãƒ€"
        assert just("ãƒ‘ãƒ³ãƒ€", 5, mode="center") == "ãƒ‘ãƒ³ãƒ€"
        assert just("ãƒ‘ãƒ³ãƒ€", 5, mode="right") == "ãƒ‘ãƒ³ãƒ€"

        assert just("ãƒ‘ãƒ³ãƒ€", 10, mode="left") == "ãƒ‘ãƒ³ãƒ€    "
        assert just("ãƒ‘ãƒ³ãƒ€", 10, mode="center") == "  ãƒ‘ãƒ³ãƒ€  "
        assert just("ãƒ‘ãƒ³ãƒ€", 10, mode="right") == "    ãƒ‘ãƒ³ãƒ€"

    def test_east_asian_len(self):
        adj = printing._EastAsianTextAdjustment()

        assert adj.len("abc") == 3
        assert adj.len("abc") == 3

        assert adj.len("ãƒ‘ãƒ³ãƒ€") == 6
        assert adj.len("ï¾Šï¾Ÿï¾ï¾€ï¾ž") == 5
        assert adj.len("ãƒ‘ãƒ³ãƒ€panda") == 11
        assert adj.len("ï¾Šï¾Ÿï¾ï¾€ï¾žpanda") == 10

    def test_ambiguous_width(self):
        adj = printing._EastAsianTextAdjustment()
        assert adj.len("Â¡Â¡ab") == 4

        with cf.option_context("display.unicode.ambiguous_as_wide", True):
            adj = printing._EastAsianTextAdjustment()
            assert adj.len("Â¡Â¡ab") == 6

        data = [["ã‚", "b", "c"], ["dd", "ãˆãˆ", "ff"], ["ggg", "Â¡Â¡ab", "ã„ã„ã„"]]
        expected = "ã‚  dd    ggg \nb   ãˆãˆ  Â¡Â¡ab\nc   ff    ã„ã„ã„"
        adjoined = adj.adjoin(2, *data)
        assert adjoined == expected
</pre></body></html>