o
    Z#a=                     @   s.   d dl Z d dlZd dlZG dd dZeZdS )    Nc                   @   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   sj   z|r
| || _n|  | _W n ty   || _Y nw t| jts'tdttt| jd | _d S )Nz$first argument must be image or list   )		histogramhAttributeError
isinstancelist	TypeErrorrangelenbands)selfimage_or_listmask r   //usr/lib/python3/dist-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                 C   s@   dd }g }t dt| jdD ]}||| j|d  q|S )z-Get min/max values for each band in the imagec                 S   s:   d}d}t dD ]}| | rt||}t||}q||fS )N   r   r   )r
   minmax)r   nxir   r   r   minmax6   s   

z Stat._getextrema.<locals>.minmaxr   r   Nr
   r   r   append)r   r    r   r   r   r   r   _getextrema3   s
   	zStat._getextremac              
   C   sB   g }t dt| jdD ]}|ttj| j||d   q|S )z(Get total number of pixels in each layerr   r   )r
   r   r   r"   	functoolsreduceoperatoraddr   r   r   r   r   r   	_getcountD   s   $zStat._getcountc                 C   sR   g }t dt| jdD ]}d}t dD ]}||| j||   7 }q|| q|S )z#Get sum of all pixels in each layerr   r           r!   )r   r   r   layerSumjr   r   r   _getsumL   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   _getsum2W   s    zStat._getsum2c                 C   s.   g }| j D ]}|| j| | j|   q|S )z&Get average pixel level for each layer)r   r"   sumcountr(   r   r   r   _getmeanb   s   
zStat._getmeanc                 C   sd   g }| j D ]*}d}| j| d }|d }tdD ]}|| j||   }||kr) nq|| q|S )z%Get median pixel level for each layerr   r.   r   )r   r3   r
   r   r"   )r   r   r   shalfbr,   r   r   r   
_getmedianj   s   
zStat._getmedianc                 C   s4   g }| j D ]}|t| j| | j|   q|S )zGet RMS for each layer)r   r"   mathsqrtr0   r3   r(   r   r   r   _getrmsy   s   
"zStat._getrmsc                 C   sD   g }| j D ]}| j| }|| j| | j| d |  |  q|S )zGet variance for each layerg       @)r   r3   r"   r0   r2   )r   r   r   r   r   r   r   _getvar   s
   

(zStat._getvarc                 C   s*   g }| j D ]}|t| j|  q|S )z%Get standard deviation for each layer)r   r"   r9   r:   varr(   r   r   r   
_getstddev   s   
zStat._getstddev)N)__name__
__module____qualname__r   r   r#   r)   r-   r1   r4   r8   r;   r<   r>   r   r   r   r   r      s    
		r   )r$   r9   r&   r   Globalr   r   r   r   <module>   s
   v