ó
àÆ÷Xc           @` sþ   d  d l  m Z m Z m Z d Z d  d l Z d  d l Z d  d l Z d  d l m	 Z	 d  d l
 m Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z d  d	 l m Z d
 e j f d „  ƒ  YZ e d k rú d  d l m Z e d ƒ n  d S(   i    (   t   absolute_importt   print_functiont   divisions   restructuredtext enN(   t
   raw_random(   t   RandomStreams(   t   functiont   shared(   t   tensor(   t   compilet   configt   gof(   t   unittest_toolst   T_SharedRandomStreamsc           B` sC  e  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 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 d „  Z  d „  Z! d  „  Z" d! „  Z# d" „  Z$ RS(#   c         C` s   t  j ƒ  d  S(   N(   t   uttt   seed_rng(   t   self(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   setUp   s    c         C` s   t  d d ƒ } | j d ƒ } | j d ƒ } t g  | ƒ } t g  | d t ƒ} t g  | | d | ƒ } t j | ƒ  | ƒ  k ƒ s t ‚ t j | ƒ  | ƒ  k ƒ s® t ‚ t j t | ƒ  ƒ d k  ƒ sÒ t ‚ t	 | j
 j d t ƒ t j j ƒ sü t ‚ d  S(	   Nt   seediê   i   t   no_default_updatesgñhãˆµøä>t   borrow(   i   i   (   i   i   (   R   t   uniformt   normalR   t   Truet   numpyt   allt   AssertionErrort   abst
   isinstancet   rngt	   get_valuet   randomt   RandomState(   R   t   srngt   rv_ut   rv_nt   ft   gt   nearly_zeros(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_tutorial   s    !!$c         C` s.  t  t j ƒ  ƒ } t g  | j d ƒ d | j ƒ  ƒ} t g  | j d ƒ d | j ƒ  ƒ} | ƒ  } | ƒ  } | ƒ  } t j j	 t j ƒ  ƒ j
 d ƒ } t j j	 t | ƒ ƒ } | j d d ƒ }	 | j d d	 ƒ }
 t j | |	 ƒ sê t ‚ t | ƒ t |	 ƒ t | ƒ t |
 ƒ t j | |
 ƒ s*t ‚ d  S(
   Ni   t   updatesi   t   size(   i   i   (   i   i   i   @(   i   i   (   i   i   (   R   R   t
   fetch_seedR   R   R'   R   R   R   R   t   randintt   intt   allcloseR   t   print(   R   R   t   fnt   gnt   fn_val0t   fn_val1t   gn_val0t   rng_seedR   t
   numpy_val0t
   numpy_val1(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_basics%   s     $$			!



c   	      C` sæ   t  d ƒ } t g  | j d ƒ d | j ƒ  ƒ} | j t j ƒ  ƒ | ƒ  } | ƒ  } t j j	 t j ƒ  ƒ j
 d ƒ } t j j	 t | ƒ ƒ } | j d d ƒ } | j d d	 ƒ } t j | | ƒ sÊ t ‚ t j | | ƒ sâ t ‚ d  S(
   Niê   i   R'   i   R(   (   i   i   i   @(   i   i   (   i   i   (   R   R   R   R'   R   R   R)   R   R   R   R*   R+   R,   R   (	   R   R   R.   R0   R1   R3   R   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_seed_fn>   s    $		!c   	      C` sÜ   t  d ƒ } | j d ƒ } t g  | d | j ƒ  ƒ} | j t j ƒ  ƒ t j j	 ƒ  } | j
 | | j j ƒ  ƒ | ƒ  } | ƒ  } | j d d ƒ } | j d d ƒ } t j | | ƒ sÀ t ‚ t j | | ƒ sØ t ‚ d  S(   Niê   i   R'   R(   (   i   i   (   i   i   (   i   i   (   R   R   R   R'   R   R   R)   R   R   R   t	   set_stateR   t	   get_stateR,   R   (	   R   R   t   outR.   R   R0   R1   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_getitemR   s    		c   	      C` sä   t  d ƒ } | j d ƒ } t g  | d | j ƒ  ƒ} | j d ƒ t j j t j	 ƒ  ƒ } t j j t j	 ƒ  ƒ | | j
 <| ƒ  } | ƒ  } | j d d ƒ } | j d d ƒ } t j | | ƒ sÈ t ‚ t j | | ƒ sà t ‚ d  S(	   Niê   i   R'   ix  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   R0   R1   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_setitemd   s    		c         C` s¹   t  t j ƒ  ƒ } t g  | j d ƒ ƒ } t  t j ƒ  ƒ } t g  | j d d d ƒƒ } | ƒ  } | ƒ  } t j | | k ƒ s‡ t ‚ t  t j ƒ  ƒ } |  j t	 | j d d d ƒd S(   s4   Test that the behaviour of 'ndim' optional parameteri   t   ndimi   N(   i   i   (   i   i   (   i   i   (
   R   R   R)   R   R   R   R   R   t   assertRaisest
   ValueError(   R   R   R.   t   random2t   fn2t   val1t   val2t   random3(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt	   test_ndimv   s    		c   	      C` sß   t  t j ƒ  ƒ } t g  | j d d d ƒ ƒ } | ƒ  } | ƒ  } t j j t j ƒ  ƒ j d ƒ } t j j t	 | ƒ ƒ } | j d d d d	 ƒ} | j d d d d
 ƒ} t j
 | | ƒ sÃ t ‚ t j
 | | ƒ sÛ t ‚ d S(   sC   Test that RandomStreams.uniform generates the same results as numpyi   iÿÿÿÿi   i   R(   N(   i   i   i   @(   i   i   (   i   i   (   R   R   R)   R   R   R   R   R   R*   R+   R,   R   (	   R   R   R.   R0   R1   R3   R   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_uniform‹   s    		!c   	      C` sß   t  t j ƒ  ƒ } t g  | j d d d ƒ ƒ } | ƒ  } | ƒ  } t j j t j ƒ  ƒ j d ƒ } t j j t	 | ƒ ƒ } | j d d d d ƒ} | j d d d d	 ƒ} t j
 | | ƒ sÃ t ‚ t j
 | | ƒ sÛ t ‚ d S(
   sB   Test that RandomStreams.normal generates the same results as numpyi   iÿÿÿÿi   R(   N(   i   i   i   @(   i   i   (   i   i   (   R   R   R)   R   R   R   R   R   R*   R+   R,   R   (	   R   R   R.   R0   R1   R3   R   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_normal›   s    		!c   	      C` så   t  t j ƒ  ƒ } t g  | j d d d ƒ ƒ } | ƒ  } | ƒ  } t j j t j ƒ  ƒ j d	 ƒ } t j j t	 | ƒ ƒ } | j d d d d
 ƒ} | j d d d d ƒ} t j
 | | k ƒ sÆ t ‚ t j
 | | k ƒ sá t ‚ d  S(   Ni   iûÿÿÿi   i   i   i   R(   (   i   i   i   @(   i   i   (   i   i   (   R   R   R)   R   t   random_integersR   R   R   R*   R+   R   R   (	   R   R   R.   R0   R1   R3   R   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_random_integers¬   s    		!c   	      C` sè   t  t j ƒ  ƒ } t g  | j d	 d d d ƒ ƒ } | ƒ  } | ƒ  } t j j t j ƒ  ƒ j d
 ƒ } t j j t	 | ƒ ƒ } | j d d t
 d ƒ } | j d d t
 d ƒ } t j | | k ƒ sÉ t ‚ t j | | k ƒ sä t ‚ d S(   sB   Test that RandomStreams.choice generates the same results as numpyi   i   i
   i   i    i   i   N(   i   i   i   @(   i   i   (   i   i   (   R   R   R)   R   t   choiceR   R   R   R*   R+   R   t   NoneR   R   (	   R   R   R.   R0   R1   R3   R   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_choice¿   s    !		!c   	      C` sè   t  t j ƒ  ƒ } t g  | j d d d d	 ƒ ƒ } | ƒ  } | ƒ  } t j j t j ƒ  ƒ j d
 ƒ } t j j t	 | ƒ ƒ } | j d d d d ƒ } | j d d d d ƒ } t j
 | | k ƒ sÉ t ‚ t j
 | | k ƒ sä t ‚ d S(   sC   Test that RandomStreams.poisson generates the same results as numpyt   lami   R(   i   i   i   i   N(   i   i   i   @(   i   i   (   i   i   (   R   R   R)   R   t   poissonR   R   R   R*   R+   R   R   (	   R   R   R.   R0   R1   R3   R   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_poissonÏ   s    !		!c   
      C` s   t  t j ƒ  ƒ } t g  | j d d ƒ d | j ƒ  ƒ} | ƒ  } | ƒ  } t j j t j ƒ  ƒ j	 d ƒ } t j j t
 | ƒ ƒ } t j g  t d ƒ D] } | j d ƒ ^ q— ƒ } t j g  t d ƒ D] } | j d ƒ ^ qÈ ƒ }	 t j | | k ƒ st ‚ t j | |	 k ƒ st ‚ d S(	   sG   Test that RandomStreams.permutation generates the same results as numpyi   i
   R'   i   i   N(   i   i   @(   R   R   R)   R   t   permutationR'   R   R   R   R*   R+   t   asarrayt   rangeR   R   (
   R   R   R.   R0   R1   R3   R   t   iR4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_permutationà   s    '		!11c   	      C` s  t  t j ƒ  ƒ } t g  | j d
 d d g d ƒ d | j ƒ  ƒ} | ƒ  } | ƒ  } t j j t j ƒ  ƒ j	 d ƒ } t j j t
 | ƒ ƒ } | j d d g d d d ƒ} | j d d g d d d ƒ} t j | | k ƒ sç t ‚ t j | | k ƒ st ‚ d	 S(   sG   Test that RandomStreams.multinomial generates the same results as numpyi   i   gš™™™™™¹?i
   R'   i   i   R(   N(   i   i   i   @(   i   i   (   i   i   (   R   R   R)   R   t   multinomialR'   R   R   R   R*   R+   R   R   (	   R   R   R.   R0   R1   R3   R   R4   R5   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_multinomialó   s    1		!c         C` sÃ  t  t j ƒ  ƒ } t j ƒ  } t | g | j | ƒ d | j ƒ  ƒ} t j	 j
 t j ƒ  d ƒ } | j d d d d ƒ} | | ƒ } | | ƒ } t | d ƒ t | d ƒ t | d ƒ t j | | k ƒ s× t ‚ t j | | k ƒ só t ‚ t j | | k ƒ st ‚ t j	 j
 t j ƒ  ƒ j d ƒ } t j	 j
 t | ƒ ƒ }	 | j ƒ  }
 | j ƒ  } x |
 D] } |	 j | ƒ qgWx | D] } |	 j | ƒ q…Wt j |
 | k ƒ s·t ‚ t j | | k ƒ sÒt ‚ t  t j ƒ  ƒ } t j ƒ  } t | g | j | ƒ ƒ } | j d
 d d d ƒ} | | ƒ } | j ƒ  } t j	 j
 t | ƒ ƒ } | j | ƒ t | ƒ t | ƒ t | ƒ t j | | k ƒ s™t ‚ |  j t | | ƒ |  j t | | ƒ d S(   sH   Test that RandomStreams.shuffle_row_elements generates the right resultsR'   i*   iþÿÿÿi   R(   i   i   i    i   iýÿÿÿi   i   N(   i   i   i   @(   i   (   R   R   R)   R   t   dmatrixR   t   shuffle_row_elementsR'   R   R   R   R   R-   R   R   R*   R+   t   copyt   shufflet   dvectorR>   t	   TypeError(   R   R   t   m_inputR#   t   val_rngt   in_mvalt   fn_mval0t   fn_mval1R3   R   t   numpy_mval0t   numpy_mval1t   rowt   random1t   v_inputt   f1t   in_vvalt   fn_vvalt
   numpy_vvalt   vrng(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_shuffle_row_elements  sJ    '!


c         C` s«  t  t j ƒ  ƒ } | j d ƒ } t g  | ƒ } | ƒ  } | ƒ  } t j | | k ƒ s^ t ‚ t g  | | d | ƒ } t j t | ƒ  ƒ d k  ƒ s t ‚ t  t j ƒ  ƒ } | j d ƒ } t g  | d | j	 ƒ  ƒ}	 |	 ƒ  }
 |	 ƒ  } t j |
 | k ƒ st ‚ t j | | k ƒ s!t ‚ t  t j ƒ  ƒ } | j d ƒ } t g  | d | j
 g ƒ} | ƒ  } | ƒ  } t j | | k ƒ sŠt ‚ t j | | k ƒ s¥t ‚ t  t j ƒ  ƒ } | j d ƒ } t g  | d t ƒ} | ƒ  } | ƒ  } t j | | k ƒ st ‚ t j | | k ƒ s#t ‚ t  t j ƒ  ƒ } | j d	 ƒ } t g  | d | j g ƒ} | ƒ  } | ƒ  } t j | | k ƒ sŒt ‚ t j | | k ƒ s§t ‚ d  S(
   Ni   gñhãˆµøä>R'   R   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   R)   R   R   R   R   R   R   R'   t   updateR   R   (   R   t   random_at   out_at   fn_at	   fn_a_val0t	   fn_a_val1R%   t   random_bt   out_bt   fn_bt	   fn_b_val0t	   fn_b_val1t   random_ct   out_ct   fn_ct	   fn_c_val0t	   fn_c_val1t   random_dt   out_dt   fn_dt	   fn_d_val0t	   fn_d_val1t   random_et   out_et   fn_et	   fn_e_val0t	   fn_e_val1(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_default_updates<  sH    		$								c         C` s½   t  t j ƒ  ƒ } t j ƒ  } t | g | j d | d d ƒ ƒ } | d d g ƒ j d k sc t ‚ | d d g ƒ j d	 k s„ t ‚ |  j	 t
 | d g ƒ |  j	 t
 | d d d d g ƒ d  S(
   NR(   R=   i   i   i   i   i   (   i   i   (   i   i   (   R   R   R)   R   t   lvectorR   R   t   shapeR   R>   R?   (   R   R   R‰   R#   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_symbolic_shapel  s    $!!c         C` sÜ   t  t j ƒ  ƒ } t j ƒ  } | d f } t | g | j d | d d ƒ ƒ } | d ƒ j d k si t ‚ | d ƒ j d k s„ t ‚ t | g | j d | ƒ ƒ } | d ƒ j d k s½ t ‚ | d ƒ j d	 k sØ t ‚ d  S(
   Ni   R(   R=   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (	   R   R   R)   R   t   lscalarR   R   R‰   R   (   R   R   t   shape0R‰   R#   R$   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_mixed_shapev  s    $c         C` s  t  t j ƒ  ƒ } t j ƒ  } | d f } | j d | d d ƒ } | j t t f k s] t	 ‚ t
 | g | ƒ } | d ƒ j d k sŠ t	 ‚ | d ƒ j d k s¥ t	 ‚ | j d | ƒ } | j t t f k sÒ t	 ‚ t
 | g | ƒ } | d ƒ j d k sÿ t	 ‚ | d ƒ j d	 k st	 ‚ d  S(
   Ni   R(   R=   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   R)   R   R‹   R   t   broadcastablet   FalseR   R   R   R‰   (   R   R   RŒ   R‰   t   uR#   t   vR$   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_mixed_shape_bcastableƒ  s    c         C` sM  t  t j ƒ  ƒ } t g  | j ƒ  ƒ } t g  | j ƒ  ƒ } t j j t j ƒ  ƒ } t j j t	 | j
 d ƒ ƒ ƒ } t j j t	 | j
 d	 ƒ ƒ ƒ } | ƒ  } | ƒ  } | j ƒ  }	 | j ƒ  }
 t j | |	 ƒ sØ t ‚ t j | |
 ƒ sð t ‚ xV t d ƒ D]H } | ƒ  } | j d d d d d g ƒ } t j | | k ƒ sý t ‚ qý Wd  S(
   Ni   i   i
   t   ni   t   pvalsg      à?i   @i   @(   R   R   R)   R   R   RU   R   R   R   R+   R*   R,   R   RR   R   (   R   R   R#   R$   R   t   uniform_rngt   multinomial_rngt   val0RB   R4   R5   RS   RC   t
   numpy_val2(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_default_shape”  s     !!			c      	   C` s2  t  t j ƒ  ƒ } t j ƒ  } | j d | d d ƒ } | j d k sK t ‚ t | g | ƒ } t	 j
 j t j ƒ  ƒ } t	 j
 j t | j d ƒ ƒ ƒ } | d d d d g ƒ } | d	 g ƒ } | j d d d d d g d d ƒ }	 | j d d	 g d d ƒ }
 t	 j | |	 k ƒ st ‚ t	 j | |
 k ƒ s2t ‚ t j ƒ  } | j d | d | ƒ } | j d k skt ‚ t | | g | ƒ } t	 j
 j t | j d ƒ ƒ ƒ } | d
 d g d d g ƒ } | d
 g d g ƒ } | j d d
 d g d d d g ƒ } | j d d
 g d d g ƒ } t	 j | | k ƒ s.t ‚ t	 j | | k ƒ sIt ‚ |  j t | d
 d g d d d g ƒ t j ƒ  } | j d | d | d | d d ƒ } t | | | g | ƒ } t	 j
 j t | j d ƒ ƒ ƒ } | d
 d g d d g d g ƒ } | d
 g d g d g ƒ } | j d d
 d g d d d g ƒ } | j d d
 g d d g ƒ } t	 j | | k ƒ spt ‚ t	 j | | k ƒ s‹t ‚ |  j t | d
 d g d d g d g ƒ |  j t | d
 d g d d g d d g ƒ |  j t | d
 d g d d g d d g ƒ |  j t | d
 d g d g d g ƒ d  S(   Nt   lowt   highi   i   i   iûÿÿÿg      à?i    gÍÌÌÌÌÌì?g      ÀiþÿÿÿiÿÿÿÿR(   R=   i   @i   @i   @(   R   R   R)   R   R[   R   R=   R   R   R   R   R   R+   R*   R   t   vectorR>   R?   Rˆ   (   R   R   Rš   R:   R#   t   seed_gent	   numpy_rngR—   RB   R4   R5   R›   t   outbt   fbt   val0bt   val1bt   numpy_val0bt   numpy_val1bR(   t   outct   fct   val0ct   val1ct   numpy_val0ct   numpy_val1c(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_vector_argumentsª  sN    !$!$%$!!$(++c         C` sö  t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | ƒ } | j d k sW t ‚ t	 | | g | ƒ } t
 j j t j ƒ  ƒ j d ƒ } t
 j j t | ƒ ƒ } | d d d d g d	 g g ƒ } | d
 g d	 g d g d g g ƒ }	 | d d d d g d	 g d g d g g ƒ }
 | j d d d d d g d d	 g ƒ } | j d d
 g d d	 g d g d g g ƒ } | j d d d d d g d d	 g d g d g g ƒ } t
 j | | k ƒ s¼t ‚ t
 j |	 | k ƒ s×t ‚ t
 j |
 | k ƒ sòt ‚ d  S(   NRš   R›   i   i   iûÿÿÿg      à?i    i   g      ð?gÍÌÌÌÌÌì?gš™™™™™ñ?g      ø?i   @(   R   R   R)   R   R[   t   dcolR   R=   R   R   R   R   R   R*   R+   R   (   R   R   Rš   R›   R:   R#   R3   Rž   R—   RB   RC   R4   R5   R˜   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_broadcast_argumentsÜ  s"    !!$-'-6c      	   C` sC  t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | ƒ } | j d k sW t ‚ t | | g | ƒ } d d d g } d d d	 g } t	 j
 j t j ƒ  ƒ } t	 j
 j t | j d ƒ ƒ ƒ }	 | | | ƒ }
 |	 j d | d | ƒ } t d |
 ƒ t d | ƒ t	 j |
 | k ƒ st ‚ | | d  | d  ƒ } |	 j d | d  d | d  ƒ } t d | ƒ t d | ƒ t	 j | | k ƒ s‹t ‚ t | | g | j d | d | d d ƒ ƒ } | | | ƒ } t	 j
 j t | j d ƒ ƒ ƒ }	 |	 j d | d | d d ƒ } t	 j | | k ƒ s!t ‚ |  j t | | d  | d  ƒ d  S(   NRš   R›   i   gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™ñ?gš™™™™™@gffffff
@i   i   t   THEANOt   NUMPYiÿÿÿÿR(   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#   t   low_valt   high_valR   Rž   R—   R4   RB   R5   R$   RC   R˜   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_uniform_vectorò  s4    ! -!c      	   C` s!  t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | ƒ } | j d k sW t ‚ t	 | | g | ƒ } d d d g } t
 j d d d g d	 t j ƒ} t
 j j t j ƒ  ƒ } t
 j j t | j d ƒ ƒ ƒ }	 | | | ƒ }
 |	 j d | d | ƒ } t
 j |
 | k ƒ st ‚ | | d  | d  ƒ } |	 j d | d  d | d  ƒ } t
 j | | k ƒ sit ‚ t	 | | g | j d | d | d d ƒ ƒ } | | | ƒ } t
 j j t | j d ƒ ƒ ƒ }	 |	 j d | d | d d ƒ } t
 j | | k ƒ sÿt ‚ |  j t | | d  | d  ƒ d  S(   NR“   t   pi   i   i   gš™™™™™¹?gš™™™™™É?g333333Ó?t   dtypei   iÿÿÿÿR(   i   @(   i   i   @(   i   (   R   R   R)   R   Rˆ   Rœ   t   binomialR=   R   R   R   RQ   R	   t   floatXR   R   R+   R*   R   R>   R?   (   R   R   R“   t   probR:   R#   t   n_valt   prob_valR   Rž   R—   R4   RB   R5   R$   RC   R˜   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_binomial_vector  s,    !! -!c      	   C` s  t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | ƒ } | j d k sW t ‚ t | | g | ƒ } d d d g } d d d g } t	 j
 j t j ƒ  ƒ } t	 j
 j t | j d ƒ ƒ ƒ }	 | | | ƒ }
 |	 j d
 | d | ƒ } t	 j |
 | ƒ st ‚ | | d  | d  ƒ } |	 j d
 | d  d | d  ƒ } t	 j | | ƒ sQt ‚ t | | g | j d | d | d d ƒ ƒ } | | | ƒ } t	 j
 j t | j d ƒ ƒ ƒ }	 |	 j d
 | d | d d ƒ } t	 j | | ƒ sät ‚ |  j t | | d  | d  ƒ d  S(   Nt   avgt   stdi   i   i   gš™™™™™¹?gš™™™™™É?g333333Ó?i   t   loct   scaleiÿÿÿÿR(   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#   t   avg_valt   std_valR   Rž   R—   R4   RB   R5   R$   RC   R˜   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_normal_vector4  s,    ! -!c      	   C` s–  t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | ƒ } | j d k sW t ‚ t | | g | ƒ } d d d g } d d d	 g } t	 j
 j t j ƒ  ƒ } t	 j
 j t | j d ƒ ƒ ƒ }	 | | | ƒ }
 t	 j g  t | | ƒ D]( \ } } |	 j d | d | d ƒ ^ qè ƒ } t	 j |
 | k ƒ s4t ‚ | | d  | d  ƒ } t	 j g  t | d  | d  ƒ D]( \ } } |	 j d | d | d ƒ ^ qiƒ } t	 j | | k ƒ sµt ‚ t | | g | j d | d | d d ƒ ƒ } | | | ƒ } t	 j
 j t | j d ƒ ƒ ƒ }	 t	 j g  t | | ƒ D]( \ } } |	 j d | d | d ƒ ^ q(ƒ } t	 j | | k ƒ stt ‚ |  j t | | d  | d  ƒ d  S(   NRš   R›   i   id   iÈ   i,  in   iÜ   iJ  i   i   iÿÿÿÿR(   i   i   @(   i   i   @(   R   R   R)   R   Rˆ   RH   R=   R   R   R   R   R   R+   R*   RQ   t   zipR   R>   R?   (   R   R   Rš   R›   R:   R#   R°   R±   R   Rž   R—   t   lvt   hvR4   RB   R5   R$   RC   R˜   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_random_integers_vectorS  s2    !	>	F-!	>c      	   C` s´  t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | ƒ } | j d k sW t ‚ t	 | | g | ƒ } d d d g } d d g d d	 g d
 d g g } t
 j | d t j ƒ} t
 j j t j ƒ  ƒ } t
 j j t | j d ƒ ƒ ƒ }	 | | | ƒ }
 t
 j g  t | | ƒ D]$ \ } } |	 j d | d | ƒ ^ qƒ } t
 j |
 | k ƒ sZt ‚ | | d  | d  ƒ } t
 j g  t | d  | d  ƒ D]$ \ } } |	 j d | d | ƒ ^ qƒ } t
 j | | k ƒ s×t ‚ t	 | | g | j d | d | d d ƒ ƒ } | | | ƒ } t
 j j t | j d ƒ ƒ ƒ }	 t
 j g  t | | ƒ D]$ \ } } |	 j d | d | ƒ ^ qJƒ } t
 j | | k ƒ s’t ‚ |  j t | | d  | d  ƒ d  S(   NR“   R”   i   i   i   gš™™™™™¹?gÍÌÌÌÌÌì?gš™™™™™É?gš™™™™™é?g333333Ó?gffffffæ?R´   i   iÿÿÿÿR(   i   @(   i   i   @(   R   R   R)   R   Rˆ   t   matrixRU   R=   R   R   R   RQ   R	   R¶   R   R   R+   R*   RÂ   R   R>   R?   (   R   R   R“   R”   R:   R#   R¸   t	   pvals_valR   Rž   R—   t   nvt   pvR4   RB   R5   R$   RC   R˜   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_multinomial_vectorx  s4    !!	:	B-!	:c      	   C` så   t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | d d d d ƒ } | j d k sc t ‚ t | | g | ƒ } | d d ƒ } | j d k sœ t ‚ | d	 d
 ƒ } | j d k sÀ t ‚ t	 j
 t | ƒ d k ƒ sá t ‚ d  S(   NRš   R›   R(   i   R´   t   int8i    i	   iÿ   i  i   (   i   (   R   R   R)   R   R‹   RH   R´   R   R   R   R   R   (   R   R   Rš   R›   R:   R#   R—   RB   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt
   test_dtype›  s    $c      	   C` s¨  t  t j ƒ  ƒ } t j ƒ  } t j ƒ  } | j d | d | d d ƒ } | j d k s] t ‚ t | | g | ƒ } | d d ƒ } | j d k s– t ‚ | j d | d | d d d d	 ƒ } | j d	 k sÏ t ‚ t | | g | ƒ } | d
 d ƒ }	 |	 j d	 k st ‚ t j	 ƒ  }
 t j	 ƒ  } | j d |
 d | d d ƒ } | j t
 j k sVt ‚ t |
 | g | ƒ } | t j d ƒ t j d ƒ ƒ } | j t
 j k s¤t ‚ d  S(   NRš   R›   R(   i*   t   float64gÍÌÌÌÌÌ ÀgÍÌÌÌÌÌ@R´   t   float32gš™™™™™ñ¿gš™™™™™ñ?gš™™™™™¹¿g333333Ó?(   i*   (   i*   (   i*   (   R   R   R)   R   t   dscalarR   R´   R   R   t   fscalarR	   R¶   R   RÎ   (   R   R   Rš   R›   t   out0t   f0R—   t   out1Rg   RB   t   lowft   highft   outft   fft   valf(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_default_dtypeª  s(    $!c         C` sô   t  j j d ƒ } t | ƒ } t | d t ƒ} t | d t ƒ} | j j d | k	 s^ t ‚ | j j d | k	 sz t ‚ | j j d | k s– t ‚ | j	 ƒ  } | j j d j	 ƒ  } | j j d j	 ƒ  } | | k oå | k n sð t ‚ d  S(   Ni{   R   i    (
   R   R   R   R   R   R   t	   containert   storageR   t   randn(   R   R   t   s_rng_defaultt
   s_rng_Truet   s_rng_FalseR‘   t   v0t   v1(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_shared_constructor_borrowÆ  s    c         C` s˜   t  j j d ƒ } t | ƒ } | j j d } | j d t ƒ } | j d t ƒ } | | k	 sd t	 ‚ | | k sv t	 ‚ | j
 ƒ  | j
 ƒ  k s” t	 ‚ d  S(   Ni{   i    R   (   R   R   R   R   RÚ   RÛ   R   R   R   R   t   rand(   R   R   t   s_rngt   r_t   r_Tt   r_F(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_get_value_borrowÙ  s    c         C` s¤   t  j j d ƒ } t | ƒ } | j j d } | j d t d t ƒ } | j d t d t ƒ } | | k	 sp t	 ‚ | | k s‚ t	 ‚ | j
 ƒ  | j
 ƒ  k s  t	 ‚ d  S(   Ni{   i    R   t   return_internal_type(   R   R   R   R   RÚ   RÛ   R   R   R   R   Rã   (   R   R   Rä   Rå   Ræ   Rç   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_get_value_internal_typeë  s    c         C` sÌ   t  j j d ƒ } t | ƒ } t  j j d ƒ } | j | d t ƒ| | j j d k	 s_ t ‚ | j	 ƒ  | j j d j	 ƒ  k s‡ t ‚ t  j j d ƒ } | j | d t
 ƒ| | j j d k sÈ t ‚ d  S(   Ni{   iú’ R   i    i!   (   R   R   R   R   t	   set_valueR   RÚ   RÛ   R   RÜ   R   (   R   R   Rä   t   new_rngt   rr(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_set_value_borrowÿ  s    (c         C` sL   t  d ƒ } t  d ƒ } | j | j k	 s0 t ‚ | j | j k	 sH t ‚ d S(   sˆ  
        Test that when we have multiple random number generators, we do not alias
        the state_updates member. `state_updates` can be useful when attempting to
        copy the (random) state between two similar theano graphs. The test is
        meant to detect a previous bug where state_updates was initialized as a
        class-attribute, instead of the __init__ function.
        iÒ  iX	  N(   R   t   state_updatesR   t   gen_seedgen(   R   t   rng1t   rng2(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_multiple_rng_aliasing  s    c         C` s¿   d d
 d „  ƒ  Y} | d d ƒ } t  g  | j ƒ } | d d ƒ } t  g  | j ƒ } xD t | j j | j j ƒ D]' \ } } | d j | d j ƒ  ƒ qq Wt j j	 | ƒ  | ƒ  d d ƒd	 S(   s]   
        Test that random state can be transferred from one theano graph to another.
        t   Graphc           B` s   e  Z d  d „ Z RS(   i{   c         S` s+   t  | ƒ |  _ |  j j d d ƒ |  _ d  S(   NR(   i   (   i   (   R   R   R   t   y(   R   R   (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   __init__#  s    (   t   __name__t
   __module__Rö   (    (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyRô   "  s   R   i{   iÛ  i    t   decimali   N(    (
   R   Rõ   RÂ   R   Rï   Rë   R   R   t   testingt   assert_array_almost_equal(   R   Rô   t   g1Rg   t   g2t   f2t   su1t   su2(    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   test_random_state_transfer  s    ((%   R÷   Rø   R   R&   R6   R7   R;   R<   RE   RF   RG   RI   RL   RO   RT   RV   Rl   R‡   RŠ   R   R’   R™   R«   R­   R²   Rº   RÁ   RÅ   RÊ   RÌ   RÙ   Râ   Rè   Rê   Rî   Ró   R  (    (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyR      sF   															8	0	
				2		#			%	#							t   __main__(   t   maint   test_shared_randomstreams(   t
   __future__R    R   R   t   __docformat__t   syst   unittestR   t   theano.tensorR   t"   theano.tensor.shared_randomstreamsR   t   theanoR   R   R   R   R	   R
   t   theano.testsR   R   t   TestCaseR   R÷   R  (    (    (    sM   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_shared_randomstreams.pyt   <module>   s"   ÿ ÿ ÿ "