§
    aÒ³gÍ  ã                  óP   — d dl mZ d dlZd dlmZ ddlmZ  G d„ d¦  «        ZeZdS )é    )ÚannotationsN)Úcached_propertyé   )ÚImagec                  óò   — e Zd Z	 ddd„Zedd
„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Z	edd„¦   «         Z
edd„¦   «         Zedd„¦   «         Zedd„¦   «         ZdS )ÚStatNÚimage_or_listúImage.Image | list[int]ÚmaskúImage.Image | NoneÚreturnÚNonec                ó8  — t          |t          j        ¦  «        r|                     |¦  «        | _        n.t          |t          ¦  «        r|| _        nd}t          |¦  «        ‚t	          t          t          | j        ¦  «        dz  ¦  «        ¦  «        | _        dS )a
  
        Calculate statistics for the given image. If a mask is included,
        only the regions covered by that mask are included in the
        statistics. You can also pass in a previously calculated histogram.

        :param image: A PIL image, or a precalculated histogram.

            .. note::

                For a PIL image, calculations rely on the
                :py:meth:`~PIL.Image.Image.histogram` method. The pixel counts are
                grouped into 256 bins, even if the image has more than 8 bits per
                channel. So ``I`` and ``F`` mode images have a maximum ``mean``,
                ``median`` and ``rms`` of 255, and cannot have an ``extrema`` maximum
                of more than 255.

        :param mask: An optional mask.
        z$first argument must be image or listé   N)	Ú
isinstancer   Ú	histogramÚhÚlistÚ	TypeErrorÚrangeÚlenÚbands)Úselfr	   r   Úmsgs       úK/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/PIL/ImageStat.pyÚ__init__zStat.__init__    sƒ   € õ* �m¥U¤[Ñ1Ô1ð 	!Ø"×,Ò,¨TÑ2Ô2ˆDŒFˆFÝ˜¥tÑ,Ô,ð 	!Ø"ˆDŒFˆFà8ˆCÝ˜C‘.”.Ð Ý�%¥ D¤F¡¤¨sÑ 2Ñ3Ô3Ñ4Ô4ˆŒ
ˆ
ˆ
ó    úlist[tuple[int, int]]c                ón   ‡ ‡— d	d„Šˆˆ fd„t          dt          ‰ j        ¦  «        d¦  «        D ¦   «         S )
au  
        Min/max values for each band in the image.

        .. note::
            This relies on the :py:meth:`~PIL.Image.Image.histogram` method, and
            simply returns the low and high bins used. This is correct for
            images with 8 bits per channel, but fails for other modes such as
            ``I`` or ``F``. Instead, use :py:meth:`~PIL.Image.Image.getextrema` to
            return per-band extrema for the image. This is more correct and
            efficient because, for non-8-bit modes, the histogram method uses
            :py:meth:`~PIL.Image.Image.getextrema` to determine the bins used.
        r   ú	list[int]r   útuple[int, int]c                ó�   — d\  }}t          d¦  «        D ]}| |         r|} nŒt          ddd¦  «        D ]}| |         r|} nŒ||fS )N)éÿ   r   r   r#   éÿÿÿÿ)r   )r   Úres_minÚres_maxÚis       r   ÚminmaxzStat.extrema.<locals>.minmaxM   s�   € Ø%ÑˆG�WÝ˜3‘Z”Zð ð �Ø˜Q”<ð Ø�GØ�Eðõ ˜3  BÑ'Ô'ð ð �Ø˜Q”<ð Ø�GØ�Eðð ˜GÐ#Ð#r   c                ó@   •— g | ]} ‰‰j         |d …         ¦  «        ‘ŒS ©N)r   )Ú.0r'   r(   r   s     €€r   ú
