
    ը	f}                         d Z ddlZddlZddl ddlmZ 	 ddl ddlmZ  G d d      Z G d d	      Z G d
 d      Zy# e$ r+Z	e
j                  j                   ed             Y dZ	[	PdZ	[	ww xY w)a  
@package iclass.statistics

@brief wxIClass classes for storing statistics about cells in training areas.

Classes:
 - statistics::StatisticsData
 - statistics::Statistics
 - statistics::BandStatistics

(C) 2006-2011, 2013 by the GRASS Development Team
This program is free software under the GNU General Public
License (>=v2). Read the file COPYING that comes with GRASS
for details.

@author Vaclav Petras <wenzeslaus gmail.com>
@author Anna Kratochvilova <kratochanna gmail.com>
    N)*zLoading imagery lib failed)Signalc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	StatisticsDatazStores all statistics.c                     i | _         g | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        y )NzStatisticsData.statisticsAddedz StatisticsData.statisticsDeletedz#StatisticsData.allStatisticsDeletedzStatisticsData.statisticsSet)statisticsDictstatisticsListr   statisticsAddedstatisticsDeletedallStatisticsDeletedstatisticsSetselfs    2/usr/lib/grass83/gui/wxpython/iclass/statistics.py__init__zStatisticsData.__init__%   sJ      %&FG!'(J!K$*+P$Q!#$BC    c                      | j                   |   S N)r   r   cats     r   GetStatisticszStatisticsData.GetStatistics/   s    ""3''r   c                     t               }|j                  ||       |j                  j                   fd       | j                  <    j
                  j                          j                  j                  ||       y )N)r   namecolorc                 >    j                   j                  |       S )N)r   stats)r   emit)r   r   r   s    r   <lambda>z.StatisticsData.AddStatistics.<locals>.<lambda>6   s    $,,11c1G r   )	
StatisticsSetBaseStatisticsr   connectr   r	   appendr
   r   )r   r   r   r   sts   ``   r   AddStatisticszStatisticsData.AddStatistics2   sw    \
4u=
  G	
 $&C ""3'!!cE!Br   c                     | j                   |= | j                  j                  |       | j                  j	                  |       y )N)r   )r   r	   remover   r   r   s     r   DeleteStatisticszStatisticsData.DeleteStatistics>   s;    $""3'###,r   c                      | j                   d d  S r   )r	   r   s    r   GetCategorieszStatisticsData.GetCategoriesD   s    ""1%%r   c                     | j                   j                          | j                  d d = | j                  j	                          y r   )r   clearr	   r   r   r   s    r   DeleteAllStatisticsz"StatisticsData.DeleteAllStatisticsG   s4    !!#"!!&&(r   N)
__name__
__module____qualname____doc__r   r   r$   r'   r)   r,    r   r   r   r   "   s%     D(
C-&)r   r   c                   <    e Zd ZdZd Zd
dZd Zd Zd Zd Z	d Z
y	)r   zStatistis connected to one class (category).

    It is Python counterpart of similar C structure.
    But it adds some attributes or features used in wxIClass.
    It is not interface to C structure (it copies values).
    c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        g | _        d| _        t        d      | _
        y )N z0:0:0r   g      ?FzStatistics.statisticsSet)categoryr   
rasterNamer   nbandsncellsnstdbandsreadyr   r   r   s    r   r   zStatistics.__init__V   sO    	
	

#$>?r   c                     || _         y r   r<   )r   r<   s     r   SetReadyzStatistics.SetReadyc   s	    
r   c                     | j                   S r   r>   r   s    r   IsReadyzStatistics.IsReadyf   s    zzr   c                     || _         || _        || _        t        j                  d      }|j                  dd      }|dz   t        j                  j                  |      z   | _	        y)aH  Sets basic (non-statistical) values.

        .. todo::
            Later self.name is changed but self.rasterName is not.
            self.rasterName should not be set by user. It can remains
            the same. But it should be done more explicitly. Currently
            it looks like unintentional feature or bug.
        F)create _N)
