
Xc           @` sT  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 d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l m Z d  d l j j Z d  d l m Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d	 l m Z d  d l Z d  d l Z d  d
 l m Z d  d l m  Z  d  d l! m" Z# d  d l$ Z d  d l% m& Z& d  d l' m( Z( d  d l) m* Z* e j+ j, d k re j- j, j. d  Z/ n e j- j, j0   Z/ e/ j1 d d  Z2 e j+ j, d d f k re j- j, j. d  Z3 n e/ Z3 e3 j1 d d  Z4 i d d 6d d 6Z5 d f  d     YZ6 d   Z7 d   Z8 d   Z9 d   Z: d    Z; d! e
 j< f d"     YZ= d# f  d$     YZ> d% e
 j< e> f d&     YZ? d' e
 j< e> f d(     YZ@ d)   ZA d*   ZB d+   ZC eD d, k reE d-  n  d.   ZF d/   ZG d0   ZH d1   ZI d2   ZJ d3   ZK d4   ZL d5 e
 j< f d6     YZM d S(7   i    (   t   absolute_importt   print_functiont   divisionN(   t   mkdtemp(   t   OrderedDict(   t   xrange(   t   SkipTest(   t   assert_raises(   t   raises(   t   dec(   t   tensor(   t   rebuild_collect_shared(   t   unittest_tools(   t   Scan(   t   PY3(   t   attrt   FAST_COMPILEt   FAST_RUNt   gput   scant
   DEBUG_MODEt	   DebugModegHz>t   float64g~jth?t   float32t   multiple_outputs_numeric_gradc           B` s8   e  Z d  Z d d d  Z e d d   Z d   Z RS(   t   WRITEMEc         C` sm  d   } t  } t | t t f  s6 | g } t } n  | sX g  | D] } t ^ qC } n  t d } xf t |  D]X \ }	 }
 | |	 ro t j |
  | |	 <t t	 | |	 j
  } | | k r | } q qo qo W| |  _ | |   } g  } xwt t |   D]c}	 | |	 r | r| } n | } | |	 j rg  } x t | | |	 j   D] } | |	 j   } | j   } | | c | 7<| j | |	 j  } | | |	  | g | |	 d   } | j t j | | |   qKW| j t j |  j | |	 j   q\t j | |	 |  } | | |	  | g | |	 d   } | j t j | | |   q q W| |  _ d S(   sL  Return the gradient of f at pt.

        This function computes the gradient by a one-sided finite differences
        of a fixed step size (eps).

        It is assumed that f(...) will return a scalar.
        :param eps: the stepsize for the finite differencing. None means
        input dtype-dependent. See `type_eps`.
        c         S` s%   d } x |  D] } | | 9} q W| S(   Ni   (    (   t   inputst   rvalt   i(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   prodH   s    R   i   N(   t   Falset
   isinstancet   listt   tuplet   Truet   type_epst	   enumeratet   numpyt   arrayt   strt   dtypet   ndarray_maskR   t   lent   ndimt   shapet   copyt   flattent   reshapet   appendt   asarrayt   gx(   t   selft   ft   ptR)   t   epsR   t	   packed_ptt   xt	   dtype_epsR   t   pt   _epst   f_xR2   t   _gt   post   tt   f_eps(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   __init__=   sH    			

	
	 #")#%g|=c         C` s&   t  |  |  t  |   t  |  | S(   sR   Return a small number when a and b are close, relative to how big
        they are(   t   abs(   t   at   bR6   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   abs_rel_err   s    c         C` s  g  } xs t  t |   D]_ } |  j | r@ | j | |  q t | | t j  r t j | | d k  sx t  q q Wt |  t |  j	  k r t
 d t |    n  g  } x t t | |  j	   D] \ } \ } } | j | j k rt
 d | t | j | j f  f   n  t j | |  } | j t j t j | |    q Wt j t j |   rt j |  t j |  f St j d f Sd S(   s:   Return the biggest relative error between g_pt and self.gxi    s%   argument has wrong number of elementss&   argument element %i has wrong shape %sN(   R   R*   R)   R0   R   R%   t   ndarrayt   allt   AssertionErrorR2   t
   ValueErrorR$   t   zipR,   R'   R   RE   t   maxt   isfinitet   argmaxt   inf(   R3   t   _g_ptt   g_ptR   t   errsRC   RD   t   vv(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   max_err   s(    &+%N(   t   __name__t
   __module__t   __doc__t   NoneRA   t   staticmethodRE   RS   (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   ;   s
   Bc       	   O` s   t  j j j d  } t  j |  |   \ } } t |  t t g k rQ | g } n  t | _	 g  | D]' } | j
 d | j d d d d  ^ qa } t g  t | |  D] \ } } | | j   ^ q  | f S(   Ni{   t   sizet   lowg?t   highg?(   t   theanoR
   t   shared_randomstreamst   RandomStreamsR   t   typeR    R!   R   t   add_default_updatest   uniformR,   t   sumRJ   (   t   argst   kwargst   rngt   scan_outputst   updatest   st   factorsR4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   scan_project_sum   s    	15c         C` s   t  j |  d t  j j S(   NR(   (   R\   t   _asarrayt   configt   floatX(   t   value(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   asarrayX   s    c         C` s   g  |  j  j j D]$ } t | t j j j  s | ^ q } t |  j  j j	 | d t
 \ } } } g  | D]$ } t | t j j j  sh | ^ qh } | | f S(   Nt   copy_inputs_over(   t   makert   fgraphR   R   R\   R
   t	   sharedvart   SharedVariableR   t   outputsR   (   R4   R8   t	   maker_inst   inpst   outst   _t   ins(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   clone_optimized_graph   s    $$c         C` s   |  j  d  k r d  S|  j  j j j d k r5 |  j  g Sg  } x9 |  j  j D]+ } t |  } | d  k	 rH | | 7} qH qH W| g  k r d  S| Sd  S(   NR   (   t   ownerRW   t   opt	   __class__RT   R   t   grab_scan_node(   t   outputR   R   t   ri(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR      s    
c         C` sA   |  j  j j   } g  | D] } t | j t  r | ^ q } | S(   N(   Rq   Rr   t   toposortR   R}   R   (   t   fctt   nodest   nt
   scan_nodes(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   scan_nodes_from_fct   s    +t   T_Scanc           B` sW  e  Z d    Z e j e e j j j	   e j j
 j  d  d    Z d   Z d   Z d   Z e d  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. e d  d%    Z/ e d  d&    Z0 d'   Z1 d(   Z2 d)   Z3 d*   Z4 d+   Z5 d,   Z6 d-   Z7 d.   Z8 d/   Z9 d0   Z: d1   Z; d2   Z< d3   Z= d4   Z> d5   Z? d6   Z@ d7   ZA d8   ZB d9   ZC d:   ZD d;   ZE d<   ZF d=   ZG d>   ZH d?   ZI d@   ZJ dA   ZK dB   ZL dC   ZM dD   ZN dE   ZO dF   ZP e jQ jR dG dH  dI    ZS e jQ jR dG dH  dJ    ZT dK   ZU dL   ZV dM   ZW dN   ZX dO   ZY dP   ZZ e d  dQ    Z[ dR   Z\ dS   Z] dT   Z^ dU   Z_ dV   Z` dW   Za dX   Zb dY   Zc dZ   Zd d[   Ze d\   Zf e j eg d]  d^    Zh d_   Zi d`   Zj da   Zk db   Zl dc   Zm dd   Zn de   Zo df   Zp dg   Zq dh   Zr di   Zs dj   Zt dk   Zu dl   Zv dm   Zw dn   Zx do   Zy dp   Zz dq   Z{ dr   Z| ds   Z} dt   Z~ du   Z dv   Z dw   Z dx   Z dy   Z dz   Z d{   Z d|   Z d}   Z d~   Z d   Z d   Z d   Z d   Z e d  d    Z d   Z e e j j j  d    Z d   Z RS(   c         C` s!   t  j   t t |   j   d  S(   N(   t   uttt   seed_rngt   superR   t   setUp(   R3   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR      s    
s>   This test fails in DebugMode, because it is not yet picklable.c         C` s  d   } t  j j d  } t  j j d  } t  j | g  | g  d | d d d t \ } } t  j | | g | d | d	 t } t j	   } d  } zo t   } t j |  t d
 d   }	 t j | |	 d d Wd  QXt d
 d   }
 t j |
  } Wd  QXWd  t j |  | d  k	 r.t j |  n  Xt j j t j    } | j   } d } t j g  t |  D] } | d | d ^ ql } | | |  } t j | |  d  S(   Nc         S` s   d |  S(   Ni   (    (   t   x_tm1(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   f_pow2   s    t   statet   nstepst   n_stepst   truncate_gradientit   go_backwardsRg   t   allow_input_downcasts   tmp_scan_test_pickle.pklt   wbt   protocolt   rbi   i   i   (   R\   R
   t   scalart   iscalarR   R   t   functionR"   t   ost   getcwdRW   R   t   chdirt   opent   picklet   dumpt   loadt   shutilt   rmtreeR%   t   randomt   RandomStateR   t
   fetch_seedRa   R&   R   t   assert_allclose(   R3   R   R   R   R   Rg   t   _my_ft   origdirt   tmpdirt   f_outt   f_int   my_fRe   t   stepst   kt   numpy_valuest   theano_values(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pickling   sB    					+c         C` s  d   } t  j j d  } t  j j d  } t  j | g  | g  d | \ } } t  j | | g | d | d t } g  | j j j	   D] } t
 | j t  r | ^ q } t |  d k s t  | d } t d	   | j j j D  s t  t d
   | j j j D  st  t j j t j    }	 |	 j   } d }
 | | |
  t d   | j j j D  stt  t d   | j j j D  st  d  S(   Nc         S` s   d |  S(   Ni   (    (   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   R   R   Rg   R   i   i    c         s` s   |  ] } | j  d  k Vq d  S(   N(   Rn   RW   (   t   .0R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pys	   <genexpr>,  s    c         s` s   |  ] } | j  d  k Vq d  S(   N(   Rn   RW   (   R   t   o(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pys	   <genexpr>-  s    i   c         s` s   |  ] } | j  d  k Vq d  S(   N(   Rn   RW   (   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pys	   <genexpr>6  s    c         s` s   |  ] } | j  d  k Vq d  S(   N(   Rn   RW   (   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pys	   <genexpr>7  s    (   R\   R
   R   R   R   R   R"   Rq   Rr   R   R   R}   R   R*   RH   RG   t   fnt   input_storaget   output_storageR%   R   R   R   R   Ra   (   R3   R   R   R   R   Rg   R4   t   nodet	   scan_nodeRe   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_inner_storage_leak  s0    			
%%%c         C` s  d   } t  j j d  } t  j j d  } t  j | g  | g  d | d d d t d t \ } } t  j | | g | d	 | d
 t } t j	 j
 t j    } | j   } d } t j g  t |  D] }	 | d |	 d ^ q  }
 | | |  } t j |
 | d  d  S(   Nc         S` s   d |  S(   Ni   (    (   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   <  s    R   R   R   R   it   return_listR   Rg   R   i   i   i   i    (   R\   R
   R   R   R   R"   R   R   R%   R   R   R   R   Ra   R&   R   R   (   R3   R   R   R   R   Rg   R   Re   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt    test_generator_one_output_scalar;  s,    				+c         C` sh  d   } t  j j d  } t  j j d  } t  j | g  | g  d | d d d t \ } } t j d  } t  j | | | g t j | | d	 d
 d  | d  g d | d t	 } g  | j
 j j   D]' } t | j t  j j j  r | ^ q }	 t  j j d k r|	 d j j st  n  t j j t j    }
 | |
 j d d  d t j d d d
 g   d  S(   Nc         S` s   d |  S(   Ni   (    (   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   ]  s    R   R   R   R   iR   t   nw_shapeR+   i   iiRg   R   R   i    RY   i   i   (   i   (   R\   R
   t   vectorR   R   R   t   ivectorR   R/   R"   Rq   Rr   R   R   R}   t   scan_modulet   scan_opR   Rl   t   modet   _scan_savemem_visitedRH   R%   R   R   R   R   Ra   t   int64(   R3   R   R   R   R   Rg   R   R   R8   R   Re   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_subtensor_multiple_slicesX  s0    			't   slowc         C` s  d } t  j   } t j d   d | g d | \ } } | j   } t  j | |  } t j | g | | g  } t j d d g d d g g d t j	 j
 } t j | d  | d	 d
 }	 t j | j d d | }
 | |  \ } } t j | |	  t j | |
  d  S(   Ni   c         S` s   |  S(   N(    (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   <lambda>  s    t   non_sequencesR   i   i   i   R(   t   axisi    t   int8(   R
   t   matrixR\   R   Rb   t   gradR   R%   R&   Rl   Rm   t   repeatRW   t   onesR,   R   R   (   R3   R   t   inpt   broadcasted_inpRy   t   outt   grt   funR   t   expected_out1t   expected_out2t   out1t   out2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_only_nonseq_inputsz  s    	-c         C` s  d   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j | | | | | g d d  d d d	 t \ } } t  j | | | | g | d
 | d t } t	 j
 j t j    }	 |	 j d d d d d d  }
 |	 j   } |	 j   } |	 j   } t	 j d  } |
 d | | | | d <x9 t d d  D]( } |
 | | | | d | | | <qDW| |
 | | |  } t j | |  d  S(   Nc         S` s   |  | | | S(   N(    (   t   u_tR   t   W_int   W(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   f_rnn  s    t   ut   x0t   wint   wR   R   iR   Rg   R   RY   i   RZ   g      R[   g      @i    i   (   i   (   i   (   R\   R
   R   R   R   RW   R   R   R"   R%   R   R   R   R   Ra   t   zerosR   R   (   R3   R   R   R   R   R   R   Rg   t   f2Re   t   v_ut   v_x0t   v_outt   stepR   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt$   test_one_sequence_one_output_weights  s6    			&c         C` s  t  j j t j    } t j j d  } t j j d  } t j	 t
 | j    d d } t j	 t
 | j    d d } d   } t j | | | | | g d d  d d	 d
 t \ } } t j | | g | d | d t }	 | j d d d d d d  }
 | j   } t  j d  } |
 d | j   | | j   | d <xE t d d  D]4 } |
 | | j   | | d | j   | | <qPW|	 |
 |  } t  j | |  st  d  S(   NR   R   t   namet   w_inR   c         S` s   |  | | | S(   N(    (   R   R   t   tmp_W_int   tmp_W(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   f_rnn_shared  s    R   R   iR   Rg   R   RY   i   RZ   g      R[   g      @i    i   (   i   (   i   (   R%   R   R   R   R   R\   R
   R   R   t   sharedRo   Ra   R   RW   R   R   R"   R   t	   get_valueR   t   allcloseRH   (   R3   Re   R   R   R   R   R   R   Rg   t   f3R   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt+   test_one_sequence_one_output_weights_shared  s4    !!			&!c         ` sw  t  j j t j    } t | j d d d d d d   } t | j d d d d d d   } t | j d d d d d d   } t | j d d d d d d   } t | j d d d d d d   } t | j d d  d d d d   } t | j d d! d d d d   } t | j    }	 t j | d d	  t j | d d
   t j | d d  t j	 j
 d  }
 t j	 j
 d  } t j	 j d  } t j	 j d  } t j	 j d  }     f d   } t j | | | g | | g |
 d d  d d d t \ } } t j | | | | |
 g | d | d t } t  j d" d t j j } t  j d# d t j j } t  j | d |  | d | t  j | |  | d <t  j | |  | d <xs t d d  D]b } t  j | | |  | | | t  j | | d |  | | <t  j | | d |  | | <qW| | | | |	 |  \ } } t j | |  t j | |  d  S($   NRY   i   RZ   g      R[   g      @i   R   t   win2R   t   woutR   t   u1t   u2R   t   y0c         ` s:   t  j |  |  |  t  j |    t  j |   g S(   N(   R\   t   dot(   t   u1_tt   u2_tR   t   y_tm1t   W_in1(   R   t   W_in2t   W_out(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt
   f_rnn_cmpl  s    R   R   iR   Rg   R   R(   i    i   (   i   (   i   i   (   i   (   i   i   (   i   i   (   i   (   i   (   i   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R   R   RW   R   R   R"   R   Rl   Rm   R   R   R   (   R3   Re   t   vW_in2t   vWt   vWoutt   vW_in1t   v_u1t   v_u2R   t   v_y0R   R   R   R   R   R   Ru   Rg   t   f4t   v_xt   v_yR   t   theano_xt   theano_y(    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt%   test_multiple_inputs_multiple_outputs  sR    $$$$$$$				"c         ` s  d } t  j j t j    } t | j d d! d d d d   } t | j d d" d d d d   } t | j d d# d d d d   } t | j d d$ d d d d   } t | j d | d f d d d d   } t | j d | d d f d d d d   } t | j d d% d d d d   }	 t | j d d&   }
 t j | d	 d
  t j | d	 d   t j | d	 d  t j	 j
 d  } t j	 j
 d  } t j	 j
 d  } t j	 j d  } t j	 j d  }     f d   } t j | | t d | d d d d g  g | t d | d d d g  d  g | d d  d d d t \ } } t j | | | | | g | d | d t } | | | |	 |
 |  } t  j d'  } t  j d(  } t  j d)  } t  j | d |  | d | d | d | t  j |	 |  | d <|
 d |
 d t  j |	 |  | d <t  j | d |  | d <t  j | d |  | d | d | d | t  j | d |  | d <| d |
 d t  j | d |  | d <t  j | d |  | d <t  j | d |  | d | d | d | t  j | d |  | d <| d |
 d t  j | d |  | d <t  j | d |  | d <t  j | d |  | d | d | d | t  j | d |  | d <| d | d t  j | d |  | d <t  j | d |  | d <t  j | d |  | d | d | d  | t  j | d |  | d <| d | d t  j | d |  | d <t  j | d |  | d <d  S(*   Ni   RY   i   RZ   gɿR[   g?i   R   R   R   R   R   R   R   R   R   c         ` sY   t  j |  |  | | |  t  j |    | | t  j |   t  j |  |  g S(   N(   R\   R   (   R   t   u2_tm1R   t   u2_tp1R   R   t   y_tm3R   (   R   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   %  s    	t   inputt   tapsii    i   t   initialiR   R   R   Rg   R   i   i   (   i   (   i   i   (   i   (   i   i   (   i   (   i   (   i   i   (   i   (   i   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R   t   dictRW   R   R   R"   R   R   (   R3   t   lRe   R   R   R  R  R  R  R   R  R   R   R   R   R   R   Ru   Rg   R4   t
   theano_outt   ny0t   ny1t   ny2(    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_multiple_outs_taps  sr    $$$$*.$	!		F&J*/*/*/*c         C` s   t  j j   } t  j d   d t d | d d g  d d  g \ } } t j d  j d  } t  j	 | g | d	 | |  } t j
 | | d  k  s t  d  S(
   Nc         S` s   |  g S(   N(    (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   m  s    t	   sequencesR  R  it   outputs_infoi   R   Rg   (   R\   R
   t   dvectorR   R  RW   R%   t   aranget   astypeR   RG   RH   (   R3   R8   t   yRg   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_using_taps_sequencei  s    !c      	   C` s   d   } t  j d  } t j | d t d | d d d g  \ } } t j | g | d | } | d	 d
 d d d g  } t j d	 d
 d g d d } t j	 | |  d  S(   Nc         S` s   |  S(   N(    (   R8   t   x2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   lpw  s    R8   R  R  R  iiRg   i   i   i   i   i   R(   R   (
   R
   t   fvectorR\   R   R  R   R%   R&   R   R   (   R3   R!  R8   t   rest   updR4   R   t   expected_output(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt!   test_using_negative_taps_sequencet  s    	$c   
      C` s3  d   } t  j t j d   } t  j t j d   } t  j | d i | d 6d d g d 6i | d 6d d g d 6g d d \ \ } } } t j | d |  | j j d	 j } | j	 j
 d
 } i d d	 6d d 6}	 | |	 k s t  | j	 j
 d } i d d	 6d d 6d d 6d d 6}	 | |	 k s/t  d S(   s   Test connection_pattern() in the presence of recurrent outputs
        with multiple taps.

        This test refers to a bug signaled on the theano-users mailing list
        on March 10 2015 by David Schneider-Joseph.
        c         S` s
   | | f S(   N(    (   t   a_m2t   a_m1t   b_m2t   b_m1(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    i   R  R  iiR  R   i    t   outer_inp_from_outer_outi   t   outer_inp_from_inner_inpi   N(   R\   R   R%   R  R   R
   R   R|   R   R}   t   var_mappingsRH   (
   R3   R   t   a0t   b0RC   RD   Ry   R   t   resultt   expected_result(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_connection_pattern  s    	"c         C` s4  t  j   } t  j   } d   } t j | d | d i | d 6d d g d 6\ } } t j | j   | | g  } | d j j d	 j j d	 j j d j } | j	 j
 |  } | j j d j } | j	 j d
 }	 i d d 6}
 |	 |
 k s t  | j	 j d }	 i d	 d 6d d	 6d d 6}
 |	 |
 k s0t  d  S(   Nc         S` s   | d | |  } | S(   Ni   (    (   t   seqt	   state_oldt   state_currentt
   state_next(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt	   inner_fct  s    R  R  R  iiR  i    i   R+  i   R,  (   R
   R   R   R\   R   R   Rb   R|   R   R}   t   connection_patternR-  RH   (   R3   R8   R3  R7  R   Ry   t   g_outR   R8  R0  R1  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_connection_pattern2  s    	#+c   
      C` s   d   } t  j   t  j   g } t d | d d d d g  | d g } t j d | d	 | d
 d  \ } } t j | d j   | d  t j | d j   | d  g } t g  | D] } | j   ^ q  } t j | | d  }	 d  S(   Nc         S` s"   |  | | } | d } | | f S(   Ng?(    (   t	   mitsot_m2t	   mitsot_m1t   sitsott   totalR   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR7    s    
R  i    R  iii   R   R  R   i   (   R
   R   R   R  R\   R   R   Rb   (
   R3   R7  R   R  Rf   Rg   t	   gradientst   gt   sum_of_gradst   second_gradients(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_grad_mitsot_sitsot  s    	)#%c         C` sM   d   } t  j j } t j j d  j |  g } t  j j j | |  d  S(   Nc         S` sF   t  j d d   d |  g d d  \ } } t  j | j   |   j   S(   NR   c         S` s   |  d S(   Ni   (    (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   i   (   R\   R   R   Rb   (   R   Rf   Rg   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   get_sum_of_grad  s    	i   (	   R\   Rl   Rm   R%   R   R  t   testsR   t   verify_grad(   R3   RD  Rm   t   inputs_test_values(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_verify_second_grad_sitsot  s
    	c         ` st   d       f d   } t  j j } t j j d  j |  t j j d  j |  g } t  j j j | |  d  S(   Nc         S` s   |  | } | d } | | f S(   NgRQ?(    (   R;  R=  R>  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR7    s    

c         ` s   t  d |  d d g  | g } t j d   d | d d  \ } } t j | d j   |   t j | d	 j   |  g } | d j   | d	 j   S(
   NR  R  iR   R  R   i   i    i   (   R  R\   R   R   Rb   (   t   input0t   input1R  Rf   Rg   R?  (   R7  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRD    s    i   i   (   i   i   (	   R\   Rl   Rm   R%   R   R  RE  R   RF  (   R3   RD  Rm   RG  (    (   R7  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_verify_second_grad_mitsot1  s    	c   	      ` s   t  j d  } t  j d  } t j t j j d d  j d  d d d t	     f d   } t j
 d	 | d
 | d d  g  \ } } d   } t j
 d	 | d
 | | g d d  g  \ } } t  j |  } t  j |   g  } d  S(   NR8   R?   i   R   R   R   t   borrowc         ` s(   t  j |     } t  j j |  } | S(   N(   R
   R   t   nnett   softmax_graph(   t   x_tt   a2_tt   y_t(   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   forward_scanner  s    R   R  R  c         S` s   t  j t  j j |  |   S(   N(   R
   t   meanRM  t   categorical_crossentropy(   RQ  t   t_t(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   error_scanner  s    (   R
   t   tensor3t   imatrixR\   R   R%   R   t   randnR  R"   R   RW   RS  R   (	   R3   R8   R?   RR  R  Ry   RV  t   Lt   gW(    (   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_two_scans  s    	c         ` s  t  j j t j    } t | j    } t | j    } t | j d d d d d d   } t | j d d d d d d   } t j j	 d  } t j j	 d	  } t j
 | d
 d  t j
 | d
 d      f d   } t j | t d | d d  t d | d d d g  g  d d  d d d t \ }	 }
 t j | | g |	 d |
 d t } | | |  } t  j d  } | d | | d | | d | d <| d | | d | | d | d <t j | |  d  S(   NRY   i   RZ   g      R[   g      @i   R   R   R   R   R   c         ` s   |   |   | S(   N(    (   t   u_tm2R   t   x_tm2(   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   5  s    R  R  iR  iR   R   R   Rg   R   i    i   (   i   (   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R
   R   R   R   R  RW   R   R   R"   R   R   (   R3   Re   R   t   vW_int   vut   vx0R   R   R   Ru   Rg   t   f7R  t	   numpy_out(    (   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_using_taps_input_output)  s4    $$		
&&c         ` s  t  j j t j    } t | j    } t | j    } t | j d d d d d d   } t | j d d d d d d   } t j j	 d  } t j j	 d	  } t j
 | d
 d  t j
 | d
 d      f d   } t j | t d | d d d g  t d | d d d g  g  d d  d d d t \ }	 }
 t j | | g |	 d |
 d t } | | |  } t  j d  } | d | d | | d | | d | d <| d | d | | d | | d | d <t j | |  d  S(   NRY   i   RZ   g      R[   g      @i   R   R   R   R   R   c         ` s   |  |  |   | S(   N(    (   R]  t   u_tp2R   R^  (   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   b  s    R  R  iR  iR   R   R   Rg   R   i    i   i   i   (   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R
   R   R   R   R  RW   R   R   R"   R   R   (   R3   Re   R   R_  R`  Ra  R   R   R   R   Rg   t   f8R  Rc  (    (   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_past_future_taps_sharedV  s4    $$		..c         ` s  t  j j t j    } t t  j j    } t t  j j    } t | j d d d d d d   } t | j d d d d d d   } t | j d d d d d d   } t | j    } t | j    } t j j	 d  }	 t j j	 d  }
 t j j	 d	  } t j
 |	 d
 t } t j
 |
 d
 t } t j
 | d
 t } t j j d  } t j j d  } t j | d   t j | d    t j j j d   j d  }    f d   } t j | |	 |
 | g t d | d |  t d | d |
  g g  d d  d d d t d | \ } } t j | | | | | g | d | d | d t } g  | j j j   D]' } t | j t j j j  rh| ^ qh} d | d j j j    k st!  d | d j j j    k st!  t  j" d  } t  j" d  } | d | | | | d | d | d <| d | | | | d | d | d <x{ t# d d  D]j } | | | | | d | | | | | | | <| | | | | d | | | | | | | <q[W| | | | | |  \ } } t j$ | |  t j$ | |  d  S(    NRY   i   RZ   g      R[   g      @t   u0R   R   t   mutableR   R   t   WinR   t   inplacec         ` s2   |   |   | | |   |   | | g S(   N(    (   t   u0_tR   R   t   x0_tm1t   x1_tm1(   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   R   iR   R   Rg   R   i    i   (   i   (   i   (   i   (   i   (   i   (%   R%   R   R   R   R   Ro   Ra   R\   R
   R   t   InR   R"   R   R   t   compileR   t   get_modeRW   t	   includingR   R  R   Rq   Rr   R   R   R}   R   R   R   t   destroy_mapt   keysRH   R   R   R   (   R3   Re   R   R_  t   vu0t   vu1t   vu2Ra  t   vx1Rh  R   R   t   mu0t   mu1t   mu2R   t   x1R   R   Ru   Rg   t   f9R8   R   t   numpy_x0t   numpy_x1R   t	   theano_x0t	   theano_x1(    (   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_inplace1{  sb    $$$		'""**6c         ` sI  t  j j t j    } t t  j j    } t t  j j    } t | j d d  d d d d   } t | j d d! d d d d   } t | j d d" d d d d   } t | j    } t | j    } t j j	 d	  }	 t j j	 d
  }
 t j j	 d  } t j
 |	 d t } t j
 |
 d t } t j
 | d t } t j j d  } t j j d  } t j | d   t j | d    t j j j d   j d  }    f d   } t j | |	 t d |
 d d d g  t d | d d d d 
g  g t d |  t d |  g g  d d  d d d t d | \ } } t j | | | | | g | d | d | d t } g  | j j j   D]' } t | j t j j j  r| ^ q} d | d j j j    k st!  d | d j j j    k st!  t  j" d#  } t  j" d$  } | d | | | | d | d | d <| d | | | | d | d | d | d <x t# d d  D]~ } | | | | | d | | | | | d | | <| | | | | d | | | | | d | | d | | <qW| | | | | |  \ } } t j$ | |  t j$ | |  d  S(%   NRY   i   RZ   g      R[   g      @i   i   Rh  R   R   Ri  R   R   Rj  R   Rk  c         ` s6   |   |   | | |   |   | | | g S(   N(    (   Rl  R   t   u1_tp1R  R   R  Rm  Rn  (   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  i    i   iR  R   R   R   R   Rg   R   i   (   i   (   i   (   i   (   i   (   i   (%   R%   R   R   R   R   Ro   Ra   R\   R
   R   Ro  R"   R   R   Rp  R   Rq  RW   Rr  R   R  R   R   Rq   Rr   R   R   R}   R   R   R   Rs  Rt  RH   R   R   R   (   R3   Re   R   R_  Ru  Rv  Rw  Ra  Rx  Rh  R   R   Ry  Rz  R{  R   R|  R   R   Ru   Rg   R}  R8   R   R~  R  R   R  R  (    (   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_inplace2  sd    $$$		'""*2Fc         C` s  t  j j t j    } t | j    } t | j    } t j |  } t j |  } t j	 d   g  | | g d d \ } } t t  j
 d
   } | | d <t j j |  } | d j j d j j d } t j | d | | f g } t j j j d   j d  }	 t j g  | d | d	 |	 }
 g  |
 j j j   D]' } t | j t j j j  r@| ^ q@} d | d j j j   k st   d | d j j j   k st   d  S(   Nc         S` s   |  t  d  | t  d  f S(   Ni   (   Ro   (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   	  s   R   i   i    i   t   replaceRk  Rg   R   (   i   (!   R%   R   R   R   R   Ro   Ra   R\   R   R   R   R
   t   constantR|   R   t   cloneRp  R   Rq  RW   Rr  R   Rq   Rr   R   R   R}   R   R   R   Rs  Rt  RH   (   R3   Re   Ra  Rx  R   R|  Ru   Rg   t
   to_replaceR   R}  R8   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_inplace3  s0    
		'"c         ` s  t  j j t j    } t | j d d   } t | j d d   } t | j d d   } t | j d d   } t | j d d   } t | j d   } t | j d   } t | j d d   } t j | d    t j | d   t j | d  }	 t j | d  }
    f d   } t j	 j
 d  } t j	 j
 d	  } t j | |	 | g t d
 | d d d d g  |
 d  g g  d d  d t d d \ } } t j | | g | d | d t } | | |  } | \ } } } t  j d  } t  j d  } t  j d  } | | d *| | d <| j   } | j   } x t d  D] } t  j t  j | | d  d   f |  |  d | | d d | | d d | | | | d <t  j | | d  d   f |  | | | | d <t  j | | d  d   f |  | | <| d } | d } qOWt j | | d  t j | | d  t j | |  t j   j   |  t j  j   |  d  S(   Ni   i   t   W1t   W2R   t   y1c         ` s   t  j t  j |       d | d | d | } t  j |   | } t  j |     }   d }	  d }
 | | | g   |	 f  |
 f g f S(   Ng?gQ?g(\?g?(   R\   R   (   R   R   t   y0_tm3t   y0_tm2t   y0_tm1t   y1_tm1t   y0_tt   y1_tt   y2_tt   nwW1t   nwW2(   R  R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR4   M  s    6

R   R   R  R  iiiR   R   R   Rg   R   i   i   i    g?gQ?i   g(\?g?(   i   i   (   i   i   (   i   i   (   R%   R   R   R   R   Ro   t   randR\   R   R
   R   R   R  RW   R   R   R"   R   R-   R   R   R   R   (   R3   Re   t   vW1t   vW2Rv  Rw  t   vy0t   vy1t   vy2R   R  R4   R   R   Ru   Rg   t   f10t   allstufft	   theano_y0t	   theano_y1t	   theano_y2t   numpy_y0t   numpy_y1t   numpy_y2t   numpy_W1t   numpy_W2t   idx(    (   R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt"   test_shared_arguments_with_updates  sf    
			

K&
c   
   
   C` s   t  j d  } t  j d  } t  j d  } d   } t j | d | | | g d d d d	 d
 t \ } } t  j | d j   | | g  \ } } t j | | | g | | g d t	 }	 |	 t
 j d  t
 j d  t
 j d   d  S(   NR8   R  t   cc         S` st   t  j t  j |  | |  d  } t  j |  t  j j | |  |  } t  j |  | t  j j |   } | | | f S(   Nt   int32(   R
   t   castt   switchRM  t   sigmoid(   t   condR8   R  t   new_condt   new_xt   new_y(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   inner_fn  s    !%!R  R   i
   R   iR   i   R   i    g      ?g      ?(   R
   t   fscalarR   R\   R   R   R   Rb   R   R"   R%   R  R   (
   R3   R8   R  R  R  t   valuesRy   t   gXt   gYR4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_dtype_change  s    	(	c         ` s   t  j j j t j      t  j   f d   g  g  g  d d d d d t \ } } t  j g  | d | d t	 } |   } |   } d  S(	   Nc           ` s     j  d d d  S(   Ni   ii   (   i   (   Ra   (    (   t
   theano_rng(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   i   R   iR   Rg   R   (
   R\   t   sandboxt   rng_mrgt   MRG_RandomStreamsR   R   R   R   R   R"   (   R3   R  Rg   R   t   theano_v(    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_simple_shared_mrg_random  s    			c   	      ` sO  t  j j j t j      t  j   f d   g  g  g  d d d d d t \ } } t  j g  | d | d t	 } t
 j j t j    j d  } t
 j j t |   } t
 j d  } x0 t d  D]" } | j d d d d | | <q W|   } t j | | d  d  d  d   f  |   } t j | | d d   d  d   f  d  S(   Nc           ` s     j  d d d  S(   Ni   ii   (   i   (   Ra   (    (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   i   R   iR   Rg   R   i   i   i
   i   RY   i   @(   i
   i   (   i   (   R\   R
   R]   R^   R   R   R   R   R   R"   R%   R   R   t   randintt   intR   R   Ra   R   (	   R3   R  Rg   R   t   rng_seedRe   t   numpy_vR   R  (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_simple_shared_random  s,    		! 	&	c         ` s(  t  j j t j    } t  j | j d d  d d d  t  j | j d d d d d d } t  j | j d  d d d  t  j | j d  d d d  t j	  d	    t j	  d
   t j	  d   t j
 j d d  } t j
 j j t j          f d   } t j | g  | g  d d d d d t \ } } t j | g | d d | d t } t  j j t j    } | j d  }	 t  j j t |	    | j d  }	 t  j j t |	         f d   }
 | |  } |
 |  } t j | |  d  S(   Ni   i   g      ?R(   R   i   RY   i   R   t   vbhidt   vbvisc         ` s   t  j j j t  j |       } t  j j  j | j d |  d d } t  j j j t  j |   j    } t  j j  j | j d |  d d S(   Ni   R(   R   (	   R\   R
   RM  R  R   R  t   binomialR,   t   T(   t   vsample_tm1t   hmean_tt	   hsample_tt   vmean_t(   R   t   bhidt   bvist   trng(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR4     s    			R   i
   R   iR   Rg   R   i   c         ` s   x t  d  D] } d d t j t j |      } t j   j d | d | j d d } d d t j t j |  j    } t j  j d | d | j d d }  q W|  S(   Ni
   g      ?i   RY   R(   R   (   t   rangeR%   t   expR   R&   R  R,   R  (   t   vsampleR  t   hmeant   hsamplet   vmean(   t   nrng1t   nrng2t   v_Wt   v_bhidt   v_bvis(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   numpy_implementation  s    	(   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   (   R3   Re   t	   v_vsampleR  R4   t   theano_vsamplesRg   R   t   _rngR  R  t   t_resultt   n_result(    (	   R   R  R  R  R  R  R  R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_gibbs_chain  s@    %	""		c   	      ` s   t  j j t j    } t | j    } t j | d      f d   } t j	 j
 d  } t j | g  g  g  d | d d d t \ } } t j | g | d | d	 t } d
 } | |  | d | } t j   j   |  d  S(   Nt   vstatec           ` s   t    d   f g  S(   Ni   (   R   (    (   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   f_2  s    t   nstepR   R   iR   Rg   R   i   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R   R   R"   R   R   (	   R3   Re   t   v_stateR  R   R   Rg   t   this_ft   numpy_state(    (   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt#   test_only_shared_no_input_no_output  s(    		
c   
      C` s   d   } t  j j d  } t  j | | g  g  d d  d d d t \ } } t  j | g | d | d t } t j	 j
 t j    } | j d	 d d d d d  } | d } | |  }	 t j |	 |  d  S(   Nc         S` s   |  d S(   Ni   (    (   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   %  s    R   R   R   iR   Rg   R   RY   i   RZ   g      R[   g      @i   (   i   (   R\   R
   R   R   RW   R   R   R"   R%   R   R   R   R   Ra   R   (
   R3   R   R   Ru   Rg   R   Re   R   t   numpy_resultt   theano_result(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_map_functionality$  s$    			
c   	      C` s   t  j j d  } t  j d   | g  d d d t \ } } t  j | g | d | d t } t j j	 t
 j    } | j d d d
 d d d  } t |  } | |  } t
 j | |  d  S(   Nt   vc         S` s
   t  |   S(   N(   RB   (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   @  s    R   iR   Rg   R   RY   i
   RZ   g      R[   g      @(   i
   (   R\   R
   R   t   mapR   R   R"   R%   R   R   R   R   Ra   RB   R   (	   R3   R  t   abs_exprt   abs_updatesR4   Re   t   valst   abs_valst   theano_vals(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_map=  s     	c         C` s  d   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j | | | | | g d d  d d d	 t \ } } t  j | | | | g | d
 | d t } t j	 j
 t j    }	 |	 j d d d d d d  }
 |	 j   } |	 j   } |	 j   } t j d  } |
 d | | | | d <x= t d d  D], } |
 d | | | | d | | | <qDW| |
 | | |  } t j | |  d  S(   Nc         S` s   |  | | | S(   N(    (   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   R  s    R   R   R   R   R   R   iR   Rg   R   RY   i   RZ   g      R[   g      @i   i    i   (   i   (   i   (   R\   R
   R   R   R   RW   R"   R   R%   R   R   R   R   Ra   R   R   R   (   R3   R   R   R   R   R   R   Rg   R   Re   R   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_backwardsQ  s6    			*c         C` s   t  j j d  } t  j j d  } t  j d   | |  \ } } t  j | | g | d | d t } t j j	 t
 j    } | j d d d d	 d
 d  } t t j |  | | d   d k  s t  d  S(   NR  Rh   c         S` s   |  | S(   N(    (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   y  s    Rg   R   RY   i   RZ   g      R[   g      @g        gMbP?(   i   (   R\   R
   R   R   t   reduceR   R"   R%   R   R   R   R   Ra   RB   Rb   RH   (   R3   R  Rh   R0  Rg   R4   Re   t   v_v(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_reducev  s    	c         C` sU  d   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t | | | | | g d d  d d d	 t \ } } t  j j | | | | | g  \ } }	 }
 } t  j | | | | g | |	 |
 | g d
 | d t	 d t	 } t  j | | | | g | d
 | d t	 d t	 } t
 j j t j    } t
 j | j d d d d d d  d t  j j } t
 j | j   d t  j j } t
 j | j   d t  j j } t
 j | j   d t  j j } | | | | |  } t | | | | | g  } | j |  \ } } | d k rQt t  j j j | d | | | | j | f   n  d  S(   Nc         S` s   |  | | | S(   N(    (   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   R   R   R   R   R   iR   Rg   t   no_default_updatesR   RY   i
   RZ   g      R[   g      ?R(   g{Gz?(   i
   (   R\   R
   R   R   Rj   RW   R   R   R   R"   R%   R   R   R   R   R&   Ra   Rl   Rm   R   RS   t	   ExceptionRF  t   E_gradR2   (   R3   R   R   R   R   R   t   costRg   t   gut   gx0t   gW_inR[  t   grad_fnt   cost_fnRe   R   R   t   analytic_gradt   num_gradRS   t   max_err_pos(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_one_output  sR    	!		$!!!	c         ` sE  t  j j t j    } t | j d d d d d d   } t | j d d d d d d   } t | j d d d d d d   } t | j d d d d d d   } t | j d d  d d d d   } t | j d d! d d d d   } t | j d d" d d d d   } t | j    }	 t j | d d	  t j | d d
   t j | d d  t j	 j
 d  }
 t j	 j
 d  } t j	 j d  } t j	 j d  } t j	 j d  }     f d   } t | | | g | | g |
 d d  d d d t \ } } | | | |	 | g } | | | | |
 g } t j | | d d } t j | | | | |
 g | d | d t d t } t j | | | | |
 g | d | d t d t } t | | | | |	 | g  } | | | | |	 |  } | j |  \ } } | d k rAt t j	 j j | d | | | | j | f   n  d  S(#   NRY   i   RZ   gR[   g?i   R   R   R   R   R   R   R   R   R   c         ` s:   t  j |  |  |  t  j |    t  j |   g S(   N(   R\   R   (   R   R   R   R   R   (   R   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   R   iR   t   disconnected_inputst   ignoreRg   R  R   g{Gz?(   i   (   i   i   (   i   (   i   i   (   i   i   (   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R   Rj   RW   R   R   R   R"   R   RS   R  RF  R  R2   (   R3   Re   R   R   R  R  R  R  R   R  R   R   R   R   R   R   R  Rg   t   vparamst   paramst   gparamsR  R  R  R  RS   R   (    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_multiple_outs  sh    $$$$$$$						c         ` sS  d } t  j j t j    } t | j d d$ d d d d   } t | j d d% d d d d   } t | j d d& d d d d   } t | j d d' d d d d   } t | j d | d f d d d d   } t | j d | d d f d d d d   } t | j d d( d d d d   }	 t | j d d)   }
 t j | d	 d
  t j | d	 d   t j | d	 d  t j	 j
 d  } t j	 j
 d  } t j	 j
 d  } t j	 j d  } t j	 j d  } | | j _ | | j _ | | j _ |	 | j _ |
 | j _     f d   } t j j } t j j } d t j _ d t j _ zKt | | t d | d d d d g  g | t d | d d d g  d  g | d d  d d d t \ } } | | |	 |
 | g } | | | | | g } t j	 j | |  } t d d t j t j | | | | | g | d  | d! t d" t } t d d t j t j | | | | | g | d  | d! t d" t } t d d t j Wd  | t j _ | t j _ Xt | | | |	 |
 | g  } | | | |	 |
 |  } | j |  \ } } | d# k rOt t j	 j j | d# | | | | j  | f   n  d  S(*   Ni   RY   i   RZ   gɿR[   g?i   R   R   R   R   R   R   R   R   R   c         ` sY   t  j |  |  | | |  t  j |    | | t  j |   t  j |  |  g S(   N(   R\   R   (   R   R  R   R  R   R   R  R   (   R   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    	t   raiseR  R  ii    i   R  iR   R   R   t   .t   fileRg   R  R   g{Gz?(   i   (   i   i   (   i   (   i   i   (   i   (   i   (!   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   t   tagt
   test_valueRl   t   compute_test_valuet   compute_test_value_optRj   R  RW   R   R   t   printt   syst   stderrR   R"   R   RS   R  RF  R  R2   (   R3   R  Re   R   R   R  R  R  R  R   R  R   R   R   R   R   R   t   old1t   old2R  Rg   R  R  R  R  R  R  R  RS   R   (    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_multiple_outs_taps  s    $$$$*.$!!			c         ` s  d } t  j j t j    } t | j d d! d d d d   } t | j d d" d d d d   } t | j d d# d d d d   } t | j d d$ d d d d   } t | j d | d f d d d d   } t | j d | d d f d d d d   } t | j d d% d d d d   }	 t | j d d&   }
 t j | d	 d
  t j | d	 d   t j | d	 d  t j	 j
 d  } t j	 j
 d  } t j	 j
 d  } t j	 j d  } t j	 j d  }     f d   } t | | t d | d d d d g  g | t d | d d d g  g | d d  d d d t \ } } | | |	 |
 | g } | | | | | g } t j	 j | |  } t j | | | | | g | d | d t d t } t j | | | | | g | d | d t d t } t | | | |	 |
 | g  } | | | |	 |
 |  } | j |  \ } } | d  k rt t j	 j j | d  | | | | j | f   n  d  S('   Ni   RY   i   RZ   gɿR[   g?i   R   R   R   R   R   R   R   R   R   c         ` sJ   t  j |  |  | | |  t  j |    | | t  j |   g S(   N(   R\   R   (   R   R  R   R  R   R   R  R   (   R   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   h  s    	R  R  ii    i   R  iR   R   R   Rg   R  R   g{Gz?(   i   (   i   i   (   i   (   i   i   (   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   Rj   R  RW   R"   R   R   R   RS   R  RF  R  R2   (   R3   R  Re   R   R   R  R  R  R  R   R  R   R   R   R   R   R   R  Rg   R  R  R  R  R  R  R  RS   R   (    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt&   test_grad_multiple_outs_taps_backwardsR  sf    $$$$*.$!				c         ` sA  t  j j t j    } t | j d d# d d d d   } t | j d d$ d d d d   } t  j d d	 d
 d d g d d } t | j d d% d d d d   } t j	 j
 d  } t j	 j
 d  } t j	 j d  } t j	 j d d t j j }	 d   }
 t |
 | | g |	 d  g | d d  d d d t \ } } | | | | g } | | |	 | g } t j	 j | |  } t j | | |	 | g | d | d t d t  t j | | |	 | g | d | d t d t   d       f d   }   f d   } t | | | | | g d t t t t g } | | | | |  } | j |  \ } } | d k rt t j	 j j | d | | | | j | f   n  t | j    d  j } | j j d! } i d	 d  6d d 6d
 d 6} | | k st   | j j d" } i d d  6d d 6d	 d 6d
 d	 6d d
 6} | | k s=t   d  S(&   NRY   i   RZ   g      R[   g      @i   i   i   i   i   i   R(   R  R   R   R   R   c         S` st   t  j j j d  } t  j j | t  j j  t  j |  |  | | j d d d d d t  j j  } | d | f S(   Ni{   RZ   gR[   g?R(   i   (	   R\   R
   R]   R^   R  Rl   Rm   R   Ra   (   R   R   R   R   t   trng1RO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s
    ,R   R   iR   Rg   R  R   c         W` s   x t  |  j j  D]} \ } } | j r t | j j  t t j j d   k r |  j j | j } t j j d  | _ | |  j j | _ q q W|  |   S(   Ni{   (	   R$   Rq   t   expanded_inputsRn   R_   t   dataR%   R   R   (   R   Rc   R  t   argt   obj(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   reset_rng_fn  s    c          ` s      |   S(   N(    (   Rc   (   R  R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c          ` s      |   S(   N(    (   Rc   (   R  R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R)   g{Gz?i    R+  R,  (   i   i   (   i   i   (   i   (!   R%   R   R   R   R   Ro   Ra   R&   R\   R
   R   R   R   Rl   Rm   Rj   RW   R   R   R   R"   R   RS   R  RF  R  R2   R    R  R|   R}   R-  RH   (   R3   Re   R_  R   R  R   R   R   R   R   R   R  Rg   R  R  R  t   reset_rng_cost_fnt   reset_rng_grad_fnR  R  RS   R   R   R0  R1  (    (   R  R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt)   test_grad_multiple_outs_some_uncomputable  sf    $$$$								)c         ` s  t  j j t j    } t | j d d d d d d   } t | j d d d d d d   } t | j d d d d d d   } t j j	 d  } t j j	 d	  } t j j
 d
  } d   } t | | | | d d  d d d t \ }	 }
 | | | g } | | | g } t j j |	 |  } t j | | | g | d |
 d t d t  t j | | | g |	 d |
 d t d t   d       f d   }   f d   } t | | | | g  } | | | |  } t j | d d  t  j d   d  S(   NRY   i   RZ   gR[   g?i   R   R   R   c         S` si   t  j j j d  } | j d d d d  } t  j |  |  | | } t  j j | d t  j j } | S(   Ni{   RZ   gR[   g?R(   (	   R\   R
   R]   R^   Ra   R   R  Rl   Rm   (   R   R   R   R  t   rnd_nbRO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s
    R   R   i   R   Rg   R  R   c         W` s   x t  |  j j  D]n \ } } | j r t | j j t j j  r |  j j | j } t j j d  | _ | |  j j | _ q q W|  |   } | S(   Ni{   (	   R$   Rq   R  Rn   R   R  R%   R   R   (   R   Rc   R  R  R  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s    	c          ` s      |   S(   N(    (   Rc   (   R  R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c          ` s      |   S(   N(    (   Rc   (   R  R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    i    (   i   i   (   i   i   (   i   (   i   i   (   R%   R   R   R   R   Ro   Ra   R\   R
   R   R   Rj   RW   R   R   R   R"   R   R   R   (   R3   Re   R_  R   R   R   R   R   R   R  Rg   R  R  R  R  R  R  R  (    (   R  R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt%   test_grad_multiple_outs_some_truncate  sF    $$$				
c         C` s.   |  j  d t  } | d k  s* t |   d  S(   Nid   g{Gz?(   t   _grad_mout_helpert   mode_nodebugRH   (   R3   t
   final_cost(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt)   test_grad_multiple_outs_some_disconnected   s    c         C` s   |  j  d d   d  S(   Ni   (   R!  RW   (   R3   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt+   test_grad_multiple_outs_some_disconnected_2$  s    c   (      C` s  t  j j t j    } d } d } d } t | j d | | f d d d d   } t | j d d | f d d d d   } t | j d | d d d d	   }	 t | j d | | f d d d d   }
 t | j d | | f d d d d   } t | j d | d d d d	   } t j |	 d
 d } t j | d
 d } t j |
 d
 d } t j | d
 d } t j | d
 d } t j | d
 d } | | | | | | g } t	 j
   } d   } t j d | d t d |  d t d | d d d g  d  g d | | | | | g d |  \ \ } } } t	 j
   } t d  } t j |  } d | | d j   d | j   | j   d } t j | |  } g  t | |  D]  \ } } | | | | f ^ q}  t j d | | g d | d  |  d |  }! t j d | g d | d |  }" t  j d! d" d# d$ t j j }# |# j t |#  d  }# t  j |#  }$ t  j |$ d  d  }% |$ d  }$ x# t |  D] }& |! |$ |%  } qW|" |$  }' | S(%   Ni   i   RY   RZ   iR[   i   g{Gzg{Gz?R   t   b_ht   h0t   W_iht   W_hht   W_hot   b_oc   
      S` sO   t  j t j |  |  t j | |  |  } t j | |  | }	 | |	 g S(   N(   R
   t   tanhR\   R   (
   RO  t   h_tm2t   h_tm1R(  R)  R&  R*  R+  t   h_tRQ  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   one_stepG  s    )R   R  R  R  R  R  iR   R   g?g      ?g       @R   Ru   Rg   g        g{G$@gzG?R(   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R  RW   RS  t   stdR   RJ   R   R  Rl   Rm   R/   R*   t   sint   rollR   ((   R3   t   n_itersR   Re   t   n_hidt   n_int   n_outt   W_hh_vt   h0_vt   b_h_vt   W_ih_vt   W_ho_vt   b_o_vR&  R'  R(  R)  R*  R+  R  R8   R0  t   hR  Ry   R?   t   lrt   learning_rateR  R  t   paramt   gparamRg   t   learn_rnn_fnt   eval_rnn_fnt   x_vt   s_vt   t_vR   t   pred(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR!  )  sb    **$**$		!3		!
c         C` s$  t  j j j d  } t  j j d  } | j d | j d |  } t  j d   d | d d \ } } t  j | g | | g d	 | d
 t	 } t
 j j t j    } | j d d  } | |  \ }	 }
 | |  \ } } t j |	 |	 g |
  t j | | g |  t
 j |	 |  s t  d  S(   Ni{   R8   RY   R:   c         S` s   |  S(   N(    (   RC   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   {  s    R   R   i   Rg   R   i
   (   i
   i
   (   R\   R
   R]   R^   R   R  R,   R   R   R"   R%   R   R   R   R   Ra   R   R   RH   (   R3   R  R8   R  t   zRg   R4   Re   t   nxR  t   nz1R  t   nz2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_draw_as_input_to_scanv  s    $	c         ` s   t  j d    d   _ t  j j d  } t  j   f d   d | \ } } t  j j | j      } t  j | g | d t	 } t
 j | d d g  d	  d  S(
   Ng      @R|  R   c         ` s   t  j j |    t  j j  S(   N(   R\   R
   R  Rl   Rm   (   R  (   R|  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   i   i   i   (   R\   R   R   R
   R   R   R   Rb   R   R"   R   R   (   R3   R   R  Rg   t   mR4   (    (   R|  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_of_shared  s    	c         ` s   t  j j d  } t  j t j d d d d d g  d d } | |   t  j   f d	   d
 t  j j   j d  d | \ } } t  j	 | g | d t
 } t j | d  d k  s t  d  S(   NR|  i   i   i   i   i   R   R   c         ` s   t  j j   |  |  S(   N(   R\   R
   R   (   R   R  (   t   K(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  i    R   R   g      @g        (   R\   R
   R   R   R%   R&   R   R  R,   R   R"   RG   RH   (   R3   R|  R   R   Rg   R4   (    (   RP  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_computing_gradient  s    -
c      
   ` s   t  j t j d     t  j   f d   d g  d g  d g  d d \ } } t  j g  g  d | } |     j   d	 k s t  d  S(
   Ni   c           ` s   t      d f g  S(   Ni   (   R   (    (   t   X(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   R  R   i
   Rg   i   (   R\   R   R%   R&   R   R   R   RH   (   R3   R   Rg   R4   (    (   RR  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_shared_updates  s    c      
   ` s   t  j t j d     t  j t j d    t  j    f d   d g  d g  d g  d d \ } } t  j g  g  d | } |   t j   j j d	  j j d	  s t	    j
    j
   k s t	  d  S(
   Ni   c           ` s    t      d f    f g  S(   Ni   (   R   (    (   R8   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   R  R   i
   Rg   i    (   R\   R   R%   R&   R   R   t   may_share_memoryt	   containert   storageRH   R   (   R3   R   Rg   R4   (    (   R8   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_memory_aliasing_updates  s    c         ` s4  t  j j   } t  j j   } t  j t j j d d       f d   } t  j | d t d | f g  g d d \ } } | d } | j	 j
 | j	 j
 k s t  |   j	 j
   j	 j
 k s t  t  j | d | g d d \ } } | j	 j
 | j	 j
 d k st  |   j	 j
   j	 j
 k s0t  d	 S(
   s  
        Scan outputs are usually lists, whose entries correspond to the
        intermediate result. When n_steps=1, some extra machinery is
        required in order to mimic this interface. Scan thus calls
        tensor.shape_padleft on the inner function outputs.

        However, this is not the proper behavior for shared variables,
        they should not be padded in any way

        This unit test addresses the bug fix of changeset ba7157e95cb1.
        i   i   c         ` s!   |  d t    d   f g  f S(   Ni   i   (   R   (   RC   (   RD   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt
   inner_func  s    R  R  R   i   iN(   R\   R
   R   R   R%   R   R  R   R   R_   R+   RH   (   R3   RC   t   init_aRX  R   Rg   (    (   RD   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_scan_output_padding  s     
"	"c         ` s  t  j j d  } t  j j d  } t  j d d d } t  j d d d   | t  j | | t  j | |   } d | _ t  j j | |  } d	 | _ t  j   f d
   d t  j j	 | j
 d  d | | g \ } } t  j | | g | d t } t j d d g d t  j j }	 t j d d g d d g g d t  j j }
 t j d d g d d g g d t  j j } | |	 |
  } t j | |  d  S(   NR8   t   Ag      ?R   t   fc1g?t   fc2R  t   gyc         ` s   t  j j | |    |  S(   N(   R\   R
   R   (   R   R^  R8   (   R]  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  i    R   R   g      ?R(   g        g@g?(   R\   R
   R   R   R   R   R   R   R   R  R,   R   R"   R%   R&   Rl   Rm   R   R   (   R3   R8   R[  R\  R  R^  t   hyRg   R4   t   vxt   vAt   vRR   (    (   R]  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_scan_extra_inputs_hessian  s$    &		!--c         C` s   t  j j d  } t  j j d  } t  j d  } | | | d d } t  j | d d  d t d t } t  j j j	 | g  } | | k s t
  | | k s t
  | | k s t
  d  S(	   NR8   R  g      ?i   i   R  t   strictt   share_inputs(   R\   R
   R   R   R  RW   R"   t   goft   graphR   RH   (   R3   R8   R  RI  t   f1R   t   f2_inp(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt*   test_cloning_no_replace_strict_copy_inputs  s    	c         C` s   t  j j d  } t  j j d  } t  j d  } | | | d d } t  j | d d  d t d t } t  j j	 j
 | g  } | | k s t  | | k s t  | | k s t  d  S(	   NR8   R  g      ?i   i   R  Rd  Re  (   R\   R
   R   R   R  RW   R"   R   Rf  Rg  R   RH   (   R3   R8   R  RI  Rh  R   Ri  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt.   test_cloning_no_replace_strict_not_copy_inputs  s    	c         C` s   t  j j d  } t  j j d  } t  j j d  } t  j d  } | | | d d } t  j | d t | | f g  d t d	 t } t  j j j	 | g  } | | k s t
  | | k s t
  | | k s t
  d  S(
   NR8   R  t   y2g      ?i   i   R  Rd  Re  (   R\   R
   R   R   R  R   R"   Rf  Rg  R   RH   (   R3   R8   R  Rl  RI  Rh  R   Ri  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt'   test_cloning_replace_strict_copy_inputs   s    	c         C` s   t  j j d  } t  j j d  } t  j j d  } t  j d  } | | | d d } t  j | d t | | f g  d t d	 t	 } t  j
 j j | g  } | | k s t  | | k s t  | | k s t  d  S(
   NR8   R  Rl  g      ?i   i   R  Rd  Re  (   R\   R
   R   R"  R  R   R  R   R   R"   Rf  Rg  R   RH   (   R3   R8   R  Rl  RI  Rh  R   Ri  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt+   test_cloning_replace_not_strict_copy_inputs3  s    	c         C` s   t  j j d  } t  j j d  } t  j j d  } t  j d  } | | | d d } t  j | d | | f g d t d	 t } t  j j j	 | g  } | | k s t
  | | k s t
  | | k s t
  d  S(
   NR8   R  Rl  g      ?i   i   R  Rd  Re  (   R\   R
   R   R   R  R"   R   Rf  Rg  R   RH   (   R3   R8   R  Rl  RI  Rh  R   Ri  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt+   test_cloning_replace_strict_not_copy_inputsF  s    	c         C` s   t  j j d  } t  j j d  } t  j j d  } t  j d  } | | | d d } t  j | d | | f g d t d	 t } t  j j	 j
 | g  } | | k s t  | | k s t  | | k s t  d  S(
   NR8   R  Rl  g      ?i   i   R  Rd  Re  (   R\   R
   R   R"  R  R   R  R   Rf  Rg  R   RH   (   R3   R8   R  Rl  RI  Rh  R   Ri  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt/   test_cloning_replace_not_strict_not_copy_inputsY  s    	c         ` s  t  j j t j    } t | j d d d d d d   } t | j d d d d d d   } t | j d d  d d d d   } t | j d d! d d d d   } t | j d d" d d d d   } t | j d d# d d d d   } t | j d d$ d d d d   } t | j d d%   }	 t j | d d	  t j | d d
   t j | d d  t j	 j
 d  }
 t j	 j
 d  } t j	 j d  } t j	 j d  } t j	 j d  }     f d   } t j | | | g d  d  | t d | d d d g  g |
 d d  d d d t \ } } t j | | | | |
 g | d | d t } t  j d& d t j j } t  j d' d t j j } t  j | d |  | d | t  j | |  | d <t  j | |  |	 d | d <x t d d  D]n } t  j | | |  | | | t  j | | d |  | | <t  j | | d |  | | d | | <qW| | | | |	 |  \ } } } } t j | |  t j | |  d  S((   NRY   i   RZ   g      R[   g      @i   R   R   R   R   R   R   R   R   R   c         ` sL   | d | d t  j |  |  |  t  j |    | t  j |   g S(   Ni   i   (   R\   R   (   R   R   R   R   R  R   (   R   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s
    R  R  iiR   R   R   Rg   R   R(   i    i   (   i   (   i   i   (   i   (   i   i   (   i   i   (   i   (   i   (   i   (   i   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R   RW   R  R   R   R"   R   Rl   Rm   R   R   R   (   R3   Re   R   R   R  R  R  R  R   R  R   R   R   R   R   R   Ru   Rg   R  R  R  R   t   theano_dump1t   theano_dump2R	  R
  (    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_reorderingo  s`    $$$$$$$			.c   
   	   C` s   t  j j d  } t  j j d  } t  j j d  } d   } t  j d | d | g d | g d | g  \ } } t  j d	 | | | g d
 | d t  } t  j j | j	   d | | g d | g } t  j d	 | | | g d
 | d t  }	 d S(   sO   
        Bug reported by cityhall on scan when computing the gradients
        t   to_scanR3  Rh  c         S` s   |  | | S(   N(    (   t   prevR3  Rh  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   scanStep  s    R   R  R  R   R   Ru   R   t   wrtt   consider_constantN(
   R\   R
   R  t   dmatrixt   dscalarR   R   R"   R   Rb   (
   R3   Rt  R3  Rh  Rv  t   scannedRy   t   f_scant   t_gradt   f_grad(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt    test_scan_as_tensor_on_gradients  s"    				c         ` s  t  j j t j    } t | j d d d d d d   } t | j d d  d d d d   } t | j d d! d d d d   } t | j d d" d d d d   } t | j d d# d d d d   } t | j d d$ d d d d   } t | j d d% d d d d   } t | j d d&   }	 t j | d	 d
  t j | d	 d   t j | d	 d  t j	 j
 d  }
 t j	 j
 d  } t j	 j d  } t j	 j d  } t j	 j d  }     f d   } t j | | | g d  t d |  t d | d d d g  g |
 d d  d d d t \ } } | d d | d d | d d g } t j | | | | |
 g | d | d t } t  j d' d t j j } t  j d( d t j j } t  j | d |  | d | t  j | |  | d <t  j | |  |	 d | d <x t d d  D]n } t  j | | |  | | | t  j | | d |  | | <t  j | | d |  | | d | | <q%W| | | | |	 |  \ } } } t j | | d  t j | | d  d  S()   NRY   i   RZ   g      R[   g      @i   i   R   R   R   R   R   R   R   R   R   c         ` sE   | d t  j |  |  |  t  j |    | t  j |   g S(   Ni   (   R\   R   (   R   R   R   R   R  R   (   R   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  iiR   R   R   i    i   Rg   R   R(   (   i   (   i   i   (   i   (   i   i   (   i   i   (   i   (   i   (   i   (   i   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R   RW   R  R   R   R"   R   Rl   Rm   R   R   R   (   R3   Re   R   R   R  R  R  R  R   R  R   R   R   R   R   R   t   _outputsRg   Ru   R  R  R  R   t   theano_dumpR	  R
  (    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_save_mem  sX    $$$$$$$		'	.!c      	   C` s  t  j d  } t  j d  } t  j d  } d   } t j d | d | g d | g d | g  \ } } | j d	 } t j t j d
 d t j	 j
  } t j t j d d t j	 j
  }	 t j | g | d t | | f | |	 f g  }
 |
 t j d d t j	 j
  | j   } t  j | | g  } t j | | g | d t | t j t j d
   f g  } t j d g d
 g d
 d t j	 j
 } t j d d t j	 j
 } t j d d t j	 j
 } t j | | |  |  d  S(   Nt   weightsR  t   inptc         S` s   t  j | |  |  } | S(   N(   R
   R   (   RO  R.  R   t   expr(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR0  	  s    R   R  R  R   i    i   R(   t   givensi)O i
   (   i   i   (   i   i   (   i   i   (   i
   i   (   R
   R   R   R\   R   R,   R   R%   R   Rl   Rm   R   R   Rb   R   R   R1   R   R   (   R3   R   R  R  R0  R  Ry   t   sht   v1t   v2t   shapefR  t   d_cost_wrt_WR4   R   t   arg1t   arg2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   caching_nsteps_by_scan_op	  s4    				$$*)c      
   C` s  d   } t  j j d  } t  j j d  } t  j j d  } t  j | | d d  d d d t \ \ } } } } }	 }
 } } t  j | | | g | d	  | d
 | | | |  |	 d |
 | | |  g d | d t } t	 j
 j t j    } | j d d d d d d  } | | d d  \ } } } } } } } t j | | d	  d  t j | | d
 d  t j | | d d  t j | | d  d  t j | | d d  t j | | d d  t j | | d  d  | j j j d j j d } d  S(   Nc         S` s5   |  d |  d |  d |  d |  d |  d |  d f S(   Ng      ?g       @g      @g      @g      @g      @g      @(    (   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   )	  s    R   R  t   jdxR   R   iR   i   i   iRg   R   RY   i   RZ   g      R[   g      @i   i   g      ?g       @g      @g      @ig      @g      @i    (   i   (   R\   R
   R   R   R   RW   R   R   R"   R%   R   R   R   R   Ra   R   Rq   Rr   Ru   R|   R   (   R3   R   R   R  R  R|  R   t   x3t   x4t   x5t   x6t   x7Rg   R   Re   R   t   tx1t   tx2t   tx3t   tx4t   tx5t   tx6t   tx7R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt%   test_save_mem_reduced_number_of_steps(	  s<    			$	'c         C` sC  d   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j | | d  d  d  t d	 | d
 d d g  | t d	 | d
 d d g  | g d d  d d d t \ \ }	 }
 } } } } } } t  j	 | | | | | g |	 d |
 d d !| d | d | d g d | d t
 } t j j t j    } | j d d  d d d d  } | | d d g d d d g d  \ } } } } } t j | | d d  t j | | d d !d  t j | | d d  t j | | d d  t j | | d d  d  S(!   Nc         S` s5   |  d |  d |  d |  d |  d |  d |  d f S(   Ng      ?g       @g      @g      @g      @g      @g      @(    (   R   Rn  t   x1_tm3t   x2_tm1t   x3tm2t   x3_tm1t   x4_tm1(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   [	  s    R   R  R  t   x10t   x20t   x30t   x40R  R  iiR   R   R   iiiRg   R   RY   i   RZ   g      R[   g      @i    g      ?g       @g      @g      @(   i   (   R\   R
   R   R   R   R   RW   R  R   R   R"   R%   R   R   R   R   Ra   R   (   R3   R   R   R  R  R  R  R  R  R|  R   R  R  R  R  R  Rg   R   Re   R   R  R  R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_save_mem_store_stepsY	  s@    				$,	3c         C` s  t  j j } d t  j _ t  j j   } | t  j _ t j   } t j   } | t j |  g } t  j	 d   d | d | d | \ \ } } } t
 | j j t j j  s t  t
 | j j t j j  s t  | j j d }	 | j j d }
 t  j | | g |	 d  |
 d  g d | } t  j j } d } t j d	 d
 | } | | |  \ } } | g } d g } x@ | d  D]4 } | j | d | d  | j | d |  qwWt j | |  t j | |  d  S(   NR  c         S` s   |  | | | f S(   N(    (   RC   RD   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   	  s    R  R  R   i    ig      @i   R(   (   R\   Rl   t   on_opt_errorRp  t   get_default_modeR
   R   R   t
   zeros_likeR   R   R|   R}   t	   subtensort	   SubtensorRH   R   R   Rm   R%   R  R0   R   R   (   R3   R  R   R8   R3  R  R   R   Rg   t   out1_directt   out2_directR   Rm   t
   init_valuet	   seq_valuet   output1t   output2t   expected_output1t   expected_output2R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_use_scan_direct_output	  s<    !!			c         C` s  t  j   } t  j   } | t  j |  g } t j d   d | d | \ \ } } } t | j j t  j j	  sx t
  t | j j t  j j	  s t
  | j j d } | j j d } t j | | g | | g  }	 t j d d  d  d   d  f }
 t j d d  d  d   d  f } |	 |
 |  \ } } t j d	  } t j d
  } x. t d  D]  } | | | | | | d <q[Wx& t d  D] } | | |
 | | <qWt j | |  t j | |  d  S(   Nc         S` s   |  | |  | f S(   N(    (   RC   RD   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   	  s    R  R  i    i   i   i   i   (   i   i   i   (   i   i   i   (   R
   t   dcolR  R\   R   R   R|   R}   R  R  RH   R   R   R%   R  RW   R   R  R   R   (   R3   R8   R3  R  R   R   Rg   R  R  R   t   x_valt   seq_valR   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_use_scan_direct_output2	  s.    !!""c   
      ` s   t  j   } t j  j j d      f d   } t j | d | d d \ } } t  j | j   |  } t j | g | | g  } xA t	 d d  D]0 } | |  \ } }	 t
 |  |	 k s t  q Wd  S(   Ni    c         ` s2   |    j    } t j j |  d k  } | | f S(   Ni   (   Ra   R\   R   t   until(   t   previous_valt   new_valt	   condition(   t   srng(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR7  	  s    R  R   i
   ii   (   R
   R   R\   R]   R^   R   R   Rb   R   R   R*   RH   (
   R3   R8   R7  R   Rg   R9  R   R   R   t   g_output(    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_infer_shape	  s    c      
   C` s   t  j   } t  j   } t  j   } d   } t j d | d | d | i | d 6d d g d 6d  g d	 d
  \ } } t j | | | g | d j d d } t t	 |   d k s t
  d  S(   Nc         S` sM   | |  } | | } | | } t  j t j d d  | |  } | | | f S(   Ng        R   (   R
   t   allocR%   R1   (   t   seq1t	   sitsot_m1R;  R<  t   difft   next_mitsot_valt   next_sitsot_valt
   nitsot_out(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   	  s    



R   R  R  R  iiR  R   i   i   R   R   i   (   R
   t   lvectort   lscalarR\   R   RW   R   R,   R*   R   RH   (   R3   R3  t   sitsot_initt   mitsot_initR   R   Rg   R4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_infer_shape2	  s    	
		c         C` s  t  j j d  } d   } t  j | d | d d  d d d d d	 t \ \ } } } t  j j | j   d
 | } t  j | g | d | d t	 d t
 } |  j t j | d d d g  d   | j j j   } t g  | D]' }	 t |	 j t  j j j  r |	 ^ q  }
 |  j |
 d k  t g  | D]' }	 t |	 j t  j j j  r*|	 ^ q* } t  j j d k r|  j | d k  n  d  S(   NR8   c         S` s^   t  j j j t j    } d |  | j d d d d d t  j j  |  | j d d g  g S(	   Ni   RZ   gR[   g?R(   RY   i   (	   R\   R
   R]   R^   R   R   Ra   Rl   Rm   (   RN  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   lm#
  s
    R  R   R   iR   t   forwardR   Rw  Rg   R   R   i   i   i   g       @R   gUUUUUU?(   R\   R
   R   R   RW   R   R   RS  R   R"   t   mode_with_optt
   assertTrueR%   R   Rq   Rr   R   R*   R   R}   R   R   R   t   optt   Shape_iRl   R   (   R3   R8   R  t   o1t   o2Rg   t   go1R4   t   topoR   t   nb_scant
   nb_shape_i(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_remove_stuff 
  s(    	(**c         C` s  t  j j   } t  j j   } d   } t  j | d | g \ } } t  j | d | g \ } } t  j | | g | | g d t j d  } | j j j	   }	 g  |	 D]' }
 t
 |
 j t  j j j  r |
 ^ q } |  j t |  d k  t  j | d | g d d \ } } t  j | d | g d d \ } } t  j | | g | | g d t j d  } | j j j	   }	 g  |	 D]' }
 t
 |
 j t  j j j  r}|
 ^ q}} |  j t |  d k  t  j | d | g d d \ } } t  j | d | g d d \ } } t  j | | g | | g d t j d  } | j j j	   }	 g  |	 D]' }
 t
 |
 j t  j j j  rQ|
 ^ qQ} |  j t |  d	 k  t  j | d | g \ } } t  j | d | g \ } } t  j | g | | g d t j d  } | j j j	   }	 g  |	 D]' }
 t
 |
 j t  j j j  r|
 ^ q} |  j t |  d	 k  t  j | d | g \ } } t  j | d | g d d
 \ } } t  j | g | | g d t j d  } | j j j	   }	 g  |	 D]' }
 t
 |
 j t  j j j  r|
 ^ q} |  j t |  d	 k  t  j | d | g \ } } t  j | d | g d d	 \ } } t  j | g | | g d t j d  } | j j j	   }	 g  |	 D]' }
 t
 |
 j t  j j j  r|
 ^ q} |  j t |  d k  d  S(   Nc         S` s   |  d S(   Ni   (    (   Rh   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRb   C
  s    R  R   t   scanOp_pushout_seqs_opsi   R   i   i   i   R   R   (   R\   R
   R   R   R   R  t	   excludingRq   Rr   R   R   R}   R   R   R   R  R*   (   R3   R8   R  Rb   t   sxt   upxt   syt   upyR4   R  R   t   scans(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt
   test_merge?
  sf    	$$$$$$$$$$$$c         C` s  t  j j   } t  j j   } d   } t  j | d | g d d d d \ } } t  j | d d | d g d d d d \ } } t  j | d | g d d d d	 \ } }	 t  j | | g | | g d
 t j d  }
 |
 j j j	   } g  | D]' } t
 | j t  j j j  r | ^ q } |  j t |  d k  t j j t j    } | j d d  j t  j j  } | j d d  j t  j j  } |
 | |  d  S(   Nc         S` s   |  d S(   Ni   (    (   Rh   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRb   
  s    R  R   i   R   RR  i   t   Yt   ZR   R  RY   (   i   (   i   (   R\   R
   R   R   R   R  R  Rq   Rr   R   R   R}   R   R   R   R  R*   R%   R   R   R   R   Ra   R  Rl   Rm   (   R3   R8   R  Rb   R  R  R  R  t   szt   upzR4   R  R   R  Re   R  t   y_val(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_merge_3scans
  s"    	*2*$!!c      	   C` sM  d   } t  j t  j d d d d d d d g d   } t j |  } t j d  } t j d  } t j d  } t j d  } | | | | | |  } t  j j d  }	 t  j j d  }
 t  j j d  } t  j	 d
  } t j
 | | | | g t j | d |  t j | d |  t j | d |  g  } | |	 |
 | |  } t j d   d t j | j d  d | | g \ } } t j
 | | | | g | d | d | d g  } | |	 |
 | |  } t j | |  } t j
 | | | | g | d | d | d g  } | |	 |
 | |  } t j | |  t j | |  d  S(   Nc      
   S` s   | j  d } d   } t j | d t j |  d |  | g \ } } d   }	 t j |	 d t j |  d | | |  | | g \ }
 } |
 S(   Ni    c         S` s<   | j  d  j | j d d f  } | | j } | j    S(   Ni   i    (   Rb   R/   R,   R  (   R   RR  R  t   XXRP  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   init_K
  s    %R  R   c         S` s   t  j |  \ } } t  j | |  d  |  f  } | | j |  }	 | j |  j |  }
 |	 j |
  } |	 | j   | j   } t  j |  | |  | f } | S(   N(   R
   R,   t   diagR   Rb   (   R   t   x_start   s_starRR  t   betaR>  R   t   Dt   iLR   t   BR?   t   lbt   Mi(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   predict_mean_i
  s    (   R,   R\   R   R
   R  (   R   t   targetst   hypR  R  t   ER  R  t   K_updtsR  t   Mt   M_updts(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   init_predictive_output
  s    		i   g{Gz?i   RR  R  R  R  i
   i   i    i   c         S` s   t  j | |  |  S(   N(   R
   R   (   R   R  R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   
  s    R  R   (   i   i   (   i
   i   (   i
   i   (   i   (   R%   t   logt   tileR\   R   R
   Ry  R  R   t   eyeR   R   R   R  R,   t   jacobianR   R   (   R3   R  t   hypxR  R   R  R  R  R  RR  R  t   test_mt   test_st   dfdmR%  t   dMdmt
   dMdm_updtst   scan_outputt   dMdm_jt   dfdm_jt   jacobian_outputs(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout_seqs
  s:    	!0R  R  c         C` s_   t  j   } t j d   d d d g  d g  d | d  g \ } } t j | g | d | d  S(   Nc         S` s#   |  |  t  j d  j   j   g S(   Ni    (   R
   R  R-   (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   
  s    R   i   R  R   R  Rg   (   R
   R   R\   R   RW   R   (   R3   R8   Ru   Rg   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout_seqs2
  s    	c         C` st   t  j d   d d g d d \ } } t  j d g  d |  } |   } d d g d d g g } t j | |  d  S(   Nc         S` s   |  |  |  f S(   N(    (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   i   R   R   Ru   i   (   R\   R   R   R   R   (   R3   Ru   Ry   R4   Rx   t   expected_outs(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout_nonseq
  s    	c         C` sY   d   } t  j j   } t  j d | d i | d 6g  \ } } t  j | g |  } d  S(   Nc         S` s   |  d S(   Ni   (    (   Rh   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   incr  s    R   R  R  (   R\   R
   R   R   R   (   R3   R  R8   R  R  R4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_sequence_dict  s    		c         C` s   t  j j   } t  j j   } t  j d   |  \ } } t  j d   |  \ } } | j j | j j k sr t  t | j j  t | j j  k s t  d  S(   Nc         S` s   |  d S(   Ni   (    (   t   _x(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   |  d S(   Ni   (    (   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    (   R\   R
   R   R   R|   R}   RH   t   hash(   R3   R8   R  t   scan1Rg   t   scan2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt	   test_hash  s    c      	   ` s  t  j j d  } t j d d d } t  j |  } t  j t j j d  j d       f d   } t  j | d | g d g  d	 d  | g \ } } t  j
 | g | d
  } t  j
 | g | d  } t j j d  j d  } | |  }	 | j |  | |  }
 t j |	 |
  d  S(   NR8   i   R(   R   i   c         ` s7   t  j j d |  |  } t  j j |    } | | f S(   Ni    (   R\   R
   t   joinR   (   R   t   memR   t   d(   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR4   *  s    R  R   R  i    i   i   i   (   i   (   i   i   (   i   i   (   R\   R
   t   fmatrixR%   R   R   R   R  R   RW   R   t	   set_valueR   R   (   R3   R8   t   mem_valt   memoryR4   Rx   t   updtsR   R  t   f_valst   f2_vals(    (   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt	   test_same   s    $c         C` s  t  j t j t j j d d  d t  j j  } t  j d   | t  j	 j
 t j d d t  j j   \ } } t  j j j } | j d  } t  j g  | d | } t |  \ } } t | d  } | d  k	 s t  | d }	 t  j | |	 j d	  } t  j j j r-|   j d d	 k sIt  n |   j d d
 k sIt  t  j	 j | |  }
 t  j g  |
  } t j |   t j d   d  S(   NRY   i
   R(   c         S` s   | |  S(   N(    (   R  t   acc(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   A  s    g        Rk  R   i    i   i   (   i
   (   i
   (   R\   R   R%   R1   R   Ra   Rl   Rm   R  R
   R  Rp  R   R   R  R   R{   R   RW   RH   R   R   t   allow_output_preallocR,   R   R   R   R   (   R3   R8   R   Ry   R   Rh  R   Ru   R   R   R2   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_reduce_memory_consumption=  s*    '	
c         C` s  t  j t j t j j d d  d t  j j  } t  j d   | t  j	 j
 t j d d t  j j   \ } } t  j j j } | j d  } t  j g  | d | } t |  \ } } t | d  } | d  k	 s t  | d }	 t  j | |	 j d	  }
 t  j j j r-|
   j d d	 k sIt  n |
   j d d
 k sIt  t  j	 j | |  } t  j g  |  } t j |   t j d   d  S(   NRY   i
   R(   c         S` s   | |  S(   N(    (   R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   a  s    g        Rk  R   i    i   i   (   i
   (   i
   (   R\   R   R%   R1   R   Ra   Rl   Rm   t   foldlR
   R  Rp  R   R   R  R   R{   R   RW   RH   R   R   R  R,   R   R   R   R   (   R3   R8   R   Ry   R   t   f0R   Ru   R   R   Rh  R2   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_foldl_memory_consumption^  s*    '	
c         C` s  t  j t j t j j d d  d t  j j  } t  j d   | t  j	 j
 t j d d t  j j   \ } } t  j j j } | j d  } t  j g  | d | } t |  \ } } t | d  } | d  k	 s t  | d }	 t  j | |	 j d	  } t  j j j r-|   j d d	 k sIt  n |   j d d
 k sIt  t  j	 j | |  }
 t  j g  |
  } t j |   t j d   d  S(   NRY   i
   R(   c         S` s   | |  S(   N(    (   R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    g        Rk  R   i    i   i   (   i
   (   i
   (   R\   R   R%   R1   R   Ra   Rl   Rm   t   foldrR
   R  Rp  R   R   R  R   R{   R   RW   RH   R   R   R  R,   R   R   R   R   (   R3   R8   R   Ry   R   Rh  R   Ru   R   R   R2   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_foldr_memory_consumption  s*    '	
c   #   
   ` sR  t  j    t j j   } t j j   t j | j	 d d!  d d   } t j | j	 d d"  d d   } t j | j	 d d#  d d    t j | j	 d d$  d d   } t j | j	 d d%  d d   } t j | j	 d d&  d d   }     f d   } t j
 j d  } t j
 j d  }	 t j
 j d	  }
 t j
 j | | j  } d
 | _ t j
 j |	  j  } d | _ t j
 j |
 | j  } d | _ t j | d | d | d  g d | d d \ \ } } } | d } t j
 j d  } t j
 j d  } t j
 j d  } t j
 j | | |  } t j
 j | | |  } t j
 j | | |  } t j | |	 |
 | | | g | | | | g d d } | |  | | | |  \ } } } } t j d   d t
 j | j d  d | | |	 |
 | g d d \ } } t j d   d t
 j | j d  d | | |	 |
 | g d d \ } } t j d   d t
 j | j d  d | | |	 |
 | g d d \ } } t j | |	 |
 | | | g | | | | g d d } | |  | | | |  \ } }  }! }" t  j | | d d  t  j | |  d d  t  j | |! d d  d  S('   NRY   i   i   g      ?R(   c         ` sp   t  j j j   } |  | | j d  j  t j d d   } t  j j t  j j	 | |   } | | f S(   NRY   gư>R(   (
   R\   R
   R]   R^   Ra   R,   R%   R1   R,  R   (   t   _ut   _yt   _WR  t   tmp_valt   sl_o(   Rm   t   seedt   v_h0(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   rnn_fn  s
    !t   UR'  R   t   _Ut   _h0R(  R  R  R   R   R-  it   eut   eh0t   eWt   on_unused_inputR  c         S` s!   t  j j | |  |  | j   S(   N(   R\   R
   R   Rb   (   R   R   R   R'  R   R1  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    i    t   jacobUc         S` s!   t  j j | |  |  | j   S(   N(   R\   R
   R   Rb   (   R   R   R   R'  R   R2  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    t   jacobhc         S` s!   t  j j | |  |  | j   S(   N(   R\   R
   R   Rb   (   R   R   R   R'  R   R3  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    t   jacobWt   atolgư>(   i   i   (   i   i   (   i   (   i   i   (   i   i   (   i   (   R   R   R%   R   R   R\   Rl   Rm   R&   Ra   R
   R   R   t   specify_shapeR,   R   R   RW   t   RopR   R  R   (#   R3   Re   R   R  t   v_eut   v_eWt   v_eh0R-  R   R'  R   R&  R0  R(  R   Ry   R1  R2  R3  t   nwo_ut   nwo_h0t   nwo_Wt   fn_ropt   vnut   vnh0t   vnWt   vnot   n2o_ut   n2o_h0t   n2o_Wt   fn_testt   tnut   tnh0t   tnWt   tno(    (   Rm   R+  R,  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt	   test_rop2  sl    %%%%%%			
	'	'c   $   
   C` s  t  j   } t j j |  } t j j } t j | j	 d d   d | } t j | j	 d d!  d | } t j | j	 d d"  d | } t j | j	 d d#  d | } t j | j	 d d$  d | } t j | j	 d d%  d | }	 d   }
 t j
 j d  } t j
 j d  } t j
 j d  } t j
 j | | j  } d	 | _ t j
 j | | j  } d
 | _ t j
 j | | j  } d | _ t j |
 d | d | d | d d \ } } | d } t j
 j d  } t j
 j d  } t j
 j d  } t j
 j | | |  } t j
 j | | |  } t j
 j | | |  } t j | | | | | | g | | | g d d } t j d   d t
 j | j d  d | | | | | g d d \ } } t j d   d t
 j | j d  d | | | | | g d d \ } } t j d   d t
 j | j d  d | | | | | g d d \ } } t j | | | | | | g | | | g d d } | | | | | |	 |  \ } } }  | | | | | |	 |  \ }! }" }# t  j | |! d d t  j | |" d d t  j |  |# d d d  S(&   NRY   i   i   R(   c         S` s)   t  j j t  j j | |  |   } | S(   N(   R\   R
   R,  R   (   R&  R'  R(  R*  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR-    s    %R.  R'  R   R/  R0  R(  R  R  R   R   R-  iR1  R2  R3  R4  R  c         S` s!   t  j j | |  |  | j   S(   N(   R\   R
   R   Rb   (   R   R   R   R'  R   R1  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    i    R5  c         S` s!   t  j j | |  |  | j   S(   N(   R\   R
   R   Rb   (   R   R   R   R'  R   R2  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR      s    R6  c         S` s!   t  j j | |  |  | j   S(   N(   R\   R
   R   Rb   (   R   R   R   R'  R   R3  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   &  s    R7  R8  gư>(   i   i   (   i   i   (   i   (   i   i   (   i   i   (   i   (   R   R   R%   R   R   R\   Rl   Rm   R&   Ra   R
   R   R   R9  R,   R   R   R:  R   R  R   ($   R3   R+  Re   Rm   R   R  R,  R;  R<  R=  R-  R   R'  R   R&  R0  R(  R   Ry   R1  R2  R3  R>  R?  R@  RA  RF  RG  RH  RI  RB  RC  RD  RJ  RK  RL  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_rop  sl    !!!!!!				
		$$c   	      C` s  t  j d  } t  j d  } t j d   d t  j | j d g  d  g d | g d | g \ } } t j | | g | d t } g  | j	 j
 j   D]' } t | j t j j j  r | ^ q } t |  d k s t  | d	 j } t d
   | j j	 j
 j D  st  d  S(   NR   R>  c         S` s   |  t  j |  | |  f S(   N(   R
   R   (   t   hit   him1R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   ;  s    R  i   R  R   R   i    c         s` s$   |  ] } t  | j t j  Vq d  S(   N(   R   R}   R
   t   Dot(   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pys	   <genexpr>G  s    (   R
   R   R\   R   R   R,   RW   R   R  Rq   Rr   R   R   R}   R   R   R   R*   RH   t   anyR   t   apply_nodes(	   R3   R   R>  R   Ry   R4   R8   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout_dot7  s    			c         C` s  t  j d  } t  j d  } t  j d  } d   } t j | d | | | g d d \ } } t j | | | g | d t } g  | j j j	   D]' } t
 | j t j j j  r | ^ q }	 t |	  d	 k s t  t j   }
 t j j |
  } t j j } t j | j d
 d  d | } t j | j d
 d  d | } t j | j d
 d  d | } t j | | |  } t j d  } | | d  d   d  d   f <t j | | | | |   d  S(   NR  R  R'  c         S` s   t  j |  | |  S(   N(   R
   R   (   R>  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt	   lambda_fnO  s    R   R   i   R   i    RY   i   R(   (   i   (   i   i   (   i   i   (   i   i   (   R
   R   R   R\   R   R   R  Rq   Rr   R   R   R}   R   R   R   R*   RH   R   R   R%   R   R   Rl   Rm   R&   Ra   R   R   R   (   R3   R  R  R'  RV  R   Ry   R4   R8   R   R+  Re   Rm   t   v_ht   v_W1t   v_W2R   t   sol(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout_allJ  s,    	!	!!!c      
   C` sU  t  j d  } t  j d  } t  j d  } d   } t j | d | | g d | g d d \ } } t j | | | g | d	 t } t j | d | | g d | g d d d	 d
 \ } } t j | | | g | d	 d
 } t j j d  j	 d  t j j d  j	 d  t j
 d  j	 d  g }	 | |	   }
 | |	   } t j |
 |  d  S(   NR  R  t   step_indicesc         S` s.   t  j j |  d k  } t j | |  | f S(   Ni   (   R\   R   R  R
   R   (   t   step_idxR  R  t   until_condition(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV  t  s    R  R   R   i   R   R   R   (   i   i   (   i   i   (   R
   R   R   R\   R   R   R  R%   R   R  R  R   R   (   R3   R  R  R\  RV  R   Ry   R4   t   f_reft   input_valuesR   t   out_ref(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout_whilel  s(    		!	!c   
      C` s!  t  j d  } t  j d  } t  j d  } d   } t j | d | d | | g d d \ } } t j | | | g | d	 t } g  | j j j	   D]' } t
 | j t j j j  r | ^ q d
 }	 t g  |	 j j j j j	   D]$ } t
 | j t j  j  r | ^ q  d
 k st  d  S(   NR  R  R'  c         S` s   t  j |  | |  S(   N(   R
   R   (   R>  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    R  R   R   i   R   i    (   R
   R   R   R\   R   R   R  Rq   Rr   R   R   R}   R   R   R   R*   R   t   ElemwiseRH   (
   R3   R  R  R'  RV  R   Ry   R4   R8   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout  s    	!	""c   	      C` s  t  j d  } d   } t j | d | g d t j d d g t j j  d  g \ \ } } } t j	 | g | | g  } t j
 d  j d d  j t j j  } | |  } t j | d	 | d  t j | d
 d d g d d g d d g d d g d d g g  d  S(   NR   c         S` s   |  d | f S(   Ni
   (    (   R   t   i_tm1(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  g        i
   i   i   i    i   g      $@g      &@g      (@g      *@g      ,@g      .@g      0@g      1@(   R
   R   R\   R   R%   R1   Rl   Rm   RW   R   R  R/   R  R   R   (	   R3   R   R   t   i_tRe  Ry   R4   t   valt   ret(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pushout_nomodif  s    	*			c   
      C` s*  t  j d  } t  j d  } t  j d  } d   } t j | d | d | t  j |  g d d \ } } t j | | | g | d	 t } g  | j j	 j
   D]' } t | j t j j j  r | ^ q d
 }	 t g  |	 j j j j	 j
   D]$ } t | j t j  j  r | ^ q  d
 k s&t  d  S(   NR  R  R'  c         S` s   t  j |  | |  S(   N(   R
   R   (   R>  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    R  R   R   i   R   i    (   R
   R   R   R\   R   R  R   R  Rq   Rr   R   R   R}   R   R   R   R*   R   Rc  RH   (
   R3   R  R  R'  RV  R   Ry   R4   R8   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_alloc_inputs1  s    	!	""c   
   
   C` s9  t  d   t j   } t j   } t j   } d   } t j | d t j |  d | d t j |  g d d \ } } t j | | | g | d t } g  | j	 j
 j   D]' } t | j t j j j  r | ^ q d	 }	 t g  |	 j j j	 j
 j   D]$ } t | j t j j  r | ^ q  d	 k s5t  d  S(
   NsQ   This tests depends on an optimization for scan that has not been implemented yet.c         S` s   |  t  j | |  S(   N(   R
   R   (   R  R>  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    R  R  R   R   i   R   i    (   R   R
   R   R   R\   R   R  R   R  Rq   Rr   R   R   R}   R   R   R   R*   R   Rc  RH   (
   R3   R  R  R'  RV  R   Ry   R4   R8   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_alloc_inputs2  s     	!	""c      
   C` s,  t  j   } t  j   } t  j   } t  j | d  } t  j | d  } t  j | d  } d   } t j | d t  j |  d | d t  j |  g d d \ } }	 t j | | | g | d t }
 g  |
 j	 j
 j   D]' } t | j t j j j  r | ^ q d	 } t | j j  d
 k s(t  d  S(   Ni   c         S` s   |  t  j | |  S(   N(   R
   R   (   R  R>  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    R  R  R   R   i   R   i    i   (   i   i   (   i   i   (   i   (   R
   R   R   R9  R\   R   R  R   R  Rq   Rr   R   R   R}   R   R   R   R*   R   RH   (   R3   t   _W1t   _W2R0  R  R  R'  RV  R   Ry   R4   R8   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_alloc_inputs3  s"    	!	"c         C` s   t  j d  } d   } t j | |  \ } } t j | g |  } t j d d t j j } d | d <| |  } t	 |  d k s t
  d  S(	   NR8   c         S` s    |  d t  j j |  d k  f S(   Ni   i   (   R\   R   R  (   RO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    i2   R(   i   i   i   (   i2   (   R
   R   R\   R   R   R%   R   Rl   Rm   R*   RH   (   R3   R8   RV  R   Ry   R4   R`  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_while0  s    	
c         C` s6  t  j d  } d   } t j | |  \ } } t j d   |  \ } } t j | g | | g d t } t j d d t j j	 } d | d <| |  \ } }	 t
 |  d	 k s t  t j |	 | d
 k  s t  g  | j j j   D]' } t | j t j j j  r | ^ q }
 t
 |
  d k s2t  d  S(   NR8   c         S` s    |  d t  j j |  d k  f S(   Ni   i   (   R\   R   R  (   RO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    c         S` s   |  d S(   Ni   (    (   RO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   i2   R(   i   i   i   i   i   (   i2   (   R
   R   R\   R   R   R  R%   R   Rl   Rm   R*   RH   RG   Rq   Rr   R   R   R}   R   R   R   (   R3   R8   RV  R   Ry   R  R4   R`  R   R   t   lssc(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_while1
  s    	!
's   This test fails because not typed outputs_info are always gived the smallest dtype. There is no upcast of outputs_info in scan for now.c      	   C` s  t  j j d  } t j d  } d } t  j j |  } t  j d d   d | | g d |  \ } } | j   } t  j d d   d	 t  j j d
 d d d | | g d |  \ } } t  j d d   d	 d
 d | | g d |  \ }	 } t  j d d   d	 d d | | g d |  \ }
 } t  j d | | g d | | d |	 d |
 d g  } t	 j
 d d
 d g d t  j j } | | d  } | d
 d k st  | d d k st  | d d k st  | d d k st  d  S(   Nt   coefficientsR8   i'  R   c         S` s   |  | | S(   N(    (   t   coefft   powert   free_var(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   +  s    R  R   c         S` s   | |  | | S(   N(    (   Rs  Rt  Ru  Ru  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   0  s    R  i    R(   Rm   c         S` s   | |  | | S(   N(    (   Rs  Rt  Ru  Ru  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   8  s    c         S` s   | |  | | S(   N(    (   Rs  Rt  Ru  Ru  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   @  s    g        R   Ru   ii   i   i   i   i   (   R\   R
   R   R   R  R   Rb   R  R   R%   R1   Rl   Rm   RH   (   R3   Rr  R8   t   max_coefficients_supportedt
   full_ranget
   componentsRg   t   polynomial1t   polynomial2t   polynomial3t   polynomial4t   calculate_polynomialt
   test_coeffR   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_outputs_info_not_typed  sH    									$c         ` s   t  j j    t  j       t  j   d d      f d   } t j | d t  j   j d  g \ } } t	 t j
 j t  j | j      d  S(   NR   i    c         ` sf       f d   } t  j d | d t j   j d   \ } }  j d | j  } | | | f S(   Nc         ` s)    j  }  j d d d |  }   | S(   NR   i   t   pvals(   R  t   multinomial(   t   in_idxR  t   sample(   R   t   norm_inpt   rand_stream(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   stochastic_poolingb  s    	R   R  i    RY   (   R\   R   R
   R  R,   R  (   t   out_idxR  t   pooledt   updates_innert	   rand_nums(   R   R  R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   unit_dropouta  s
    R  (   R
   R]   R^   R   Rb   R\   R   R  R,   R   t   gradientt   NullTypeGradErrorR   (   R3   R  R   t   updates_outer(    (   R   R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_crash_nonseq_gradV  s    "c   	   	   C` s   t  j d  } t  j d  } | d } d   } t j d | d | d d  g d | g  \ } } | j   | j   } t j | | g |  } d  S(	   Nt   INPUTt   PARAMi   c         S` s   |  d | j    } | S(   Ni   (   Rb   (   R  R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR0    s    R   R  R  R   (   R
   t   ftensor3R  R\   R   RW   Rb   R   (	   R3   t   Vt   origR   R0  t   OSRg   t   OR4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt0   test_bugFunctioProvidesIntermediateNodesAsInputsv  s    
			c         C` s/  t  j d  } d   } t j | |  \ } } t j d   |  \ } } t j | g | | g d t } t j d d t j j	 } d | d <| |  \ } }	 t
 |  d	 k s t  t
 |	  d	 k s t  g  | j j j   D]' } t | j t j j j  r | ^ q }
 t
 |
  d
 k s+t  d  S(   NR8   c         S` s    |  d t  j j |  d k  f S(   Ni   i   (   R\   R   R  (   RO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    c         S` s    |  d t  j j |  d k  f S(   Ni   i   (   R\   R   R  (   RO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s   R   i2   R(   i   i   i   i   (   i2   (   R
   R   R\   R   R   R  R%   R   Rl   Rm   R*   RH   Rq   Rr   R   R   R}   R   R   R   (   R3   R8   RV  R   Ry   R  R4   R`  R   R   Rp  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_while2  s    	!
'c         C` s   t  j d  } d   } t j | |  \ } } t j | g | j d d t } t j d
 d t j	 j
 } d | d <| |  } | d	 k s t  d  S(   NR8   c         S` s    |  d t  j j |  d k  f S(   Ni   i   (   R\   R   R  (   RO  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRV    s    i    R   i2   R(   i   i   i   (   i2   (   R
   R   R\   R   R   R,   R  R%   R   Rl   Rm   RH   (   R3   R8   RV  R   Ry   R4   R`  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_while_infershape  s    	"
c   
      C` s1  t  d   t j d  } t j d   d | d d  | d g d d \ \ } } } t j | g | j d | j d g d	 t } t	 j
 d d t j j } | |  \ } } | d
 k s t  | d
 k s t  g  | j j j   D]' } t | j t j j j  r | ^ q }	 t |	  d k s-t  d  S(   NsR   This is a generic problem with infershape that has to be discussed and figured outR8   c         S` s   |  d | |  f S(   Ni   (    (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  i    R   i   R   i
   R(   (   i
   (   R   R
   R   R\   R   RW   R   R,   R  R%   R   Rl   Rm   RH   Rq   Rr   R   R   R}   R   R   R   R*   (
   R3   R8   R  R  Ry   R4   R`  R   R   Rp  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt"   test_infershape_seq_shorter_nsteps  s     	'c         C` s%  t  j d  } t j d   d | d d  | d g d d \ \ } } } t j | g | j d | j d g d t } t j	 d d
 t j
 j } | |  \ } } | d k s t  | d k s t  g  | j j j   D]' } t | j t j j j  r | ^ q } t |  d k s!t  d  S(   NR8   c         S` s   |  d | |  f S(   Ni   (    (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  i    R   i   R   i   R(   (   i   (   R
   R   R\   R   RW   R   R,   R  R%   R   Rl   Rm   RH   Rq   Rr   R   R   R}   R   R   R   R*   (   R3   R8   R  R  Ry   R4   R`  Rp  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt)   test_infershape_nsteps_smaller_seq_length  s    	'c   	   	   ` s  t  j j j d      f d   } t j   g } t j   g } t d t j   d d d g  t j   d  g } t  j d | d | d	 | d
 |  \ } } | d j	 j
 d j	 } | j j } | d i g  d 6d g d 6d d g d 6d g d 6d g d 6g  d 6d g d 6k st  | d i g  d 6g  d 6d g d 6d g d 6d g d 6d g d 6g  d 6k skt  | d i d d 6d d 6d d 6d d 6d d 6d d 6d d 6k st  | d i d d 6d d 6d d 6d d 6d d 6d d 6k st  | d i g  d 6d g d 6d g d 6d g d 6d g d 6g  d 6k s>t  | d i d d 6d d 6d d 6d d 6d d 6d d 6k s~t  | d i d d 6d d 6d d 6d d 6k st  | d i d d g d 6d g d 6g  d 6d g d 6k st  | d i d d 6d d 6d d 6d d 6k s t  | d i d d 6d d 6d d 6d d 6k sRt  | d i d d g d 6d g d 6g  d 6d g d 6k st  | d i d g d 6d g d 6d g d 6d g d 6k st  d  S(   Ni{   c         ` s:     j  d  d } |  | | | | | } | | | f S(   Ni   i    (   i   (   Ra   (   R3  t   mitsotR=  t   nitsott   nseqt   random_scalarR>  (   Re   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR7    s    R  R  iiR   R  R  R   i    t   inner_inp_from_outer_inpi   i   i   i   i   i   t   inner_out_from_outer_inpt   outer_out_from_outer_inpR,  t   inner_out_from_inner_inpt   outer_out_from_inner_inpt   outer_inp_from_inner_outt   inner_inp_from_inner_outt   outer_out_from_inner_outR+  t   inner_inp_from_outer_outt   inner_out_from_outer_out(   R\   R
   R]   R^   R   R   R  RW   R   R|   R   R}   R-  RH   (	   R3   R7  R3  t   non_seqR  Rf   Ry   R   t   mappings(    (   Re   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt!   test_oinp_iinp_iout_oout_mappings  sX    !!c         C` sr  d   } t  j   } t  j   } t  j   } d  t d | d d g  g } t j d | d | d | d |  \ } } t j | d	 j   | | | g  } t j | d
 j   | | | g  }	 t j	 | | | g | |	  }
 t j
 j } t j j d  j |  } t j j d  j |  } t j j d  j |  } |
 | | |  } t j d d d g d d d g d d d g d d d g d d d g d d d g d d d g d
 d
 d
 g d
 d
 d
 g d
 d
 d
 g g
  } | d  } t j d d d g  } t j | d	 |  t j | d
 |  t j | d |  t j | d |  t j | d |  t j | d |  d  S(   Nc         S` s   |  | | } | | f S(   N(    (   t   inp1t   inp2t   inp3R>  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR7    s    R  R  iR   R  R  R   i    i   i
   i   i   i   i   i   (   i
   i   (   i   i   (   R
   R   R   RW   R  R\   R   R   Rb   R   Rl   Rm   R%   R   R  R&   R   R   (   R3   R7  R3  t   out_initR  R  Rf   Ry   t	   g_output0t	   g_output1R   R(   R  t   out_init_valuet   non_seq_valueRu   t   expected_g_seqt   expected_g_out_initt   expected_g_non_seq(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_duplicate_outputs  sF    	%%
c         C` s<  d   } t  j   t  j   t  j   t  j   g } d  d  | d | d t d | d d d d g  t d | d	 d d d g  g } t j d
 | d | d d  \ } } t j | d j   | d  } | d j	 } | j
 j |  } g  t d  D]+ }	 g  t d  D] }
 |	 d k ^ q^ q } | | k s8t  d  S(   Nc         S` s0   |  | | | | | } | | | | | | f S(   N(    (   R  R  R  t   inp4t   inp5t   inp6R>  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR7  T  s    i    i   R  i   R  iii   R   R  R   i
   i   i   i   (   i   i   i   i   (   R
   R   R   RW   R  R\   R   R   Rb   R|   R}   R8  R  RH   (   R3   R7  R  R  Rf   Ry   R  R   R8  t   jR   t   expected_connection_pattern(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt.   test_grad_duplicate_outputs_connection_patternP  s    	" ;c   
   	   C` s   t  j j d  } t  j j d  } d } t  j j |  } t  j d d   d d  d | | g d |  \ } } | j   } t  j j | |  } t  j	 | | g |  }	 |	 d	 d
 d d g d
  d k s t
  d  S(   NR  R8   i  R   c         S` s   |  | | S(   N(    (   Rs  Rt  Ru  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   w  s    R  R  R   g      ?g       @g      g      @i&   (   R\   R
   R   R   R  R   RW   Rb   R   R   RH   (
   R3   R  R8   t   _max_coefficients_supportedRw  Rx  Rg   t   Pt   dPt   tf(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt(   test_grad_multiple_seqs_different_nstepsm  s    		c      	   C` s   t  j j d  } t  j j d  } d } t  j j |  } t  j d d   d d  d | | g d |  \ } } | j   } t  j j | |  j   } t  j j | |  }	 t  j	 | | g |	  }
 |
 d	 d
 d d g d
  d k s t
  d  S(   NR  R8   i  R   c         S` s   |  | | S(   N(    (   Rs  Rt  Ru  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  R   g      ?g       @g      g      @i*   (   R\   R
   R   R   R  R   RW   Rb   R   R   RH   (   R3   R  R8   R  Rw  Rx  Rg   R  R  t   ddPR  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_of_grad_of_state  s    		c         ` s  t  j j t j    } t | j d d! d d d d   } t | j d d" d d d d   } t | j d d# d d d d   } t | j d d$ d d d d   } t | j d d% d d d d   } t | j d d& d d d d   } t | j d d' d d d d   } t | j d d(   }	 t j | d	 d
  t j | d	 d   t j | d	 d  t j	 j
 d  }
 t j	 j
 d  } t j	 j d  } t j	 j d  } t j	 j d  }     f d   } t j | | | g d  t d |  t d | d d d g  g |
 d d  d d d t \ } } g  } | | d d g 7} | | d d g 7} | | d d g 7} t j | | | | |
 g | d | d t } t  j d) d  t j j } t  j d* d  t j j } t  j | d |  | d | t  j | |  | d <t  j | |  |	 d | d <x t d d  D]n } t  j | | |  | | | t  j | | d |  | | <t  j | | d |  | | d | | <qCW| | | | |	 |  \ } } } t j | | d  t j | | d  d  S(+   NRY   i   RZ   g      R[   g      @i   i   R   R   R   R   R   R   R   R   R   c         ` sE   | d t  j |  |  |  t  j |    | t  j |   g S(   Ni   (   R\   R   (   R   R   R   R   R  R   (   R   R   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  iiR   R   R   i    i   iiRg   R   R(   (   i   (   i   i   (   i   (   i   i   (   i   i   (   i   (   i   (   i   (   i   i   (   i   (   R%   R   R   R   R   Ro   Ra   R\   R   R
   R   R   R   RW   R  R   R   R"   R   Rl   Rm   R   R   R   (   R3   Re   R   R   R  R  R  R  R   R  R   R   R   R   R   R   R   Rg   Ru   R  R  R  R   R  R	  R
  (    (   R   R   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_return_steps  s^    $$$$$$$			.!c         C` s  t  j j d  } t  j j d  } t  j t  j d g  d | | g d d \ } } t  j | | g |  } | j j j   } t  j	 j
 d k r t g  | D] } t | j t j j  ^ q  s t  n  t j d d g d	 d	 g g d
 t  j	 j } t j d d g d d g g d
 t  j	 j }	 t j d d g d d g g d d g d d g g g d
 t  j	 j }
 t j | | |	  |
  d S(   s   
        Verify that scan optimizations are applied before blas
        optimizations.
        This is needed as otherwise, the dot won't become a dot22
        so it will be slower and won't get transferred to the gpu.
        R8   R[  R  R   R   i   R   g      ?g       @R(   g        i   i   N(   R\   R
   R   R   R   R   Rq   Rr   R   Rl   R   RS  R   R}   t   blast   Dot22RH   R%   R&   Rm   R   R   (   R3   R8   R[  RI  Rg   R4   R  R   R`  Ra  Rb  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_opt_order  s"    	4--6c         C` sy   t  j t j d
   } t  j d   d t d | d d g  d  g d d	 \ \ } } } t  j g  | j      } d  S(   Ni   i
   c         S` s
   |  |  g S(   N(    (   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  R  iR   i   (   i   i
   (	   R\   R   R%   R   R   R  RW   R   Rb   (   R3   R   R  Rl  Rg   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_savemem_opt  s    c   	      ` s  d       f d     f d   } t  j d  } t  j d  } t j d | | g d | | |   } t j j d  j t j j	  } t j j d  j t j j	  } t j
 | d  d   d
 f j d
  d  j   } | | |  } t j | |  d  S(   Nc         S` s   t  j | |  |  S(   N(   R
   R   (   t   x_t_tR.  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   inner_scan_step  s    c         ` sH   t  j   d |  d g d |  d g d | g d t d d \ } } | S(	   NR  i   R  i    R   Rd  R   t   the_inner_scan(   R\   R   R"   (   RO  R   R>  Ry   (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   outer_scan_step  s    	c      
   ` sO   t  j   d |  g d | g d t d d \ } } t j | j   |  } | S(   NR  R   Rd  R   t   the_outer_scan(   R\   R   R"   R
   R   Rb   (   R8   R   t   featuresRy   t
   return_val(   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   get_outputs  s    		R8   R   R   Ru   i   i   i    i   (   i   i   i   (   i   i   (   i   i   (   R
   RW  R   R\   R   R%   R   R  Rl   Rm   R  Rb   t	   transposeR   R   (	   R3   R  R8   R   R4   t   x_valuet   w_valueR%  R   (    (   R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_savemem_opt_0_step  s    		'!!1c         C` sK  d   } t  j d  } t  j d  } t j d d d | d t d | d	 d
 d g  g d |  \ } } | d d j   } t j | | g | d t d t } t  j	 | | | g  \ } }	 t j | | g |	 | g d t }
 t
 j j t j    } t
 j | j d d d d d d  d t j j } | j d d d d d d  d k  } d | | | | <t
 j | j d d d d d d  d t j j } | j d d d d d d  d k  } d | | | | <|
 | |  } t | | | g  } | j |  \ } } | d k rGt t j  j j | d | | | | j | f   n  d  S(   Nc         S` s   | | } | S(   N(    (   t   xdlt   xprevR   t   xnew(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   onestep"  s    
t   xinitR   R   i
   R   R  R  R  iiR   i   R  R   RY   i   RZ   g      ?R[   g      @R(   g        i   g      ?g{Gz?(   i   i   i   (   i   i   i   (   i   i   (   i   i   (   R
   RW  R   R\   R   R  Rb   R   R"   R   R%   R   R   R   R   R&   Ra   Rl   Rm   R   RS   R  RF  R  R2   (   R3   R  R  R   t   xseqRg   t   lossR  t   gwR2   R  Re   R  R>   t   v_wR  R  RS   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_multiple_taps_state  sD    				$$$$	c         ` s   t  j t j d       f d   } t  j | d d d d d t \ } } t | j    d } t j	 |    } t  j
 g  |  } |   d	 k s t  d  S(
   Ng      ?c           ` s&   g  t      t j d  f g  f S(   Ng      ?(   R   R%   R   (    (   t
   shared_var(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR  Q  s    R   i
   R   iR   i    i   (   R\   R   R%   R   R   R   R    R  R
   R   R   RH   (   R3   R  Ry   Rg   R  t   g_sht   fgrad(    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_numeric_sharedN  s    c         ` s  d
 } d } d d } t  j t j |   } | d  j |  } | d j |    t j d  } t j d  } | j | j d | j d | j d f  } t j | |  }	 |	 j | j d | j d d f  }
 t j	 j
  t  j    f d   d |
 d	 t j |
 d  g \ } } | j | j d | j d | j d f  } | | d j   } t j | |  } t j   } t j | | |  } d  S(   Ni   i   R  t   targeti    i   c         ` s    t  j |    |   S(   N(   R
   R   (   R8   R.  (   R  t   transfer(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  (   i   i   (   i   i   i   i	   (   R\   R   R%   t   emptyR/   R
   RW  R,   R   RM  R  R   R  RS  R   R  R:  (   R3   t   W1shapet   W2shapet   n_parst   parsR  R  R  t	   inpt_flatt   hidden_flatt   hiddent
   hidden_recRy   t   hidden_rec_flatR  t   d_cost_wrt_parsR:   t   Hp(    (   R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_rop_mitmot]  s0    

&c   
      C` s  t  j d  j d d  j t j j  } t  j d  j t j j  } | d  | d )d   } t j	   } t j
 t  j d d t j j  } t d | f d	 d g f g  d  g } t j d
 | d | d |  \ } } t j | g | d  }	 t  j | |	 |  k  st  d  S(   Ni
   ii   ii   c         S` s
   |  | f S(   N(    (   R8   t   x_tm4(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s    R(   R  R  R   R  R  (   i
   i   (   i   i   (   R%   R  R/   R  R\   Rl   Rm   R   R
   R   R   R   RW   R   R   RG   RH   (
   R3   R   t   exp_outR  R3  t   initial_valueR  t   resultsRg   R4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_seq_tap_bug_jeremiah  s    *	$c         C` s  t  j d  j d d  j t j j  } t  j d  j t j j  } | d  | d )d   } t j	   } t j
 t  j d d t j j  } t d | f d	 d g f g  d  g } t j d
 | d | d |  \ } } t j
 t  j d d t j j  }	 t |	 | d d f g  }
 t j | g | d d |
 } t  j | | |  k  s[t  t j | g | d j d d } t |  } t |  d k st  d  S(   Ni
   ii   ii   c         S` s
   |  | f S(   N(    (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s    R(   R  R  R   R  R  i    Rg   R   R   (   i
   i   (   i   i   (   i   i   (   R%   R  R/   R  R\   Rl   Rm   R   R
   R   R   R   RW   R   R   RG   RH   R,   R   R*   (   R3   R   R  R  R3  R  R  R  Ry   Rs   Rg   R4   t   f_infershapet   scan_nodes_infershape(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_borrow_bug_jeremiah  s*    *	!	c         C` sW  d   } t  j j   } d  d  d  d  t d | d d d d g  g } t  j | d | d d	 \ } } t  j | g |  } t  j j } | t	 j
 d
 d | j d	 d	   } t	 j d d d g d	 d d g d d d g d
 d d g d d d g d d d g g d | }	 |	 d d !|	 d d !|	 d d !|	 d d !|	 d	 d !g }
 t j | |
  d  S(   Nc         S` s=   | | d t  j j |  t  j j j | d  |  | | f S(   Ni   (   R\   R  t   disconnected_gradR
   R  t   assert_(   t   tap_m3t   tap_m2t   tap_m1(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s    
R  R  iiiR  R   i   i	   R(   i    i   i   i   i   i   i   i   i   i   i   i   i   i!   i*   i3   (   R\   R
   R   RW   R  R   R   Rl   Rm   R%   R  R/   R&   R   R   (   R3   R  t   initR  R   Ry   R   Rm   Ru   t   statest   expected_outputs(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt(   test_memory_reuse_with_outputs_as_inputs  s"    	!!'c         C` s   d   } t  j d  } t  j d  } t  j d  } t j | d | | | g d d \ \ } } } } | | | j   }	 t  j |	 |  }
 t  j |	 |  } |  j t t  j |	 |  | j   }	 |  j t t  j |	 |  d  S(   Nc         S` s0   d |  _  d | _  d | _  |  d | |  d f S(   NR8   R  RI  i   i   (   R   (   R   R   t   z_tm1(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s    			RR  R   R  R  R   i
   (   R
   R   R\   R   Rb   R   t   assertRaisesRI   (   R3   R  R   R   t   z0R8   R  RI  Ry   R  R  t   gy0(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_connectivity_matrix  s    	c         ` s   t  j d    t  j d  } t  j d  } t j   f d   d | d | d  g \ \ } } } t  j | | j      d  S(   NR  RN  i   c         ` s
   |   g S(   N(    (   Ry   R   (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  (   i   (	   R
   R   R   R   R\   R   RW   R   Rb   (   R3   RN  Rh  R   t   m2Ry   (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_disconnected_gradient
  s    c         ` s}   t  j d    t  j d  } t  j d  } t j   f d   d | d | d  g \ \ } } } t  j | j   |  d  S(   NR  RN  i   c         ` s   |  | |   g S(   N(    (   R8   R   (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  (   i   (	   R
   R   R   R   R\   R   RW   R   Rb   (   R3   RN  Rh  R   R
  Ry   (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_disconnected_gradient2  s    c   	      C` s   t  j d  } d   } t j | d | \ \ } } } t  j | j   | g  } t j | g |  } | t j j d   } t	 j
 | t j d   d  S(   NR  c         S` s   |  d } | d } | | f S(   Ni   (    (   R3  R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   )  s    

R  i   (   R
   R  R\   R   R   Rb   R   R%   R   R   R   R   (	   R3   R  R   R   R   Ry   t   gvR4   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_disconnected_gradient3"  s    	!c   	      C` s  t  j d  } t  j d  } t j d   d | j d d d  | j d d d  g d t  j |  g \ } } t j | | g | j j d d	  } t	 j
 j t j    } | j d
 d  j t j j  } | j d
 d  j t j j  } t j | | |  t	 j | j |   d  S(   NR[  R  c         S` s   | t  j |  |  S(   N(   R
   R   (   R|  R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   9  s    R  i    i   R8   R  iRY   i   (   i   i   (   i   i   (   R
   R   R\   R   t
   dimshuffleR  R   R|   R   R%   R   R   R   R   Ra   R  Rl   Rm   R   R   R  (	   R3   R[  R  t   SRy   R4   Re   Ra  t   vB(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_dot_optimization6  s    &!!c         ` s   t  j d    t  j d   t  j d   t  j d  } t j   f d   d | d d  d  g \ \   } t j     f d   d | d d	 \ } } t j | g |  t j d d t j j	  d  S(   Ni   i   R  c         ` s
      g S(   N(    (   Ry   (   t   bht   bv(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   H  s    R  R  c         ` s'   t  j t  j |        j   S(   N(   R
   R   R  (   R8   (   R   t   bh_tt   bv_t(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   K  s    R   i   i   R(   (   i   i   (   i   (   i   (   i   i   (
   R
   R   R   R\   R   RW   R   R%   Rl   Rm   (   R3   R  Ry   t   chain(    (   R   R  R  R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_pregreedy_optimizerC  s    c         C` s   t  j d  } t j d   d | g d d \ } } t j | g |  } g  | j j j   D]' } t | j	 t j
 j j  r^ | ^ q^ } t |  d k s t  d  S(   Nc         S` s   |  g d t  j j |   f S(   N(    (   R\   R   R  (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   S  s   	R  R   i   i   (    (   R
   R   R\   R   R   Rq   Rr   R   R   R}   R   R   R   R*   RH   (   R3   t   varR  Ry   t   tmp_fnR8   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt4   test_savemem_does_not_duplicate_number_of_scan_nodesQ  s    	c      
   ` s  t  j d  } t j t d     t  j d  } t  j d  }   f d   } t j | | t d | d d d	 g  | d  g d
 d  d d d t	 \ \ } } } } t j
 | | | g | | | g d | d t j d d  d t }	 t j j t j    }
 t |
 j d d   } |	 | d d d g d  } t j | d | d  t j | d | d  t j | d | d  t j   j   | d d  d  S(   NR.  g       @R|  R   c          ` s4   |  d } | d | d | d f i | d   6g S(   Ni    i   i   i   i   (    (   Rc   R   (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   rec_fnc  s
    

R  R  iiR   R   R   Rg   R   t   linkert   pyR   RY   i   i    i   i   i   i   (   i   (   R
   R   R\   R   Ro   R   R   R  RW   R   R   t   ModeR"   R%   R   R   R   R   Ra   R   R   (   R3   R.  R|  R   R  t   X1t   X2t   X3Rg   R4   Re   R   Rx   (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_eliminate_seqs]  s.    $!	c         ` s  t  j d  } t j t d     t  j d  } t  j d  }   f d   } t j | g  t d | d d d	 g  | d  g | d
 d d d d t	 \ \ } } } } t j
 | | | g | | | g d | d t j d d  d t }	 t j j t j    }
 t |
 j    } |	 | d d d g d  } t j | d | d  t j | d | d  t j | d | d  t j   j   | d  d  S(   NR   g       @R|  R   c          ` s4   |  d } | d | d | d f i | d   6g S(   Nig      ?g       @g      @g      @(    (   Rc   R   (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s
    

R  R  iiR   i   R   R   Rg   R   R  R  R   i    i   i   i   i   (   R
   R   R\   R   Ro   R   R   R  RW   R   R   R  R"   R%   R   R   R   R   Ra   R   R   (   R3   R   R|  R   R  R   R!  R"  Rg   R4   Re   R  Rx   (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_eliminate_nonseqs}  s0    !!	c         C` s   t  j t j d  d d } t  j j d d  } t  j d   d | d d  d | \ } } t  j | g t  j j	 | j
   |   } t j | d	 d
 g  d d d g d	 d	 d	 g d	 d	 d	 g g  d  S(   Ni   R   R   R  c         S` s   | |  S(   N(    (   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  R   i   i   i    (   i   i   (   R\   R   R%   R   R
   R   R   RW   R   R   Rb   R   R   (   R3   R   R  R  Ry   R4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt    test_grad_bug_disconnected_input  s
    **c         C` s   d   } t  j t j d d t  j j  } t j | | t j	 | d d  d t
 d  t j | | t j	 | d d  d t d  d  S(   Nc         S` sP   | r d d | } n d } t  j | d i |  | |  6} t  j g  |    S(   Ng?i    R  (   R\   R  R   (   R8   R  t	   mention_yR  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test  s
     g        R(   i   i   R&  gB5  )\?(   R\   R   R%   R1   Rl   Rm   R   R   R
   Rb   R   R"   (   R3   R'  R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt
   test_clone  s    		$))c         ` sx   t  j t j d d d d d   t j d  } t  j d   f d   d	 | d
 d  \ } } t j | d    d  S(   Ni    R(   R   R   R   R  R   c         ` s     S(   N(    (   Ru  (   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   i   i(   R\   R   R%   R&   R
   R  R   R   (   R3   R  R   Ry   (    (   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_grad_find_input  s    $	c   	      C` s"  t  j   } t  j   } t j d   d | d | d d \ } } t j d   d | d | d d \ } } | j j d j } t | j t j	 j
 j  s t  | j j d j } t | j t j	 j
 j  s t  t j	 j j   } | j | | g  st  | j | | g  st  d  S(   Nc         S` s   |  | S(   N(    (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  R   i   c         S` s    |  | t  j j |  d k  f S(   Ni    (   R\   R   R  (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    i    (   R
   R   R   R\   R   R|   R   R   R}   R   R   R   RH   t   scan_optt	   ScanMerget   belongs_to_set(	   R3   Rw   R   R  Ry   Rl  t
   scan_node1t
   scan_node2t   opt_obj(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_scan_merge_nodes  s"    !!c         C` s  t  j j d d  } t  j j d d  } t  j d   d | d d  d | g \ } } t  j d   d | d d  d | d	 | g \ } } t  j d
   d | d d  d | | d	 g \ } } t  j d   d | d d  d | d	 | d	 | g \ } } t  j d   d | d d  d | d	 | | d	 g \ } } t  j d   d | d d  d | | d	 | d	 g \ }	 } xh| | | | | |	 g D]N}
 t  j | | g |
 d t } | t j	 d d t  j
 j d d g  t |  } t |  d k st  | d	 } t | j d  t t | j d   k s5t  | j j | j j  } t |  d k set  t |  t t |   k st  | j j |  } t |  d k st  t |  t t |   k st  qWd  S(   NR   R   R  c         S` s   | |  S(   N(    (   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  R   c         S` s   | |  S(   N(    (   R   Ry   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    i    c         S` s   | |  S(   N(    (   R   R   Ry   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | |  S(   N(    (   R   Ry   t   _2R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | |  S(   N(    (   R   Ry   R   R1  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | |  S(   N(    (   R   R   Ry   R1  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   i   R(   i   i   (   i   i   (   R\   R
   R   R   R   RW   R   R  R%   R   Rl   Rm   R   R*   RH   R   t   setR}   t   inner_non_seqst   outer_non_seqs(   R3   R   R  R  Ry   Rl  t   y3t   y4t   y5t   y6R   R4   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt5   test_remove_constants_and_unused_inputs_scan_non_seqs  s8    &&&(
"$c         C` s  t  j j d d  } t  j j d d  } t  j j d d  } t  j d   d | d d  d | g \ } } t  j d	   d | | g d d  d | \ } } t  j d
   d | | d g d d  d | \ } } t  j d   d | d | g d d  d | \ } } t  j d   d | | | d g d d  d | \ }	 } t  j d   d | d | | g d d  d | \ }
 } t  j d   d | | d | d g d d  d | \ } } t  j d   d | d | g d d  d | | d | d g \ } } x| | | | |	 |
 | | g D]{} t  j | | | g | d d d t } | t j	 d t  j
 j  d d g t j	 d t  j
 j   t |  } t |  d k st  | d } t | j d  t t | j d   k st  | j j | j j  } t |  d k st  | j j |  } t |  d k s2t  | j j | j j  } t |  d k sbt  | j j |  } t |  d k st  qWd  S(   NR   R   R  RR   c         S` s   | |  S(   N(    (   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  R   c         S` s   | |  S(   N(    (   R   Ry   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | |  S(   N(    (   R   Ry   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   	  s    i    c         S` s   | | S(   N(    (   Ry   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | | S(   N(    (   Ry   R   R1  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | | S(   N(    (   Ry   R1  R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | |  S(   N(    (   R   Ry   R1  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    c         S` s   | | S(   N(    (   Ry   R   R   R1  t   _3(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R4  R  R   i   i   i   (   i   i   (   i   i   (   R\   R
   R   R   R   RW   R   R  R%   R   Rl   Rm   R   R*   RH   R   R2  R}   t
   inner_seqst
   outer_seqsR3  R4  (   R3   R   R  RR   R  Ry   Rl  R5  R6  R7  R8  t   y7t   y8R   R4   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt1   test_remove_constants_and_unused_inputs_scan_seqs   sN    ""&%		
"c   	      C` s   t  j d d  } t  j d d  } d   } t j d | d t  j t j d d t j  d	 | g d
 | d t	  \ } } | d d } t j
 j | |  } t d d t j t j | | g |  } | t j d d d d  d  S(   NR   R   t   Nb_stepsc      	   S` s]   d   } t  j d | d t j t j d d t j  d | g d d  \ } } |  | d	 S(
   Nc         S` s   |  | d j    S(   Ni   (   Rb   (   t	   sum_innerR   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt
   loss_inner9  s    R   R  i    R(   R   R   i   i(   R\   R   R
   t   as_tensor_variableR%   R1   R   (   t	   sum_outerR   RB  t   result_innerRy   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt
   loss_outer7  s    			R   R  i    R(   R   R   R   iR	  R
  i   R   i   (   i   (   R
   R"  R   R\   R   RC  R%   R1   R   R"   R  t   hessianR  R  R  R   R   (	   R3   R   R   RF  t   result_outerRy   R  t   HR4   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt$   test_hessian_bug_grad_grad_two_scans.  s    			c         ` s  d } t  j d d g d d g g  j t j j  } t j |    t  j d d g  j t j j  } t j d d d	 t j j  }   f d
   } d   } t j	 | d g  d | g d | d t
 } t j | g | d d  } t j	 | d g  d | g d   g d | d t }	 t j | g |	 d d  }
 | |  } |
 |  } t | |  j   } | t t j j k st  d  S(   Ni
   ii   i   ii   R   R   R(   c         ` s   t  j |     S(   N(   R
   R   (   R8   (   t   w_(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   _scan_loose]  s    c         S` s   t  j |  |  S(   N(   R
   R   (   R8   t   w_ns(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   _scan_strict`  s    R  R  R   Rd  i    R   (   R%   R&   R  R\   Rl   Rm   R   R
   R   R   R   R   R"   RB   RS  R#   RH   (   R3   R   R   R   t   x0_RL  RN  t	   ret_looset   f_looset
   ret_strictt   f_strictt   result_looset   result_strictR  (    (   RK  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_strict_modeU  s0    0$						c   	   
   ` s   d } t  j d d g d d g g  j t j j  } t j |    t  j d d g  j t j j  } t j d d d	 t j j  }   f d
   } t j	 | d g  d | g d | d t
 } t j | g | d d  } | |  } d  S(   Ni
   ii   i   ii   R   R   R(   c         ` s   t  j |     S(   N(   R
   R   (   R8   (   RK  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRL    s    R  R  R   Rd  i    (   R%   R&   R  R\   Rl   Rm   R   R
   R   R   R"   R   (	   R3   R   R   R   RO  RL  RR  RS  RU  (    (   RK  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_strict_mode_exy  s    0$		c         ` s-  t  j d  } t  j d  }   f d     d   _ t j j d    } t j d d   d t  j |  d	 | d
 | d |  \ } } | d } t j	 d | | g d | d |  } | t
 j d d d d d g d t j j d  t j j d k r  j d d k s)t  n   j d k s)t  d  S(   NR   R[  c         ` sP   xI | j  D]> } t | d t j  r
   j | d d k j   7_ q
 q
 Wd  S(   Ni    i
   (   Ru   R   R%   RF   t   large_countRb   (   R   R   R   R   (   t   detect_large_outputs(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRY    s    i    t	   post_funcR   c         S` s   |  | S(   N(    (   t   prior_resultR[  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   R   R   iR   Ru   Rg   i   i   g?i   R(   i   R   R   (   R   s	   DebugMode(   R
   R   R   RX  R\   Rp  t   MonitorModeR   t	   ones_likeR   R%   R1   Rl   Rm   R   RH   (   R3   R   R[  R   R0  Rg   t   final_resultR4   (    (   RY  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_monitor_mode  s&    			
	1(   RT   RU   R   R	   t   skipifR   R\   Rp  R   R  t	   debugmodeR   R   R   R   R   R   R   R   R   R  R  R  R&  R2  R:  RC  RH  RK  R\  Rd  Rg  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R   R$  R%  R!  RM  RO  RQ  RS  RW  RZ  Rc  Rj  Rk  Rm  Rn  Ro  Rp  Rs  R  R  R  R  R  R  R  R  R  R  R  R  R  t   configparsert   change_flagsR	  R  R  R  R  R   R#  R%  RN  RO  RU  R[  Rb  Rd  Ri  Rj  Rk  Rn  Ro  Rq  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%  R(  R)  R0  R9  R?  RJ  RV  R   Rf  t   fgt   MissingInputErrorRW  R_  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR      s  	/	'		"	&	%	4	Y			 	 				!	-	%	@	G		e				B				%		2	?^E	O	:			M						!								?		:	%	1	2	/	%		*		C		K				!	!	"M	I		"	%								8	 						?	7				>			+	/		4		%	,								 	!						(	.'	$t   ScanGpuTestsc           B` sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s   This class defines a number of tests for Scan on GPU as well as a few
    helper functions for these tests. The GPU tests defined in this class are
    independant of the GPU backend used. Because of this, a class inheriting
    from ScanGpuTests should define the following attributes and methods to
    make the tests run on a specific backend :
    - self.gpu_backend : Reference to the backend module
    - self.mode_with_opt : Compilation mode to force usage of the gpu backend
    - self.is_scan_on_gpu(node) : Method to determine is a scan node has been
                                  moved to run on a gpu under the specific
                                  backend. Returns a boolean.
    c         C` s)  d   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } |  j j d  } t  j | | | | | g d d  d d	 d
 t d | \ } } |  j	 j
 |  } t  j | | | | g | d | d t d |  j }	 t j j t j    }
 |
 j d d d d d d  } |
 j   } |
 j   } |
 j   } t j | d d } t j | d d } t j | d d } t j | d d } t j d  } | d | | | | d <x9 t d d  D]( } | | | | | d | | | <qW|	 | | | |  } t j | |  |	 j j j   } g  | D]' } t | j t  j j j  r5| ^ q5} t |  d k szt   | d } |	 j j j   } t! g  | D] } t | j |  j	 j"  ^ q d k st   t! g  | D] } t | j |  j	 j#  ^ q d k st   g  | D]' } t | j t  j j j  r| ^ q} t |  d k s\t   | d } | j j$ j j j   } t% g  | D] } t | j |  j	 j&  ^ q st   t% g  | D] } t | j |  j	 j"  ^ q st   t% g  | D] } t | j |  j	 j#  ^ q s%t   d  S(   Nc         S` s   |  | | | S(   N(    (   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   R   R   R   t   InputToGpuOptimizerR   R   iR   R   Rg   R   RY   i   RZ   g      R[   g      @R(   R   i    i   (   i   (   i   ('   R\   R
   R"  R  t   mode_with_gpuR  R   RW   R   t   gpu_backendt   gpu_from_hostR   R"   R%   R   R   R   R   Ra   R1   R   R   R   Rq   Rr   R   R   R}   R   R   R   R*   RH   Rb   t   HostFromGput   GpuFromHostR   RS  t   GpuElemwise(   R3   R   R   R   R   R   R   R   Rg   R   Re   R   R   R   R   R   R  R   R   t   scan_node_topo(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt)   test_one_sequence_one_output_weights_gpu1  sp    		&'
77'
12c         C` sL  d   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j | | | | | g d d  d d d	 t d
 |  j \ } } t  j | | | | g | d | d t	 d
 |  j } t
 j j t j    }	 |	 j d d d d d d  }
 |	 j   } |	 j   } |	 j   } t
 j d  } |
 d | | | | d <x9 t d d  D]( } |
 | | | | d | | | <qVW| |
 | | |  } t j | |  | j j j   } t g  | D] } t | j |  j j  ^ q d k st  t g  | D] } t | j |  j j  ^ q  d k s3t  g  | D]' } t | j t  j j j  r:| ^ q:} t  |  d k st  | d } | j j! j j j   } t" g  | D] } t | j |  j j#  ^ q st  t" g  | D] } t | j |  j j  ^ q st  t" g  | D] } t | j |  j j  ^ q sHt  d  S(   Nc         S` s   |  | | | S(   N(    (   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R   R   R   R   R   R   iR   R   Rg   R   RY   i   RZ   g      R[   g      @i    i   (   i   (   i   ($   R\   R
   R"  R  R   RW   R   Rh  R   R"   R%   R   R   R   R   Ra   R   R   R   Rq   Rr   R   Rb   R   R}   Ri  Rk  RH   Rl  R   R   R   R*   R   RS  Rm  (   R3   R   R   R   R   R   R   Rg   R   Re   R   R   R   R   R   R  R   R   Rn  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt)   test_one_sequence_one_output_weights_gpu2  sZ    		&77'
12c         C` s  d   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j | | | d  g | | g d d  d d d	 t d
 |  j \ } } t  j | | | | g | d | d t	 d
 |  j } t
 j j t j    }	 |	 j d d d d d d  }
 |	 j   } |	 j   } |	 j   } t
 j d  } t
 j d d d } |
 d | | | | d <|
 d | | d <x\ t d d  D]K } |
 | | | | d | | | <t
 j |
 | | | d  | | <qW| |
 | | |  \ } } t j | |  t j | |  | j j j   } g  | D]' } t | j t  j j j  r&| ^ q&} t |  d k skt  | d } |  j |  st  d  S(   Nc         S` s&   |  | | | t  j |  | d  f S(   NR   (   R
   R  (   R   R   R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   R  s    R   R   R   R   R   R   iR   R   Rg   R   RY   i   RZ   g      R[   g      @R(   R   i    i   (   i   (   i   (   i   (   R\   R
   R"  R  R   RW   R   Rh  R   R"   R%   R   R   R   R   Ra   R   R   R   R   Rq   Rr   R   R   R}   R   R   R   R*   RH   t   is_scan_on_gpu(   R3   R   R   R   R   R   R   Rg   R   Re   R   R   t   v_out1t   v_out2R   t   theano_out1t   theano_out2R  R   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_gpu3_mixture_dtype_outputsP  sN    			"''
c   	      ` s   t  j j t j    } t  j | j d d d d d d } t j |  } t j	 j
 j t j        f d   } t j | g  | g  d	 d
 d d d t d |  j \ } } t j g  | d d | d t d |  j } |   } d  S(   Ni   g      ?RY   i   i   R(   R   c         ` s&     j  |  j d d d d d d |  S(   NR   i   R:   g333333?R(   R   (   R  R,   (   R  (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR4     s    R   i
   R   iR   R   Rg   R   (   i   i   (   R%   R   R   R   R   R&   R  R\   R   R  R  R  R   R   Rh  R   R"   (	   R3   Re   R  R  R4   R  Rg   R   R  (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s*    			
c         ` s  d } d } d } d } d } t  j d d  } t  j d d  } t j j } t j t j | | f d d	 d d
 }	 t j t j | | f d d	 d d   t j t j | | f d d	 d d }
 |	   |
 g } t  j | |	  }   f d   } t  j	 t j
 d d d	 | |  } t j | d | g d | g d |  j \ } } t  j | |
  } t  j | | d  } t  j | |  } t t | d   t | |  D   } t j | | g | d | d |  j } | j j j   } g  | D]' } t | j t j j j  r| ^ q} | d } t | j  d k sTt t | j    | t j | | | f d d	 t j | | | f d d	  d  S(   Nid   i  i   i   R   t   xint   youtR(   R   t   W_xin_to_l1t
   W_l1_to_l1t
   W_l1_to_l2c         ` s   |  t  j |    S(   N(   R
   R   (   t   baselinet	   last_step(   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   scan_l  s    g        R  R  R   c         s` s   |  ] \ } } | | Vq d  S(   N(    (   R   R   R@  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pys	   <genexpr>  s    Rg   i   (   R
   R  R\   Rl   Rm   R   R%   R   R   R  R1   R   t   mode_with_gpu_nodebugRb   R   R    RJ   R   Rq   Rr   R   R   R}   R   R   R   R*   Ru   RH   (   R3   R6  R7  R5  t   mb_sizet	   mb_lengthRw  Rx  Rm   R.  R   t   nparamst   l1_baseR~  t   zero_outputt   l1_outRy   t   l2_outR  t   gradsRg   t   feval_backpropR   R   R   t   grad_scan_node(    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_gpu_memory_usage  sJ    !	!	!		($
*c         C` s  d   } t  j j   } t  j j   } d  | g } t  j | d | g d | d |  j \ } } | d j   } | d j   } t  j | | g | | g d |  j }	 |	 t j	 d d d	 t j	 d d d	  }
 t j
 d d
 g d d	 t j
 d d g d d	 f } t j |
 |  d  S(   Nc         S` s<   |  | j    } | j d d  } | j    | } | | f S(   Ni   i    (   Rb   R  (   R  t   recurrent_outt   tempR  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s    R  R  R   i    i   i   R(   R   i   i   i   (   i   i   i   (   i   i   i   (   R\   R
   R  RW   R   Rh  R.   R   R%   R   R&   R   R   (   R3   R  RJ  R  R  R   Ry   R   R   R   R   R%  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_memory_reuse_gpudimshuffle  s     	(	   RT   RU   RV   Ro  Rp  Rv  R  R  R  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRf    s   	M	=	4		Jt   T_Scan_Cudac           B` s;   e  Z d  Z d   Z d   Z d   Z d   Z d   Z RS(   s   This class takes the gpu tests for scan that are defined in
    class ScanGpuTests and runs them using the cuda backend. It also adds
    tests specific to the cuda backend
    c         O` sH   d d l  m } | |  _ t |  _ t |  _ t t |   j | |   d  S(   Ni    (   t   cuda(   t   theano.sandboxR  Ri  Rh  R  R   R  RA   (   R3   Rc   Rd   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRA     s
    			c         C` s<   |  j  j s t d   n  t j   t t |   j   d  S(   Ns   Optional package cuda disabled(   Ri  t   cuda_availableR   R   R   R   R  R   (   R3   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    
c         C` s   | j  j j d t  S(   NR   (   R}   t   infot   getR   (   R3   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRq  #  s    c         C` s   t  j } | d k r@ t d | j | j | j | j f   n  t j j	 t j j
 t   } t j j | d  } t t t j t | d   d  S(   Ni   s   This test relies on a pickled file produced with Python 2. The current python version (%i.%i.%i.%i) is >= 3 so the test will be skipped.s   inconsistent_scan.pklt   r(   i   (   R  t   version_infoR   t   majort   minort   microt   serialR   t   patht   dirnamet   abspatht   __file__R  R   t	   TypeErrorR   R   R   (   R3   t   versiont   folderR  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_inconsistent_inner_fct&  s    	c         ` s   t  j j j d t    t  j   f d   d d \ } } t j t j |   t  j	 g  | d |  j
 } t |  } t |  d k s t  |  j | d  s t  d  S(   Nt   use_cudac           ` s     j  d d d S(   Ni   R(   R   (   i   (   Ra   (    (   t   rs(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   @  s    R   i   R   i   i    (   R\   R  R  R  R"   R   R   t   loadst   dumpsR   Rh  R   R*   RH   Rq  (   R3   R   Ry   R   R   (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_consistent_inner_fct;  s    (   RT   RU   RV   RA   R   Rq  R  R  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s   				t   T_Scan_Gpuarrayc           B` s)   e  Z d  Z d   Z d   Z d   Z RS(   s   This class takes the gpu tests for scan that are defined in
    class ScanGpuTests and runs them using the gpuarray backend.
    c         ` s{   d d l  m     |  _   f d   } | |  j _ t j d d  |  _ t j d d  |  _ t	 t
 |   j | |   d  S(   Ni    (   t   gpuarrayc         ` s     j  d   |   S(   N(   Rl  RW   (   R  (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRj  V  s    R  R   (   R\   R  Ri  Rj  R  Rr  Rh  R"  R  R   R  RA   (   R3   Rc   Rd   Rj  (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRA   Q  s    	c         C` sH   d d  l  } |  j j s' t d   n  t j   t t |   j   d  S(   Ni    s   Optional package pygpu disabled(	   t   theano.gpuarray.tests.configRi  t   pygpu_activatedR   R   R   R   R  R   (   R3   R\   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   ^  s
    
c         C` s   | j  j j d t  S(   Nt   gpua(   R}   R  R  R   (   R3   R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyRq  i  s    (   RT   RU   RV   RA   R   Rq  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR  L  s   		c          C` s  t  j j s t d   n  t j d  j t  j j  j d d  }  t	 j	   } x/ t
 d d  D] } |  | c |  | d 7<qa Wt	 j	   } t d | |  t j d  j t  j j  j d d  }  t	 j	   } t |  d  } t |  d   } t rAx t r=y  t |  } | t |  7} Wq t k
 r9Pq Xq WnB x? t ry  t |  } | t |  7} WqDt k
 r~PqDXqDWt	 j	   } t d | |  t j d  j t  j j  j d d  }  t j   } t  j d	 d
   d | d g d t j |  d  d t  j d d   \ } }	 |	 s0t  t  j | g |  }
 t	 j	   } |
 |   t	 j	   } t d | |  t j d  j t  j j  j d d  }  t  j |   } t  j t j d   } t j | | | | d d t } t  j g  g  d t | | d f | | f g  d t  j d d  }
 t |
 _ t	 j	   } |
 j } x t
 d  D] } |   q^W|
   t	 j	   } t d | |  d  S(   Ns0   G++ not available, so we need to skip this test.i'  i  i
   i   t   pythonis   python with builtin iteratorR   c         S` s   |  | S(   N(    (   R   t   rii(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  i    R   R  t   cvms   theano (scan, cvm)t   tolerate_inplace_aliasingRg   i  s   theano (updates, cvm)(   R\   Rl   t   cxxR   R%   R  R  Rm   R/   t   timeR   R  t   iterR   R"   t   nextt   StopIterationR
   R   R   R  R  RH   R   R   R&   t   inc_subtensorR   R   t   _check_for_aliased_inputsR   (   R  t   t0R   t   t1t   r_it   r_iit   tmpt   s_rt   s_yRg   R4   t   t2t   t3t   shared_rt   s_it   s_rinct   f_fn(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt
   test_speedn  st    **			*
*				c          ` s  t  j j s t d   n  d }  d } t j j d  t j |  |  j t  j j	  j
 |  |  } t j j | |  j t  j j	    t j   } x> t d |   D]- } t j t j | | d     | | <q Wt j   } t d | |  t j |  |  j t  j j	  j
 |  |  } t j   } t  j d   f d   d	 | d g d
 t j | d  d t  j d d   \ } } | st  t  j | g | d t  j d d  }	 t j   }
 |	 |  t j   } t d | |
  t j |  |  j t  j j	  j
 |  |  } t  j    } t  j |  } t  j j j d  } t j | | t  j j t  j j | | d     d t } t  j g  g  d t | | d f | | f g  d t  j d d  }	 |	 j } t j   }
 | d |  d  |	   t j   } t d | |
  d  S(   Ns0   G++ not available, so we need to skip this test.i'  i2   i<& i   R  R   c         ` s   t  j t  j |     S(   N(   R
   R,  R   (   R   R  (   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  i    R   R  R  s   theano (scan, cvm)R  Rg   t   n_callsi   s   theano (updates, cvm)(   R\   Rl   R  R   R%   R   R+  R  R  Rm   R/   RY  R  R   R,  R   R  R
   R   R   R  R  RH   R   R   R   Rs   R  R"   R   R   (   RZ  t   NR  R  R   R  R  R  Rg   R4   R  R  t   s_wR  R  R  R  (    (   R   sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_speed_rnn  s^    .$+.	'
.				c       	   C` s5  t  j j s t d   n  d }  d } d } t j j d  t j | |  |  j t  j j	  j
 |  | |  } t j j | |  j t  j j	  } t j   } x> t d |   D]- } t j t j | | d |   | | <q Wt j   } t d | |  t j | |  |  j t  j j	  j
 |  | |  } t  j |  } t  j |  }	 t  j j j d  }
 t j |	 |
 t  j j t  j j |	 |
 d |   d t } t  j g  g  d	 |
 |
 d f |	 | f g d
 t  j d d  } | j } t j   } | d |  d  |   t j   } t d | |  d  S(   Ns0   G++ not available, so we need to skip this test.id   i2   i  i<& i   R  R  Rg   R   R  R  R  i   s   theano (updates, cvm)(   R\   Rl   R  R   R%   R   R+  R  R  Rm   R/   RY  R  R   R,  R   R  R   R   Rs   R
   R  R"   R   R  R   (   RZ  R  R  R  R   R  R   R  R  R  R  R  R4   R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_speed_batchrnn  sH    5$+					t   __main__s"    Use nosetests to run these tests c          C` s   t  j j }  d t  j _ z t j d  } t j d d t  j j } | | j _	 t  j
 t j d d t  j j d d } t  j d d   d	 | | g  \ } } | s t  d
 | _ t j | j   |  } Wd  |  t  j _ Xd  S(   NR  R8   i   R(   R   R  R   c         S` s   |  | S(   N(    (   R   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  RI  (   R\   Rl   R  R
   R   R%   R   Rm   R  R  R   R  R   RH   R   R   Rb   (   t   backupR8   t   xvR  RI  Rg   R@  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_compute_test_value  s    !				c          C` s   t  j j }  d t  j _ z t j d  } t j d d t  j j } | | j _	 t  j
 t j d d t  j j j d d  d d } t  j d d	   d
 | g d | g  \ } } | s t  d | _ t j | j   |  } Wd  |  t  j _ Xd  S(   NR  R8   i   R(   i	   R   R  R   c         S` s   |  | S(   N(    (   R   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R   RI  (   R\   Rl   R  R
   R   R%   R   Rm   R  R  R   R  R/   R   RH   R   R   Rb   (   R  R8   R  R  RI  Rg   R@  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_compute_test_value_nonseq  s"    '					c    
      C` sY  t  j d d d d d d d d d d d d g d	 d
 }  t j j } t j j } z d t j _ d t j _ t j d d  } |  | j _	 | j
 d  } t j t  j d d	 d
  } t  j d d	 d
 | j _	 d   } t j d | d | d t j | j d d	 d d | g  \ } } | d }	 t j |	 |  Wd  | t j _ | t j _ Xd  S(   Ni   i   i   i   i   i   i   i   R(   R   R  R[   R   R   i    c      
   S` s   t  j t j d d d  } t j d d d | j _ d   } t j d | d | d t  j | j	 d d d	 d
 |  | g  \ } } | d } | | S(   Ni    R(   R   c         S` s   | j    j    j    | S(   N(   Rb   (   t   tit   sum_tit   miR   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   loss_ti  s    R   R  R  i   R  R   i(
   R
   RC  R%   R1   R  R  R\   R   R  R,   (   R  t   sum_miR   t
   outputs_tiR  t	   result_tiRy   t   lossmi(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   loss_mi  s    		
R   R  R  R  R   i(   i   i   i   (   R%   R&   R\   Rl   R  t   exception_verbosityR
   R"  R  R  R/   RC  R1   R   R  R,   R   (
   t   WEIGHTt   old_compute_test_valt   old_exception_verbosityt   W_flatR   t
   outputs_miR  t	   result_miRy   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_compute_test_value_grad   s.    0			
c          C` s  t  j j }  t  j j } d t  j _ z t j d  } t j d d d d g d d d	 d
 g g d |  | j _	 t  j
 t j j d d  j |   d d } t  j d   d d  d g d | | g d d \ } } t  j | d j   |  Wd  | t  j _ Xd  S(   NR  R>  i   i   i   i   i   i   i   i   R(   R   R   c         S` s   t  j | |  |  |  f S(   N(   R\   R   (   R   R>  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   A  s    R  i    R   R   (   R\   Rl   Rm   R  R
   R   R%   R&   R  R  R   R   RY  R  R   RW   R   Rb   (   Rm   R  R>  R   Ru   Ry   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt!   test_compute_test_value_grad_cast3  s    *-c          C` sp   t  j d   d t j d  d d \ }  } t  j j } d t  j _ z t  j g  |     Wd  | t  j _ Xd  S(   Nc         S` s   |  d S(   Ni   (    (   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   M  s    R  R   i
   R  (    (   R\   R   R
   R   Rl   R  R   (   R#  Ry   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_constant_folding_n_stepsJ  s    c          C` s   t  j d  }  t  j d  } d   } i | d 6d g d 6} t t t j | |  |  i | d 6d d g d 6} t t t j | |  |  t d  d	 S(
   s8   Checks that errors are raised with bad output_info taps.R8   R  c         S` s   |  g S(   N(    (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR   ]  s    R  i    R  it   doneN(   R
   R"  R   RI   R\   R   R  (   R8   R  R4   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_outputs_taps_checkY  s    	c    
   	   ` s  d     f d   }  t  j j d  } d  d } |   | f d       f d   } t  j | d | d	 t  j j  d
  d |  g \ } } t  j j |  } t  j j |    }     d | f g } t  j | g d | d | }	 |	 t j	 j
 d   j | j   d  S(   Nc         S` s   t  j |  d t j j S(   NR(   (   R%   R1   R\   Rl   Rm   (   RR  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   floatxf  s    c         ` s&   t  j   t j j |    d  |  S(   Ng?(   R\   R   R%   R   RY  (   R,   R   (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   init_weightsi  s    RR  i   i   t   W_xc         ` s4   t  j j |  d  f  }  t  j j |     } | S(   Ni   (   R\   R
   R/   R   (   R8   t   pre_h(   R  t   in_size(    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   _activeq  s    R  R  g        i   g?Ru   Rg   i
   (   R\   R
   R   R   R  RS  R   R   R%   R   R  R  R(   (
   R  RR  t   out_sizeR  Rn   t   scan_updatesR  t   gW_xRg   R4   (    (   R  R  R  sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_default_value_broadcastede  s    	*t   TestInconsistentBroadcastc           B` s   e  Z d    Z RS(   c      
   C` s   t  j   } t  j t j d
   } t j d d   d | d t d |  g  \ } } |  j t	   t  j
 | j   |  } Wd  QXt  j | d d  } t j d d	   d | d t d |  g  \ } } t  j
 | j   |  } d  S(   Ni   i
   R   c         S` s   |  | S(   N(    (   R8   t   prev_x(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    R  R  R  i    c         S` s   |  | S(   N(    (   R8   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR     s    (   i   i
   (   R
   RW  R  R%   R   R\   R   R  R  R  R   Rb   t   unbroadcast(   R3   R8   t	   initial_xR  Rg   t   gs(    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   test_raise_error  s    (   RT   RU   R  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyR    s   (N   t
   __future__R    R   R   R   R   R  t   tempfileR   R  t   unittestR-   t   collectionsR   t   six.moves.cPicklet   movest   cPickleR   t	   six.movesR   R%   t   nose.plugins.skipR   t
   nose.toolsR   R   t   numpy.testingR	   R\   t   theano.sandbox.rng_mrgR
   t   theano.compile.pfuncR   t   theano.testsR   R   t   theano.scalar.sharedvart   theano.scan_module.scan_opR   t   theano.compatR   t   theano.tests.unittest_toolsR   Rl   R   Rp  Rq  R  R  Rr  Rh  R"  R  R#   R   Rj   Ro   R{   R   R   t   TestCaseR   Rf  R  R  R  R  R  RT   R  R  R  R  R  R  R  R  R  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/scan_module/tests/test_scan.pyt   <module>   s   

k					                 X>"	U	L	@
|			3				