o
    e%                  
   @  s   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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d0d1 Zd5d3d4ZdS )6    )annotationsN   )Image)PIL._imagingPILLOW_VERSION)zPIL._tkinter_finder
tk_version)PIL._imagingftfreetype2_version)zPIL._imagingcmslittlecms_version)	PIL._webpwebpdecoder_version)piltkinter	freetype2
littlecms2webpc              
   C  s|   | t vrd|  }t|t |  \}}zt| W dS  ty$   Y dS  ty= } ztt| W Y d}~dS d}~ww )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__ModuleNotFoundErrorImportErrorwarningswarnstr)featuremsgmoduleverex r   ?/var/www/html/venv/lib/python3.10/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   r   r    version_module-   s   r%   c                   C     dd t D S )z4
    :returns: A list of all supported modules.
    c                 S     g | ]}t |r|qS r   )r!   .0fr   r   r    
<listcomp>C       z)get_supported_modules.<locals>.<listcomp>)r   r   r   r   r    get_supported_modules?      r-   )jpegjpeglib)jpeg2kjp2klib)zipzlib)libtiffr5   )jpgjpg_2000r4   r5   c                 C  s8   | t vrd|  }t|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   r   codeclibr   r   r    check_codecN   s
   
r>   c                 C  sL   t | sdS t|  \}}ttj|d }| dkr$|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_versionr5   
r   zVersion r   )r>   r9   r$   r   r;   split)r   r<   r=   versionr   r   r    version_codec_   s   rC   c                   C  r&   )z3
    :returns: A list of all supported codecs.
    c                 S  r'   r   )r>   r(   r   r   r    r+   x   r,   z(get_supported_codecs.<locals>.<listcomp>)r9   r   r   r   r    get_supported_codecst   r.   rD   )r   HAVE_WEBPANIMN)r   HAVE_WEBPMUXN)r   HAVE_TRANSPARENCYN)r   	HAVE_RAQMraqm_version)r   HAVE_FRIBIDIfribidi_version)r   HAVE_HARFBUZZharfbuzz_version)r   HAVE_LIBJPEGTURBOlibjpeg_turbo_version)r   HAVE_LIBIMAGEQUANTimagequant_version)r   HAVE_XCBN)		webp_animwebp_muxtransp_webpraqmfribidiharfbuzzlibjpeg_turbolibimagequantxcbc              
   C  s   | t vrd|  }t|t |  \}}}zt|dgd}t||W S  ty+   Y dS  tyD } ztt| W Y d}~dS d}~ww )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   r   r   )r   r   r   flagr   imported_moduler   r   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   ra   c                   C  r&   )z5
    :returns: A list of all supported features.
    c                 S  r'   r   )r`   r(   r   r   r    r+      r,   z*get_supported_features.<locals>.<listcomp>)r]   r   r   r   r    get_supported_features   r.   rb   c                 C  sJ   | t v rt| S | tv rt| S | tv rt| 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!   r9   r>   r]   r`   r   r   r   r   r   r    check   s   rf   c                 C  s4   | t v rt| S | tv rt| S | tv rt| 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%   r9   rC   r]   ra   re   r   r   r    rB      s   rB   c                  C  s"   t  } | t  | t  | S )zJ
    :returns: A list of all supported modules, features, and codecs.
    )r-   extendrb   rD   )retr   r   r    get_supported   s   ri   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 q3td| d td	t
jtj | d td
t
jtjj | d td| d dD ]r\}}t|r|dkrtdrdtd }nt|}|dur|dv }|dkrtdd |dD dk }|rdnd}|dkrdD ]}t|}	|	dur|d| d|	 7 }qtd|d||| d qltd|d| d qltd|d| d qltd| d |rtt}
tj D ]\}}|
| | qttjD ]~}| }|tjv r| dtj|  }t|| d ||
v r3td dt|
| | d g }|tjv r@|d! |tj v rK|d" |tj!v rV|d# |tj"v ra|d$ |tj#v rl|d% td&d|| d td| d qdS 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   TKINTER)r   	FREETYPE2)r   
LITTLECMS2)r   WEBP)rU   zWEBP Transparency)rT   WEBPMUX)rS   zWEBP Animation)r6   JPEG)r7   zOPENJPEG (JPEG2000))r4   zZLIB (PNG/ZIP))r5   LIBTIFF)rV   zRAQM (Bidirectional Text))rZ   z#LIBIMAGEQUANT (Quantization method))r[   zXCB (X protocol)r6   rY   zlibjpeg-turbo )r   r6   r   c                 s  s    | ]}t |V  qd S )N)int)r)   xr   r   r    	<genexpr>   s    zpilinfo.<locals>.<genexpr>.)rc      zcompiled forloadedrV   )rW   rX   z,  z---zsupport ok,z
support okz***zsupport not installedzExtensions: {}opensavesave_alldecodeencodezFeatures: {})$sysstdoutr   initprintr\   __version__rB   
splitlinesstripospathdirname__file__r;   rf   r`   ra   tuplerA   collectionsdefaultdictlist	EXTENSIONitemsappendsortedIDMIMEformatjoinOPENSAVESAVE_ALLDECODERSENCODERS)outsupported_formats
py_versionnamer   vversion_statictr*   v2
extensionsextiliner]   r   r   r    pilinfo   s   







r   )NT)
__future__r   r   r   r~   r   r\    r   r   r!   r%   r-   r9   r>   rC   rD   r]   r`   ra   rb   rf   rB   ri   r   r   r   r   r    <module>   sR    	