<listcomp>z Stat.extrema.<locals>.<listcomp>Y   s-   ø€ ÐGÐGÐG q���t”v˜a˜b˜b”zÑ"Ô"ÐGÐGÐGr   r   r   )r   r    r   r!   ©r   r   r   )r   r(   s   `@r   ÚextremazStat.extrema>   sL   øø€ ð
	$ð 
	$ð 
	$ð 
	$ð HÐGÐGÐGÐG­E°!µS¸¼±[´[À#Ñ,FÔ,FÐGÑGÔGÐGr   r    c                ób   ‡ — ˆ fd„t          dt          ‰ j        ¦  «        d¦  «        D ¦   «         S )z2Total number of pixels for each band in the image.c                óN   •— g | ]!}t          ‰j        ||d z   …         ¦  «        ‘Œ"S )r   )Úsumr   ©r+   r'   r   s     €r   r,   zStat.count.<locals>.<listcomp>^   s0   ø€ ÐMÐMÐM¨Q•�D”F˜1˜q 3™w˜;Ô'Ñ(Ô(ÐMÐMÐMr   r   r   r-   ©r   s   `r   Úcountz
Stat.count[   s4   ø€ ð NÐMÐMÐMµ%¸½3¸t¼v¹;¼;ÈÑ2LÔ2LÐMÑMÔMÐMr   úlist[float]c                óÔ   — g }t          dt          | j        ¦  «        d¦  «        D ]A}d}t          d¦  «        D ]}||| j        ||z            z  z  }Œ|                     |¦  «         ŒB|S )z-Sum of all pixels for each band in the image.r   r   ç        )r   r   r   Úappend)r   Úvr'   Ú	layer_sumÚjs        r   r1   zStat.sum`   s{   € ð ˆÝ�q�#˜dœf™+œ+ sÑ+Ô+ð 	 ð 	 ˆAØˆIÝ˜3‘Z”Zð /ð /�Ø˜Q ¤¨¨A©¤Ñ.Ñ.�	�	Ø�HŠH�YÑÔÐÐØˆr   c           	     óô   — g }t          dt          | j        ¦  «        d¦  «        D ]Q}d}t          d¦  «        D ](}||dz  t          | j        ||z            ¦  «        z  z  }Œ)|                     |¦  «         ŒR|S )z5Squared sum of all pixels for each band in the image.r   r   r7   é   )r   r   r   Úfloatr8   )r   r9   r'   Úsum2r;   s        r   r?   z	Stat.sum2l   sƒ   € ð ˆÝ�q�#˜dœf™+œ+ sÑ+Ô+ð 	ð 	ˆAØˆDÝ˜3‘Z”Zð 6ð 6�Ø˜˜A™¥ t¤v¨a°!©e¤}Ñ!5Ô!5Ñ5Ñ5��Ø�HŠH�T‰NŒNˆNˆNØˆr   c                ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )zAAverage (arithmetic mean) pixel level for each band in the image.c                óF   •— g | ]}‰j         |         ‰j        |         z  ‘ŒS © )r1   r4   r2   s     €r   r,   zStat.mean.<locals>.<listcomp>{   s*   ø€ Ð@Ð@Ð@°�”˜”˜dœj¨œmÑ+Ð@Ð@Ð@r   ©r   r3   s   `r   Úmeanz	Stat.meanx   s"   ø€ ð AÐ@Ð@Ð@°T´ZÐ@Ñ@Ô@Ð@r   c                óÐ   — g }| j         D ][}d}| j        |         dz  }|dz  }t          d¦  «        D ]}|| j        ||z            z   }||k    r nŒ|                     |¦  «         Œ\|S )z.Median pixel level for each band in the image.r   r=   r   )r   r4   r   r   r8   )r   r9   r'   ÚsÚhalfÚbr;   s          r   ÚmedianzStat.median}   sŠ   € ð ˆØ”ð 	ð 	ˆAØˆAØ”:˜a”= AÑ%ˆDØ�C‘ˆAÝ˜3‘Z”Zð ð �Ø˜œ˜q 1™uœÑ%�Ø�t’8�8Ø�Eð à�HŠH�Q‰KŒKˆKˆKØˆr   c                ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )z2RMS (root-mean-square) for each band in the image.c                ój   •— g | ]/}t          j        ‰j        |         ‰j        |         z  ¦  «        ‘Œ0S rB   )ÚmathÚsqrtr?   r4   r2   s     €r   r,   zStat.rms.<locals>.<listcomp>�   s4   ø€ ÐLÐLÐL¸A•”	˜$œ) Aœ,¨¬°A¬Ñ6Ñ7Ô7ÐLÐLÐLr   rC   r3   s   `r   ÚrmszStat.rms�   s"   ø€ ð MÐLÐLÐLÀÄÐLÑLÔLÐLr   c                ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )z$Variance for each band in the image.c                ó„   •— g | ]<}‰j         |         ‰j        |         d z  ‰j        |         z  z
  ‰j        |         z  ‘Œ=S )g       @)r?   r1   r4   r2   s     €r   r,   zStat.var.<locals>.<listcomp>•   sU   ø€ ð 
ð 
ð 
àð ŒY�qŒ\˜TœX aœ[¨CÑ/°4´:¸a´=Ñ@Ñ@ÀDÄJÈqÄMÑQð
ð 
ð 
r   rC   r3   s   `r   ÚvarzStat.var’   s0   ø€ ð
ð 
ð 
ð 
à”Zð
ñ 
ô 
ð 	
r   c                ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )z.Standard deviation for each band in the image.c                óN   •— g | ]!}t          j        ‰j        |         ¦  «        ‘Œ"S rB   )rL   rM   rQ   r2   s     €r   r,   zStat.stddev.<locals>.<listcomp>�   s)   ø€ Ð;Ð;Ð;¨1•”	˜$œ( 1œ+Ñ&Ô&Ð;Ð;Ð;r   rC   r3   s   `r   ÚstddevzStat.stddevš   s!   ø€ ð <Ð;Ð;Ð;°´
Ð;Ñ;Ô;Ð;r   r*   )r	   r
   r   r   r   r   )r   r   )r   r    )r   r5   )Ú__name__Ú
__module__Ú__qualname__r   r   r.   r4   r1   r?   rD   rI   rN   rQ   rT   rB   r   r   r   r      s`  € € € € € àQUð5ð 5ð 5ð 5ð 5ð< ðHð Hð Hñ „_ðHð8 ðNð Nð Nñ „_ðNð ð	ð 	ð 	ñ „_ð	ð ð	ð 	ð 	ñ „_ð	ð ðAð Að Añ „_ðAð ðð ð ñ „_ðð ðMð Mð Mñ „_ðMð ð
ð 
ð 
ñ „_ð
ð ð<ð <ð <ñ „_ð<ð <ð <r   r   )	Ú
__future__r   rL   Ú	functoolsr   Ú r   r   ÚGlobalrB   r   r   ú<module>r\      s‚   ðð. #Ð "Ð "Ð "Ð "Ð "à €€€Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð ð~<ð ~<ð ~<ð ~<ð ~<ñ ~<ô ~<ð ~<ðB 
€€€r   