
    g,'              	         d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 ddlmZ g Zd)d*dZd+d,dZ G d	 d
      Z G d de      Zej$                  dk(  r ee        G d de      Zej$                  dk(  r ee        G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zej$                  dvr ej4                  d      r ee        ej4                  d      r ee        ej4                  d       r ee        ej4                  d!      r ee        ej4                  d"      r ee        G d# d$e      Z	 d d%lmZ  ee       e d&k(  rs e!ejD                        d'k  r e#d(        ejH                           ejJ                  ejD                  d         5 Z& e# ee&gejD                  d'd         ddd       yy# e$ r Y w xY w# 1 sw Y   yxY w)-    )annotationsNquote)Any   )Imagec                    	 t        | t              r |        } |dkD  rt        j	                  |        yt        j                  d|        y# t        $ r Y =w xY w)a$  
    The :py:func:`register` function is used to register additional viewers::

        from PIL import ImageShow
        ImageShow.register(MyViewer())  # MyViewer will be used as a last resort
        ImageShow.register(MySecondViewer(), 0)  # MySecondViewer will be prioritised
        ImageShow.register(ImageShow.XVViewer(), 0)  # XVViewer will be prioritised

    :param viewer: The viewer to be registered.
    :param order:
        Zero or a negative integer to prepend this viewer to the list,
        a positive integer to append it.
    r   N)
issubclassViewer	TypeError_viewersappendinsert)viewerorders     B/var/www/openai/venv/lib/python3.12/site-packages/PIL/ImageShow.pyregisterr      sO    ff%XF qy6"  s   A 	AAc                H    t         D ]  } |j                  | fd|i|s y y)a  
    Display a given image.

    :param image: An image object.
    :param title: Optional title. Not all viewers can display the title.
    :param \**options: Additional viewer options.
    :returns: ``True`` if a suitable viewer was found, ``False`` otherwise.
    titleTF)r   show)imager   optionsr   s       r   r   r   6   s.     6;;u5E5W5      c                  b    e Zd ZU dZddZdZded<   	 i Zded<   	 ddZdd	Z	dd
Z
ddZddZy)r   zBase class for viewers.r   c                    |j                   dv s\| j                  dk(  r|j                   dv s?t        j                  |j                         }|j                   |k7  r|j	                  |      } | j
                  |fi |S )z
        The main function for displaying an image.
        Converts the given image to the target format and displays it.
        )1RGBAPNG)zI;16LA)modeformatr   getmodebaseconvert
show_image)selfr   r   bases       r   r   zViewer.showJ   sk     JJ-'u$~)E$$UZZ0DzzT!d+tu000r   N
str | Noner!   zdict[str, Any]c                    | j                   S )z3Return format name, or ``None`` to save as PGM/PPM.)r!   r%   r   s     r   
get_formatzViewer.get_formata   s    {{r   c                    d}t        |      )zj
        Returns the command used to display the file.
        Not implemented in the base class.
        zunavailable in base viewer)NotImplementedError)r%   filer   msgs       r   get_commandzViewer.get_commande   s    
 +!#&&r   c                \     |j                   dd| j                  |      i| j                  S )z+Save to temporary file and return filename.r!    )_dumpr*   r   r)   s     r   
save_imagezViewer.save_imagem   s(    u{{I$//%"8IDLLIIr   c                F     | j                   | j                  |      fi |S )zDisplay the given image.)	show_filer3   r%   r   r   s      r   r$   zViewer.show_imageq   s!    t~~dooe4@@@r   c                    t         j                  j                  |      st        t        j                   | j
                  |fi |       y)%
        Display given file.
        r   )ospathexistsFileNotFoundErrorsystemr/   r%   r:   r   s      r   r5   zViewer.show_fileu   s<     ww~~d###
		"$""43734r   r   Image.Imager   r   returnint)r   r@   rA   r'   r-   strr   r   rA   rD   )r   r@   rA   rD   r:   rD   r   r   rA   rB   )__name__
__module____qualname____doc__r   r!   __annotations__r   r*   r/   r3   r$   r5   r1   r   r   r   r   E   sA    !1$ FJ/ G^ 7'JAr   r   c                  .    e Zd ZdZdZdddZd	dZd
dZy)WindowsViewerzNThe default viewer on Windows is the default system application for PNG files.r   r   Tcompress_levelsave_allc                    d| d| dS )Nzstart "Pillow" /WAIT "z)" && ping -n 4 127.0.0.1 >NUL && del /f ""r1   r%   r-   r   s      r   r/   zWindowsViewer.get_command   s    $TF +q"	
r   c                    t         j                  j                  |      st        t	        j
                   | j                  |fi |dt        t        d             y)r8   TCREATE_NO_WINDOW)shellcreationflagsr   )r9   r:   r;   r<   
subprocessPopenr/   getattrr>   s      r   r5   zWindowsViewer.show_file   sP     ww~~d###DT-W-!*.@A	

 r   NrC   rE   rF   rG   rH   rI   r!   r   r/   r5   r1   r   r   rL   rL      s    XF!"5G
r   rL   win32c                  .    e Zd ZdZdZdddZd	dZd
dZy)	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r   TrM   c                F    d}d| dt        |       dt        |       d}|S )Nzopen -a Preview.app( z; sleep 20; rm -f z)&r   r%   r-   r   commands       r   r/   zMacViewer.get_command   s1     (gYad},>uT{m2Nr   c                   t         j                  j                  |      st        t	        j
                  ddd|g       t        j                  xs t        j                  d      }|rt	        j                  |dd|g       y)r8   openz-azPreview.apppython3z-cz<import os, sys, time; time.sleep(20); os.remove(sys.argv[1])r   )r9   r:   r;   r<   rW   callsys
