PHP 8.2.30
Preview: palette.py Size: 3.32 KB
/proc/thread-self/root/proc/self/root/opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/rich/palette.py

from math import sqrt
from functools import lru_cache
from typing import Sequence, Tuple, TYPE_CHECKING

from .color_triplet import ColorTriplet

if TYPE_CHECKING:
    from pip._vendor.rich.table import Table


class Palette:
    """A palette of available colors."""

    def __init__(self, colors: Sequence[Tuple[int, int, int]]):
        self._colors = colors

    def __getitem__(self, number: int) -> ColorTriplet:
        return ColorTriplet(*self._colors[number])

    def __rich__(self) -> "Table":
        from pip._vendor.rich.color import Color
        from pip._vendor.rich.style import Style
        from pip._vendor.rich.text import Text
        from pip._vendor.rich.table import Table

        table = Table(
            "index",
            "RGB",
            "Color",
            title="Palette",
            caption=f"{len(self._colors)} colors",
            highlight=True,
            caption_justify="right",
        )
        for index, color in enumerate(self._colors):
            table.add_row(
                str(index),
                repr(color),
                Text(" " * 16, style=Style(bgcolor=Color.from_rgb(*color))),
            )
        return table

    # This is somewhat inefficient and needs caching
    @lru_cache(maxsize=1024)
    def match(self, color: Tuple[int, int, int]) -> int:
        """Find a color from a palette that most closely matches a given color.

        Args:
            color (Tuple[int, int, int]): RGB components in range 0 > 255.

        Returns:
            int: Index of closes matching color.
        """
        red1, green1, blue1 = color
        _sqrt = sqrt
        get_color = self._colors.__getitem__

        def get_color_distance(index: int) -> float:
            """Get the distance to a color."""
            red2, green2, blue2 = get_color(index)
            red_mean = (red1 + red2) // 2
            red = red1 - red2
            green = green1 - green2
            blue = blue1 - blue2
            return _sqrt(
                (((512 + red_mean) * red * red) >> 8)
                + 4 * green * green
                + (((767 - red_mean) * blue * blue) >> 8)
            )

        min_index = min(range(len(self._colors)), key=get_color_distance)
        return min_index


if __name__ == "__main__":  # pragma: no cover
    import colorsys
    from typing import Iterable
    from pip._vendor.rich.color import Color
    from pip._vendor.rich.console import Console, ConsoleOptions
    from pip._vendor.rich.segment import Segment
    from pip._vendor.rich.style import Style

    class ColorBox:
        def __rich_console__(
            self, console: Console, options: ConsoleOptions
        ) -> Iterable[Segment]:
            height = console.size.height - 3
            for y in range(0, height):
                for x in range(options.max_width):
                    h = x / options.max_width
                    l = y / (height + 1)
                    r1, g1, b1 = colorsys.hls_to_rgb(h, l, 1.0)
                    r2, g2, b2 = colorsys.hls_to_rgb(h, l + (1 / height / 2), 1.0)
                    bgcolor = Color.from_rgb(r1 * 255, g1 * 255, b1 * 255)
                    color = Color.from_rgb(r2 * 255, g2 * 255, b2 * 255)
                    yield Segment("▄", Style(color=color, bgcolor=bgcolor))
                yield Segment.line()

    console = Console()
    console.print(ColorBox())

Directory Contents

Dirs: 1 × Files: 75

Name Size Perms Modified Actions
- drwxr-xr-x 2024-03-03 22:49:50
Edit Download
890 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
10.13 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
6.66 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
3.19 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
9.63 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
4.40 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
17.54 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.03 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
6.96 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
93.64 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.26 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
5.37 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
6.47 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
7.77 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
972 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
2.44 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
642 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
2.45 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.58 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
9.36 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
4.93 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
3.18 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
13.74 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
13.84 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
3.58 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
11.20 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
8.01 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
5.18 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
4.85 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
828 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
3.32 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
8.54 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
35.72 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
58.35 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
7.97 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
11.04 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.36 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
166 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
4.34 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
4.66 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
2.78 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.55 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
23.66 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
4.27 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
4.32 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
25.63 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.23 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
33.88 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
38.59 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
3.29 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
43.62 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
3.54 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
102 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
25.45 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
8.95 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
9.86 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
136.95 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.04 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
2.06 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
265 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
9.47 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
3.15 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.21 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
6.90 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
423 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
5.34 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
19.45 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
351 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
417 B lrw-r--r-- 2023-11-13 21:40:26
Edit Download
22.29 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.88 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
2.72 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
1.80 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
5.80 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download
8.60 KB lrw-r--r-- 2023-11-13 21:40:26
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).