o
    f)                  
   @  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mZ d dlZddl	m
Z
 dddd	d
dZdAddZdBddZdCddZdddddZdAddZdBdd ZdCd!d"Zd#d$d%d&d'd(d)d*d+d,	ZdDd.d/ZdBd0d1ZdCd2d3ZdDd4d5ZdBd6d7ZdCd8d9ZdEdFd?d@ZdS )G    )annotationsN)IO   )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webp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"   E/home/ubuntu/webapp/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_module.   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>A       z)get_supported_modules.<locals>.<listcomp>)r   r"   r"   r"   r#   get_supported_modules=      r2   )jpegjpeglib)jpeg2kjp2klib)zipzlib)libtiffr:   )jpgjpg_2000r9   r:   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_codecL   s
   
rC   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_versionr:   
r   zVersion r   )rC   r>   r(   r   r@   split)r   rA   rB   versionr"   r"   r#   version_codec]   s   rH   c                   C  r+   )z3
    :returns: A list of all supported codecs.
    c                 S  r,   r"   )rC   r-   r"   r"   r#   r0   v   r1   z(get_supported_codecs.<locals>.<listcomp>)r>   r"   r"   r"   r#   get_supported_codecsr   r3   rI   )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xcbbool | Nonec              
   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   
rf   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&   )rf   rc   r(   r   )r   r   rd   r    r"   r"   r#   version_feature   s   rg   c                   C  r+   )z5
    :returns: A list of all supported features.
    c                 S  r,   r"   )rf   r-   r"   r"   r#   r0      r1   z*get_supported_features.<locals>.<listcomp>)rc   r"   r"   r"   r#   get_supported_features   r3   rh   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$   r>   rC   rc   rf   r   r   r   r"   r"   r#   check   s   rl   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)   r>   rH   rc   rg   rk   r"   r"   r#   rG      s   rG   c                  C  s"   t  } | t  | t  | S )zJ
    :returns: A list of all supported modules, features, and codecs.
    )r2   extendrh   rI   )retr"   r"   r#   get_supported   s   ro   ToutIO[str] | Nonesupported_formatsNonec              	   C  st  | 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rd| }|du rt|}|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 qtd|d!| d qtd"|d#| d qtd| d |rtt}tj D ]\}}|| | q'ttjD ]~}| }|tjv rN| dtj|  }t|| d ||v ritd$d t|| | d g }|tj!v rv|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 q9d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   TKINTER)r   	FREETYPE2)r   
LITTLECMS2)r   WEBP)rZ   zWEBP Transparency)rY   WEBPMUX)rX   zWEBP Animation)r;   JPEG)r<   zOPENJPEG (JPEG2000))r9   zZLIB (PNG/ZIP))r:   LIBTIFF)r[   zRAQM (Bidirectional Text))r_   z#LIBIMAGEQUANT (Quantization method))r`   zXCB (X protocol)r;   r^   zlibjpeg-turbo )r   r;   r   c                 s  s    | ]}t |V  qd S )N)int)r.   xr"   r"   r#   	<genexpr>)  s    zpilinfo.<locals>.<genexpr>.)ri      zcompiled forloadedr[   )r\   r]   z,  z---zsupport ok,z
support okz***zsupport not installedzExtensions: {}opensavesave_alldecodeencodezFeatures: {})&sysstdoutr   initprintrb   __version__rG   
splitlinesstrip
executableprefixbase_prefixospathdirname__file__r@   rl   rg   tuplerF   collectionsdefaultdictlist	EXTENSIONitemsappendsortedIDMIMEformatjoinOPENSAVESAVE_ALLDECODERSENCODERS)rp   rr   py_version_lines
py_versionnamer   vrT   version_statictr/   v2
extensionsextilinerc   r"   r"   r#   pilinfo   s   









r   )r   r   r   r   )r   r   r   r%   )r   r*   )r   r   r   ra   )NT)rp   rq   rr   r   r   rs   )
__future__r   r   r   r   r   typingr   rb    r   r   r$   r)   r2   r>   rC   rH   rI   rc   rf   rg   rh   rl   rG   ro   r   r"   r"   r"   r#   <module>   sT    
	










