a
    i=ic$                  
   @   s   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dddd	Zd
d Zdd Z	dd Z
dddddZdd Zdd Zdd Zdddddd d!d"d#d$	Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd4d2d3ZdS )5    N   )Image)PIL._imagingZPILLOW_VERSION)zPIL._tkinter_finderZ
tk_version)PIL._imagingftZfreetype2_version)zPIL._imagingcmsZlittlecms_version)	PIL._webpZwebpdecoder_version)piltkinter	freetype2
littlecms2webpc                 C   sJ   | t vrtd|  t |  \}}zt| W dS  tyD   Y dS 0 dS )z
    Checks if a module is available.

    :param feature: The module to check for.
    :returns: ``True`` if available, ``False`` otherwise.
    :raises ValueError: If the module is not defined in this version of Pillow.
    zUnknown module TFN)modules
ValueError
__import__ImportErrorfeaturemodulever r   ]/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/PIL/features.pycheck_module   s    r   c                 C   s8   t | sdS t|  \}}|du r$dS tt||gd|S )z
    :param feature: The module to check for.
    :returns:
        The loaded version number as a string, or ``None`` if unknown or not available.
    :raises ValueError: If the module is not defined in this version of Pillow.
    Nfromlist)r   r   getattrr   r   r   r   r   version_module'   s    r   c                   C   s   dd t D S )z4
    :returns: A list of all supported modules.
    c                 S   s   g | ]}t |r|qS r   )r   .0fr   r   r   
<listcomp>=       z)get_supported_modules.<locals>.<listcomp>)r   r   r   r   r   get_supported_modules9   s    r    )ZjpegZjpeglib)Zjpeg2kZjp2klib)zipzlib)libtiffr#   )jpgjpg_2000r"   r#   c                 C   s4   | t vrtd|  t |  \}}|d ttjv S )z
    Checks if a codec is available.

    :param feature: The codec to check for.
    :returns: ``True`` if available, ``False`` otherwise.
    :raises ValueError: If the codec is not defined in this version of Pillow.
    zUnknown codec _encoder)codecsr   dirr   core)r   codeclibr   r   r   check_codecH   s    r,   c                 C   sL   t | sdS t|  \}}ttj|d }| dkrH|dd dd S |S )a  
    :param feature: The codec to check for.
    :returns:
        The version number as a string, or ``None`` if not available.
        Checked at compile time for ``jpg``, run-time otherwise.
    :raises ValueError: If the codec is not defined in this version of Pillow.
    N_versionr#   
r   zVersion r   )r,   r'   r   r   r)   split)r   r*   r+   versionr   r   r   version_codecX   s    r1   c                   C   s   dd t D S )z3
    :returns: A list of all supported codecs.
    c                 S   s   g | ]}t |r|qS r   )r,   r   r   r   r   r   q   r   z(get_supported_codecs.<locals>.<listcomp>)r'   r   r   r   r   get_supported_codecsm   s    r2   )r   ZHAVE_WEBPANIMN)r   ZHAVE_WEBPMUXN)r   ZHAVE_TRANSPARENCYN)r   Z	HAVE_RAQMZraqm_version)r   ZHAVE_FRIBIDIZfribidi_version)r   ZHAVE_HARFBUZZZharfbuzz_version)r   ZHAVE_LIBJPEGTURBOZlibjpeg_turbo_version)r   ZHAVE_LIBIMAGEQUANTZimagequant_version)r   ZHAVE_XCBN)		webp_animwebp_muxtransp_webpraqmfribidiharfbuzzlibjpeg_turbolibimagequantxcbc                 C   sX   | t vrtd|  t |  \}}}zt|dgd}t||W S  tyR   Y dS 0 dS )z
    Checks if a feature is available.

    :param feature: The feature to check for.
    :returns: ``True`` if available, ``False`` if unavailable, ``None`` if unknown.
    :raises ValueError: If the feature is not defined in this version of Pillow.
    zUnknown feature PILr   N)featuresr   r   r   r   )r   r   flagr   Zimported_moduler   r   r   check_feature   s    r?   c                 C   s:   t | sdS t|  \}}}|du r&dS tt||gd|S )z
    :param feature: The feature to check for.
    :returns: The version number as a string, or ``None`` if not available.
    :raises ValueError: If the feature is not defined in this version of Pillow.
    Nr   )r?   r=   r   r   )r   r   r>   r   r   r   r   version_feature   s    r@   c                   C   s   dd t D S )z5
    :returns: A list of all supported features.
    c                 S   s   g | ]}t |r|qS r   )r?   r   r   r   r   r      r   z*get_supported_features.<locals>.<listcomp>)r=   r   r   r   r   get_supported_features   s    rA   c                 C   sJ   | t v rt| S | tv r t| S | tv r0t| S tjd|  ddd dS )z
    :param feature: A module, codec, or feature name.
    :returns:
        ``True`` if the module, codec, or feature is available,
        ``False`` or ``None`` otherwise.
    zUnknown feature 'z'.   )
