ó
 ‰\c           @   s»   d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z m Z d  d l	 m
 Z
 d Z d „  Z d e j f d „  ƒ  YZ d	 e j f d
 „  ƒ  YZ e d k r· e j j ƒ  n  d S(   iÿÿÿÿN(   t   assert_equal(   t   raisest   warns(   t   extremagê-™—q=c         C   sQ   t  j |  d t  j ƒ}  t  j | d t  j ƒ} |  | d j ƒ  } t j | ƒ S(   Nt   dtypei   (   t   npt   asarrayt   float64t   sumt   matht   sqrt(   t   at   bt   t(    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   diff   s    t   TestExtremac           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s  t  j d d d d g d d d d g d d	 d
 d g g d t  j ƒ} t j | d ƒ } t  j d d d d g d d d d g d d d d g g d t  j ƒ} t | | ƒ } | t k  s½ t ‚ t j | d ƒ } t  j d d d
 d
 g d d d d g d d d d g g d t  j ƒ} t | | ƒ } | t k  s5t ‚ t  j d d g d d  g g d t  j	 ƒ} t j | d
 ƒ } t  j d d g d  d! g g d t  j	 ƒ} t | | ƒ } | t k  s¼t ‚ t j | d
 ƒ } t  j d d" g d d g g d t  j	 ƒ} t | | ƒ } | t k  st ‚ d# S($   s*   Adding/subtracting a constant and clippingiú   iû   i   id   iÈ   iý   iü   i   i
   i   i   R   iþ   iÿ   i	   ih   iÌ   i   i   i   iö   i÷   i`   iÄ   iù   iø   i    i   iÿ  iþ  i €ÿÿi€ÿÿi€ÿÿiý  N(
   R   t   arrayt   uint8R   t   _add_constant_clipR   t   epst   AssertionErrort   _subtract_constant_clipt   int16(   t   selft   datat   img_constant_addedt   expectedt   errort   img_constant_subtracted(    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_saturated_arithmetic   sB    c         C   s3  t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d	 d	 d g
 d d d d d
 d
 d
 d	 d	 d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d
 d
 d d
 d
 d d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d d
 d
 d
 d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} xh t  j t  j t  j t  j g D]H } | j | ƒ } t j | d ƒ } t	 | | ƒ } | t
 k  sãt ‚ qãWd S(   s   h-maxima for various data typesi
   i   i   i   i   i   i(   i   i<   i   i   iP   id   R   i    i   N(   R   R   R   t   uint64t   int8t   int64t   astypeR   t   h_maximaR   R   R   (   R   R   t   expected_resultR   t   outR   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_h_maxima>   s6    '!!!!!!!!''!!!!!!!!'%c         C   sU  t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d	 d	 d g
 d d d d d
 d
 d
 d	 d	 d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d
 d
 d d
 d
 d d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d d
 d
 d
 d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} d | } t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} x€ t  j t  j t  j t  j g D]` } | j | ƒ } t j | d ƒ } t	 | | ƒ } | t
 k  s5t ‚ | j | j k sít ‚ qíWd S(   s   h-minima for various data typesi
   i   i   i   i   i   i(   i   i<   i   i   iP   id   R   i    i   N(   R   R   R   R   R   R    R!   R   t   h_minimaR   R   R   R   (   R   R   R#   R   R$   R   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_h_minima_   s:    '!!!!!!!!'
'!!!!!!!!'%c         C   s8  t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d	 d	 d g
 d d d d d
 d
 d
 d	 d	 d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d
 d d d
 d
 d d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d d
 d
 d
 d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} d | } t j | d ƒ } t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} t | | ƒ } | t k  st ‚ t j	 | d ƒ } t | | ƒ } | t k  s4t ‚ d S(   s   specific tests for float typegš™™™™™¹?g)\Âõ(¼?g¤p=
×£À?gìQ¸…ëÁ?g333333Ã?g{®GázÄ?gš™™™™™Ù?g
×£p=
Ç?g333333ã?gR¸…ëQÈ?g²ï§ÆKÇ?gé&1¬Ê?gš™™™™™É?gš™™™™™é?g      ð?R   gú~j¼t“h?i    i   N(
   R   R   t   float32R   R"   R   R   R   R   R&   (   R   R   t   inverted_dataR$   R#   R   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_extrema_float   sN    
'!!!!!!!!'(   t   __name__t
   __module__R   R%   R'   R*   (    (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyR      s   	(	!	"t   TestLocalMaximac           B   sd  e  Z d  Z e j e j e j e j e j e j	 e j
 e j e j e j g
 Z e j d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g g d e j ƒZ e j d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g g d e j ƒZ e j d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g g d e j ƒZ d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s1   Some tests for local_minima are included as well.i   i    i   i   i   R   c         C   sŸ  t  j t j g  g ƒ d t ƒ} | j d k s6 t ‚ | j t j k sN t ‚ | j	 d k sc t ‚ t  j t j g  ƒ d t
 ƒ} t | t ƒ s– t ‚ t | ƒ d k s® t ‚ | d j d k sÇ t ‚ | d j t j k sã t ‚ t  j t j g  g ƒ d t
 ƒ} t | t ƒ st ‚ t | ƒ d k s1t ‚ | d j d k sJt ‚ | d j t j k sft ‚ | d j d k st ‚ | d j t j k s›t ‚ d S(   s   Test result with empty image.t   indicesi    i   i   N(   i   i    (   R   t   local_maximaR   R   t   Falset   sizeR   R   R   t   shapet   Truet
   isinstancet   tuplet   lent   intp(   R   t   result(    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt
   test_emptyÕ   s     !!c         C   sC   x< |  j  D]1 } t j |  j j | ƒ ƒ } t | |  j ƒ q
 Wd S(   sA   Test results with default configuration for all supported dtypes.N(   t   supported_dtypesR   R/   t   imageR!   R    t   expected_default(   R   R   R8   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_dtypesê   s    c         C   s  t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d	 d	 d g
 d d d d d
 d
 d
 d	 d	 d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d
 d
 d d
 d
 d d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d d
 d
 d
 d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} x< |  j D]1 } | j | ƒ } t j | ƒ } t | | ƒ qÎWd S(   s   
        Test results with default configuration and data copied from old unit
        tests for all supported dtypes.
        i
   i   i   i   i   i   i(   i   i<   i   i   iP   id   R   i    i   N(   R   R   R   R:   R!   R   R/   R    (   R   R   R   R   R;   R8   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_dtypes_oldð   s8    !!!!!!!!!'!!!!!!!!!'c         C   s|   t  j |  j d d ƒ} t | |  j ƒ t  j |  j d d ƒ} t | |  j ƒ t  j |  j d d ƒ} t | |  j ƒ d S(   s"   Test results if selem is a scalar.t   connectivityi   i   i   N(   R   R/   R;   R    t   expected_crossR<   (   R   t   result_conn1t   result_conn2t   result_conn3(    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_connectivity  s    c         C   s/  t  j d d d g d d d g d d d g g ƒ } t j |  j d | ƒ} t | |  j ƒ t  j d d t  j ƒ} t j |  j d | ƒ} t | |  j	 ƒ t  j d d d g d d d g d d d g g ƒ } t  j d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g g d t  j ƒ} t j |  j d | ƒ} t | | ƒ d S(   s"   Test results if selem is an array.i    i   t   selemi   R   N(   i   i   (
   R   R   R   R/   R;   R    R@   t   onesR   R<   (   R   t   selem_crosst   result_selem_crosst   selem_squaret   result_selem_squaret   selem_xt   expected_selem_xt   result_selem_x(    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt
   test_selem"  s&    33000006c         C   s~   t  j |  j ƒ } t j |  j d d d t ƒ} t | | ƒ t  j |  j ƒ } t j |  j d d d t ƒ} t | | ƒ d S(   s,   Test output if indices of peaks are desired.R?   i   R.   i   N(	   R   t   nonzeroR@   R   R/   R;   R3   R    R<   (   R   t   expected_conn1RA   t   expected_conn2RB   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_indices;  s    		c         C   s•  t  j |  j d d d t ƒ} t | |  j ƒ t j d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g g d t j ƒ} t  j |  j d d d t	 ƒ} t | | ƒ d S(   s*   Test maxima detection at the image border.R?   i   t   allow_bordersi    R   N(
   R   R/   R;   R3   R    R@   R   R   R   R0   (   R   t   result_with_bodert   expected_without_bordert   result_without_border(    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_allow_bordersI  s    000006c         C   sC  t  j d d d d d d d d d d d g ƒ } t  j d d d d d d d d d d d g d t  j ƒ} t j | ƒ } t | | ƒ t  j d d t  j ƒ} t  j d d t  j ƒ} d | d d d … d d … f <d | d <d | d d d … d d … f <d | d <d | d	 d … d d f <d | d	 d … d d f <d | d d	 d … d	 d … f <d | d <d | d d	 d … d	 d … f <| d d … d	 d … d	 d … f c d 7<d | d d	 d … d	 d … f <d | d d	 d … d	 d … f <d | d
 d … d
 d … d
 d … f <d | d <d | d <t j | ƒ } t | | ƒ d S(   s%   Test one- and three-dimensional case.i   i    i   i   R   i   id   iÈ   i   i   i   i2   iÿ   N(   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   R   R   R   R   R/   R    t   zeros(   R   t   x_1dt   expected_1dt	   result_1dt   x_3dt   expected_3dt	   result_3d(    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_nd^  s0    0-


+%

c         C   s’   t  j d d d t  j ƒ} t  j d d t  j ƒ} xX |  j D]M } | j | ƒ } t j | ƒ } t | | ƒ t j	 | ƒ } t | | ƒ q= Wd S(   s!   Test behaviour for 'flat' images.i   i   i*   R   N(   i   i   (   i   i   (
   R   t   fullR   RX   R:   R!   R   R/   R    t   local_minima(   R   t   const_imageR   R   R8   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_constant€  s    c         C   s
  t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d	 d	 d g
 d d d d d
 d
 d
 d	 d	 d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d
 d d d
 d
 d d g
 d d d d
 d
 d
 d
 d
 d d g
 d d d d d
 d
 d
 d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} d | } t  j d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 d d d d d d d d d d g
 g
 d t  j ƒ} t j | ƒ } t | | ƒ t j | ƒ } t | | ƒ d S(   s   Specific tests for float type.gš™™™™™¹?g)\Âõ(¼?g¤p=
×£À?gìQ¸…ëÁ?g333333Ã?g{®GázÄ?gš™™™™™Ù?g
×£p=
Ç?g333333ã?gR¸…ëQÈ?g²ï§ÆKÇ?gé&1¬Ê?gš™™™™™É?gš™™™™™é?g      ð?R   i    i   N(   R   R   R(   R   R   R/   R    Ra   (   R   R;   t   inverted_imageR#   R$   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyR*     s:    !!!!!!!!!'
!!!!!!!!!'c         C   s  t  t d d ƒ$ t j |  j d t j d ƒ ƒWd QXt  t d d ƒ$ t j |  j d t j d ƒ ƒWd QXt  t d d ƒ$ t j |  j d t j d ƒ ƒWd QXt  t d d ƒ$ t j |  j d t j d ƒ ƒWd QXt  t d d	 ƒ$ t j t j d
 d t j	 ƒƒ Wd QXd S(   s5   Test if input validation triggers correct exceptions.t   matchs   number of dimensionsRE   i   Ns   dimension sizei   i   s   float16 which is not supportedi   R   (   i   i   i   (   i   (   i   i   (   i   i   (
   R   t
   ValueErrorR   R/   R;   R   RF   t	   TypeErrort   emptyt   float16(   R   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_exceptions´  s    %%%%c         C   sP  d } t  j d d g ƒ } t j | d t ƒt t d | ƒ t j | d t ƒ} Wd QXt | d d g ƒ | j	 t  j
 k s‡ t ‚ t  j d d g d d g g ƒ } t j | d t d t ƒt t d | ƒ  t j | d t d t ƒ} Wd QXt | t  j d
 d	 t  j ƒƒ | d j	 t  j k s0t ‚ | d j	 t  j k sLt ‚ d S(   sÇ  Test output for arrays with dimension smaller 3.

        If any dimension of an array is smaller than 3 and `allow_borders` is
        false a structuring element, which has at least 3 elements in each
        dimension, can't be applied. This is an implementation detail so
        `local_maxima` should still return valid output (see gh-3261).

        If `allow_borders` is true the array is padded internally and there is
        no problem.
        s0   maxima can't exist .* any dimension smaller 3 .*i    i   RS   Re   Ni   R.   R   (   i   i    (   R   R   R   R/   R3   R   t   UserWarningR0   R    R   R   R   RX   R7   (   R   t   warning_msgt   xR8   (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   test_small_arrayÅ  s    !!(   R+   R,   t   __doc__R   R   t   uint16t   uint32R   R   R   t   int32R    R(   R   R:   R   R;   R<   R@   R9   R=   R>   RD   RN   RR   RW   R_   Rc   R*   Rj   Rn   (    (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyR-   ¯   sP   000006000006000006			$					"		'	t   __main__(   R	   t   unittestt   numpyR   t   numpy.testingR    t   pytestR   R   t   skimage.morphologyR   R   R   t   TestCaseR   R-   R+   t   testingt   run_module_suite(    (    (    sD   lib/python2.7/site-packages/skimage/morphology/tests/test_extrema.pyt   <module>   s   	›ÿ 3