3

‡ÂZ  ã               @   s0   d dl Z d dlZd dlZG dd„ deƒ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   sl   y |r|j |ƒ| _n
|j ƒ | _W n tk
r:   || _Y nX t| jtƒsPt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)ÚselfZ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é   Z_get)r   ÚgetattrÚsetattr)r   ÚidÚvr   r   r   Ú__getattr__+   s
    zStat.__getattr__c             C   sD   dd„ }g }x2t dt| jƒdƒD ]}|j|| j|d… ƒƒ q W |S )z-Get min/max values for each band in the imagec             S   s>   d}d}x,t dƒD ] }| | rt||ƒ}t||ƒ}qW ||fS )Néÿ   r   r   )r
   ÚminÚmax)r   ÚnÚxÚir   r   r   Úminmax7   s    
z Stat._getextrema.<locals>.minmaxr   r   N)r
   r   r   Úappend)r   r   r   r   r   r   r   Ú_getextrema4   s
    	zStat._getextremac             C   sF   g }x<t dt| jƒdƒD ]&}|jtjtj| j||d … ƒƒ qW |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   Ú	_getcountE   s    &zStat._getcountc             C   sZ   g }xPt dt| jƒdƒD ]:}d}x&t dƒD ]}||| j||   7 }q*W |j|ƒ qW |S )z#Get sum of all pixels in each layerr   r   g        )r
   r   r   r   )r   r   r   ZlayerSumÚjr   r   r   Ú_getsumM   s    zStat._getsumc             C   sb   g }xXt dt| jƒdƒD ]B}d}x.t dƒD ]"}||d t| j||  ƒ 7 }q*W |j|ƒ qW |S )z+Get squared sum of all pixels in each layerr   r   g        é   )r
   r   r   Úfloatr   )r   r   r   Úsum2r&   r   r   r   Ú_getsum2X   s    "zStat._getsum2c             C   s2   g }x(| j D ]}|j| j| | j|  ƒ qW |S )z&Get average pixel level for each layer)r   r   ÚsumÚcount)r   r   r   r   r   r   Ú_getmeanc   s    zStat._getmeanc             C   sj   g }x`| j D ]V}d}| j| d }|d }x,tdƒD ] }|| j||   }||kr4P q4W |j|ƒ qW |S )z%Get median pixel level for each layerr   r(   r   )r   r-   r
   r   r   )r   r   r   ÚsÚlÚbr&   r   r   r   Ú
_getmediank   s    zStat._getmedianc             C   s8   g }x.| j D ]$}|jtj| j| | j|  ƒƒ qW |S )zGet RMS for each layer)r   r   ÚmathÚsqrtr*   r-   )r   r   r   r   r   r   Ú_getrmsz   s    $zStat._getrmsc             C   sH   g }x>| j D ]4}| j| }|j| j| | j| d |  | ƒ qW |S )zGet variance for each layerg       @)r   r-   r   r*   r,   )r   r   r   r   r   r   r   Ú_getvar‚   s
    
*zStat._getvarc             C   s.   g }x$| j D ]}|jtj| j| ƒƒ qW |S )z%Get standard deviation for each layer)r   r   r3   r4   Úvar)r   r   r   r   r   r   Ú
_getstddev‹   s    zStat._getstddev)N)Ú__name__Ú
__module__Ú__qualname__r   r   r    r%   r'   r+   r.   r2   r5   r6   r8   r   r   r   r   r      s   
		r   )r3   r#   r!   Úobjectr   ZGlobalr   r   r   r   Ú<module>   s   w