
    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m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*d&Zd,d-d'Zy).    )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webpc                    | t         vrd|  }t        |      t         |    \  }}	 t        |       y# t        $ r Y yt        $ r(}t        j                  t        |             Y d}~yd}~ww xY 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exs        A/var/www/openai/venv/lib/python3.12/site-packages/PIL/features.pycheck_moduler#      sn     gy)o'"KFC6  c"gs   2 	A-A-A((A-c                b    t        |       syt        |    \  }}t        t        ||g      |      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    s      r"   version_moduler(   .   s3      '"KFC:fu5s;;    c                 L    t         D  cg c]  } t        |       s|  c} S c c} w )z4
    :returns: A list of all supported modules.
    )r   r#   fs    r"   get_supported_modulesr-   =   s"     2w!,q/Aw222   !!)jpegjpeglib)jpeg2kjp2klib)zipzlib)libtiffr5   )jpgjpg_2000r4   r5   c                    | 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libs       r"   check_codecr?   L   sI     fwi(oJE3WHUZZ00r)   c                    t        |       syt        |    \  }}t        t        j                  | d      }| dk(  r&|j                  d      d   j                  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?   r:   r'   r   r<   split)r   r=   r>   versions       r"   version_codecrE   ]   sd     wJE3ejjSE"23G)}}T"1%++J7::Nr)   c                 L    t         D  cg c]  } t        |       s|  c} S c c} w )z3
    :returns: A list of all supported codecs.
    )r:   r?   r+   s    r"   get_supported_codecsrG   r   s"     0v!QAv000r.   )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                    | t         vrd|  }t        |      t         |    \  }}}	 t        |dg      }t        ||      S # t        $ r Y yt
        $ r(}t        j                  t        |             Y d}~yd}~ww xY 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!   s          r"   check_featurerd      s     h 	*o )FD#$Vug>--  c"gs   A 	A<A<A77A<c                j    t        |       syt        |    \  }}}|yt        t        ||g      |      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%   )rd   ra   r'   r   )r   r   rb   r    s       r"   version_featurerf      s>     ! )FD#
{:fu5s;;r)   c                 L    t         D  cg c]  } t        |       s|  c} S c c} w )z5
    :returns: A list of all supported features.
    )ra   rd   r+   s    r"   get_supported_featuresrh      s#      4x!=#3Ax444r.   c                    | t         v rt        |       S | t        v rt        |       S | t        v rt        |       S t        j                  d|  dd       y)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?   ra   rd   r   r   r   s    r"   checkrm      sX     'G$$&7##(W%%MM%gYb1a@r)   c                v    | t         v rt        |       S | t        v rt        |       S | t        v rt        |       S y)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:   rE   ra   rf   rl   s    r"   rD   rD      s@     'g&&&W%%(w''r)   c                 ~    t               } | j                  t                      | j                  t                      | S )zJ
    :returns: A list of all supported modules, features, and codecs.
    )r-   extendrh   rG   )rets    r"   get_supportedrr      s1    
  
!CJJ%'(JJ#%&Jr)   c                	   | t         j                  } t        j                          t	        d|        t	        dt
        j                   |        t         j                  j                         }t	        d|d   j                          |        |dd D ]   }t	        d|j                          |        " t	        d|        t	        d	t         j                  xs d
 |        t         j                  t         j                  k7  rt	        dt         j                   |        t	        dt         j                   |        t	        d|        t	        dt        j                  j                  t        j                          |        t	        dt        j                  j                  t        j"                  j                          |        t	        d|        dD ]  \  }}t%        |      rd}|dk(  rt'        d      }|d|z   }|t        |      }|j|dv }|dk(  r$t)        d |j+                  d      D              dk  }|rdnd}	|dk(  r dD ]  }
t'        |
      }||d|
 d| z  } t	        d|d|	||        t	        d|d |        t	        d!|d"|         t	        d|        |rt-        j.                  t0              }t        j2                  j5                         D ]  \  }}||   j7                  |        t9        t        j:                        D ]a  }| }|t        j<                  v r| dt        j<                  |    }t	        ||        ||v r7t	        d#j?                  djA                  t9        ||                     |        g }|t        jB                  v r|j7                  d$       |t        jD                  v r|j7                  d%       |t        jF                  v r|j7                  d&       |t        jH                  v r|j7                  d'       |t        jJ                  v r|j7                  d(       t	        d)j?                  djA                  |            |        t	        d|        d yy)*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)rX   zWEBP Transparency)rW   WEBPMUX)rV   zWEBP Animation)r6   JPEG)r7   zOPENJPEG (JPEG2000))r4   zZLIB (PNG/ZIP))r5   LIBTIFF)rY   zRAQM (Bidirectional Text))r]   z#LIBIMAGEQUANT (Quantization method))r^   zXCB (X protocol)r6   r\   zlibjpeg-turbo )r   r6   r   c              3  2   K   | ]  }t        |        y w)N)int).0xs     r"   	<genexpr>zpilinfo.<locals>.<genexpr>)  s     *H<a3q6<s   .)rj      zcompiled forloadedrY   )rZ   r[   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__rD   
splitlinesstrip
executableprefixbase_prefixospathdirname__file__r<   rm   rf   tuplerC   collectionsdefaultdictlist	EXTENSIONitemsappendsortedIDMIMEformatjoinOPENSAVESAVE_ALLDECODERSENCODERS)outsupported_formatspy_version_lines
py_versionnamer   vrR   version_statictr,   v2
extensionsextilinera   s                    r"   pilinfor      s    {jj	JJL	(	GCOO$
%C0{{--/	G$Q'--/0
1<&qr*

((*+,37 +	(	!#.."=I!>
?cJ
zzS__$5cjj\BM	,S__,=
>SI	(	
,RWW__U^^-L,MN 

,RWW__UZZ=P=P-Q,RS 
(g" ; Au}(7(H%(4(+@@AyDM}!%!7<'%**H1773<*H%H6%QN&4N(6>4,Q/>2aS".A 5 eWmQDeWl=%"9DQR 
( ,,T2
oo++-FCqM  % . !ASDEJJqA0$S!J$++DIIfZ]6K,LMTW HEJJ'EJJ'ENN"
+ENN")ENN").''		((;<3G(%1 " r)   )r   r   returnbool)r   r   r   z
str | None)r   z	list[str])r   r   r   zbool | None)NT)r   zIO[str] | Noner   r   r   None)
__future__r   r   r   r   r   typingr   r`    r   r   r#   r(   r-   r:   r?   rE   rG   ra   rd   rf   rh   rm   rD   rr   r    r)   r"   <module>r      s    "  	 
   
  .48:00<3 %%	
1"*1 63;;DGSQ-
0<"5$ q&r)   