o
    ( h,                     @  s&  U d dl m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Zddl	m
Z
 ddlmZ ddd	d
dddZdEddZdFddZdGddZdddddZdEdd ZdFd!d"ZdGd#d$Zd%d%d%d&d'd(d)d*d+d,d-d.Zd/ed0< dHd2d3ZdFd4d5ZdGd6d7ZdHd8d9ZdFd:d;ZdGd<d=ZdIdJdCdDZdS )K    )annotationsN)IO   )Image)	deprecate)PIL._imagingPILLOW_VERSION)zPIL._tkinter_finderZ
tk_version)PIL._imagingftZfreetype2_version)zPIL._imagingcmsZlittlecms_version)	PIL._webpZwebpdecoder_version)z	PIL._avifZlibavif_version)piltkinter	freetype2
littlecms2webpaviffeaturestrreturnboolc              
   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warnr   )r   msgmoduleverex r    T/var/www/html/figdemos/bartoux_crm/venv/lib/python3.10/site-packages/PIL/features.pycheck_module   s   
r"   
str | Nonec                 C  s,   t | sdS t|  \}}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_module0   s   r'   	list[str]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?      r0   )jpegZjpeglib)Zjpeg2kZjp2klib)zipzlib)libtiffr5   )jpgjpg_2000r4   r5   c                 C  s:   | 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  sN   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   r1   rD   )r
   TN)r	   	HAVE_RAQMZraqm_version)r	   ZHAVE_FRIBIDIZfribidi_version)r	   ZHAVE_HARFBUZZZharfbuzz_version)r   HAVE_LIBJPEGTURBOlibjpeg_turbo_version)r   HAVE_MOZJPEGrG   )r   HAVE_ZLIBNGzlib_ng_version)r   HAVE_LIBIMAGEQUANTZimagequant_version)r   HAVE_XCBN)Z	webp_animZwebp_muxZtransp_webpraqmfribidiharfbuzzlibjpeg_turbomozjpegzlib_nglibimagequantxcbz-dict[str, tuple[str, str | bool, str | None]]featuresbool | Nonec              
   C  s   | t vrd|  }t|t |  \}}}t|tr"td|  dd zt|dgd}t|tr2|W S t||W S  tyA   Y dS  tyZ } 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 zcheck_feature("z")   PILr$   N)rU   r   
isinstancer   r   r   r&   r   r   r   r   r   )r   r   r   flagr   Z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[   rU   r&   r   )r   r   rZ   r   r    r    r!   version_feature   s   r\   c                  C  sp   g } t  D ]/\}\}}}|du r,t D ]\}\}}||kr*t|r(| |  nqqt|r5| | q| S )z5
    :returns: A list of all supported features.
    T)rU   itemsr   r"   appendr[   )Zsupported_featuresr-   r   rZ   _r   Zfeature_moduler    r    r!   get_supported_features   s   

r`   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>   rU   r[   r   r   r   r    r    r!   check   s   rd   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   rU   r\   rc   r    r    r!   rB      s   rB   c                  C  s"   t  } | t  | t  | S )zJ
    :returns: A list of all supported modules, features, and codecs.
    )r0   extendr`   rD   )retr    r    r!   get_supported   s   rg   ToutIO[str] | Nonesupported_formatsNonec              	   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
pMd
 | d t jt jkrctdt j | d tdt j | d t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}|dkrtd}|durtdrdnd}|d| 7 }|du rt|}|dur"|dv }|dkrtdd |dD dk }|rdnd}	|dkrtd}
|
dur|d|
 7 }n|d krd!D ]}t|}|dur|d"| d| 7 }q td#|d$|	|| d qtd#|d%| d qtd&|d'| d qtd| d |rtt}tj D ]\}}|| | qGttjD ]~}| }|tjv rn| dtj|  }t|| d ||v rt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 qYdS dS )/a  
    Prints information about this installation of Pillow.
    This function can be called with ``python3 -m PIL``.
    It can also be called with ``python3 -m PIL.report`` or ``python3 -m PIL --report``
    to have "supported_formats" set to ``False``, omitting the list of all supported
    image file formats.

    :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 executable is unknownz%Environment Python files loaded from z System Python files loaded from z"Python Pillow modules loaded from z"Binary Pillow modules loaded from ))r   zPIL CORE)r   ZTKINTER)r   Z	FREETYPE2)r   Z
LITTLECMS2)r   ZWEBP)r   ZAVIF)r6   JPEG)r7   zOPENJPEG (JPEG2000))r4   zZLIB (PNG/ZIP))r5   ZLIBTIFF)rM   zRAQM (Bidirectional Text))rS   z#LIBIMAGEQUANT (Quantization method))rT   zXCB (X protocol)r6   rP   rQ   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>.)ra      zcompiled forloadedr4   rR   z, compiled for zlib-ng rM   )rN   rO   z, z---zsupport ok,z
support okz***zsupport not installedzExtensions: {}opensavesave_alldecodeencodezFeatures: {})'sysstdoutr   initprintrX   __version__rB   
splitlinesstrip
executableprefixbase_prefixospathdirname__file__r;   rd   r\   r[   tuplerA   collectionsdefaultdictlist	EXTENSIONr]   r^   sortedIDMIMEformatjoinOPENSAVESAVE_ALLDECODERSENCODERS)rh   rj   Zpy_version_lines
py_versionnamer   vrG   Zversion_statictrJ   r-   v2
extensionsextilinerU   r    r    r!   pilinfo   s   











r   )r   r   r   r   )r   r   r   r#   )r   r(   )r   r   r   rV   )NT)rh   ri   rj   r   r   rk   )
__future__r   r   r   r{   r   typingr   rX    r   
_deprecater   r   r"   r'   r0   r9   r>   rC   rD   rU   __annotations__r[   r\   r`   rd   rB   rg   r   r    r    r    r!   <module>   s\    












