ó
àÆ÷Xc           @` sâ   d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l	 j
 Z d  d l m Z m Z m Z d  d l m Z e j j j ƒ  j d ƒ Z d e j f d „  ƒ  YZ e d	 k rÞ e j ƒ  n  d S(
   i    (   t   absolute_importt   print_functiont   divisionN(   t   sharedt   function(   t   images2neibst   neibs2imagest   Images2Neibs(   t   unittest_toolst   gput   T_Images2Neibsc           B` sª   e  Z e Z e Z d  d d g 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 d „  Z d „  Z d „  Z RS(   t   int64t   float32t   float64c      
   C` sd  x]d d f d d f d d f d d f g D]1\ } } x"d d g D]} x|  j  D] } t t j t j | ƒ d | ƒj | ƒ ƒ } t j | ƒ } t g  t	 | | d | ƒd |  j
 ƒ} | ƒ  } t g  t | | | j ƒ d |  j
 ƒ}	 t g  | j j j ƒ  D] }
 t |
 j |  j ƒ ^ qƒ s-t ‚ t j | j d t ƒ |	 ƒ  ƒ sT t ‚ qT WqD Wq+ Wd  S(   Ni
   i   i   i   i   i   i   iB   i!   iD   i"   t   validt   ignore_borderst   dtypet   modet   borrow(   i
   i   i   i   (   i   i   (   i
   i   i   i   (   i   i   (   i   i   iB   iB   (   i!   i!   (   i   i   iD   iB   (   i"   i!   (   t   dtypesR   t   numpyt   aranget   prodt   reshapet   Tt   as_tensor_variableR   R   R   R   t   shapet   anyt   makert   fgrapht   toposortt
   isinstancet   opt   AssertionErrort   allcloset	   get_valuet   True(   t   selfR   t   pshapet   borderR   t   imagest
   neib_shapet   ft   neibst   gt   node(    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt
   test_neibs   s&    		*	:c   
      C` s¯  df } x¢|  j  D]—} t t j t j | ƒ d | ƒj | ƒ ƒ } t j dg ƒ } xRd d g D]D} t g  t	 | | d | ƒd |  j
 ƒ} t g  | j j j ƒ  D] } t | j |  j ƒ ^ q¢ ƒ sÌ t ‚ | ƒ  } t j | d d	 d d
 g d d d d g d d d d g d d d d g d d d d g d d d d g d d d d  g d! d" d# d$ g d% d& d' d( g d) d* d+ d, g d- d. d/ d0 g d1 d2 d3 d4 g d5 d6 d7 d8 g d9 d: d; d< g d= d> d? d@ g dA dB dC dD g dE dF dG dH g dI dJ dK dL g dM dN dO dP g dQ dR dS dT g dU dV dW dX g dY dZ d[ d\ g d] d^ d_ d` g da db dc dd g g ƒ sUt ‚ t g  t | | | j ƒ d |  j
 ƒ}	 t j | j de t ƒ |	 ƒ  ƒ s_ t ‚ q_ Wq Wd  S(h   Ni   i   i   R   R   R   R   i    i   i   i   i   i   i	   i   i   i
   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i    i!   i$   i%   i"   i#   i&   i'   i(   i)   i,   i-   i*   i+   i.   i/   i0   i1   i4   i5   i2   i3   i6   i7   i8   i9   i<   i=   i:   i;   i>   i?   i@   iA   iD   iE   iB   iC   iF   iG   iH   iI   iL   iM   iJ   iK   iN   iO   iP   iQ   iT   iU   iR   iS   iV   iW   iX   iY   i\   i]   iZ   i[   i^   i_   R   (   i   i   i   i   (   i   i   (   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   R"   R   R   R#   R$   (
   R%   R   R   R(   R)   R'   R*   R-   R+   R,   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_neibs_manual/   sN    *:		c   
   $   C` sá  d› } xÔ|  j  D]É} t t j t j t j | ƒ ƒ j | ƒ d | ƒƒ } t j dœ ƒ } t j d ƒ } xld d g D]^} t	 g  t
 | | | d | ƒd |  j ƒ} | ƒ  } |  j g  | j j j ƒ  D] }	 t |	 j ƒ ^ qÉ k sí t ‚ t j | d d	 d d d
 d d d d g	 d d d d d d d d d g	 d d d d d d d d d g	 d d d d d d d d d g	 d d d  d! d" d# d$ d% d& g	 d  d' d( d# d) d* d& d+ d, g	 d$ d% d& d- d. d/ d0 d1 d2 g	 d& d+ d, d/ d3 d4 d2 d5 d6 g	 d7 d8 d9 d: d; d< d= d> d? g	 d9 d@ dA d< dB dC d? dD dE g	 d= d> d? dF dG dH dI dJ dK g	 d? dD dE dH dL dM dK dN dO g	 dP dQ dR dS dT dU dV dW dX g	 dR dY dZ dU d[ d\ dX d] d^ g	 dV dW dX d_ d` da db dc dd g	 dX d] d^ da de df dd dg dh g	 di dj dk dl dm dn do dp dq g	 dk dr ds dn dt du dq dv dw g	 do dp dq dx dy dz d{ d| d} g	 dq dv dw dz d~ d d} d€ d g	 d‚ dƒ d„ d… d† d‡ dˆ d‰ dŠ g	 d„ d‹ dŒ d‡ d dŽ dŠ d d g	 dˆ d‰ dŠ d‘ d’ d“ d” d• d– g	 dŠ d d d“ d— d˜ d– d™ dš g	 g ƒ sw t ‚ qw Wq Wd  S(ž   Ni   i   i   R   R   R   R   i    i   i   i   i
   i   i   i   i   i	   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i    i#   i$   i%   i   i   i!   i"   i&   i'   i(   i)   i*   i-   i.   i/   i+   i,   i0   i1   i2   i3   i4   i7   i8   i9   i<   i=   i>   i5   i6   i:   i;   i?   i@   iA   iB   iC   iF   iG   iH   iD   iE   iI   iJ   iK   iL   iM   iP   iQ   iR   iU   iV   iW   iN   iO   iS   iT   iX   iY   iZ   i[   i\   i_   i`   ia   i]   i^   ib   ic   id   ie   if   ii   ij   ik   in   io   ip   ig   ih   il   im   iq   ir   is   it   iu   ix   iy   iz   iv   iw   i{   i|   i}   i~   i   i‚   iƒ   i„   i‡   iˆ   i‰   i€   i   i…   i†   iŠ   i‹   iŒ   i   iŽ   i‘   i’   i“   i   i   i”   i•   (   i   i   i   i   (   i   i   (   i   i   (   R   R   R   t   asarrayR   R   R   R   R   R   R   R   R    R   R   R   t   typeR!   R"   (
   R%   R   R   R(   R)   t	   neib_stepR'   R*   R+   R-   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_neibs_manual_step]   sN    !			4	c      	   C` s  d } x |  j  D]õ } t t j t j | ƒ d | ƒj | ƒ ƒ } x¿ d d	 g D]± } t j | ƒ } t g  t	 | | ƒ d |  j
 ƒ} |  j t | ƒ t g  t	 | | d d ƒd |  j
 ƒ} |  j g  | j j j ƒ  D] } t | j ƒ ^ qÖ k sú t ‚ | ƒ  qP Wq Wd  S(
   Ni   i   i
   R   R   R   (   i   i   i
   i
   (   i   i   (   i   i   (   R   R   R   R   R   R   R   R   R   R   R   t   assertRaisest	   TypeErrorR    R   R   R   R1   R!   (   R%   R   R   R(   R)   R*   R-   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_neibs_bad_shape   s     	$		4c         C` s©  d d d d d d d d d	 g	 d d
 d d d d d	 d d g	 d d d d d d d d d g	 d d d	 d d d d d d g	 d	 d d d d d d d d g	 d d d d d d d d d g	 d d d d d d d d d g	 d d d d d
 d d d d g	 d d d d d d d d d g	 g	 } d d d d d d d d d	 g	 d
 d d d d d d d d g	 d d d d d d d d d g	 d d d d d d d
 d d g	 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 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 d d d d d d d d	 g	 d
 d d d d d d d d g	 d d d	 d d d d d d g	 d d d d d d d d d g	 d d d d d d d d d g	 d d d d
 d d d d d g	 g } d d d d d d d d d	 g	 d d
 d d d d d	 d d g	 d d d d d d d d d g	 d d d d d d d d d g	 d d d d d d d d
 d g	 d d d d d d d d d g	 g } xt  d# d$ d% | g d& d' d( | g d) d* d+ | g d, d- d. | g d/ d0 d1 | g d2 d3 d4 | g d5 d6 d7 d  g d8 d9 d: d  g g ƒ D]Š\ } \ } }	 }
 } xo|  j D]d} t t j t j t j | ƒ ƒ j | ƒ d | ƒƒ } t	 j
 |	 ƒ }	 t	 j
 |
 ƒ }
 t j | ƒ } t g  t | |	 |
 d  d! ƒd  |  j ƒ} | ƒ  } | j d k r`xy t | d | d ƒ D]\ } t j | | | j d | d | j d … d  d  … f | d" | ƒ sýt d! ƒ ‚ qýWn  |  j g  | j j j ƒ  D] } t | j ƒ ^ qyk s9t ‚ q9WqWd  S(;   Ni   i   i   i   i    i   i	   i   i   i   i   i   i   i   i   i   i
   i   i   i   i   i   i   i   i   iP   iZ   i  i  i  R   R   t   wrap_centeredi   (   i   i   i   i   (   i   i   (   i   i   (   i   i   i   i   (   i   i   (   i   i   (   i   i   i   i   (   i   i   (   i   i   (   i   i   i   i   (   i   i   (   i   i   (   iP   iZ   i   i   (   i   i   (   i   i   (   i  i	   i   i   (   i   i   (   i   i   (   i   i   i   i  (   i   i   (   i   i   (   i   i   i  i   (   i   i   (   i   i   (   t	   enumeratet   NoneR   R   R   R0   R   R   R   R   R   R   R   R   t   sizet   rangeR"   R   R!   R    R   R   R   R1   (   R%   t	   expected1t	   expected2t	   expected3t	   expected4t	   expected5t	   expected6t   shp_idxR   R)   R2   t   expectedR   R(   R*   R+   t   iR-   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt$   test_neibs_wrap_centered_step_manual¤   sv    $$00060006$$.!		3$	c      	   C` s–  d } x‰|  j  D]~} t t j t j | ƒ d | ƒj | ƒ ƒ } xZ d d	 g D]L } t j | ƒ } t g  t	 | | d d ƒd |  j
 ƒ} |  j t | ƒ qP Wx d
 d g D]s } t t j t j | ƒ ƒ j | ƒ ƒ } t j d ƒ } t g  t	 | | d d ƒd |  j
 ƒ} |  j t | ƒ q­ Wd } t t j t j | ƒ ƒ j | ƒ ƒ } t j d ƒ } t g  t	 | | d d ƒd |  j
 ƒ} | ƒ  q Wd  S(   Ni   i   i
   R   R   R7   (   i   i   i
   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   R   R   R   R   R   R4   R5   (   R%   R   R   R(   R)   R*   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt"   test_neibs_bad_shape_wrap_centeredï   s2    		'	'c         C` sS   d } t  j j | Œ  j d ƒ } d „  } |  j t t j | | g d |  j ƒd  S(   Ni   i   i   R   c         S` s   t  |  d d d ƒS(   Ni   R   R7   (   i   i   (   R   (   R(   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   fn  s    R   (   i   i   i   i   (	   R   t   randomt   randt   astypeR4   R5   R   t   verify_gradR   (   R%   R   t
   images_valRG   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_grad_wrap_centered  s
    	c         C` s¦   d } t  j j | Œ  j d ƒ } d „  } t j | | g d |  j d d ƒd	 „  } t j | | g d |  j d d ƒd
 „  } t j | | g d |  j d d ƒd  S(   Ni   i   i   R   c         S` s   t  |  d ƒ S(   Ni   (   i   i   (   R   (   R(   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyRG      s    R   t   epsgš™™™™™¹?c         S` s   t  |  d d ƒ S(   Ni   i   i   (   i   i   (   i   i   (   R   (   R(   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyRG   &  s    c         S` s   t  |  d d ƒ S(   Ni   i   i   (   i   i   (   i   i   (   R   (   R(   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyRG   ,  s    (   i   i   i   i   (   R   RH   RI   RJ   R   RK   R   (   R%   R   RL   RG   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_grad_valid  s    			c         C` sP   d	 } t  j j | Œ  j d ƒ } d „  } t j | | g d |  j d d ƒd  S(
   Ni   i   i   R   c         S` s   t  |  d d d ƒS(   Ni   R   R   (   i   i   (   R   (   R(   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyRG   6  s    R   RN   gš™™™™™¹?(   i   i   i   i   (   R   RH   RI   RJ   R   RK   R   (   R%   R   RL   RG   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_grad_ignore_border2  s
    	c         C` sD   t  j j d d ƒ } d „  } t j | | g d |  j d d ƒd  S(   Ni–   i   c         S` s   t  |  d d ƒ S(   Ni   i   i
   (   i   i   (   i   i   i
   i
   (   R   (   R+   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyRG   B  s    R   RN   gš™™™™™¹?(   R   RH   RI   R   RK   R   (   R%   t	   neibs_valRG   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_neibs2images_grad=  s    	c         C` s   d	 } t  j ƒ  } t j t j | ƒ d d ƒj | ƒ } d „  } t j | g t  j t	 | d
 d d ƒƒ d |  j
 ƒ} |  j t | | ƒ d  S(   Ni   i   i   R   R   c         S` s1   t  j t  j t |  d d d ƒƒ d d d g ƒS(   Ni   R   R   t   axisi    i   (   i   i   (   R   t   sumt   sqrR   (   R(   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyRG   M  s    $R   R   (   i   i   i   i   (   i   i   (   R   t   dtensor4R   R   R   R   t   theanoR   RU   R   R   R4   R5   (   R%   R   R(   RL   RG   R*   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt*   test_neibs_valid_with_inconsistent_bordersG  s    	c      
   C` s  t  j d ƒ } t  j j j | d d g ƒ } t j | g | ƒ } t  j d ƒ } t  j d ƒ } x¤ d d g D]– } t	 | d | d | ƒ} t j | | g | ƒ } t
 j d d t
 j ƒ}	 | |	 ƒ }
 | |
 |	 j ƒ |  j t | |
 d ƒ |  j t | |
 d ƒ qm Wd  S(   Nt   imgi   t   patsRecoveryt   original_sizeR   R   R   i   i   i@  R   (   i   i   (   i   i   i@  i@  (   i   i   i   i@  i@  (   i   i@  i@  i   (   R   t   tensor4t   nnett
   neighboursR   RW   R   t   matrixt   ivectorR   R   t   onesR   R   R4   t
   ValueError(   R%   RY   t   patchest   extractPatchesRZ   R[   R   t   outR*   t   im_valR+   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_can_not_infer_nb_dimV  s     	c         C` s…   d	 } t  t j t j | ƒ d d ƒj | ƒ ƒ } t j d
 ƒ } t g  t | | ƒ d |  j	 ƒ} x t
 d ƒ D] } | ƒ  qp Wd  S(   Nid   i(   i   R   R   i   R   iè  (   id   i(   i   i   (   i   i   (   R   R   R   R   R   R   R   R   R   R   R;   (   R%   R   R(   R)   R*   RD   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   speed_neibsq  s    c         C` s‹   d
 } t  t j t j | ƒ d d ƒj | ƒ ƒ } t j d ƒ } t g  t | | d d ƒd |  j	 ƒ} x t
 d	 ƒ D] } | ƒ  qv Wd  S(   Nid   i(   i   R   R   i   R   R7   iè  (   id   i(   i   i   (   i   i   (   R   R   R   R   R   R   R   R   R   R   R;   (   R%   R   R(   R)   R*   RD   (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   speed_neibs_wrap_centered}  s    c         C` sü  d } t  j | ƒ j d ƒ } t j ƒ  } |  j | g t | d d d	 d
 ƒg | g t ƒ |  j | g t | d d d	 d
 ƒg | g t ƒ d } t  j | ƒ j d ƒ } t j ƒ  } |  j | g t | d d d	 d ƒg | g t ƒ d } t  j | ƒ j d ƒ } t j ƒ  } |  j | g t | d d d	 d ƒg | g t ƒ d } t  j | ƒ j d ƒ } t j ƒ  } |  j | g t | d d d	 d ƒg | g t ƒ d } t  j | ƒ j d ƒ } t j ƒ  } |  j | g t | d d d	 d ƒg | g t ƒ d  S(   Nid   i(   i   i   R   R)   i   i   R   R   i   i   R   i   i
   R7   (   id   i(   i   i   (   i   i   (   i   i   (   id   i(   i   i   (   i   i   (   id   i(   i   i   (   i   i   (   id   i(   i   i   (   i   i   (   id   i(   i   i
   (   i   i   (   R   Ra   RJ   R   t   ftensor4t   _compile_and_checkR   R   (   R%   R   R(   t   x(    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   test_infer_shapeŠ  sJ    				(   t   __name__t
   __module__t   mode_without_gpuR   R   R    R   R.   R/   R3   R6   RE   RF   RM   RO   RP   RR   RX   Rg   Rh   Ri   Rm   (    (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyR
      s$   		.	2		K	"				
				t   __main__(   t
   __future__R    R   R   R   t   unittestRW   R   R   t   theano.tensort   tensorR   t   theano.tensor.nnet.neighboursR   R   R   t   theano.testsR   t   compileR   t   get_default_modet	   excludingRp   t   InferShapeTesterR
   Rn   t   main(    (    (    sH   /tmp/pip-build-X4mzal/theano/theano/tensor/nnet/tests/test_neighbours.pyt   <module>   s   ÿ ¤