U
    e                     @  s*   d dl mZ d dlZG dd dZeZdS )    )annotationsNc                   @  sf   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )StatNc                 C  sp   z |r| || _n
|  | _W n tk
r:   || _Y nX t| jtsTd}t|ttt| jd | _d S )Nz$first argument must be image or list   )		histogramhAttributeError
isinstancelist	TypeErrorrangelenbands)selfZimage_or_listmaskmsg r   O/var/www/html/StaffProfile/newvenv/lib/python3.8/site-packages/PIL/ImageStat.py__init__   s    zStat.__init__c                 C  s8   |dd dkrt |t| d|  }t| || |S )zCalculate missing attributeN   _get)r   getattrsetattr)r   idvr   r   r   __getattr__*   s
    zStat.__getattr__c                   s*   dd   fddt dtjdD S )z-Get min/max values for each band in the imagec                 S  sP   d\}}t dD ]}| | r|} q&qt dddD ]}| | r2|} qHq2||fS )N)   r   r   r   )r   )r   Zres_minZres_maxir   r   r   minmax6   s    z Stat._getextrema.<locals>.minmaxc                   s   g | ]} j |d  qS )N)r   .0r   r   r   r   r   
<listcomp>B   s     z$Stat._getextrema.<locals>.<listcomp>r   r   r   r   r   r   r   r!   r   _getextrema3   s    zStat._getextremac                   s     fddt dt jdD S )z(Get total number of pixels in each layerc                   s"   g | ]}t  j||d   qS )r   )sumr   r   r$   r   r   r"   F   s     z"Stat._getcount.<locals>.<listcomp>r   r   r#   r$   r   r$   r   	_getcountD   s    zStat._getcountc                 C  sR   g }t dt| jdD ]6}d}t dD ]}||| j||   7 }q&|| q|S )z#Get sum of all pixels in each layerr   r           )r   r   r   append)r   r   r   Z	layer_sumjr   r   r   _getsumH   s    zStat._getsumc                 C  sZ   g }t dt| jdD ]>}d}t dD ]"}||d t| j||   7 }q&|| q|S )z+Get squared sum of all pixels in each layerr   r   r(      )r   r   r   floatr)   )r   r   r   sum2r*   r   r   r   _getsum2S   s     zStat._getsum2c                   s    fdd j D S )z&Get average pixel level for each layerc                   s    g | ]} j |  j|  qS r   )r&   countr   r$   r   r   r"   `   s     z!Stat._getmean.<locals>.<listcomp>r   r$   r   r$   r   _getmean^   s    zStat._getmeanc                 C  sd   g }| j D ]T}d}| j| d }|d }tdD ]"}|| j||   }||kr0 qTq0|| q
|S )z%Get median pixel level for each layerr   r,   r   )r   r0   r   r   r)   )r   r   r   sZhalfbr*   r   r   r   
_getmedianb   s    
zStat._getmedianc                   s    fdd j D S )zGet RMS for each layerc                   s&   g | ]}t  j|  j|  qS r   )mathsqrtr.   r0   r   r$   r   r   r"   s   s     z Stat._getrms.<locals>.<listcomp>r1   r$   r   r$   r   _getrmsq   s    zStat._getrmsc                   s    fdd j D S )zGet variance for each layerc                   s8   g | ]0} j |  j| d   j|    j|  qS )g       @)r.   r&   r0   r   r$   r   r   r"   w   s   z Stat._getvar.<locals>.<listcomp>r1   r$   r   r$   r   _getvaru   s    
zStat._getvarc                   s    fdd j D S )z%Get standard deviation for each layerc                   s   g | ]}t  j| qS r   )r6   r7   varr   r$   r   r   r"   ~   s     z#Stat._getstddev.<locals>.<listcomp>r1   r$   r   r$   r   
_getstddev|   s    zStat._getstddev)N)__name__
__module____qualname__r   r   r%   r'   r+   r/   r2   r5   r8   r9   r;   r   r   r   r   r      s   
	r   )
__future__r   r6   r   Globalr   r   r   r   <module>   s   e