executableshutilwhichrX   )r%   r:   r   rh   s       r   r5   zMacViewer.show_file   sm     ww~~d###}d;<^^>v||I'>
R	 r   NrC   rE   rZ   r1   r   r   r]   r]      s    <F!"5Gr   r]   darwinc                  H    e Zd ZdZdddZej                  dd       Zd	dZy)

UnixViewerr   r   TrM   c                     y Nr1   rR   s      r   get_command_exzUnixViewer.get_command_ex   s    r   c                N     | j                   |fi |d   }| dt        |       S )Nr   r`   )rp   r   ra   s       r   r/   zUnixViewer.get_command   s3    %$%%d6g6q9!E$K=))r   Nr-   rD   r   r   rA   tuple[str, str]rC   )	rF   rG   rH   r!   r   abcabstractmethodrp   r/   r1   r   r   rm   rm      s.    F!"5G *r   rm   c                       e Zd ZdZddZddZy)	XDGViewerz3
    The freedesktop.org ``xdg-open`` command.
    c                    dx}}||fS )Nxdg-openr1   )r%   r-   r   rb   rh   s        r   rp   zXDGViewer.get_command_ex   s    ))*
""r   c                |    t         j                  j                  |      st        t	        j
                  d|g       y)r8   ry   r   r9   r:   r;   r<   rW   rX   r>   s      r   r5   zXDGViewer.show_file   s0     ww~~d###*d+,r   Nrr   rE   rF   rG   rH   rI   rp   r5   r1   r   r   rw   rw      s    #r   rw   c                  2    e Zd ZdZ	 d	 	 	 	 	 	 	 ddZddZy)DisplayViewerz`
    The ImageMagick ``display`` command.
    This viewer supports the ``title`` parameter.
    Nc                8    dx}}|r|dt        |       z  }||fS )Ndisplayz -title r   r%   r-   r   r   rb   rh   s         r   rp   zDisplayViewer.get_command_ex   s1      )(*%,00G
""r   c                    t         j                  j                  |      st        dg}|j	                  d      }|r|d|gz  }|j                  |       t        j                  |       y)r8   r   r   z-titler   r9   r:   r;   r<   getr   rW   rX   r%   r:   r   argsr   s        r   r5   zDisplayViewer.show_file   s^     ww~~d###{G$Xu%%DDr   ro   r-   rD   r   r'   r   r   rA   rs   rE   r|   r1   r   r   r~   r~      s6     .2## *#>A#	#r   r~   c                       e Zd ZdZddZddZy)GmDisplayViewerz*The GraphicsMagick ``gm display`` command.c                    d}d}||fS )Ngmz
gm displayr1   r%   r-   r   rh   rb   s        r   rp   zGmDisplayViewer.get_command_ex  s    

""r   c                ~    t         j                  j                  |      st        t	        j
                  dd|g       y)r8   r   r   r   r{   r>   s      r   r5   zGmDisplayViewer.show_file  s2     ww~~d###$	401r   Nrr   rE   r|   r1   r   r   r   r     s    4#
r   r   c                       e Zd ZdZddZddZy)	EogViewerz'The GNOME Image Viewer ``eog`` command.c                    d}d}||fS )Neogzeog -nr1   r   s        r   rp   zEogViewer.get_command_ex  s    

""r   c                ~    t         j                  j                  |      st        t	        j
                  dd|g       y)r8   r   z-nr   r{   r>   s      r   r5   zEogViewer.show_file  s2     ww~~d###%t,-r   Nrr   rE   r|   r1   r   r   r   r     s    1#
r   r   c                  2    e Zd ZdZ	 d	 	 	 	 	 	 	 ddZddZy)XVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nc                8    dx}}|r|dt        |       z  }||fS )Nxvz -name r   r   s         r   rp   zXVViewer.get_command_ex.  s1    
  $#*u//G
""r   c                    t         j                  j                  |      st        dg}|j	                  d      }|r|d|gz  }|j                  |       t        j                  |       y)r8   r   r   z-namer   r   r   s        r   r5   zXVViewer.show_file8  s^     ww~~d###vG$We$$DDr   ro   r   rE   r|   r1   r   r   r   r   (  s6     .2## *#>A#	#r   r   )r[   rk   ry   r   r   r   r   c                      e Zd ZdZddZy)IPythonViewerz!The viewer for IPython frontends.c                    t        |       y)Nr   )ipython_displayr6   s      r   r$   zIPythonViewer.show_imageX  s    r   Nr?   )rF   rG   rH   rI   r$   r1   r   r   r   r   U  s
    +r   r   )r   __main__   z.Syntax: python3 ImageShow.py imagefile [title])r   )r   rB   rA   Nonero   )r   r@   r   r'   r   r   rA   bool)'
__future__r   rt   r9   ri   rW   rg   shlexr   typingr    r   r   r   r   r   rL   platformr]   rm   rw   r~   r   r   r   rj   r   IPython.displayr   r   ImportErrorrF   lenargvprintexitrd   imr1   r   r   <module>r      s   # 
 	   
   #27 7zF 6 <<7] B <<8Y
* 
*
 &J <j $
 $z @ <<**v||Jv||Iv||D!v||Ev||DF : ] z
388}q>?
	CHHQK	 Bd2%%& 
!	    		 
!	 s   %G, G7,G43G47H 