r6   r   r   grasstempfilereplaceospathbasenamer7   )r   r   r   r   
rasterPaths        r   r    zStatistics.SetBaseStatisticsi   sV     	
^^51
||C%*rww'7'7
'CCr   c                    t               }i }t        |t        |             | j                  |j                  k7  r|j                  |d<   t               }t        |t        |             | j                  |j                  k7  r"t        j                  |j                        |d<   t               }t        |t        |             | j                  |j                  k7  r"t        j                  |j                        |d<   t               }t        |t        |             | j                  |j                  k7  r|j                  |d<   t               }t        |t        |             | j                  |j                  k7  r|j                  |d<   t!               }t#        |t        |             | j$                  |j                  k7  r|j                  |d<   | j'                  |       | j)                  |       y)zSets all statistical values.

        Copies all statistic values from  cStattistics.

        :param cStatistics: pointer to C statistics structure
        r6   r   r   r8   r9   r:   N)c_intI_iclass_statistics_get_catbyrefr6   valuec_char_pI_iclass_statistics_get_namer   rF   decodeI_iclass_statistics_get_colorr   I_iclass_statistics_get_nbandsr8   I_iclass_statistics_get_ncellsr9   c_floatI_iclass_statistics_get_nstdr:   SetStatisticsSetBandStatistics)	r   cStatisticsr   	set_statsr   r   r8   r9   r:   s	            r   SetFromcStatisticszStatistics.SetFromcStatisticsz   si    g	#Ks<==CII%$'IIIj!z$[%+>99

" %TZZ 8If
%k5<@::$!&ekk!:Ig&{E&MB;;&,,&"(,,Ih&{E&MB;;&,,&"(,,Ihy$[%+>99

" $

If9%{+r   c                     g | _         t        | j                        D ]:  }t               }|j	                  ||       | j                   j                  |       < y)zaSets all band statistics.

        :param cStatistics: pointer to C statistics structure
        )indexN)r;   ranger8   BandStatisticsr^   r"   )r   r\   ibands       r   r[   zStatistics.SetBandStatistics   sP    
 
t{{# 	$A!#D##Kq#9JJd#	$r   c                     t        j                  |      D ]  \  }}t        | ||        | j                  j	                  |       y )N)r   )six	iteritemssetattrr   r   )r   r   r#   vals       r   rZ   zStatistics.SetStatistics   sC    }}U+ 	#GBD"c"	# 	e,r   N)T)r-   r.   r/   r0   r   r?   rA   r    r^   r[   rZ   r1   r   r   r   r   N   s-    @D"(,T	$-r   r   c                       e Zd ZdZd Zd Zy)rb   zVStatistis connected to one band within class (category).

    :class:`Statistics`
    c                 n    d x| _         | _        d x| _        | _        d | _        d | _        dgdz  | _        y )Nr      )minmaxrangeMinrangeMaxmeanstddevhistor   s    r   r   zBandStatistics.__init__   s9    ""48(,,	S3Y
r   c           	         t               t               }}t        ||t        |             t        ||t        |             |j                  |j                  c| _        | _        t               t               }}t        ||t        |             t        ||t        |             |j                  |j                  c| _	        | _
        t               t               }}t        ||t        |             t        ||t        |             |j                  |j                  c| _        | _        t               }	t!        t#        | j$                              D ]2  }
t'        |||
t        |	             |	j                  | j$                  |
<   4 y)zSets statistics for one band by given index.

        :param cStatistics: pointer to C statistics structure
        :param index: index of band in C statistics structure
        N)rN   I_iclass_statistics_get_minrP   I_iclass_statistics_get_maxrQ   rm   rn   !I_iclass_statistics_get_range_min!I_iclass_statistics_get_range_maxro   rp   rX   I_iclass_statistics_get_meanI_iclass_statistics_get_stddevrq   rr   ra   lenrs   I_iclass_statistics_get_histo)r   r\   r`   rm   rn   ro   rp   rq   rr   rs   rc   s              r   r^   z!BandStatistics.SetFromcStatistics   s    7EGS#Kc
C#Kc
C YY		$("Weg()+ueHoN)+ueHoN'/~~x~~$t}y')f$[%tE&{E5=I!%V\\	4;s4::' 	(A)+uauN!KKDJJqM	(r   N)r-   r.   r/   r0   r   r^   r1   r   r   rb   rb      s    
(r   rb   )r0   rI   rf   ctypesgrass.scriptscriptrF   grass.lib.imageryImportErroresysstderrwriterE   grass.pydispatch.signalr   r   r   rb   r1   r   r   <module>r      su   & 
 
  6# +)) ))Xe- e-P%( %(u  6JJQ34556s   A A1!A,,A1