o
    oi)                     @   s  d Z ddlZddlmZmZ ddlZddlmZmZmZ ddl	Z	ddl
mZ ddlmZmZ ddlmZ g dZeeZd	d
 e D ZdedefddZdedefddZdedefddZdedeeef fddZddejdedefddZd deeef deddfddZdS )!zConvert an image tensor to an ANSI text string (xterm-256color).

Nice long listing of all 256 colors and their codes.

Taken from https://gist.github.com/klange/1687427
    N)TupleUnion)float16float32float64)Tensor)KORNIA_CHECK_IS_IMAGEKORNIA_CHECK_SHAPE)ImageLoadType(   )00000000)01800000)02008000)03808000)04000080)05800080)06008080)07c0c0c0)08808080)09ff0000)1000ff00)11ffff00)120000ff)13ff00ff)1400ffff)15ffffff)16r   )1700005f)18000087)190000af)200000d7)21r$   )22005f00)23005f5f)24005f87)25005faf)26005fd7)27005fff)28008700)2900875f)30008787)310087af)320087d7)330087ff)3400af00)3500af5f)3600af87)3700afaf)3800afd7)3900afff)4000d700)4100d75f)4200d787)4300d7af)4400d7d7)4500d7ff)46r    )4700ff5f)4800ff87)4900ffaf)5000ffd7)51r(   )525f0000)535f005f)545f0087)555f00af)565f00d7)575f00ff)585f5f00)595f5f5f)605f5f87)615f5faf)625f5fd7)635f5fff)645f8700)655f875f)665f8787)675f87af)685f87d7)695f87ff)705faf00)715faf5f)725faf87)735fafaf)745fafd7)755fafff)765fd700)775fd75f)785fd787)795fd7af)805fd7d7)815fd7ff)825fff00)835fff5f)845fff87)855fffaf)865fffd7)875fffff)88870000)8987005f)90870087)918700af)928700d7)938700ff)94875f00)95875f5f)96875f87)97875faf)98875fd7)99875fff)100878700)10187875f)102878787)1038787af)1048787d7)1058787ff)10687af00)10787af5f)10887af87)10987afaf)11087afd7)11187afff)11287d700)11387d75f)11487d787)11587d7af)11687d7d7)11787d7ff)11887ff00)11987ff5f)12087ff87)12187ffaf)12287ffd7)12387ffff)124af0000)125af005f)126af0087)127af00af)128af00d7)129af00ff)130af5f00)131af5f5f)132af5f87)133af5faf)134af5fd7)135af5fff)136af8700)137af875f)138af8787)139af87af)140af87d7)141af87ff)142afaf00)143afaf5f)144afaf87)145afafaf)146afafd7)147afafff)148afd700)149afd75f)150afd787)151afd7af)152afd7d7)153afd7ff)154afff00)155afff5f)156afff87)157afffaf)158afffd7)159afffff)160d70000)161d7005f)162d70087)163d700af)164d700d7)165d700ff)166d75f00)167d75f5f)168d75f87)169d75faf)170d75fd7)171d75fff)172d78700)173d7875f)174d78787)175d787af)176d787d7)177d787ff)178d7af00)179d7af5f)180d7af87)181d7afaf)182d7afd7)183d7afff)184d7d700)185d7d75f)186d7d787)187d7d7af)188d7d7d7)189d7d7ff)190d7ff00)191d7ff5f)192d7ff87)193d7ffaf)194d7ffd7)195d7ffff)196r   )197ff005f)198ff0087)199ff00af)200ff00d7)201r&   )202ff5f00)203ff5f5f)204ff5f87)205ff5faf)206ff5fd7)207ff5fff)208ff8700)209ff875f)210ff8787)211ff87af)212ff87d7)213ff87ff)214ffaf00)215ffaf5f)216ffaf87)217ffafaf)218ffafd7)219ffafff)220ffd700)221ffd75f)222ffd787)223ffd7af)224ffd7d7)225ffd7ff)226r"   )227ffff5f)228ffff87)229ffffaf)230ffffd7)231r*   )232080808)233121212)2341c1c1c)235262626)236303030)2373a3a3a)238444444)2394e4e4e)240585858)241626262)2426c6c6c)243767676)244r   )2458a8a8a)246949494)2479e9e9e)248a8a8a8)249b2b2b2)250bcbcbc)251c6c6c6)252d0d0d0)253dadada)254e4e4e4)255eeeeeec                 C   s   i | ]\}}||qS  r  ).0kvr  r  L/home/ubuntu/.local/lib/python3.10/site-packages/kornia/utils/image_print.py