stacklevelF)r   r   r'   r,   r=   r?   warningswarnr   r   r   r   check   s    rG   c                 C   s4   | t v rt| S | tv r t| S | tv r0t| S dS )z
    :param feature:
        The module, codec, or feature to check for.
    :returns:
        The version number as a string, or ``None`` if unknown or not available.
    N)r   r   r'   r1   r=   r@   rF   r   r   r   r0      s    r0   c                  C   s"   t  } | t  | t  | S )zJ
    :returns: A list of all supported modules, features, and codecs.
    )r    extendrA   r2   )retr   r   r   get_supported   s    rJ   Tc              	   C   s  | du rt j} t  td| d tdtj | d t j }td|d 	  | d |dd D ]}td|	  | d qftd| d td	t
jtj | d td
t
jtjj | d td| d dD ]\}}t|r|dkrtdrdtd }nt|}|dur|dv }|dkrLtdd |dD dk }|rVdnd}|dkrdD ],}t|}	|	durh|d| d|	 7 }qhtd|d||| d ntd|d| d qtd|d| d qtd| d |rtt}
tj D ]\}}|
| | qttjD ]}| }|tjv rD| dtj|  }t|| d ||
v rztd dt|
| | d g }|tjv r|d! |tj v r|d" |tj!v r|d# |tj"v r|d$ |tj#v r|d% td&d|| d td| d qdS )'aG  
    Prints information about this installation of Pillow.
    This function can be called with ``python3 -m PIL``.

    :param out:
        The output stream to print to. Defaults to ``sys.stdout`` if ``None``.
    :param supported_formats:
        If ``True``, a list of all supported image file formats will be printed.
    NzD--------------------------------------------------------------------)filezPillow zPython r   r   z       zPython modules loaded from zBinary modules loaded from ))r   zPIL CORE)r   ZTKINTER)r	   Z	FREETYPE2)r
   Z
LITTLECMS2)r   ZWEBP)r5   zWEBP Transparency)r4   ZWEBPMUX)r3   zWEBP Animation)r$   ZJPEG)r%   zOPENJPEG (JPEG2000))r"   zZLIB (PNG/ZIP))r#   ZLIBTIFF)r6   zRAQM (Bidirectional Text))r:   z#LIBIMAGEQUANT (Quantization method))r;   zXCB (X protocol)r$   r9   zlibjpeg-turbo )r   r$   r
   c                 s   s   | ]}t |V  qd S )N)int)r   xr   r   r   	<genexpr>  r   zpilinfo.<locals>.<genexpr>.)rB      zcompiled forZloadedr6   )r7   r8   z,  z---zsupport ok,z
support okz***zsupport not installedzExtensions: {}opensaveZsave_alldecodeencodezFeatures: {})$sysstdoutr   initprintr<   __version__r0   
splitlinesstripospathdirname__file__r)   rG   r?   r@   tupler/   collectionsdefaultdictlistZ	EXTENSIONitemsappendsortedZIDMIMEformatjoinZOPENZSAVEZSAVE_ALLZDECODERSZENCODERS)outZsupported_formats
py_versionnamer   vZversion_statictr   v2
extensionsextiliner=   r   r   r   pilinfo   s    












ru   )NT)rb   r]   rV   rD   r<    r   r   r   r   r    r'   r,   r1   r2   r=   r?   r@   rA   rG   r0   rJ   ru   r   r   r   r   <module>   sN   	