<dictcomp>-      r  hexstrreturnc                 C   s
   t | dS )N   int)r	  r  r  r  _str2hex0     
r  rgbc                 C   s
   |  dS )N#)removeprefix)r  r  r  r  _strip_hash4  r  r  shortc                 C   s   t |  S )zConvert short to RGB code.)SHORT2RGB_DICT)r  r  r  r  	short2rgb8  s   r  c                 C   s   t | } d}dd td| dd D }g }|D ]J}d}|t|d k rc|| ||d  }}||  kr:|krWn nt|| }t|| }	||	k rO|}
n|}
||
 n|d7 }|t|d k s%qdd	d |D }t| }||fS )
a  Find the closest xterm-256 approximation to the given RGB value.

    Args:
        rgb: Hex code representing an RGB value, eg, 'abcdef'.

    Returns:
        String between 0 and 255, compatible with xterm.

    Example:
        >>> rgb2short('123456')
        ('23', '005f5f')
        >>> rgb2short('ffffff')
        ('231', 'ffffff')
        >>> rgb2short('0DADD6')  # vimeo logo
        ('38', '00afd7')

    )r   _               c                 S   s   g | ]}t |d qS )r  r  )r  hr  r  r  
<listcomp>R  r  zrgb2short.<locals>.<listcomp>z(..)(..)(..)      r    c                 S   s   g | ]}|d qS )02xr  )r  ir  r  r  r  b  s    )r  resplitlenabsappendjoinRGB2SHORT_DICT)r  incspartsrespartr"  sbs1b1closest_resequivr  r  r  	rgb2short=  s,   
r5     image	max_widthc                 C   sF  t | ddd t| g d | jtttfvr| d } | jd |kr6| d| | d }tj	
| ||f} | d d	d } | jdd \}}| d
dd	dd}t}g }d	}t|D ]?}	g }
t|D ])}	||  \}}}|d|d|d}||\}}	|
d| d |d
7 }qf|
d |d|
 q^d|S )a  Obtain the closest xterm-256 approximation string from an image tensor.

    The tensor shall be either 0~1 float type or 0~255 long type.

    Args:
        image: an RGB image with shape :math:`3HW`.
        max_width: maximum width of the input image.
    NT)raises)CHWg     o@r  r   r        r!  z[48;5;zm  z[0m
r   )r   r	   dtyper   r   r   shapesizekorniageometryresizeclamplongpermutereshaper5  rangetolistr'  r(  )r7  r8  new_hr;  r<  flatrgb2short_fnlinesidx_	row_partsrgr/  r  r  r  r  r  image_to_stringg  s0   	


rV  `   c                 C   sR   t | trtj| tj}nt | tr| }n
tdt	|  dt
t|| dS )a#  Print an image to the terminal.

    .. image:: https://github.com/kornia/data/blob/main/print_image.png?raw=true

    Args:
        image: path to a valid image file or a tensor.
        max_width: maximum width to print to terminal.

    Note:
        Need to use `print_image(...)`.

    z2Expect image type to be either Tensor or str. Got .N)
isinstancestrrD  io
load_imager
   RGB8r   RuntimeErrortypeprintrV  )r7  r8  imgr  r  r  print_image  s   

rb  )r6  )rW  )__doc__r#  typingr   r   torchr   r   r   rD  kornia.corer   kornia.core.checkr   r	   	kornia.ior
   CLUTdictr  itemsr)  rZ  r  r  r  r  r5  rV  rb  r  r  r  r  <module>   s(     *$)