
Xc           @` s	  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l m Z d  d l m Z d  d l m Z m Z d  d l Z d  d l j Z d  d l m Z m Z d  d l m Z d  d l m Z m Z d  d	 l m Z d  d
 l m Z d  d l m Z d  d l m  Z  d  d l m! Z! d  d l m" Z" d  d l# m$ Z$ d  d l% j& j' Z' d  d l% m( Z( m) Z) m* Z* m+ Z+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 m1 Z1 m2 Z2 m3 Z3 m4 Z4 m5 Z5 d  d l m& Z& d  d l m& Z6 d  d l7 m Z m8 Z8 m9 Z9 m: Z: m; Z; d  d l7 m< Z< m= Z= m> Z> m? Z? d  d l7 m@ Z@ mA ZA mB ZB mC ZC d  d l7 mD ZD mE ZE mF ZF mG ZG d  d l7 mH ZH mI ZI mJ ZJ mK ZK mL ZL mM ZM mN ZN mO ZO mP ZP mQ ZQ mR ZR mS ZS d  d lT mU ZU d  d lV mW ZW d  d lX mY ZZ d  d l[ m\ Z\ m] Z] d  d l^ m_ Z_ e j j` Za ea d k rTd Za n  e j j` j ea  Za e] e)  Zb e  jc d d g  Zd d  ed _e e jf jg ed  Zd e  jc d d g  Zh d! eh _e e jf jg eh  Zh e  jc d d g  Zi e jf jg ei  Zi d"   Zj d d#  Zk d  d  f d  d  f d  d  f d$  Zl d% e	 jm f d&     YZn d'   Zo d(   Zp d) e	 jm f d*     YZq d+ e	 jm f d,     YZr d-   Zs d.   Zt d/   Zu d0   Zv d1 e	 jm f d2     YZw d3 e j jx jy f d4     YZz d5 e	 jm f d6     YZ{ d7   Z| d8   Z} d9   Z~ d:   Z d;   Z d<   Z d= e	 jm f d>     YZ d? e	 jm f d@     YZ dA e	 jm f dB     YZ dC e	 jm f dD     YZ dE e	 jm f dF     YZ dG e	 jm f dH     YZ dI   Z dJ   Z dK   Z dL e	 jm f dM     YZ dN   Z dO   Z dP   Z dQ e	 jm f dR     YZ dS e	 jm f dT     YZ dU e	 jm f dV     YZ dW e	 jm f dX     YZ dY eZ j f dZ     YZ d[   Z d\ e	 jm f d]     YZ d^   Z d_   Z d`   Z da e	 jm f db     YZ dc e	 jm f dd     YZ de e	 jm f df     YZ dg e	 jm f dh     YZ di   Z dj   Z dk e	 jm f dl     YZ dm e	 jm f dn     YZ do e	 jm f dp     YZ dq e	 jm f dr     YZ ds e	 jm f dt     YZ du e	 jm f dv     YZ dw e	 jm f dx     YZ dy e	 jm f dz     YZ d{ e	 jm f d|     YZ d} eZ j f d~     YZ d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d e	 jm f d     YZ d e	 jm f d     YZ d e	 jm f d     YZ d   Z d e	 jm f d     YZ d   Z d eZ j f d     YZ d e	 jm f d     YZ d   Z d e	 jm f d     YZ d   Z d   Z d   Z d   Z d   Z e d  Z e d  Z d   Z d   Z d   Z d S(   i    (   t   absolute_importt   print_functiont   divisionN(   t   xrange(   t   SkipTest(   t   assert_raisest   assert_true(   t   PY3t   StringIO(   t   compile(   t   deep_copy_opt
   DeepCopyOp(   t   get_mode(   t   config(   t   function(   t   gof(   t   pprint(   t   shared(   t   FunctionGraph(   t   local_add_specializet   local_dimshuffle_liftt#   local_useless_dimshuffle_in_reshapet   local_useless_alloct   local_merge_alloct   local_greedy_distributort   local_useless_reshapet   local_reshape_to_dimshufflet   mul_canonizert   Shape_it   Assertt
   MakeVectort   make_vectort   local_canonicalize_alloc(   t   tensor(   t   scalart   iscalart   lscalart   fscalart   dscalar(   t   vectort   lvectort   fvectort   dvector(   t   matrixt   fmatrixt   dmatrixt   tensor3(   t   vectorst   matricest	   fmatricest	   dmatrices(   t   AdvancedSubtensort   AdvancedSubtensor1t   as_tensor_variablet   IncSubtensort   AdvancedIncSubtensort   AdvancedIncSubtensor1t   inplacet   Joint   joint	   Subtensort
   TensorTypet   tile(   t
   DimShuffle(   t   values_eq_approx_remove_nan(   t   unittest_tools(   t   check_stack_tracet   out2in(   t   attrt   FAST_COMPILEt   FAST_RUNt   includet   fast_rung)\(?gGz @c         C` s   t  |  j j |  |   S(   N(   R?   t   typet   broadcastable(   t   xt   y(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   dsY   s    c         C` sd   | d k r t  j |   nD | d k r8 t j |   n( | d k rT t j |   n t |   |  S(   NRH   t
   specializet	   stabilize(   t   _optimizer_fast_runt   optimizet   _optimizer_specializet   _optimizer_stabilizet
   ValueError(   t   gt   level(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRQ   ]   s    c         C` s^   t  d |  d d  d  } t  d | d d  d  } t  d | d d  d  } | | | f S(   NRJ   t   dtypet   float64RK   RL   t   z(   R=   (   t   xbct   ybct   zbcRK   RL   RY   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   inputsi   s    t   test_dimshuffle_liftc           B` sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s   t    \ } } } t t | d  d  } t | g | g  } |  j t |  d k  t j |  |  j t |  d k  d  S(   Ni   i    s3   [InplaceDimShuffle{1,0}(InplaceDimShuffle{1,0}(x))]s   [x](   i   i    (   i   i    (   R]   RM   R   t
   assertTruet   strt   dimshuffle_liftRQ   (   t   selfRK   RL   RY   t   eRU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_double_transposeq   s    c         C` s   t    \ } } } t t | d	  d
  } t | g | g  } |  j t |  d k t |   t j |  |  j t |  d k t |   |  j t | d d  d  S(   Ni   RK   i    i   s9   [InplaceDimShuffle{2,0,x,1}(InplaceDimShuffle{1,x,0}(x))]s   [InplaceDimShuffle{0,1,x,x}(x)]t   ops_to_checkt   all(   i   RK   i    (   i   i    RK   i   (   R]   RM   R   R_   R`   Ra   RQ   RB   (   Rb   RK   RL   RY   Rc   RU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_merge2z   s    "c         C` s   t    \ } } } t t t | d  d  d	  } t | g | g  } |  j t |  d k t |   t j |  |  j t |  d k t |   d  S(
   Ni    RK   i   i   sQ   [InplaceDimShuffle{1,0}(InplaceDimShuffle{2,0,x,1}(InplaceDimShuffle{0,x,1}(x)))]s   [x](   i    RK   i   (   i   i    RK   i   (   i   i    (   R]   RM   R   R_   R`   Ra   RQ   (   Rb   RK   RL   RY   Rc   RU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt
   test_elim3   s    !c   
      C` s   t  t g d t g d t g d  \ } } } | | | } t | | | g | g  } d } d } |  j t |  | | f k t |   d } d }	 t j |  |  j t |  | |	 f k t |   |  j t | d d	  d  S(
   Ni   i   i   so   [Elemwise{add,no_inplace}(InplaceDimShuffle{x,0,1}(Elemwise{add,no_inplace}(InplaceDimShuffle{x,0}(x), y)), z)]sa   [Elemwise{add,no_inplace}(DimShuffle{x,0,1}(Elemwise{add,no_inplace}(DimShuffle{x,0}(x), y)), z)]sq   [Elemwise{add,no_inplace}(Elemwise{add,no_inplace}(InplaceDimShuffle{x,x,0}(x), InplaceDimShuffle{x,0,1}(y)), z)]sc   [Elemwise{add,no_inplace}(Elemwise{add,no_inplace}(DimShuffle{x,x,0}(x), DimShuffle{x,0,1}(y)), z)]Re   Rf   (   R]   t   FalseR   R_   R`   Ra   RQ   RB   (
   Rb   RK   RL   RY   Rc   RU   t   init_str_g_inplacet   init_str_g_noinplacet   opt_str_g_inplacet   opt_str_g_noinplace(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt	   test_lift   s    0c   	      C` s   t  j d d  } t  j d d  } | d | d j  } t | | g | g  } d } |  j t |  | k  t j | j d j	  d } t | j
 | g  } d } |  j t |  | k  |  j t | d d	  d  S(
   NRW   RX   i*   iT   s  [InplaceDimShuffle{1,0}(Elemwise{mul,no_inplace}(InplaceDimShuffle{x,0}(Elemwise{add,no_inplace}(<TensorType(float64, vector)>, InplaceDimShuffle{x}(TensorConstant{42}))), Elemwise{add,no_inplace}(<TensorType(float64, matrix)>, InplaceDimShuffle{x,x}(TensorConstant{84}))))]i    s  [Elemwise{mul,no_inplace}(Elemwise{add,no_inplace}(InplaceDimShuffle{0,x}(<TensorType(float64, vector)>), InplaceDimShuffle{x,x}(TensorConstant{42})), Elemwise{add,no_inplace}(InplaceDimShuffle{1,0}(<TensorType(float64, matrix)>), InplaceDimShuffle{x,x}(TensorConstant{84})))]Re   Rf   (   t   TR'   R+   R   R_   R`   R   t	   transformt   outputst   ownerR]   RB   (	   Rb   t   vt   mt   outRU   t
   init_str_gt   new_outt   new_gt	   opt_str_g(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_recursive_lift   s    c         C` s   t    \ } } } t | d  } t | g | g  } |  j t |  d k  t j |  |  j t |  d k  |  j t | j d j	 d   d  S(   Ni    i   s   [InplaceDimShuffle{0,1}(x)]s   [x]t   trace(   i    i   (
   R]   RM   R   R_   R`   Ra   RQ   t   hasattrRq   t   tag(   Rb   RK   t   _Rc   RU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_useless_dimshuffle   s    c   
      C` s  t  t t g t t t g t t t g  \ } } } t j d  } t | d  } t | d	  } t | d
  } t | d  } t | | | | g | | | | g  }	 |  j t |	  d k  t	 j
 |	  |  j t |	  d k  |  j t |	 j d j d   d  S(   Ni   i    RK   i   s~   [InplaceDimShuffle{0,x}(x), InplaceDimShuffle{2,1,0}(y), InplaceDimShuffle{2,1,0}(z), InplaceDimShuffle{x}(TensorConstant{1})]sL   [x, y, InplaceDimShuffle{2,1,0}(z), InplaceDimShuffle{x}(TensorConstant{1})]R{   (   i    RK   (   i   i   i    (   i   i   i    (   R]   Ri   t   TrueR!   t   constantRM   R   R_   R`   Ra   RQ   R|   Rq   R}   (
   Rb   RK   RL   RY   t   ut   ds_xt   ds_yt   ds_zt   ds_uRU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt    test_dimshuffle_on_broadcastable   s    3'(	   t   __name__t
   __module__Rd   Rg   Rh   Rn   Rz   R   R   (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR^   p   s   							
c          C` s	  t  d t f d d  d  }  t  d t t f d d  d  } t  d t t f d d  d  } t  d t t f d d  d  } t j |  j d d	  |  j  } t j | j d d	 d d
  | j  } t j | j d
 d  | j  } t j | j d	  | j  } t |  | | | g | | | | g  } t t	 |   t
 t	 |  d k  t t  }	 |	 j |  t
 t	 |  d k  t
 t | d d  t j | j d d
 d d	  | j  }
 t | g |
 g  } t	 |  } |	 j |  t
 t	 |  | k  d  S(   NRJ   RW   RX   R'   t   matt   rowt   colRK   i    i   s   [Reshape{1}(InplaceDimShuffle{x,0}(vector), Shape(vector)), Reshape{2}(InplaceDimShuffle{x,0,x,1}(mat), Shape(mat)), Reshape{2}(InplaceDimShuffle{1,x}(row), Shape(row)), Reshape{2}(InplaceDimShuffle{0}(col), Shape(col))]sz   [Reshape{1}(vector, Shape(vector)), Reshape{2}(mat, Shape(mat)), Reshape{2}(row, Shape(row)), Reshape{2}(col, Shape(col))]Re   Rf   (   R=   Ri   R   R!   t   reshapet
   dimshufflet   shapeR   t   printR`   R   RC   R   RQ   RB   (   R'   R   R   R   t   reshape_dimshuffle_vectort   reshape_dimshuffle_matt   reshape_dimshuffle_rowt   reshape_dimshuffle_colRU   t   useless_dimshuffle_in_reshapet   reshape_dimshuffle_mat2t   ht   str_h(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt(   test_local_useless_dimshuffle_in_reshape   s,    !!!!'!'c          C` s\   d }  t  d  } | t j d g |  d d } | d } t | g |  } | d  d  S(   Ni
   t   labeli    RW   t   int64i   i   (   R$   t   theanot   _asarrayR   (   t
   n_segmentsR   t   segment_labelst   rt   f(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_add_canonizer_problem0  s     
t   test_greedy_distributec           B` s   e  Z d    Z d   Z RS(   c   
      C` sA  t  d  \ } } } } } } } | | | | | | } t | | | | | | | g | g  }	 t j |	  t j t j t  d d j |	  t t	 |	 j
 d   d k s t  | | | | } t | | | g | g  }	 t j |	  t j t j t  d d j |	  t t	 |	 j
 d   d k s=t  d  S(   Nt   abcdxyzt   ordert	   out_to_ini    s   ((a * x) + (b * z))s   (a + (b * x))(   R0   R   R   RQ   R   t   TopoOptimizert   LocalOptGroupR   R`   R   Rq   t   AssertionError(
   Rb   t   at   bt   ct   dRK   RL   RY   Rc   RU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt	   test_main  s    !'%c         C` sZ  t  d  \ } } t d  } t d  } t j | d | | | | | | |  } t | | | | g | d  } t j d d t j } t j d d t j } t j d	 d g d t j }	 t j d
 d g d t j }
 | | | |	 |
  } | | | |	 |
  } | | | |	 |
  } t j	 | | k  s;t
  t j	 | | k  sVt
  d  S(   Nt   xyt   epst   si   i   i   RW   gư>g      ?gffffff@g@(   R/   R"   R!   t   mulR   t   numpyt   asarrayR   t   floatXRf   R   (   Rb   RK   RL   R   R   R   R   t   s_valt   eps_valt   x_valt   y_valt   r0t   r1t   r2(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_kording_bug'  s"    	(   R   R   R   R   (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR     s   	t   test_canonizec           B` s\   e  Z d    Z d   Z d   Z e d  d    Z d   Z d   Z d   Z	 d   Z
 RS(	   c   
      C` s   t  d  \ } } } t  d  \ } } } } d | | d | } t | | | | | | | g | g  }	 t t |	 j d   t j |	  t t |	 j d   d  S(   Nt   xyzt   abcdiii    (   R0   R   R   R   Rq   R   RQ   (
   Rb   RK   RL   RY   R   R   R   R   Rc   RU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_muldivC  s    'c         C` sV  d } t  d  \ } } } t d  \ } } } t j t j j |   d d } t j t j j |   d d }	 t j t j j |   d d }
 | | | | f | |	 f d d f | | | | f | |	 f d d f | | | d | | | f | |	 |
 f d i d d 6t j d 6d	 d
 6f | | | d | | | f | |	 |
 f d i d d 6t j d 6d	 d
 6f d | | | d | | | f | |	 |
 f d i d d 6t j d 6d	 d
 6f d | | | d | | | f | |	 |
 f d i d d 6t j d 6d	 d
 6f | | d | | | d | | | f | |	 |
 f d i d d 6t j d 6d	 d
 6f g } t	 j
 j   } t j d g  } | j d  } | j d | j d |  } x t |  D] \ } \ } } } } } t | t  r| t j } n  t	 j t |  | d | } | |   } t | j j j    | k s9t  | | j k st  qWd S(   s   verify that the Canonizer merge sequential Elemwise({mul,add}) part 1

        This part are that case that is done, but don't include case
        that are not implemented but are suposed to be.

        Test with and without DimShuffle

        i   R   RW   t   float32i   i   t   customs   numpy+floatXRX   R   t   canonicalizet   local_elemwise_fusiont   linkert	   optimizert   modeN(   i   i   (   R1   R2   R   R   R   t   randomt   randR   R   R	   R   t   get_default_modeR   t   Queryt	   excludingt	   __class__R   t	   enumeratet
   isinstancet   dictt   cast_policyR   t   listt   lent   makert   fgrapht   toposortR   RW   (   Rb   t   shpt   fxt   fyt   fzt   dxt   dyt   dzt   fxvt   fyvt   fzvt   casesR   t   optt   idRU   t
   sym_inputst
   val_inputst   nb_elemwiset	   out_dtypeR   Ru   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt*   test_elemwise_multiple_inputs_optimisationV  s>    
!!!""
**..6$%	$c      &   C` s.	  t  d   d } t d  \ } } } t d  \ } } } t d  j d d  } t d  j d d  }	 t j t j	 j
 |   d d	 }
 t j t j	 j
 |   d d	 } t j t j	 j
 |   d d	 } t j t j	 j
 | d  d d	 j d
 | d  } t j t j	 j
 |   d d } t j t j	 j
 |   d d } t j t j	 j
 |   d d } t j t j	 j
 | d  d d j d
 | d  } | | | | f |
 | f d
 d	 f | | | | f |
 | f d
 d	 f | | | | | | f |
 | | f d
 d	 f | | | | | | f | | | f d
 d f | | | | | | f |
 | | f d
 d	 f | | | | | | f | | | f d
 d f | | | | | | | | f |
 | | f d d	 f | | | | | | | | f | | | f d d f | | | | | | | | f | | | f d d f | | | | | | | f | | | f d d f | | | d | | | f |
 | | f d
 d	 f | | | d | | | f |
 | | f d
 d	 f d | | | | | | f |
 | | f d
 d	 f d | | | | | | f |
 | | f d
 d	 f d | | | d | | | f |
 | | f d
 d	 f d | | | d | | | f |
 | | f d
 d	 f | | d | | | | | | f |
 | | f d d	 f | | d | | | | | | f |
 | | f d d	 f | | d | | | d | | | f |
 | | f d d	 f | | | | | | | | f |
 | | | f d
 d	 f | | | | | | | | f |
 | | | f d
 d	 f | | | | | | | | f |
 | | | f d
 d	 f | | | | | | | | f |
 | | | f d
 d	 f | | | | | | | | | | f |
 | | | f d d	 f | | | | | | | | | | f |
 | | | f d d	 f | | | | | | | | | | | f |
 | | | f d d	 f | | | |	 | | | |	 f | | | | f d
 d f | | | |	 | | | |	 f | | | | f d
 d f |	 | | | | | | |	 f | | | | f d
 d f |	 | | | | | | |	 f | | | | f d
 d f | | |	 | | | | | | |	 f | | | | f d d f | | |	 | | | | | | |	 f | | | | f d d f | | |	 |	 | | | | | | |	 f | | | | f d d f g! } t j j   } t j d g  | _ | j j d  | _ x t |  D]~ \ } \ } } } } } t j t |  | d | } | |   } t | j j j    | k s	t  | | j k st  qWd S(   s   
        verify that the Canonizer merge sequential Elemwise({mul,add}) part 2.
        This part are that case that should have been done, but that are not implemented.
        Test with and without DimShuffle
        s^   Current implementation of Canonizer does not implement all cases. Skip the corresponding test.i   R   R   RK   i    R   RW   R   i   RX   i   R   R   R   N(   i   i   (   R   R1   R2   R)   R   R*   R   R   R   R   R   R   R	   R   R   R   R   t
   _optimizerR   R   R   R   R   R   R   R   R   RW   (   Rb   R   R   R   R   R   R   R   t   fvt   dvR   R   R   t   fvvt   dxvt   dyvt   dzvt   dvvR   R   R   RU   R   R   R   R   R   Ru   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt+   test_elemwise_multiple_inputs_optimisation2  sp    !!!5!!!5"",,,,444000004488<6666>>B6666>>H(	$t   slowc   $      C` s  d } t  d  \ } } } } t d  \ } } } }	 t d  j d d  }
 t d  j d d  } t j t j j	 |   d d } t j t j j	 |   d d } t j t j j	 |   d d } t j t j j	 |   d d } t j t j j	 | d  d d j
 d	 | d  } t j t j j	 |   d d
 } t j t j j	 |   d d
 } t j t j j	 |   d d
 } t j t j j	 |   d d
 } t j t j j	 | d  d d
 j
 d	 | d  } t j j   } t j d g  } | j d d  } | j d  } | j d | j d |  } xt | | | g | g d f | | | g | g d
 f |
 |
 |
 g | g d f | | | g | g d
 f g  D]f\ } \ } } } } t j t |  | d | } | |   } | t j | d | k j   st  | j j j   } | d j d rt |  d k sJt  t | d j  t!  sft  t | d	 j  t" j#  st  no t |  d k st  t | d j  t!  st  t | d	 j  t!  st  t | d j  t" j#  st  | | j$ k st  qWxt | | | | | g | | g d d
 f | | | | | g | | g d d f | | | | | g | | g d d
 f |
 | |
 |
 | g | | g d d f | | | | | g | | g d	 d
 f | |
 | | |
 g | | g d	 d f g  D] \ } \ } } } }  } t j t |  | d | } | |   } | | j$ k s[t  t% j& | | d	  | j j j   } | rt |  d	 k o| d j  t' k rx* | d  D] }! t |! j  t!  st  qWt | d j  t" j#  st  qqWxt | | | | | g | | g d	 d
 f | | | | | g | | g d	 d f | | | | | g | | g d	 d
 f |
 | |
 |
 | g | | g d	 d f | | | | | g | | g d	 d
 f | |
 | | |
 g | | g d	 d f g  D]#\ } \ } } } }  } t j t |  | d | } | |   } t% j& | d	 | d	  | j j j   } g  | D]! }" t |" j  t( j)  rg|" ^ qg}# t |#  |  k st  t |# d j  t( j) f  st  t |# d j  j* t j+ j, j- t j+ j, j. f  st  | | j$ k st  qWxbt | | | | | |	 | | | |	 g | | | | g d
 f | | | | | | | | | | g | | | | g d f | | | | | |	 | | | |	 g | | | | g d
 f |
 | | | | | |
 | | | g | | | | g d f | | | | | |	 | | | |	 g | | | | g d
 f | |
 |
 | | | | |
 | | g | | | | g d f | | | | | |	 | | | |	 g | | | | g d
 f | | | |
 |
 | | | |
 | g | | | | g d f | | | | | | | | | | g | | | | g d
 f | | | | | |
 | | | |
 g | | | | g d f g
  D]\ } \ } } } } t j t |  | d | } | |   } t% j& | | d | d  | j j j   } t |  d	 k s
t  t | d j  t( j) f  st  t | d j  j* t j+ j, j.  sEt  t | d j/  d k sdt  | | j$ k ss
t  qs
Wxt d | d | | | g | | g d
 f d | d | | | g | | g i d d 6t0 j1 d 6d
 d 6f d | d | | | g | | g d
 f d |
 d | |
 | g | | g i d d 6t0 j1 d 6d
 d 6f d | d | | | g | | g d
 f d | d |
 | |
 g | | g i d d 6t0 j1 d 6d
 d 6f g  D]\ } \ } } } } t | t2  r| t0 j3 } n  t j t |  | d | } | |   } t% j& | d | d | d	  | j j j   } t |  d k sgt  t | d j  t( j) f  st  t | d j  j* t j+ j, j4  st  t | d j/  d k st  t | d	 j  t( j) f  st  t | d	 j  j* t j+ j, j.  st  t | d	 j/  d k s9t  | | j$ k st  qWxwt d | d | g | g d
 f d | d | g | g i d d 6t0 j1 d 6d
 d 6f d | d | g | g d
 f d |
 d |
 g | g i d d 6t0 j1 d 6d
 d 6f g  D] \ } \ } } } } t | t2  r:| t0 j3 } n  t j t |  | d | } | |   } t% j& | | d  | j j j   } t |  d	 k st  | d j  t' k | | j$ k st  qWxt | t5 |  | g d | g d
 f | t5 |  | g d | g d f | t5 |  | g d | g d
 f | t5 |  | g d | g d f | t5 |  | g d | g d
 f |
 t5 |
  |
 g d | g d f g  D] \ } \ } } } } t j t |  | d | } | |   } t j t j6 |   st  t% j& | t j7 | d   | | j$ k s=t  t | j j j    d	 k st  qWx#t d | d t5 |  | g d | g d
 f d | d t5 |  | g d | g i d d 6t0 j1 d 6d
 d 6f d | d t5 |  | g d | g d
 f d | d t5 |  | g d | g i d d 6t0 j1 d 6d
 d 6f d | d t5 |  | g d | g d
 f d |
 d t5 |
  |
 g d | g i d d 6t0 j1 d 6d
 d 6f g  D] \ } \ } } } } t | t2  r| t0 j3 } n  t j t |  | d | } | j j j   } | |   } t j t j6 |   sMt  t% j& | t j7 | d  d d  | | j$ k st  qWd S(   s|   test those case take from the comment in Canonizer
        x / x -> 1
        (x * y) / x -> y
        x / y / x -> 1 / y
        x / y / z -> x / (y * z)
        x / (y / z) -> (x * z) / y
        (a / b) * (b / c) * (c / d) -> a / d
        (2.0 * x) / (4.0 * y) -> (0.5 * x) / y
        2 * x / 2 -> x
        with and without DimShuffle
        TODO: with DimShuffle
        i   t   xyzwR   RK   i    R   RW   R   i   RX   R   t   ShapeOptt   local_fill_to_allocR   R   R   R   i   ig       @g      @R   s   numpy+floatXR   g      ?g?N(   i   i   (8   R1   R2   R)   R   R*   R   R   R   R   R   R   R	   R   R   R   R   t	   includingR   R   R   R   R   R   t   onesRf   R   R   R   R   RJ   R   R   t   opR   R!   t   AllocRW   t   uttt   assert_allcloseR
   Ro   t   Elemwiset	   scalar_opR"   t   basict   Invt   TrueDivR]   R   R   R   R   t   Mult   abst   isfinitet   sign($   Rb   R   R   R   R   t   fwR   R   R   t   dwR   R   R   R   R   t   fwvR   R   R   R   t   dwvR   R   R   R   RU   R   R   R   R   Ru   t   topoR   t   nodet   tt   elem(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_multiple_case  sB   !!!!5!!!!5	8	'"&&&&&H	,&&&&&&H."';;;;;;;;;Z"('?'?'^ "("(5T#####B(+%+%+%=	%c         C` s$  t  j   } t j j d k r? t j j j d  j d  } n t j j j   j d  } t j	 | g d | t
 d |  g d | } t | j j j    t   | d  | d  t | t j j j  s t j | d	   s t  n  t | j j j    d k st  | j j j   d	 j t  j k s=t  t j	 | g d | t
 | d  g d | } t | j j j    t   | d  | d  t | t j j j  st j | d	   st  n  t | j j j    d k st  | j j j   d	 j t  j k s t  d
 S(   sj   
        test that if we have
        4 * x / abs(2*x) it get simplifier during canonicalisation.
        RE   RF   R   i   i   R   g?ii    N(   Ro   R&   R   R   R   R	   R   R   R   R   R  R   R   R   R   R   t	   debugmodet	   DebugModeR   R  R   R   R   t   sgn(   Rb   RK   R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_abs_mul_div  s0    	0

$(0

$c         C` s  t  d   d } t d  \ } } } t d  \ } } } t j t j j |   d d } t j t j j |   d d }	 t j t j j |   d d }
 t j t j j |   d d } t j t j j |   d d } t j t j j |   d d } t j	 j
   } t j d g  } | j d  } | j d | j d	 |  } xb| | | | | | g | | | g d
 f | | | | | | g | |	 |
 g d f g D]\ } } } } t j t |  | d | } | |   } t j | | d | d | d  | j j j   } t |  d k s0t  t | d j t j f  sRt  t | d j j t j j j   szt  t | d j!  d k st  | | j" k st  qWxb| | | | | | g | | | g d
 f | | | | | | g | |	 |
 g d f g D]\ } } } } t j t |  | d | } | |   } t j | | d | d | d  | j j j   } t |  d k st  t | d j t j f  st  t | d j j t j j j   st  t | d j!  d k st  | | j" k st  qWd  S(   Ns^   Current implementation of Canonizer does not implement all cases. Skip the corresponding test.i   R   RW   R   R   R   R   R   RX   R   i    i   i   (   i   i   (#   R   R1   R2   R   R   R   R   R   R	   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Ro   R   R   R"   R   R   R]   RW   (   Rb   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   RU   R   R   R   R   Ru   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_multiple_case_that_fail  sN    !!!!!!)?$"()?	$"(c         C` s   t  d   d S(   s<    test those case take from the comment in Canonizer
        s   Not implementedN(   R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt"   test_dont_merge_if_multiple_client*  s    c         C` s   t    } t j |  } | j t j  t j d  j |  z' t   } t j	 | g | t
 j  Wd t j d  j |  X| j   s t  d S(   s   
        Regression test for bug in canonicalization of NaN values.

        This bug caused an infinite loop which was caught by the equilibrium
        optimizer, resulting in an error log message.
        s   theano.gof.optN(   R   t   loggingt   StreamHandlert   setLevelt   ERRORt	   getLoggert
   addHandlerR'   R   R   R   t   nant   removeHandlert   getvalueR   (   Rb   t   siot   handlerRK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_canonicalize_nan/  s    		(   R   R   R   R   R   RD   R  R  R  R  R   (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR   B  s   		V	L	*	5	c          C` s  t  j d  \ }  } } t j j d d  j t j  } t j j d d  j t j  } t j j d d  j t j  } t j j	 } | d k r d } n  t j
 j	 j |  j d  } t j | | g t | | d  d | } | | |  t | j j j   d j j t j  s!t  t | j j j    d	 k sEt  t j |  | g t |  |  d | } | | |  t | j j j   d j j t j  st  t | j j j    d	 k st  d  S(
   NR   i   RE   RF   R   iR   i   i   (   Ro   R0   R   R   R   t   astypeR   R   R   R   R	   R   R   R   R  R   R   R   R   R   R   t   scalt   AbsR   R   (   RK   RL   RY   R   R   t   z_valR   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_merge_absF  s"    !!!		,.$(.c          C` sj   t  j   }  |  |  j d  } | | j d  } t  j |  j   } t j |  g t  j | |    d  S(   Ni    i   (   Ro   R+   t   sumt   abs_R   R   t   grad(   t   inputt   step1t   step2t   l1_norm(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_merge_abs_bugfix\  s
    c          C` sL   t    }  t   } d t |  | g | |  |  d  d d  k sH t  d S(   s#   Test that int division is preservedi    i   i   g      ?N(   R#   R&   R   R   (   t   iR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_mixeddivi  s    		c       	   C` s  t    }  t    } t   } t   } t   } t   } d   } | t j | |   | |  } t j | j |  | | d | | } t j | j |  | | d | | }	 t |  | | | | | g |  }
 t |  | | | | | g |	  } t j j d d  } t j j d d  } t j j d  } t j j d  } t j j d  } t j j d  } t	 j
 | | | | | | |  |
 | | | | | |   d  S(   Nc         S` s   d d t  j |   S(   Ng      ?i   (   R!   t   exp(   RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   sigmx  s    i   g       @i   (   R-   R*   R!   t   dotRo   R   R   R   R   R   R   (   R)  t   wt   visbt   hidbt   betasR   R1  t   hidt
   vis_gauss1t
   vis_gauss2t   f1t   f2t   ivalt   wvalt   visbvalt   hidbvalt   betavalt   aval(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt    test_const_type_in_mul_canonizerp  s*    							 ))!!t   test_fusionc           B` s   e  Z e d  e e d  Z d   Z e d  d    Z d   Z	 e d  d    Z
 d   Z d   Z e e e d	  Z d
   Z d   Z d   Z e j j d d  e d d f e d e e d  Z RS(   i   c   <   N   C` s  d d d  } g  d D]4 }	 t  j j d d d t g t |  d |	  ^ q \ }
 } } } g  d D]4 }	 t  j j d d d t g t |  d |	  ^ qc \ } } } } g  d	 D]4 }	 t  j j d d
 d t g t |  d |	  ^ q \ } } } t d  } t d  } | | d d  } | | d d  } | | d d  } | | d d  } t  j t j j	 | d  d d } t j
 t j j	   d d } | | d d  } t  j | | d d d d
 } t  j | | d d d d
 } t  j | | d d d d
 }  |
 | }! t  j j |  }" | | | | | | f | | | f d | | | d f | | | | | | f | | | f d | | | d f | | | | | | f | | | f d | | | d f | | | | | | f | | | f d | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f |
 | | | |
 | | | f | | | | f d | | | | d f | | | | | | | f | | | f d | | | | d f | | | | | | | f | | | f d | | | | d f | | | |
 | | | |
 |
 | | | f | | | | f d | | | | | | | | d f |
 | | | d |
 | | | f | | | | f d | | | | d d f |
 | d | | |
 | | | f | | | | f d | | | | d d f |
 | d | | |
 | | | f | | | | f d | | | | d d f |
 | | d | |
 | | | f | | | | f d | | | | d d f |
 | | | d |
 | | | f | | | | f d | | | | d d f d |
 | | | |
 | | | f | | | | f d | | | | d d f d | | | | | | | | f | | | | f d | | | | d d f d |
 | | | |
 | | | f | | | | f d | | | | d d f d |
 | | | |
 | | | f | | | | f d | | | | d d f d |
 | | | |
 | | | f | | | | f d | | | | d d f |! j   |! | | |
 | | | f | | | | f d | | j   | | | | d f | | t j |  | | | f | | | f d | | t j |  d f | | t j |  | | | f | | | f d | | t j |  d f | | t |  | | | f | | | f d | | t j |  d f | | t |  | | | f | | |  f d | | t j |   d
 f | | t  j j |  | | | f | | | f d | | t j |  d f | | t  j j |  | | | f | | | f d | | t j |  d f | | t  j j |  | | | f | | | f d | | t j |  d f | | | | | | f | | | f d | | | d f | | t  j j |  | | | f | | | f d | | t j |  d f | | | | | | f | | | f d | | | d f | | | | | | f | | | f d | | | d f | t  j j | d  | | f | | f d | | d d f | t  j j | |  | | | f | | | f d | | | d f | t  j j | d | d  | | | f | | | f d | | d | d i d d 6t j d 6d d 6f | | d | | f | | f d | | d d f | | | | | | f | | | f d | | | d f | | | k | | | f | | | f d | | | k d f | | | k | | | f | | | f d | | | k d f | | | k  | | | f | | | f d | | | k  d f | | | k | | | f | | | f d | | | k d f | t j | |  | | | f | | | f d | | | k d f | t j | |  | | | f | | | f d | | | k d f | | t j |  | | | f | | | f d | | t j |  d f | | t j |  | | | f | | | f d | | t j |  d f | | t j |  | | | f | | | f d | | t j |  d f | | t j |  | | | f | | | f d | | t j |  d f | | t  j j |  | | | f | | | f d | | | | d f | | t  j j  |  | | | f | | | f d | | t j  |  d f | | t  j j! |  | | | f | | | f d | | d | d f | | t  j j" |  | | | f | | | f d | | | d f | | t  j j# |  | | | f | | | f d | | t j# |  d f | | t  j j$ |  | | | f | | | f d | | t j# |  d f | t  j j% | |  | | | f | | |  f d | | |  Bi d d 6t j d 6d d 6f | t  j j& | |  | | | f | | |  f d | | |  Ai d d 6t j d 6d d 6f | t  j j' | |  | | | f | | |  f d | | |  @i d d 6t j d 6d d 6f | t  j j( |  | | f | | f d | | i d d 6t j d 6d d 6f | t  j j) | d d | | f | | f d | t j
 | d  d f t  j j* | | | | |  | | | f | | | f d t j+ | | | | |  d f | | | | | | f | | | f d | | | d f | | t j |  | | | f | | | f d | | t j |  d f t  j j, | | | |  | f | f d | | | | d f t  j j, | |" |"  | f | f d | t j |  t j |  d f t  j j, | |" |" |  | f | f d | t j |  t j |  | d f t  j j, |" |" | |  | | f | | f d t j |  t j |  | | d f | t  j j |  | | f | | f d | t j |  d f gH }# | r3|# | }# n  t j- t |#   }$ g  }% g  }& g  }' g  }( xt. |#  D]\ }) \ }* }+ }, }- }. }/ t/ |/ t0  r|/ t j1 }/ n  | r|/ d k st2 d   |* j3 j4 D  rt5 d |)  qmn  t5 d |)  | d% k rg| t k st7  t8 j9 t: |+  |* d | }0 x  t; |  D] }1 |0 |,   }2 qBWt< j<   }3 n | t j- | d |/ d   }2 |2 j= |* j= k st7  t9 |+ g  d! |2 |* f g d | }0 t< j<   }4 x t; |  D] }1 |0 |,   qWt< j<   }3 |2 j>   }2 |3 |4 |$ |) <d" }5 |/ d k r/d# }5 n  t j? |2 |. | d$ |5 s}|% j@ |)  t5 |,  t5 |2  t5 |. |  n  |0 jA jB jC   }6 | rId d% lD jE jF }7 g  |6 D]0 }1 t/ |1 jG |7 jH jI |7 jH jJ f  s|1 ^ q}8 g  |6 D]$ }1 t/ |1 jG |7 jH jI  r|1 ^ q}9 t |9  t |+  k sO|& j@ |) |9 |+ f  qOn |6 }8 | rt |8  |- k s|' j@ |) |8 |- f  n  |- d k rt tK |* j3 j4   t |* j3 j4  k rt j g  |8 d j4 D] }1 t/ |1 t  jL jM  ^ q }: |: t |+  k s
t7  qqn  |/ |2 j= k sm|( j@ |) |/ |2 j= f  qmqmWt |% |& |' |(  }; t5 d& t |#  d' d( |;  |; d k rtN d) |; |% |& |' |(   n  |$ S(*   s   
        param shared_fn: if None, will use compile.function
        verify that the elemwise fusion work
        Test with and without DimShuffle
        RX   i    c         S` s   t  j |  d | | } | S(   NRW   (   R   t   zeros(   R   RW   t   numt   ret(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   my_init  s    t   wxyzRW   R   RJ   t   nameR   t   int32Rs   R   i   i   i   i   i   RE  i<   iF   g       @id   i  R   s   numpy + floatXR   R   c         s` s   |  ] } | j  d  k Vq d S(   R   N(   RW   (   t   .0R.  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>S  s    s<   Skip test %d as the gpu code currently supports only float32s	   new casesR   Ru   t   updatesg:0yE>gư>t   atolNt   ExecutedR   t   faileds   Failed %d cases(O   R   R!   Ri   R   R)   R%   R   R   R   R   R   t   tanR&  t   cost   coshR  t   absolutet   logt   log2t   log10R0  t   true_divt   int_divR   R   Ro   t   eqt   neqt   tanht   sint   sinht   sqrt   sqrtt   invt   negt   roundt   iroundt   or_t   xort   and_t   invertt   castt   powt   powerR   RD  R   R   R   R   t   anyRr   R]   R   t   NoneR   R	   R   R   R   t   timeRW   t	   get_valuet   allcloset   appendR   R   R   t   theano.sandbox.cudat   sandboxt   cudaR   t	   basic_opst   GpuFromHostt   HostFromGput   setR   t   Constantt	   Exception(<   Rb   R   t	   shared_fnR   t   gput	   nb_repeatt   assert_len_topot   sliceRG  t   nR  R   R   R   R  R   R   R   t   ixt   iyt   izR   t   fsR  R   R   R   R   t   fsvR	  t   ixvt   iyvt   izvt   fwxt   ftanxR   t   timest   fail1t   fail2t   fail3t   fail4R   RU   R   R   R   t   answerR   R   RK   Ru   t   t1t   t0RM  R
  Rs  t   topo_t   gpu_t   expected_len_sym_inputsRO  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   do  s   JJG%!!!
&&))000000000**@%11111111113&//33///1/77(.6417;;;;.1////2222221)1)1)(&.9!7/'$#$*+*(($	

-$*0! c         C` sP   d } t  j  t j j    } | j j d d d  | _ |  j | t |  d  S(   Ni   R   t   composite_elemwise_fusionR   (   i   i   (   t   copyR	   R   R   R   R   R  R   (   Rb   R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_elemwise_fusion  s    	R   c         C` sP   d } t  j  t j j    } | j j d d d  | _ |  j | t |  d  S(   Ni   R   R  R   (   i   i   i   i   (   R  R	   R   R   R   R   R  R   (   Rb   R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_elemwise_fusion_4d  s    	c         C` s   d
 } t  j j d k rB t  j j j d  j d d d d  } n$ t  j j j   j d d d d  } d d  l j j	 } | j
 s t d	   n  |  j | | j | d t d  S(   Ni   RE   RF   R   R  R   R{  i    s   cuda not available(   i   i   (   R   R   R   R	   R   R   R   Rq  Rr  Rs  t   cuda_availableR   R  t   float32_shared_constructorR   (   Rb   R   R   Rs  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_gpu_fusion  s    	c         C` s   t  j j d k r< t  j j j d  j d d d d  } n$ t  j j j   j d d d d  } d d  l j j	 } | j
 s t d   n  | j j   } | d	 d
 k r d } n d } |  j | | j | d t d  S(   NRE   RF   R   R  R   R{  i    s   cuda not availablet   int_sizei   i   (   i   i   i   i   (   i   i   i   (   R   R   R   R	   R   R   R   Rq  Rr  Rs  R  R   R   t   get_device_type_sizesR  R  R   (   Rb   R   Rs  t   sizesR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_gpu_fusion_Xd  s    		c         C` s   t  g  t d  D] } d | ^ q  } t j | d  } x. t d d  D] } t j | | |  } qL Wt | |  } | g  t d  D] } t t | d |   ^ q   d  S(   Ni#   s   i%ii    i   i   (   R/   R   R!   R\  R   R   t   range(   Rb   R.  t   inptsRu   t   idxR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_fusion_35inputs  s    )c         C` s  t  j j s t d   n  g  } t j   } t j   } t  j j d  } t  j j d  } t  j j d  } t  j j d  } t  j j t j	 d   } d }	 t  j j
 d k r d }	 n  xh t |	  D]Z }
 | | | | | |
 | | t j | | | t j  } | j t j |   q Wt j |   } | | g } t | g  | D] } t  j | |  ^ qP } | d t j j |	   d
 S(   s   In the past, pickle of Composite generated in tha case
        crashed with max recusion limit. So we where not able to
        generate C code in that case.

        s)   no c compiler, so can't use big elemwise!g      ?g      i   ii
   iU   R  t
   DEBUG_MODEN(   s	   DebugModeR  (   R   R   t   cxxR   R!   R&   R*   R   R   R   R   R   RT  t   piRp  R&  t   addR   R(  R   R   (   Rb   t   factorst   sdt   meanst   cst_05t   cst_m05t   cst_2t   cst_m2R   R  R.  R   t   logpt   varsRs   t   dlogp(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_pickle_big_fusion  s*    	#.c         C` s  d } d } d } t  j  t j    } | j j d  | _ t  j  t j    } | j j d  | _ t d t | j   |  j	 | | | d | d | d t
 d	 | } |  j	 | | | d | d | d t
 d	 | }	 t d
  t | | j   | j   | j    t d  t |	 |	 j   |	 j   |	 j    |	 | }
 t d  t |
  t d |
 j   d |
 j   d |
 j   d |
 j   d |
 j   
 d S(   s   
        param type s: a slice object
        param s: a slice to apply to the case to execute. If None, exec all case.
        i  i  i2   R   s   test with linkerR{  R|  R}  R~  s!   times1 with local_elemwise_fusions$   times2 without local_elemwise_fusions   times2/times1t   mint   argmint   maxt   meant   stdN(   i  i  (   i  i  (   R  R	   R   R   R   R   R   R`   R   R  Ri   R  R  R&  R  R  R  (   Rb   Rz  R{  R   R   R|  t   mode1t   mode2t   times1t   times2R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   speed_fusion  s*    
%
%


'c         C` s  t  j  t j j    } | j j d d d d  | _ t d  \ } } } t j | | | g t	 j
 | |  | | | d | } | j j j   } t |  d k s t  | j j j   d j j s t  | t j j d
  t j j d  t j j d   d  S(   NR   R  R   R9   R   R   i   ii   (   i   i   (   i   i   (   i   i   (   R  R	   R   R   R   R   R2   R   R   R!   R2  R   R   R   R   R   R   t   inplace_patternR   R   (   Rb   R   RK   RL   RY   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_fusion_inplace'  s    	9"!c      	   C` s>   d d  l  j j } |  j d | j d t d t d d   d  S(   Ni    Rz  R{  R   i   (   Rq  Rr  Rs  R  R  R   R~  (   Rb   Rs  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   speed_fusion_gpu7  s    c         C` sJ   t  d d  } t d |  j d  t d d d t d t d | d	 d
  d  S(   Ni   i$   Rm  R   i  R{  R}  R~  R|  id   (   i  i  (   R~  R   R  Rl  R   Ri   (   Rb   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   speed_log_exp<  s    !R   t   mergei  i   c   #   	   C` s  t  d  } t  d  }	 t j | d d d }
 | | |
 d f g } d d l } d d l } d d l } d d l } i  } g  } d } t j	 j
 d d	  } d d
 l m } xYt |  D]K\ } \ } } } } x0t |  D]"} t j | d | } | j   | j   | j   | j |  } | j   | t j |  t j d |	 d |  g |	 | g d | } ~ | j   | j   | j   | j   t r| j   | j   | j   | j   } t d  x t | j   | j    D] } | | k r| | k r| | | | k rt | | j |  | j |  d d | | k r{| | k r{t | | | |  qt d  qqW| j   | j   | j   | } n  t r| j   | j   | j   | j d  } g  } t |  d k rd }  x | D] }! t |! t  }" |" r|! r|! d j j d k }" |" r]|! d d k }" n  |" rv|! d d k }" n  t }" n  |" r|! | k r|  d 7}  | j |!  qqW| j   n  | } n  | j   | j   | j   | j   | j   | j   q Wq Wd S(   s   
        param shared_fn: if None, will use compile.function
        verify that the elemwise fusion work
        Test with and without DimShuffle
        RK   RL   RW   R   i   i    NR   R  (   t   orig_functiont   variablet   valueR   s   key, old val, new val, difft   endt    R   t   array_convertert   Optioni  i   (    R1   R   RD  t   gct   pdbt   objgrapht   weakrefRl  R	   R   t   Modet   theano.compile.function_moduleR  R   R   t   collectt   reft	   set_tracet   InRi   t	   typestatsR   Rw  t   keyst   gett   by_typeR   R   R   R   R   Rp  (#   Rb   R   Rz  R   R{  R|  R}  R~  R   R   R   R   R  R  R  R  R   t   dlt   v1R  R   RU   R   R   R   t   zzzzRs   R   t   ndt   keyt   ndlt   llt   nbRK   t   cmp(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   tes_memory_leakA  s    	%



$







#,(


	


	
	




(   R   R   Ri   R   Rl  R  R  RD   R  R  R  R  R  R   R  R  R  R  R	   R   R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRC    s    	
			 $			t   TimesNc           B` sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s   Used in test TestCompositeCodegen

    Must be outside of the class, otherwise, the c cache code can't
    pickle this class and this cause stuff printing during test.
    c         C` s(   t  t |   j |  o' |  j | j k S(   N(   t   superR  t   __eq__R  (   Rb   t   other(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         C` s    t  t |   j   t |  j  AS(   N(   R  R  t   __hash__t   hashR  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         O` s)   | |  _  t j j j j |  | |  d  S(   N(   R  R   R"   R   t   UnaryScalarOpt   __init__(   Rb   R  t   argst   kwargs(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    	c         C` s   | |  j  S(   N(   R  (   Rb   RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   impl  s    c         C` s   t  |  j  } d t   S(   NsJ   
        float %(nodename)s_timesn(float x) { return x * %(n)s; }
        (   R`   R  t   locals(   Rb   R  t   nodenameR  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   c_support_code_apply  s    c         C` s   | \ } | \ } d t    S(   Ns   %(z)s = %(name)s_timesn(%(x)s);(   R  (   Rb   R  RI  R]   Rq   t   subRK   RY   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   c_code  s    		(	   R   R   t   __doc__R  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   					t   TestCompositeCodegenc           B` s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   st   
    Test The Composite Ops code generation in a case where there is multiple
    scalar ops with support code.
    c         C` s   t  j j j } t d | d d |  _ t  j j j |  j d d |  _	 t d | d d |  _
 t  j j j |  j
 d d |  _ t   |  _ d  S(   Ni   RI  t   times_2i   t   times_3(   R   R"   R   t   upgrade_to_floatR  t   scal_times_2R!   t   elemwiseR   R  t   scal_times_3R  R)   RK   (   Rb   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   setUp  s    		c         C` s   |  j  |  j  } |  j |  } t |  j g |  } t j d k rl t | j j j	    d k sl t
  n  | d d d g  } t j | d d d g k  s t
  d  S(   NRE   i   i   i   i   i   i   (   R  RK   R  R   R   R   R   R   R   R   R   R   Rf   (   Rb   RL   RY   R   t   fval(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_nested_composite  s    'c         C` s7  d d  l  j j } | j s* t d   n  d d  l } |  j |  j  } |  j |  } | j	 |  j g | j
 |  d | j j j   j d  } | j j j   } t j d k r t |  d k s t  | d j | j
 k s t  n  t j | d d d g   } t j | d	 d
 d g k  s3t |   d  S(   Ni    s   cuda not availableR   R{  RE   i   i   i   i   i   i   (   Rq  Rr  Rs  R  R   t   theano.sandbox.cuda.optR  RK   R  R   t   gpu_from_hostR	   R   R   R   R   R   R   R   R   R   R   R   R   Rf   (   Rb   Rs  R   RL   RY   R   R
  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_nested_gpu  s    	c         C` s  t  j j   } t  j j | g | d | d g  } t  j j   } t  j j d |  |  } t  j j j	   j
 d  } t  j | g | d d | } | j j j   } t |  d k s t  t | d j  d k s t  t j | d g g  d g g  t  j | g | d d | } | j j j   } t |  d k sMt  t | d j  d k slt  t j | d g g  d g g  d  S(	   Ni   R   t   local_useless_compositei    R   g      ?g       @g        (   R   R"   R   t	   CompositeR!   R+   R   R	   R   R   R   R   R   R   R   R   R   Rq   R   R   (   Rb   RK   R   t   Xt   oR   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_useless_composite  s     &	"(   R   R   R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s
   				c          C` s  t  j j }  |  d k r! d }  n  t j j |   }  |  j d  }  t   } t | g t j	 d |  d |  } g  | j
 j j   D] } | j ^ q t j g k s t  t | g t j	 d |  d |  } g  | j
 j j   D] } | j ^ q t j t j g k st  t | g t j	 d |  d |  } g  | j
 j j   D] } | j ^ qJt j t j t j g k s}t  t   } t | | g t j	 t j | d  |  d |  } g  | j
 j j   D] } | j ^ qd t j t j g k st  t | | g t j	 d | t j | d   d |  } g  | j
 j j   D] } | j ^ qId t j t j g k szt  t | | g t j	 d	 | t j | d   d |  } g  | j
 j j   D] } | j ^ qd t j t j g k st  | d
 d g d d g d d g g  t j   } t | g t j	 d |  d |  } g  | j
 j j   D] } | j ^ q_t j g k st  d  S(   NRE   RF   t   fusioni   R   i   i    g      ?i   gHz>i
   (   R   R   R   R	   R   R   R*   R   Ro   RT  R   R   R   R   t   log1pR   Ra  R9   t   log1p_inplacet   neg_inplaceR,   R!   t   fillt   alloct   imatrix(   Rt   RK   R   R  RL   RY   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt
   test_log1p  s8    		%:&%'%!	4)8)8)%%c          C` s  t  j j }  |  d k r! d }  n  t j j |   }  |  j d  }  t j |   }  t |  _ t	   } t	   } t
 | | g t j t j |  t j |   d |  } | d g d g  t j | d g d g   s t  t j | d g d g  d t j d   | d g d g  t j | d g d g  d t j d   t	   } t	   } t
 | | g t j t j |  t j |  t j | |  t j | |   d |  } y6 | d g d g  t j | d g d g  d  Wn  t j k
 rt d	   n Xd  S(
   NRE   RF   R  R   i'  i   i
   i N  sJ   log(add(exp)) is not stabilized when adding more than 2 elements, see #623(   R   R   R   R	   R   R   R  Ri   t   check_isfiniteR*   R   Ro   RT  R0  R   R  R   R   R   R  t
   WrongValueR   (   Rt   RK   RL   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_log_add=  s0    				:$,,		B#c          C` s  t  j d  }  t j   j d d  } t j   j d  j d  } d |  d d  d   f } t j |  g | d | } t j |  g | d | } t j	 j
 d d d  j d
  } t | |  | |  k  s t d   | j j j   d } | j } t d   | j D  s%t d   t | d d s=t  t | d d sUt  t  j d  }	 |	 d d  d   d  d   d f }
 |	 d d  d   d  d   d  d   f } t j |	 g |
 d | } t j |	 g | d | } | j j j   d } | j } g  | j D] } t | t  ^ qj t  d k s=t  | j j j   d } | j } t d   | j D  s|t  t | d t st  t | d t st  d  S(   NRK   t   local_useless_slicet   local_mul_canonizeri   i    R   ii
   i   R   s0   The optimization caused a mismatch in the resultc         s` s   |  ] } t  | t  Vq d  S(   N(   R   R~  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>v  s    s   Slice should be goneRe   Rf   RY   i   c         s` s   |  ] } t  | t  Vq d  S(   N(   R   R~  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    (   i   i   (   R!   R+   R	   R   R   R   R   R   R   R   t   randintR!  Rf   R   R   R   R   R   Rk  t   idx_listRB   t   tensor4R   R~  t   countR   R<   (   RK   t
   mode_unoptt   mode_optR  t   f_unoptt   f_optt   test_inpt
   apply_nodet   subtensRY   t   o2t   o3t   f_opt_checkt   f_opt_check_applyR  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_useless_slicef  s6    !!		&"(	:	 c    
      C` s  t  j d  }  t  j d  } t j   j d  } xt d   t d  d  d  g D]} t  j |  d  d  d   | f |  } t j	 |  | g | d | } t  j |  d  d  d   | f t  j
 | |  j   } t j	 |  | g | d | } | j j j   } t d   | D  st  | d d g g d d	 g g  }	 |	 t j d d	 g g  d  d  d   | f k j   szt  | j j j   } t |  d
 k st  t | d j t  j  st  | d d g g d d	 g g  }	 |	 t j d d	 g g  d  d  d   | f k j   s!t  y8 | d d g g d d	 g d	 d g g  t sXt  Wn t t f k
 rrn X| d d g d d	 g g d d g g  }	 |	 t j d d g d d g g  d  d  d   | f k j   sR t  qR W|  d  d  d   d  d  d  f } t  j | t  j
 | | j   } t j	 |  | g |  } | j j j   } t d   | D  spt  | d d d d g g d d g g  }	 |	 t j d d d d g g  k j   st  d  S(   NRK   RL   t   local_useless_inc_subtensoriR   c         s` s$   |  ] } t  | j t j  Vq d  S(   N(   R   R   R!   R6   (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    i   i   i   i   i    i   i   c         s` s$   |  ] } t  | j t j  Vq d  S(   N(   R   R   R!   R6   (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    i   i   i	   (   R!   R+   R	   R   R   R~  Rl  t   set_subtensorR   R   t   specify_shapeR   R   R   R   Rk  R   R   R   Rf   R   R   R   R6   Ri   RT   (
   RK   RL   R   R  R  R   t   o_shapet   f_shapeR
  Ru   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt    test_local_useless_inc_subtensor  sB    %%!=!=(*J"	'c    	      C` s	  t  j d  }  x t d d   f t d d   t d d   f g D] } t |  g t  j |   j |  d t } | j j	 j
   } | d j t  j k s t  t |  d k s t  | d d d g d d d g g  q@ Wt  j |  d  } xt d d  f t f t d d  t d d   f t f t d d  t d d  f t f t d d   t d d  f t f t d d  t d d	  f t f t d d  t d d  f t f t d d  t d d   f t f t d d  d f t f g D]\ } } t |  g t  j |  j |  d t } | j j	 j
   } | rt | d j t j  j  s^t |   | d j t  j k st | | f   t |  d k st |   n1 t g  | D] } t | j t  ^ q st  | d d d g d d d g g  qWxqt t d |  j d  f t f t d |  j d  f t f t d |  j d  t d |  j d  f t f t d |  j d  t d |  j d  f t f t d |  j d  t d |  j d  f t f t d |  j d  t d |  j d  f t f t d |  j d  d f t f t d |  j d  t |  j d |  j d |  j d  f t f t d t j |  j d   f t f g	  D] \ } \ } } t |  g t  j |   j |  d t } | j j	 j
   } | r| d j t  j k st |   t |  d k sLt |   n1 t g  | D] } t | j t  ^ q% sLt  | d d d g d d d g g  qWxHt t d |  j d  t d d  f t f t d d  t d |  j d  f t f g  D] \ } \ } } t |  g t  j |  j |  d t } | j j	 j
   } | rf| d j t  j k sEt |   t |  d k st |   n1 t g  | D] } t | j t  ^ qp st  | d d d g d d d g g  qWt j d
  } x8t t d |  f t f g  D]\ } \ } } t |  | g t  j |   j |  d t } | j j	 j
   } | r| d j t  j k sgt |   t |  d k st |   n1 t g  | D] } t | j t  ^ q st  | d d d g d d d g g d  | d d d g d d d g g d  qWxd d g t f d d g t f d d g t f d d d g t f t j d  t f t j d d  t f t j d d d  t f t j d d d  t f t j d d  t f f	 D]\ } } t |  g t  j |  j |  d t } | j j	 j
   } | rr	t | d j t j  j  s/	t |   | d j t  j k sQ	t |   t |  d k s	t |   n1 t g  | D] } t | j t  ^ q|	 s	t  | d d d g d d d g g  qWd  S(   NRK   i    R   i   i   i   i   i   i   R   i   i(   i   i   (   R!   R+   R~  Rl  R   R0  t   __getitem__R  R   R   R   R   R   R   R$  R   Ri   R   R   t   SpecifyShapeRk  R<   R   R   Ro   t   scalar_from_tensorR"  RJ  t   arangeR4   (	   RK   t   dimsR   t   progt   x_ct   resR  R  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_useless_subtensor  s    %*&!!!!!!(*((!1&////+>*"!1&(A*"!1&.-"!1%)%*("!+c    &      C` s  t  j j j   }  |  j d  }  t j d  } | j d d d  } | j d d d d  } | j d d d d d  } | d  d   d d  d   f } | d  d   d d  d   f } | d d  d   d  d   d f } | d d  d   d  d   d f } | d d  d   d  d   d f }	 | d d  d   d d  d   d f }
 | d d  d   d d  d   d f } | d d  d   d d  d   d f } t  j | g | | | | |	 |
 | | g d |  } xG | j	 j
 j   D]3 } t | j  t t t t t t g k st  qWt j j d t j    } | j d d  } | |  | d	 d d  d   f } | d
 d  d d  d   f } | d d  d   d d   d f } | d  d   d  d   d d f } | d d
 d  d  d   d f } | d d d  d   d f } | d d d   d  d   d f } | d d  d   d  d	  d f } | d d  d   d d f } | d d
 d d  d   d f } | d d d d  d   d f } | d d  d   d d d f } | d d d d  d   d f } | d d
 d  d d d  d f } | d } | d }  | d  d   d d  d   d f }! | d d  d   d  d   d
 f }" | d  d   d
 d f }# | d  d   d	 f }$ t  j | g | | | | | | | | | | | | | | | |  |! |" |# |$ g d |  }% |% |  d  S(   Nt*   local_subtensor_remove_broadcastable_indexRK   i    i   iR   t   seedi   i   i   i   (   ii    ii    i(   i    i   i    i   i    (   R   R	   R   R   R   Ro   R-   R   R   R   R   R   RI   R   R<   R3   R4   R6   R7   R8   R   R   R   t   RandomStateR   t
   fetch_seedR   (&   R   RK   t   y1t   y2t   y3t   z1t   z2t   z3t   z4t   z5t   z6t   z7t   z8R   R  t   rngt   xnt   w1t   w2t   w3t   w4t   w5t   w6t   w7t   w8t   w9t   w10t   w11t   w12t   w13t   w14t   w15t   w16t   w17t   w18t   w19t   w20R;  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt/   test_local_subtensor_remove_broadcastable_index4  s^    """%%%3
"""""%

""-!	t   Test_subtensor_inc_subtensorc           B` sM   e  Z e d     Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C` s"   t  j j j   j d  |  _ d  S(   Nt   local_subtensor_inc_subtensor(   R   R	   R   R   R   (   t   cls(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt
   setUpClassr  s    c         C` s0  t  j d  } t  j d  } t  j d  } t  j | | |  } | | } t j | | | g | d |  j } | j j	 j
   } t |  d k s t  t | d j t  s t  t j j d d d	 g  j t j  } t j j d d	 g  j t j  }	 d }
 t j | | |
 |	  |	  s,t  d  S(
   NRK   R.  Rs   R   i   i    t   sizei   i   (   R!   R+   R#   R'   R#  R   R   R   R   R   R   R   R   R   R   R   R   R   t   uniformR!  R   R   t   array_equal(   Rb   RK   R.  Rs   RL   RY   R   R-  t   x_t   v_t   i_(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt
   test_basicv  s    
$'$c         C` s  t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j | | d  |  | d   d  d  |  f |  } | | d  |  | d   d  d  |  f } t j | | | | | | g | d |  j }	 |	 j j	 j
   }
 t |
  d k st  t |
 d	 j t  s/t  t j j d
 d d d d g  j t j  } t j j d
 d d d g  j t j  } d \ } } } } t j |	 | | | | | |  |  st  d  S(   NRK   t   i1t   i2t   i3t   i4Rs   R   i   i    R[  i   i   i   i   i   (   i   i   i   i   (   R!   R  R#   R.   R#  R   R   R   R   R   R   R   R   R   R   R   R   R   R\  R!  R   R   R]  (   Rb   RK   Rb  Rc  Rd  Re  Rs   RL   RY   R   R-  R^  R_  t   i1_t   i2_t   i3_t   i4_(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_multiple_idx  s     7+--*c      	   C` s5  t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j | | d  |  | d   d  d  |  f |  } | | d  |  | d   d  d  |  f } t j | | | | | | g | d |  j }	 |	 j j	 j
   }
 t |
  d k st  t d	   |
 D  s/t  t d
   |
 D  sKt  t j j d d d d d g  j t j  } t j j d d d d g  j t j  } d \ } } } } | | | d  |  | d   d  d  |  f <t j |	 | | | | | |  | | d  |  | d   d  d  |  f  s1t  d  S(   NRK   Rb  Rc  Rd  Re  Rs   R   i   c         s` s$   |  ] } t  | j t j  Vq d  S(   N(   R   R   R!   R6   (   RK  RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    c         s` s$   |  ] } t  | j t j  Vq d  S(   N(   R   R   R!   R<   (   RK  RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    R[  i   i   i   i   i   (   i   i   i   i   (   R!   R  R#   R.   R#  R   R   R   R   R   R   R   R   Rk  R   R   R\  R!  R   R   R]  (   Rb   RK   Rb  Rc  Rd  Re  Rs   RL   RY   R   R-  R^  R_  Rf  Rg  Rh  Ri  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_not_applied  s$    7+--*+c         C` s  t  j d  } t  j d  } t  j d  } t  j d  } t  j | d  |  d  |  f |  } | d  |  d  |  f } t j | | | | g | d |  j } | j j	 j
   } t d   | D  s t  t j j d d d g  j t j  }	 t j j d d	 g  j t j  }
 d
 \ } } |
 |	 d  |  d  |  f <t j | |	 | | |
  |	 d  |  d  |  f  st  d  S(   NRK   R.  Rs   R   c         s` s$   |  ] } t  | j t j  Vq d  S(   N(   R   R   R!   R   (   RK  RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    R[  i   i   i   (   i   i   (   R!   R+   R#   R'   R#  R   R   R   R   R   R   Rk  R   R   R   R\  R!  R   R   R]  (   Rb   RK   Rb  Rc  Rs   RL   RY   R   R-  R^  R_  Rf  Rg  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_fewer_dims  s    (''$c         C` s  t  j d  } t  j d  } t  j d  } t  j d  } t  j | d  |  d  |  f |  } | d  |  d  |  f } t j | | | | g | d |  j } | j j	 j
   } t d   | D  s t  t j j d d d g  j t j  }	 t j j d d	 d
 g  j t j  }
 d \ } } |
 |	 d  |  d  |  f <t j | |	 | | |
  |	 d  |  d  |  f  st  d  S(   NRK   R.  Rs   R   c         s` s$   |  ] } t  | j t j  Vq d  S(   N(   R   R   R!   R   (   RK  RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    R[  i   i   i   i   (   i   i   (   R!   R+   R#   R   R#  R   R   R   R   R   R   Rk  R   R   R   R\  R!  R   R   R]  (   Rb   RK   Rb  Rc  Rs   RL   RY   R   R-  R^  R_  Rf  Rg  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_broadcasted  s    ('''c         C` s?  t  j d  } t  j d  } t  j d  } t  j | | |  } | | } t j | | | g | d |  j } | j j	 j
   } t |  d k s t  | d j t  j j k s t  t j j d d d	 d
 g j d  } t j j d d d
 g j t j  }	 d }
 t j | | |
 |	  |	 j d   s;t  d  S(   NRK   R.  Rs   R   i   i    i   R[  i   i   t   int8(   R!   t   bmatrixR#   R'   R#  R   R   R   R   R   R   R   R   R   R   t   _convert_to_int8R   R   R  R!  R\  R   R   R]  (   Rb   RK   R.  Rs   RL   RY   R   R-  R^  R_  R`  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_different_dtypes  s    
$''(
   R   R   t   classmethodRZ  Ra  Rj  Rk  Rl  Rm  Rq  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRW  q  s   					t    test_local_subtensor_make_vectorc           B` s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C` s   t  j d  \ } } } t | | |  } t | | | g | d d t } | j j j   } t |  d k sv t	  t
 | d j t j j j  s t	  | d d d  d k s t	  d  S(   NR   i    R   i   i   (   R!   t   lscalarsR   R   R  R   R   R   R   R   R   R   R   R	   t   opsR   (   Rb   RK   RL   RY   Rs   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_scalar_idx  s    "%c         C` s   t  j d  \ } } } t | | |  } t | | | g | d  d t } | j j j   } t |  d k sv t	  t
 | d j t  s t	  t | d j  d k s t	  | d d d  } | d d k r | d d k s t	  d  S(   NR   i   R   i   i    (   R!   Rt  R   R   R  R   R   R   R   R   R   R   R   R]   (   Rb   RK   RL   RY   Rs   R   R-  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_slice_idx_stop  s    "c         C` s   t  j d  \ } } } t | | |  } t | | | g | d  d  d  d t } | j j j   } t |  d k s t	  t
 | d j t  s t	  t | d j  d k s t	  | d d d  } | d d k r | d d k s t	  d  S(   NR   i   R   i   i    (   R!   Rt  R   R   R  R   R   R   R   R   R   R   R   R]   (   Rb   RK   RL   RY   Rs   R   R-  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_slice_idx_step  s    +c         C` s   t  j d  \ } } } t | | |  } t | | | g | d d g d t } | j j j   } t |  d k s| t	  t
 | d j t  s t	  t | d j  d k s t	  | d d d  } | d d k r | d d k s t	  d  S(   NR   i    i   R   i   (   R!   Rt  R   R   R  R   R   R   R   R   R   R   R   R]   (   Rb   RK   RL   RY   Rs   R   R-  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_AdvancedSubtensor1_idx
  s    (c   	      C` s   t  j d  \ } } } t | | |  } t j j j   j d  } | d  | d  d  d  | d d g g } xE | D]= } t | | | g | d | } |  j	 t
 | d d  qv Wd  S(   NR   t   local_subtensor_make_vectori   i    R   Re   Rf   (   R!   Rt  R   R   R	   R   R   R   R   R_   RB   (	   Rb   RK   RL   RY   Rs   R   t   v_subtensorst   v_subtensorR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_stack_trace  s    	*(   R   R   Rv  Rw  Rx  Ry  R}  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRs    s
   	
			t   test_local_subtensor_liftc           B` sY   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   c         C` s   t  j d  } t | g t  j |  d d t } |  j t | d d  | j j j	   } t
 | d j t  j  s~ t  | d j t  j k s t  t |  d k s t  | d d g d d g g  d  S(	   NRK   i    R   Re   Rf   i   i   i   (   R!   R+   R   R0  R  R_   RB   R   R   R   R   R   R<   R   R   (   Rb   RK   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test0'  s    %c         C` s  t  j d  } t | g t  j |  d t  j |  g d t } |  j t | d t t  j g  | j	 j
 j   } | d j t  j k s t  t | d j t  j  s t  t | d j t  s t  t |  d k s t  | d d g d d g g  d  S(   NRK   i    R   Re   i   i   i   (   R!   R+   R   R0  R  R_   RB   R<   R   R   R   R   R   R   R   R   R   (   Rb   RK   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test0b5  s    4c         C` sf  t  j d  } t  j d  } t  j d  } t | | | g t  j | | |  d d t } |  j t | d t t  j	 g  | j
 j j   } t | d j t  j  s t  t | d j t  j	  s t  t | d j t  j  s t  t | d	 j j t j j  st  t |  d
 k s.t  | d d g d d	 g g d
 d
 d g d d g g  d  S(   NRK   RL   RY   i    R   Re   i   i   i   i   i   i   i   (   R!   R+   R"   R   R0  R  R_   RB   R<   R?   R   R   R   R   R   R   R   R   R  R   (   Rb   RK   RL   RY   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test1F  s    3%c         C` si  t  j d  } t  j d  } t  j d  } t | | | g t  j | | |  d d !d t } |  j t | d t t  j	 g  | j
 j j   } t | d j t  j  s t  t | d j t  j	  s t  t | d j t  j  s t  t | d	 j j t j j  st  t |  d
 k s1t  | d d g d d	 g g d
 d
 d g d d g g  d  S(   NRK   RL   RY   i    i   R   Re   i   i   i   i   i   i   (   R!   R+   R"   R   R0  R  R_   RB   R<   R?   R   R   R   R   R   R   R   R   R  R   (   Rb   RK   RL   RY   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test2[  s    6%c         C` s   t  j d  } t | g t  j | j d d   d d t } |  j t | d d  | j j	 j
   } t | d j t  j  s t  t | d j t  j  s t  | d j t  j k s t  t |  d	 k s t  | d
 d g  d  S(   NRL   i    RK   R   Re   Rf   i   i   i   i   i   (   R!   R'   R   R0  R   R  R_   RB   R   R   R   R   R   R?   R   R<   R   (   Rb   RL   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test3p  s    1c         C` s  t  j d  } t  j d  } t | | g t  j | |  d d t } | j j j   } t	 | d j
 t  j  s{ t  | d j
 t  j k s t  t	 | d j
 t  j  s t  | d j
 t j k s t  t |  d k s t  | d d g d d g g d d	 g  d  S(
   NRK   RL   i    R   i   i   i   i   i   (   R!   R+   R'   R   R0  R  R   R   R   R   R   R?   R   R  R<   R9   t   exp_inplaceR   (   Rb   RK   RL   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test4  s    ,c         C` s3  t  j d  } t  j d  } t | | g t  j | |  d t  j | |  | g d t } | j j j   } t	 | d j
 t  j  s t  t	 | d j
 j t j j  s t  | d j
 t  j k s t  t	 | d j
 t  j  s t  t |  d k s
t  | d d g d d g g d d	 g  d  S(
   NRK   RL   i    R   i   i   i   i   i   (   R!   R+   R'   R   R0  R  R   R   R   R   R   R?   R   R   R   R"   R  R  R<   R   (   Rb   RK   RL   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test5  s    :	%c         C` s   t  j d  } t  j d  } t | | g t  j | |  d d t } |  j t | d t  | j	 j
 j   } t | d j t  j  s t  t | d j j t j j  s t  t |  d k s t  | d d d g d	  d  S(
   NRK   RL   i    R   Re   i   i   i   i   (   R!   R'   R"   R   R0  R  R_   RB   R<   R   R   R   R   R   R   R   R   R  R   (   Rb   RK   RL   R   R-  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test6  s    ,%c         C` s  t  j d  } t j j d d  j t j  } | j t	 t	 f k sK t
  t  j d t f d t	 f  |  } | j t t	 f k s t
  t | g | d  d  d  d  f d t } |  j t | d t t  j g  | j j j   } t | d j t  j  st
  t | d j t  j  s*t
  | |  | d  d  d  d  f k j   s^t
  t  j d  } t j j d d d d	  j t j  } | j t	 t	 t	 t	 f k st
  t  j d t f d t f  |  } | j t t	 t t	 f k st
  t | g | d  d   d	 d d  d   f d t }	 |  j t |	 d t t  j g  |	 j j j   } t | d j t  j  st
  t | d j t  j  st
  |	 |  | d  d   d	 d d  d   f k j   st
  t | g | d  d   d	 d f d t }
 |  j t |
 d t t  j g  |
 j j j   } t | d j t  j  sXt
  t | d j t  j  swt
  |
 |  | d  d   d	 d f k j   st
  t  j d  } t j j d
 d d	 d  j t j  } | j t	 t	 t	 t	 f k st
  t  j d	 t f  |  } | j t	 t	 t	 t f k s;t
  t | g | d  d   d	 d f d t } |  j t | d t t  j g  | j j j   } t | d j t  j  st
  t | d j t  j  st
  | |  | d  d   d	 d f k j   s	t
  d  S(   NRK   i   i
   i    i   i   R   Re   i   i   (   R!   R+   R   R   R   R!  R   R   RJ   Ri   R   t   RebroadcastR   R   R  R_   RB   R<   R   R   R   R   R   Rf   R  (   Rb   RK   t   xvalt   newxR:  R-  RL   t   yvalt   newyR;  t   f3RY   t   zvalt   newzt   f4(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test7  sV    !$.4'!$!4:+1'!!+(   R   R   R  R  R  R  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR~  &  s   								t   test_local_subtensor_mergec           B` s   e  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 e d  d    Z d   Z RS(   c      	   C` sM   t  j   d d	 d
 d d d d d g |  _ t j j d t  j    |  _ d  S(   Ni   i   i   i   i   i    R2  (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i    (   i   i    (   i    i    (   R   t   seed_rngt   x_shapesR   R   R3  R4  R@  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    
c   	      C` s  t  j d  } xt d d  D]p} t | g | | d  d   d d t } t | g | | d  d   d d t j d  } |  j t | d t	  | j
 j j   } t g  | D]! } t | j t  j	  r | ^ q  d k s t  t | d j t  st  x |  j D]z } |  j j d	 |  j t j  } | | d
 k  re| d
 d
 k re| |  q|  j t | |  |  j t | |  qWq Wd  S(   NRK   ii   iR   t   local_subtensor_mergeRe   i   R[  i    (   R!   R+   R   R   Rl  R  R   R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   t   assertRaisest
   IndexError(	   Rb   RK   R  R   RU   R
  R  t   x_sR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt
   test_const 	  s     )&0! c   
      C` s  t  j d  } t  j d  } t | | g | | d  d   d d t } t | | g | | d  d   d d t j d  } |  j t | d t	  | j
 j j   } t g  | D]! } t | j t  j	  r | ^ q  d k s t  t | d j t  st  x |  j D] } |  j j d |  j t j  } xs t d	 d
  D]b }	 |	 | d k  r}| d d k r}| | |	  qG|  j t | | |	  |  j t | | |	  qGWqWd  S(   NRK   RL   iR   R  Re   i   R[  ii   i    (   R!   R+   R#   R   Rl  R  R   R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   R   R  R  (
   Rb   RK   RL   R   RU   R
  R  R  R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_scalar	  s"    ,#0! R   c   	      C` s  t  j d  } xt d d  D]q} t | g | d  d  d  | d t } t | g | d  d  d  | d t j d  } |  j t | d t  | j	 j
 j   } t g  | D]! } t | j t  j  r | ^ q  d k s t  t | d j t  st  x |  j D]{ } |  j j d	 |  j t j  } | | d
 k  rf| | d
 k rf| |  q|  j t | |  |  j t | |  qWq Wd  S(   NRK   ii   iR   R  Re   i   R[  i    (   R!   R+   R   R   R  R   R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   R  R  (	   Rb   RK   R  R   RU   R
  R  R  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const2:	  s     ) 0!!c   
      C` s  t  j d  } t  j d  } t | | g | d  d  d  | d t } t | | g | d  d  d  | d t j d  } |  j t | d t  | j	 j
 j   } t g  | D]! } t | j t  j  r | ^ q  d k s t  t | d j t  st  x |  j D] } |  j j d |  j t j  } x- t | d	 | d	  D] }	 | | |	  qPWxe t t | d	 d
   t t d | d	   D]2 }	 |  j t | | |	  |  j t | | |	  qWqWd  S(   NRK   RL   iR   R  Re   i   R[  i    i	   i(   R!   R+   R#   R   R  R   R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   R   R   R  R  R  (
   Rb   RK   RL   R   RU   R
  R  R  R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_scalar2Y	  s"    ,#0!8c         C` s  t  j d  } xt d d  D] } t | g | d  d  d  |  d t } |  j t | d t  | j j	 j
   } t g  | D]! } t | j t  j  r | ^ q  d k s t  t | d j t  s t  x< |  j D]1 } |  j j d |  j t j  } | |  q Wq Wd  S(	   NRK   ii   iR   Re   i   R[  (   R!   R+   R   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   (   Rb   RK   R  R   R
  R  R  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const3u	  s    )0!c   	      C` s1  t  j d  } t  j d  } t | | g | d  d  d  |  d t } |  j t | d t  | j j	 j
   } t g  | D]! } t | j t  j  r | ^ q  d k s t  t | d j t  s t  xY |  j D]N } |  j j d |  j t j  } x$ t d d	  D] } | | |  qWq Wd  S(
   NRK   RL   iR   Re   i   R[  ii   (   R!   R+   R#   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   R   (	   Rb   RK   RL   R   R
  R  R  R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_scalar3	  s    ,0!c   	      C` s-  t  j d  } xt d d  D]} x t d d  D] } t | g | | |  d t } |  j t | d t  | j j	 j
   } t g  | D]! } t | j t  j  r | ^ q  d k s t  t | d j t  s t  x< |  j D]1 } |  j j d |  j t j  } | |  q Wq5 Wq Wd  S(	   NRK   ii   R   Re   i   iR[  (   R!   R+   R   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   (	   Rb   RK   t   idx1t   idx2R   R
  R  R  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const4	  s     0!c         C` sW  t  j d  } t  j d  } t  j d  } t | | | g | | |  d t } |  j t | d t  | j j	 j
   } t g  | D]! } t | j t  j  r | ^ q  d k s t  t | d j t  s t  xv |  j D]k } |  j j d |  j t j  } xA t d d	  D]0 }	 x' t d d	  D] }
 | | |	 |
  q1WqWq Wd  S(
   NRK   RL   R   Re   i   iR[  ii   (   R!   R+   R#   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R  R@  R\  R!  R   R   R   (   Rb   RK   RL   RY   R   R
  R  R  R   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_scalar4	  s    &0!c   	      C` s   d d d f d d d f d d d f g } t j d	  } x | D] \ } } } | t |   t |   } t | g | d
 t } |  j t | d t  |  j	 j
 d |  j t j  } | |  q@ Wd  S(   Ni   i   ii   i   ii   i   RK   R   Re   R[  (   i   i   (   NNN(   NNi(   i   i   (   NNi(   NNi   (   i   i   (   i   i   i   (   NNi(   Rl  R!   R+   R~  R   R  R_   RB   R<   R@  R\  R!  R   R   (	   Rb   R   RK   R   t   sl1t   sl2RY   R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const_general	  s    !c         C` s  t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t | | | | | | | g | | | |  | | |  d t } |  j t | d	 t  | j j	 j
   }	 t g  |	 D]! }
 t |
 j t  j  r |
 ^ q  d
 k st  t |	 d j t  s4t  |  j j t t d d    d  } |  j j t t d d    d  } |  j j t t d d    d  } |  j j t t d d    d  } |  j j d d d d d d d d
 d d d d d d g  d  } |  j j d d d d d d d d
 d d d d d d g  d  } x |  j D] } |  j j d |  j t j  } x | D]w } xn | D]f } x] | D]U } xL | D]D } x; | D]3 } x* | D]" } | | | | | | | |  qWqWqWqWqWqWqRWd  S(   NRK   t   b1t   e1t   s1t   b2t   e2t   s2R   Re   i   iii   i   iiiiiii   i   i   i   i   R[  (   R!   R+   R#   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R@  t   permutationR   R  R  R\  R!  R   R   (   Rb   RK   R  R  R  R  R  R  R   R
  R  t   b1rt   e1rt   b2rt   e2rt   s1rt   s2rR  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_scalar5	  s>    ;	1%%%%!!!c         C` s   t  j t  j d  d t j j } t j j d  } | d d d  } t j t  j	 d   } t j
 | g | |  } | |  } | | d d d  d k s t  d  S(   Ni   RW   RK   i   i   ii    (   R   R   R+  R   R   R   R!   R'   R   R   R   R   (   Rb   t   dataRK   RL   R  t   funt   val(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const5
  s    c         C` s  |  j  j d d
  j t j j  } t j j d  } d } t j j d k rW d } n  | d d  d d  d d	  f d } t j	 | g |  } | |  } t
 j | | d d  d d  d d	  f d k  s t  t g  | j j j   D] } t | j t  r | ^ q  | k s(t  | d d } t j	 | g |  } | |  } t
 j | | d d k  szt  t g  | j j j   D] } t | j t  r| ^ q | k st  | d d  d d d	  f d } t j	 | g |  } | |  } t
 j | | d d  d d d	  f d k  s?t  t g  | j j j   D] } t | j t  rU| ^ qU | k st  d  S(   NR[  i   RK   i   RE   i   i   i   i   (   i   i   i   (   i   i   (   i   i   (   R@  R\  R!  R   R   R   R!   R.   R   R   R   Rf   R   R   R   R   R   R   R   R<   (   Rb   R  RK   t   nopsRL   R  R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const6
  s.    $	)>-#-#8c         C` s  t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t | | | | | g | | | |  | d t } |  j t | d t  | j j	 j
   } t g  | D]! } t | j t  j  r | ^ q  d k s t  t | d	 j t  st  |  j j t t d
 d    d  }	 |  j j t t d
 d    d  }
 |  j j t t d
 d    d  } |  j j d d d	 d d d g  d  } x |  j D] } d } d } |  j j d |  j t j  } x |	 D] } x |
 D] } x | D] } x | D]| } y | | | |  | Wn: t k
 rd| d 7} |  j t | | | | | |  q	X| d 7} | | | | | |  q	WqWqWqWqWd  S(   NRK   R   Rc   R   R.  R   Re   i   iii   i   iii   i    R[  (   R!   R+   R#   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R@  R  R   R  R  R\  R!  R   R   R  R  (   Rb   RK   R   Rc   R   R.  R   R
  R  t   b_rt   e_rt   i_rt   s_rR  t   n_index_errt   n_okR   t   b_vt   e_vt   s_vt   i_v(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_scalar6?
  s>    51%%%(!
	
c       	   C` sm  t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t j d d d d d d  } |  j j t t d	 d
    }	 |  j j t t d	 d
    }
 |  j j t t d	 d
    } |  j j t t d	 d
    } |  j j d	 d d d d d d d
 g  } |  j j d	 d d d d d d d
 g  } | | | | | | g } |	 |
 | | | | g } x| D]} g  } g  } g  } t	 |  d k rqn  xc t
 |  D]U \ } } | r| j d   q| j | |  | j | |  | j | |  qWt | d    } t | d   } | | | } t j | g | | d t } |  j t | d t d d  | j j j   } t g  | D]! } t | j t  j  r| ^ q d k st  t | d j t  st  xV |  j D]K } |  j j d |  j t j   } x! t! |   D] } | | |  qJWqWqWd  S(   NRK   R  R  R  R  R  R  i   ii   iiii   i   i    R   Re   t	   bug_printt   ignoreR[  ("   R!   R+   R#   R   t   ndindexR@  R  R   R  R&  R   Rp  Rl  R~  R   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R  R\  R!  R   R   t   zip(    Rb   RK   R  R  R  R  R  R  t   none_positionsR  R  R  R  R  R  t   scalar_varst   scalar_rangest   none_post   slice_inputst
   input_varst   valuesR.  t   none_it   slice1t   slice2t   sub_xR   R
  R  R  R   t   i_val(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_none_sliceu
  sT    """"++
'!c      	   C` s|  t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t j d d d d  } |  j j t t d d	    } |  j j t t d d	    } |  j j t t d d	    }	 |  j j d d
 d d d d d d	 g  }
 | | | | g } | | |
 |	 g } x]| D]U} g  } g  } g  } t	 |  d k rOqn  xc t
 |  D]U \ } } | r~| j d   q\| j | |  | j | |  | j | |  q\Wt | d    } | | | } t j | g | | d t } |  j t | d t  | j j j   } t g  | D]! } t | j t  j  r'| ^ q' d k s]t  t | d j t  syt  x |  j D] } |  j j d |  j t j   } x t! |   D] } d } g  } x? | D]7 } | r| j d   q| j | |  | d 7} qWt | d    } | d } y | | | Wn' t" k
 r^|  j# t" | | |  qX| | |  qWqWqWd  S(   NRK   R   Rc   R   R.  i   i   ii   iiii   i    R   Re   R[  ($   R!   R+   R#   R   R  R@  R  R   R  R&  R   Rp  Rl  R~  R   R   R  R_   RB   R<   R   R   R   R   R   R   R   R   R  R\  R!  R   R   R  R  R  (   Rb   RK   R   Rc   R   R.  R  R  R  R  R  R  R  R  R  R  R  t   jt   none_jt   symbol_sliceR  R   R
  R  R  R   R  t	   i_val_idxt   num_slice_inputst	   num_slicet   num_i(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_none_index
  sb    """+'!
(   R   R   R  R  R  RD   R  R  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    										-		!	6Ct    test_local_adv_sub1_adv_inc_sub1c           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` sP   t  j   t j j j   } | j d  j d  |  _ |  j j d  |  _ d  S(   Nt   local_adv_sub1_adv_inc_sub1R  t   local_remove_all_assert(	   R   R  R   R	   R   R   R   R   t   mode_no_assert(   Rb   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    
c         C` s  xd d d d g D]\ } } t  j d |  } t  j d |  } t  j   } t j j d d  j |  } t j j d d  j |  } t j d d g d	  } t  j | | |  }	 |	 | }
 t	 j
 | | | g |
 |  j  } | | | |  } t j | |  | j j j   } t rat |  d k s6t  t | d
 j t j t j f  syt  n t |  d k syt  t  j | | |  }	 |	 | }
 t	 j
 | | | g |
 |  j  } | | | |  } t j | | | |  | j j j   } t |  d k t  j | j   | |  }	 |	 | }
 t	 j
 | | | g |
 |  j  } | | | |  } t j | |  | j j j   } t rt |  d k st  t | d
 j t j t j f  st  q t |  d k s t  q Wd  S(   NR   RX   RW   i   i   i   i   i   RJ  i    (   s   float32s   float32(   s   float32s   float64(   s   float64s   float32(   s   float64s   float64(   R!   R+   t   ivectorR   R   R   R!  R   R#  R   R   R  R   R   R   R   R   R   R   R   R   R   R	   R   Ro   R   t   inc_subtensort
   zeros_like(   Rb   t   dtype1t   dtype2RK   RL   R  R   R   t   didxt   incR  R   R/  R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    sJ    
!+
!
!+c   
      C` s"  t  j d  } t  j d  } t  j   } t j j d d  j t j  } t j j d d  j t j  } t  j	 | | |  } | | } t
 j | | | g | |  j  } xL | j d | j d d g D]+ }	 |  j t t f | | | |	 |	 g  q W|  j t t f | | | d g  d  S(   NRK   RL   i   i   i   i    i   (   R!   R+   R  R   R   R   R!  R   R   R#  R   R   R   R   R  R   R  RT   (
   Rb   RK   RL   R  R   R   R  R  R   R.  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_assertE  s    !!
!&c   
      C` s   t  j d  } t  j d  t  j d  g } t  j   } g  | D] } t  j | | |  ^ q@ } g  | D] } | | ^ qi } x` t | |  D]O \ } } t j | | | g | |  j  }	 |  j	 t
 |	 d t t j f  q Wd  S(   NRK   RL   Re   (   R!   R+   R-   R  R#  R  R   R   R   R_   RB   R   R"  t   Cast(
   Rb   RK   t   ysR  RL   t   incsR  t   outsRu   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR}  Y  s    )!	(   R   R   R  R  R  R}  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   		3	t   Test_alloc_zeroc           B` s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z RS(   c         C` s.   t  j j j   } | j d d d  |  _ d  S(   Nt   local_incsubtensor_of_zerost   local_setsubtensor_of_constantst   local_0_dot_x(   R   R	   R   R   R   (   Rb   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  m  s    	c         C` s   t  j   } t  j   } t  j |  } t  j |  } t  j | d  |  } t j | | g | d |  j } t j g  | j	 j
 j   D] } t | j t  j  ^ q  s t  d  S(   Ni   R   (   R!   R+   R  R#  R   R   R   R   Rf   R   R   R   R   R   R6   R   (   Rb   RK   RL   t   x0t   y0RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_setsubtensor_allocs0s  s    !	c         C` s   t  j   } t  j t j t j d  d t j  } t  j |  } t  j	 | d  |  } t
 j | g | d |  j } t j g  | j j j   D] } t | j t  j  ^ q  s t  d  S(   Ni   RW   R   (   i   i   (   R!   R+   R   R   R   RD  R   R   R  R#  R   R   R   Rf   R   R   R   R   R   R6   R   (   Rb   RL   R  R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_setsubtensor_allocs1}  s    	c         C` s   t  j   } t  j t j t j d  d t j  } t  j |  } t  j	 | d  | j
  } t j | g | d t } t j g  | j j j   D] } t | j t  j  ^ q  s t  d  S(   Ni   RW   R   (   i   i   (   R!   R+   R   R   R   RD  R   R   R  R#  Ro   R   R   R  Rf   R   R   R   R   R   R6   R   (   Rb   RL   R  R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_setsubtensor_allocs1t  s    	c         C` s   t  j   } t  j t j t j d  d t j  } t  j |  } t  j | d  |  } t	 j
 | g | d |  j } t j g  | j j j   D] } t | j t  j  ^ q  s t  d  S(   Ni   RW   R   (   i   i   (   R!   R+   R   R   R   R  R   R   R#  R   R   R   Rf   R   R   R   R   R   R6   R   (   Rb   RK   R  R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_setsubtensor_allocs2  s    	c         C` s   t  j   } t  j   } t  j |  } t  j | d  |  } t j | | g | d |  j } t j g  | j	 j
 j   D] } t | j t  j  ^ qw  s t  d  S(   Ni   R   (   R!   R+   R  R  R   R   R   R   Rf   R   R   R   R   R   R6   R   (   Rb   RK   RL   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_incsubtensor_allocs0  s    !	c         C` s   t  j   } t  j   } t  j |  } t  j | d  | j  } t j | | g | d t } t j	 g  | j
 j j   D] } t | j t  j  ^ qw  s t  d  S(   Ni   R   (   R!   R+   R  R  Ro   R   R   R  R   Rf   R   R   R   R   R   R6   R   (   Rb   RK   RL   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_incsubtensor_allocs0t  s    	c         C` s   t  j   } t  j t j t j d  d t j  } t  j | d  |  } t	 j
 | g | d |  j } t j g  | j j j   D] } t | j t  j  ^ q  s t  d  S(   Ni   RW   R   (   i   i   (   R!   R+   R   R   R   R  R   R   R  R   R   R   Rf   R   R   R   R   R   R6   R   (   Rb   RK   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_incsubtensor_allocs1  s    	c         C` s   t  j   } t  j   } t  j |  } t  j | d d d d g |  } t j | | g | d |  j } t j g  | j	 j
 j   D] } t | j t  j  ^ q  s t  d  S(   Ni    i   i   i   R   (   R!   R+   R  R  R   R   R   R   Rf   R   R   R   R   R   R8   R   (   Rb   RK   RL   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt"   test_advancedincsubtensor1_allocs0  s    "!	c         C` s   t  j   } t  j   } t  j |  } t  j | d d d d g | j  } t j | | g | d t } t j	 g  | j
 j j   D] } t | j t  j  ^ q  s t  d  S(   Ni    i   i   i   R   (   R!   R+   R  R  Ro   R   R   R  R   Rf   R   R   R   R   R   R8   R   (   Rb   RK   RL   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt#   test_advancedincsubtensor1_allocs0t  s    %	c         C` s   t  j   } t  j t j t j d  d t j  } t  j | d d d d g |  } t	 j
 | g | d |  j } t j g  | j j j   D] } t | j t  j  ^ q  s t  d  S(	   Ni   RW   i    i   i   i   R   (   i   i   (   R!   R+   R   R   R   R  R   R   R  R   R   R   Rf   R   R   R   R   R   R8   R   (   Rb   RK   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt"   test_advancedincsubtensor1_allocs1  s    "	c         C` s   t  j   } t  j   } t  j |  } t  j | d d g d d g g d d g d d g g f |  } t j | | g | d |  j } t j g  | j	 j
 j   D] } t | j t  j  ^ q  s t  d  S(   Ni    i   R   (   R!   R+   R  R  R   R   R   R   Rf   R   R   R   R   R   R7   R   (   Rb   RK   RL   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_advancedincsubtensor_allocs0  s    @!	c         C` s   t  j   } t  j   } t  j |  } t  j | d d g d d g g d d g d d g g f | j  } t j | | g | d t } t j	 g  | j
 j j   D] } t | j t  j  ^ q  s t  d  S(   Ni    i   R   (   R!   R+   R  R  Ro   R   R   R  R   Rf   R   R   R   R   R   R7   R   (   Rb   RK   RL   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt"   test_advancedincsubtensor_allocs0t  s    C	c         C` s   t  j   } t  j t j t j d  d t j  } t  j | d d g d d g g d d g d d g g f |  } t	 j
 | g | d |  j } t j g  | j j j   D] } t | j t  j  ^ q  s t  d  S(   Ni   RW   i    i   R   (   i   i   (   R!   R+   R   R   R   R  R   R   R  R   R   R   Rf   R   R   R   R   R   R7   R   (   Rb   RK   R  RY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_advancedincsubtensor_allocs1  s    @	c      	   C` s  t  j d  } t  j d  } t  j d  } t  j d  } 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 d g d t j j } t j d d d g d	 d
 d g d d d g g d t j j } x| | | f | | | f g D]}	 xw| | | f | | | f g D]W}
 xNd d g D]@} | d k rvt  j |	 d  } |
 d } n |	 d } t  j |
 d  } t  j	 | |  } t j
 |	 d |
 d g | d |  j } | |	 d |
 d  | |	 d |
 d  t j g  | j j j   D] } t | j t  j  ^ q s<t  |  j t t f | |	 d |
 d  |  j t t f | |	 d |
 d  qDWq1WqWd  S(   NR  t   v2t   m1t   m2i    i   RW   i   i   i   i   i   i   i   i	   R   (   R!   R'   R+   R   R   R   R   R   R  R2  R   R   Rf   R   R   R   R   R   t   DotR   R  RT   (   Rb   R  R  R  R  t   vv2t   vm2t   vv3t   vm3t   _e1t   _e2t   pR  R  R  R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_dot_allocs_0  s8    !$0%%
)	;(   R   R   R  R  R  R  R  R  R  R  R  R  R  R  R  R   R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  l  s   		
	
	
	
																		c       	   C` sp  t  j j d d d d }  |  j t j j  }  t j |  d d } t j	 d d d	 } t j	 d
 d d	 } t j
 d  } t j j j r | | | | | d | | | f j   } n  | | | | | d j   } t j | |  } t j | |  } t j j j   j d  } | j d  } t j | | | g d | | d | f g d | }	 |	 j j j   }
 g  |
 D]< } t | j t j  r{t | j j t j
 j  r{| ^ q{} xa | D]Y } t g  | j  D]6 } | j! o
t | j! j t j" t j# t j$ f  ^ q st%  qWt j | | | g | d | }	 t& |	 d t j" t j# t j$ g slt%  d  S(   Ni    g{Gz?R[  id   RI  t   WR.  RW   R   R  R  i   R  t   local_IncSubtensor_serializeRL  R   Re   (   id   id   ('   R   R   t   normalR!  R   R   R   R   Ro   R'   R"   R!   t	   subtensort   inplace_incrementR&  R^  R(  R	   R   R   R   R   R   R   R   R   R   R   R   R   t   AddRk  R]   Rr   R6   R7   R8   R   RB   (   R   R  R.  R  R  RL   t   costt   dWR   R   R
  R  t   addsR   t   inp(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_local_IncSubtensor_serialize  s0    1 5"'Q!	c          C` s  t  j j   }  |  d d g } | d } t  j j | |  } t j   j d  } t j   j d  } t  j |  g | d | } t  j |  g | d | } g  | j	 j
 j   D]! } t | j t j  r | ^ q }	 g  | j	 j
 j   D]! } t | j t j  r | ^ q }
 t d   |	 D  s.t  t d   |
 D  sJt  t j j d d  j d  } | |  } | |  } t j | |  t | d	 t j st  t | d	 d
 st  d  S(   Ni   i   i   t   local_set_to_inc_subtensorR   c         s` s   |  ] } | j  j Vq d  S(   N(   R   t   set_instead_of_inc(   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>C  s    c         s` s   |  ] } | j  j Vq d  S(   N(   R   R  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>E  s    R   Re   Rf   (   R   R!   R,   R#  R	   R   R   R   R   R   R   R   R   R   R8   Rf   R   R   R   t   randnR!  R   R   RB   (   Rs   R   RU   R   t   modert   modetR:  R;  R  t   advi1t   advi2R  R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_set_to_inc_subtensor2  s(    
!!c    	      C` s  t  j j   }  t  j j   } t j d  j d  j t j  } t j d  j d  j t j  d } t	 j
   j d  } d   } t  j |  | g t  j |  |  d	 d
 | } | j j j   } | | | |  t j | |  d	  s t  t | d j t j j t j j t j f  s*t  t  j |  | g t  j |  |  d	 d !d
 | } | j j j   } | | | |  t j | |  d	 d ! st  t | d j t j j  st  t  j j   }  t  j j   } t  j j   } t j d  j d d d  j t j  } t j d  j d d d  j t j  d } t  j |  | | g t  j |  |  | d	 d  d  d   | d   f d
 | } | | | | d	  t j | |  d	 d	 d  d  d   d	 d   f  st  t | d d st  t  j |  | | g t  j |  |  d	 d  d  d   | d   | f d
 | } | | | | d	  t j | |  d	 d  d  d   d	 d   d	 f  st  t | d d st  d  S(   Ni   i   i   i   i   i
   t   local_subtensor_of_dotc         S` s"   |  j  | j  k o! t j |  |  S(   N(   R   R   Ro  (   R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_equality[  s    i   R   ii   i   iH   id   Re   t   last(   i   i   (   i   i   (   R   R!   R+   R   R+  R   R!  R   R   R	   R   R   R   R2  R   R   R   R   R   R   Ro   t   blas_ct   CGemvt   blast   GemvR?   t   Dot22R.   R#   RB   (	   R  R  t   d1t   d2R   R!  R   R
  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_subtensor_of_dotT  s2    $(	..411"*.OOOOt   Test_local_elemwise_allocc           B` sP   e  Z e j Z d    Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z RS(   c         C` s	  t  d  |  _ t  d  |  _ t j d d |  j |  _ t j d d |  j |  _ t j	 d d |  j |  _
 t j |  j d d  |  _ t j |  j d d  |  _ t j |  j |  j j  |  _ t j |  j d |  j j  |  _ t j |  j |  j j d	 |  j j d d  |  _ t j |  j |  j
 j d	 |  j
 j d  |  _ t j |  j d
 d
  |  _ t j |  j d
 d
 d
  |  _ t j d  |  _ t j |  j |  j |  j  |  _ t j |  j d
 d
 d
  |  _ t j j d |  j  |  _ t j |  j d
 d
  |  _ d  S(   NRE   RF   t   vecRW   R   t   tensi   i   i    i   R   (   R   t   fast_compile_modet   fast_run_modeRo   R'   RW   R,  R+   R   R.   R-  R
  t   alloc_wo_dept   alloc_wo_dep_broadR   t   alloc_w_dept   alloc_w_dep_broadt   alloc_w_dep_broad2t   alloc_w_dep_tenst	   tv_wo_dept	   tm_wo_depR#   R   t   tv_w_dept   tm_w_depR   R!   R   R  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s,    !!c         C` sY   t  g  | j j j   D]* } | j d  k	 r t | j t j  ^ q  | k sU t	  d  S(   N(
   R&  R   R   R   R   Rl  R   Ro   R   R   (   Rb   R   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   _verify_alloc_count  s    c         C` s\   t  g  | j j j   D]- } | j d  k	 r t | j t j j	  ^ q  | k sX t
  d  S(   N(   R&  R   R   R   R   Rl  R   Ro   R   R   R   (   Rb   R   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   _verify_assert_count  s    c         C` sW  |  j  j d d  |  _  t |  j |  j g |  j |  j d |  j } |  j | d  |  j | d  |  j	 t
 | d d  t |  j |  j g |  j |  j d |  j  } |  j | d  |  j | d  t |  j |  j g |  j |  j d |  j  } |  j | d  |  j | d  t |  j |  j g |  j |  j d |  j } |  j | d  |  j | d  t |  j |  j g |  j |  j d |  j  } |  j | d  |  j | d  t |  j |  j g |  j |  j d |  j  } |  j | d  |  j | d  t |  j |  j g |  j |  j d |  j  } |  j | d  |  j | d  d  S(   NR   R    R   i   i    Re   Rf   (   R/  R   R   R,  R   R0  R.  R:  R;  R_   RB   R1  R2  R3  R4  (   Rb   t   func(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_remove_alloc_wo_dimshuffle  sZ    	c         C` sx  t  |  j |  j g |  j j d d d  |  j d |  j } |  j | d  |  j | d  t  |  j |  j g |  j j d d d  |  j d |  j } |  j | d  |  j | d  t  |  j |  j g |  j	 j d d d  |  j d |  j } |  j | d  |  j | d  t  |  j |  j g |  j	 j d d d  |  j d |  j } |  j | d  |  j | d  d  S(   Ni    i   RK   R   (
   R   R,  R-  R0  R   R.  R:  R;  R/  R5  (   Rb   R<  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_remove_alloc_w_dimshuffle  s0    c         C` sH  t  |  j |  j g |  j |  j d |  j } |  j | d  |  j | d  t  |  j |  j g |  j |  j d |  j } |  j | d  |  j | d  t  |  j |  j |  j	 g |  j
 |  j d |  j } |  j | d  |  j | d  t  |  j |  j |  j	 g |  j
 |  j d |  j } |  j | d  |  j | d  d  S(   NR   i   i    i   (   R   R,  R   R6  R7  R.  R:  R;  R/  R   R8  R9  (   Rb   R<  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_multi_input_single_alloc  s0    c         C` s   t  j j d |  j d t t t f  } |  j j d d d  | } t | |  j g | d |  j	 } |  j
 | d  |  j | d  t j j d d d  j |  j  } t j j d d  j |  j  } | | |  d  S(   NRW   RJ   i    i   RK   R   i   (   R   R!   RW   Ri   R   R  R   R   R   R/  R:  R;  R   R   R   R!  (   Rb   t   t3fftR  R<  R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt
   test_error:  s    $!(   R   R   R   R   RW   R  R:  R;  R=  R>  R?  RA  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR+  ~  s   					F	%	%c          C` s  xd d d d d d g D]}  t  j  d t j j d	 |  d
 d k |  d d k f  } t j |  d t j } t j |  d d t j } x+t j |  t  j d g  g D]} t  j	 | | j
 d
 | j
 d  } | d  d   d d   f } | j d k st  | d  d   d f } | j d k s2t  g  } |  d
 d k rd| j d t d   f  n  |  d d k r| j t d   d f  n  | t d   t d d   f t d d   f t d d   t d d   f t d d  t d  d  f t d  d  d  t d d  d  g 7} x | D] }	 | j |	  }
 t j | g |
  } t j j d k rt | j j j   d j t  st  n  | |  } | j |	  j
 | j
 k st  qWq Wq Wd  S(   Ni   i   i   i   i   i   i   RW   RJ   i    g      ?i   iRE   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R!   R   R   R   R   RD  R+  R   R   R
  R   t   ndimR   Rp  R~  Rl  R(  R   R   R   R   R   R   R   R<   (   R   RK   R  R  RL   t   yxt   z_matt   z_vect   slicesst   slicesRY   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_subtensor_of_allocJ  s@    #(#c          C` s  t    }  t    } t   } t   } t j j d  } t j j d  } t j j d  d j d  } t j j d d  } t |  g t j	 |  |   d d t
 } g  | j j j   D] }	 |	 j ^ q t j g k s t  | |  t |  | g t j | |   d d t
 } g  | j j j   D] }	 |	 j ^ q&t j g k sMt  | | |  t |  | g t j	 |  |  d d t
 } g  | j j j   D] }	 |	 j ^ qt j g k st  | | |  t |  | g t j	 | |   d d t
 } g  | j j j   D] }	 |	 j ^ q
t j g k s1t  | | |  t |  | g t j	 |  |  d d t
 } g  | j j j   D] }	 |	 j ^ q|t j g k st  | | |  t |  | g t j	 |  |  d d t
 } g  | j j j   D] }	 |	 j ^ qt j g k st  | | |  t | |  g t j	 | |   d d t
 } g  | j j j   D] }	 |	 j j ^ q`}
 t j |
 k st  | | |  d  S(   Ni   R   i   R   (   R*   R(   R-   R   R   R   R!  R   Ro   R	  R  R   R   R   R   R   R   t   secondR   R   (   RK   RL   RY   Rt   R^  t   y_t   z_t   m_R   R  Ru  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_fill_useless}  s<    				(:
+:+:+:+:+:++c    	      C` s  t  j   }  t  j   } t  j   } t j j d t j    } | j	 d  j
 t j  d } | j	 d  j
 t j  } | j	 d d  j
 t j  } t j j   j d d d	 d
 d  j d  } t |  g |  |  d | } t | j j j   d j t  j  st  t | j j j   d j j t j j  s<t  t | j j j   d j d t  j  st | j j j   d j d t  j  st  t j | |  d  t | d d st  t | g | | d | } t | j j j   d j t  j  s	t  t | j j j   d j j t j j  s:t  t | j j j   d j d t  j  st | j j j   d j d t  j  st  t j | |  t j  | j!   t | d d st  t | g | | d | } t | j j j   d j t  j  st  t | j j j   d j j t j j  sDt  t | j j j   d j d t  j  st | j j j   d j d t  j  st  t j | |  t j  | j!   t | d d st  d  S(   NR2  i   i    i   i   i   R   t   uncanonicalizeR   R   t   local_elemwise_alloct   local_elemwise_sub_zerosR   g        Re   Rf   ("   Ro   R"   R'   R+   R   R   R3  R   R4  R   R!  R   R   R   R	   R   R   R   R   R   R   R   R   R   R   R   R   t   SecondR]   t   TensorConstantR   RB   RD  R   (	   R"   t   vectR   R@  t
   scalar_valt   vect_valt   mat_valR   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_elemwise_sub_zeros  sT    		++"+"t&   Test_local_useless_elemwise_comparisonc           B` sw   e  Z d    Z d   Z e d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z RS(   c         C` s   t  j j t j    |  _ d  S(   N(   R   R   R3  R   R4  R@  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c      	   C` s   t  j d  } t  j d  } t j d d   d d  d | g d d   \ } } | | } t j j   j d  } t j	 | | g | d	 | } | |  j
 j d
 d  j t j  |  j
 j d
  j t j   d  S(   NR  t   Yt   fnc         S` s
   |  j    S(   N(   R&  (   RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   <lambda>  s    t   outputs_infot	   sequencest   non_sequencesR  R   i   i   (   Ro   R+   R'   R   t   scanRl  R	   R   R   R   R@  R   R!  R   R   (   Rb   R  RY  t   X_sumRL  t   ZR   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt&   test_local_useless_elemwise_comparison  s    	
!c         C` sM  | j  j j   } | d } t |  d k s: t |   | j | k sX t | j   | t k r t | j  d k s t | j   t | j d t	 j
  s t |   t	 j | j d  | k sIt |   nq t | j  d k s t | j   t | j d t	 j
  s!t |   t	 j | j d  | k sIt |   d  S(   Ni    i   i   (   R   R   R   R   R   R   R
   R]   R   Ro   RR  t   extract_constant(   Rb   R   R  R   R
  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   assert_eqs_const4  s    
$%+$%c         C` se   | j  j j   } t |  d k s* t  | d j t k sC t  d } | |  | k sa t  d  S(   Ni   i    i
   (   R   R   R   R   R   R   R
   (   Rb   R   R
  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   assert_identityB  s
    c         C` sx  t  j d d t j } t j j   j d  } t j | g t  j	 | |  d | } |  j
 | d  t j | g t  j | |  d | } |  j
 | d  t j | g t  j | |  d | } |  j
 | d  t j | g t  j | |  d | } |  j
 | d  t j | g t  j | |  d | } |  j |  t j | g t  j | |  d | } |  j |  d  S(   NRK   RW   t!   local_useless_elemwise_comparisonR   i    i   (   Ro   R"   R   R   R   R	   R   R   R   t   ltRd  t   let   gtt   get   minimumRe  t   maximum(   Rb   RK   R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_inequality_with_selfI  s    ''''''c         C` s%  t  j d d t j } t j j   j d d d d  } t j | g t  j	 | j
 d d  d | } |  j | d  t j | g t  j | j
 d d  d | } |  j | d	  t j | g t  j | j
 d d  d | } | j j j   } t |  d	 k st  t | d j t  s6t | d j   t j d
 d t j } | |  | j
 d k smt  t j | g t  j d | j
 d  d | } | j j j   } t |  d	 k st  t | d j t  st | d j   t j d
 d t j } | |  | j
 d k s%t  t j | g t  j | j
 d d  d | } |  j | d  | |  d k s{t  t j | g t  j d | j
 d  d | } |  j | d  | |  d k st  t j | g t  j d d g | j
 d  d | } t j | |  d d g  d  S(   NRK   RW   Rf  t   local_shape_to_shape_it   local_track_shape_iRz  i    R   i   id   (   Ro   R'   R   R   R   R	   R   R   R   Rg  R   Rd  Rj  Rl  R   R   R   R   R   R   R   R   R   R   Rk  R   R   (   Rb   RK   R   R   R
  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_shape_inequality_with_self_  s<    	...).)..4c         C` s   t  j d d t j } t j j   j d d d d  } t  j d d t j } t j | | g t  j	 | j
 d | j
 d d  d	 | } |  j | d  t j | | g t  j | j
 d | j
 d d  d	 | } |  j | d
  d  S(   NRK   RW   Rf  Rn  Ro  Rz  RL   i    R   i   (   Ro   R'   R   R   R   R	   R   R   R   Rg  R   Rd  Rj  (   Rb   RK   R   RL   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_shape_add_inequality  s    	<<c         C` s  t  j j d k r! t d   n  t j d d t j } x | j d t d  |  g D] } t  j	 | g t j
 | d   } | d d g  d k s t  | g   d k s t  t  j	 | g t j
 | d   } |  j | d  | d d g  d k sY t  qY Wt d | j d | j d d ! } t  j	 | g t j
 | d   } | d d g  d k j   sqt  | g   d k j   st  t  j	 | g t j
 | d   } |  j | d d	 t j | d d g  d k j   st  d  S(
   NRE   s$   Skip opt test as the opt is disabledRK   RW   i    i   i   iR   (   R   R   R   R   Ro   R'   R   R   R   R   RY  R   Rd  R;   Rf   R
  (   Rb   RK   RU   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_equality_shapes  s(    !!"
!$!c         C` sz  t  j j   j d  } t j d d d } xFt j d  t j d  f d g D] \ } } t  j | g t j	 | |  d | } |  j
 | d  t  j | g t j	 | |  d | } |  j
 | d  t  j | g t j	 | |  d | } | j d j j | j k r|  j |  n  t  j | g t j	 | |  d | } | j d j j | j k rR |  j |  qR qR Wd  S(	   NR   RK   RW   Rn  i    i   R   (   i    i   (   R   R	   R   R   Ro   R"   R   Rn  R   Rf  Rd  Rq   R  RW   Re  (   Rb   R   RK   t   zerot   oneR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_and  s    1''''c         C` sz  t  j j   j d  } t j d d d } xFt j d  t j d  f d g D] \ } } t  j | g t j	 | |  d | } |  j
 | d  t  j | g t j	 | |  d | } |  j
 | d  t  j | g t j	 | |  d | } | j d j j | j k r|  j |  n  t  j | g t j	 | |  d | } | j d j j | j k rR |  j |  qR qR Wd  S(	   NR   RK   RW   Rn  i    i   R   (   i    i   (   R   R	   R   R   Ro   R"   R   Rn  R   Rd  Rd  Rq   R  RW   Re  (   Rb   R   RK   Rs  Rt  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_or  s    1''''c         C` sh   t  j j   j d  } t j d d d } t  j | g t j | |  d | } |  j | d  d  S(   NR   RK   RW   Rn  R   i    (	   R   R	   R   R   Ro   R"   R   Re  Rd  (   Rb   R   RK   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_xor  s    'c         C` s   t  j j   j d  } t j d d t j } t  j | g t j	 | |  d | } |  j
 t | d d  t  j | g t j | |  d | } |  j
 t | d d  d  S(   NRf  RK   RW   R   Re   R"  (   R   R	   R   R   Ro   R'   R   R   R   Ri  R_   RB   Rh  (   Rb   R   RK   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_stacktrace  s    	''(   R   R   R  Rb  R
   Rd  Re  Rm  Rp  Rq  Rr  Ru  Rv  Rw  Rx  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRX    s   		D			'					t   Test_local_canonicalize_allocc           B` s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C` s   t  j j t j    |  _ d  S(   N(   R   R   R3  R   R4  R@  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         C` s   t  |  j j d d   } t j | d d  } | j rQ t | j j t j  sW t	  t
 g  | d t } g  | j j j   D] } | j ^ q t g k s t	  t t t j  r |  j t |  n  d  S(   Ni   i   i   R   (   R   R@  R  R!   R
  Rr   R   R   R   R   R   R  R   R   R   R
   R	   R  R  RT   (   Rb   RK   R   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    '%c         C` s   t  j d  } t j d  } t j | |  } t | g | g d | } g  | j j j   D] } | j	 j
 ^ q^ } t j | k s t  d  S(   NR    RK   R   (   R  R   R!   R+   R	  R   R   R   R   R   R   R   R   (   Rb   R   RK   t   xxR   R  t
   op_classes(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    +c         C` s   t  j d  } t j d  } t j | d  } t | g | g d | } g  | j j j   D] } | j	 j
 ^ q^ } t |  t j | k s t  d  S(   NR    RK   i   i   R   (   i   (   i   i   (   R  R   R!   R+   R>   R   R   R   R   R   R   R   R   R   (   Rb   R   RK   RL   R   R  R{  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    +
c         C` sL  t  t  } t |  j j d   } t |  j j    } t |  j j d d   } t |  j j d d   } t j | d d d  } t j | d d  } t j | d d d  } t j | d d  }	 t | | | | g | | | |	 g  }
 |  j t	 |
  d k  | j
 |
  |  j t	 |
  d k  |  j t |
 d d  d  S(   Ni   i   i   sV  [Alloc(<TensorType(float64, vector)>, TensorConstant{1}, TensorConstant{3}, TensorConstant{2}), Alloc(<TensorType(float64, scalar)>, TensorConstant{1}, TensorConstant{1}), Alloc(<TensorType(float64, matrix)>, TensorConstant{1}, TensorConstant{1}, TensorConstant{2}), Alloc(<TensorType(float64, matrix)>, TensorConstant{1}, TensorConstant{2})]sO  [InplaceDimShuffle{x,0,1}(Alloc(<TensorType(float64, vector)>, TensorConstant{3}, TensorConstant{2})), InplaceDimShuffle{x,x}(<TensorType(float64, scalar)>), InplaceDimShuffle{x,0,1}(Alloc(<TensorType(float64, matrix)>, TensorConstant{1}, TensorConstant{2})), Alloc(<TensorType(float64, matrix)>, TensorConstant{1}, TensorConstant{2})]Re   Rf   (   RC   R    R   R@  R  R!   R
  R   R_   R`   RQ   RB   (   Rb   t
   alloc_liftRK   RL   RY   R3  t   alloc_xt   alloc_yt   alloc_zt   alloc_wRU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_useless_alloc_with_shape_one&  s    '(   R   R   R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRy    s
   				t&   Test_local_useless_inc_subtensor_allocc           B` s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   t!   local_useless_inc_subtensor_allocc         C` s:   t  j j } | d k r! d } n  t j j |  |  _ d  S(   NRE   RF   (   R   R   R   R	   R   (   Rb   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  ]  s    	c         C` s  t  j d  } t  j d  } t  j d d d } t  j | t j | | j  |  } |  j j	 |  j
  } |  j j |  j
  } t j | | | g | d | } t j | | | g | d | } t g  | j j j   D]! }	 t |	 j t  j  r |	 ^ q  d k st  t g  | j j j   D]! }	 t |	 j t  j  r%|	 ^ q% d k s[t  t j j d	  j t j  }
 t j j   } t j j d d
 d d } | |
 | |  } | |
 | |  } t j | |  |  j t  | d t  j!  |  j t  | d t  j!  d  S(   NRK   RL   R.  RW   R   R   i   i    i   i   R[  i   Re   (   i   i   ("   R!   R'   R"   R+   t   advanced_inc_subtensorRo   R
  R   R   R   t   opt_nameR   R   R   R   R   R   R   R   R   R   R   R   R   R  R!  R   R   R  R   R   R_   RB   R7   (   Rb   RK   RL   R.  RY   R  R  R:  R;  R  t   x_valuet   y_valuet   i_valueR   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_advanced_inc_subtensore  s(    $!!00c         C` s  t  j d  } t  j d  } t  j d d d } t  j | t j | | j  |  } |  j j |  j	  } |  j j
 |  j	  } t j | | | g | d | } t j | | | g | d | } t g  | j j j   D]! }	 t |	 j t  j  r |	 ^ q  d k st  t g  | j j j   D]! }	 t |	 j t  j  r%|	 ^ q% d k s[t  t j j d	  j t j  }
 t j j   } t j j d d
 d d } | |
 | |  } | |
 | |  } t j | |  |  j t | d t  j   |  j t | d d  d  S(   NRK   RL   R.  RW   R   R   i   i    i   i   R[  i   Re   Rf   (!   R!   R'   R"   t   advanced_inc_subtensor1Ro   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_   RB   R8   (   Rb   RK   RL   R.  RY   R  R  R:  R;  R  R  R  R  R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_advanced_inc_subtensor1  s*    $!!00	c         C` s  t  j d  } t  j d  } t  j d d d } t  j | |  t j | |   } |  j j |  j  } |  j j	 |  j  } t
 j | | | g | d | } t
 j | | | g | d | } t g  | j j j   D]! }	 t |	 j t  j  r |	 ^ q  d k st  t g  | j j j   D]! }	 t |	 j t  j  r#|	 ^ q# d k sYt  t j j d	  j t j  }
 t j j   } d
 } | |
 | |  } | |
 | |  } t j | |  |  j t | d d  |  j t | d d  d  S(   NRK   RL   R.  RW   R   R   i   i    i   i   Re   R"  (   R!   R'   R"   R  Ro   R
  R   R   R  R   R   R   R   R   R   R   R   R   R   R   R   R   R  R!  R   R   R   R   R_   RB   (   Rb   RK   RL   R.  RY   R  R  R:  R;  R  R  R  R  R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_incsubtensor  s(    "!!00(   R   R   R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  Z  s
   			t   test_shapeoptimizerc           B` s_   e  Z d    Z d   Z d   Z e d    Z d   Z d   Z d   Z	 d   Z
 d   Z RS(	   c         C` s   t  j   d  S(   N(   R   R  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         C` s   t  j j } | d k r! d } n  t j   } t j   } t | | g | | j d | } x2 | j j	 j
   D] } | j t j k sn t  qn Wd  S(   NRE   RF   R   (   R   R   R   Ro   R'   R+   R   R   R   R   R   R   R  R   (   Rb   R   Rs   Rt   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    	"c         C` s   t  j j } | d k r! d } n  t j   } t | g | j d d d  j d d | } | j j	 j
   } t |  d k s t  | d j t k s t  d  S(   NRE   RF   RK   i    i   R   (   R   R   R   Ro   R'   R   R   R   R   R   R   R   R   R   R
   (   Rb   R   Rs   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_constant  s    	.c         C` s_  d } d   } | | | |  | } | | } | | | |  | } | | }	 t j t j |  j d | |	 |  j d  }
 t j |
 d d  d |  d |  d d  f |   }  x t |  D] } | | d } x} t |  D]o } | | d } |  d d  | | |  | | |  d d  f } | d k rA| } q t j | |  } q Wq W| S(   s   Like max_pool but with input using axes ('c', 0, 1, 'b')
          (Alex Krizhevsky format)

        pool_shp, pool_stride and img_shp are int that represent
        the same shp in x and y.
        c         S` s_   t  t j t |  |  |   } | | | |  k s= t  | | d | |  k  s[ t  | S(   Ni   (   t   intR   t   ceilt   floatR   (   t   im_shpt   p_shpt   p_strdt   rval(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt	   last_pool  s    #i    i   Ni   (	   Rl  Ro   R
  R   t   infR   R#  R   Rl  (   t   c01bt   pool_shpt   pool_stridet   img_shpt   mxR  t   last_pool_rt
   required_rt   last_pool_ct
   required_ct   wide_infinityt   row_within_poolt   row_stopt   col_within_poolt   col_stopt   cur(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   max_pool_c01b  s&    	

:	c         C` s   d } t  j j t j    } t | j |   j t j	   } |  j
 | d d d  } t j t j j    } t | _ t j g  | d | } |   d  S(   Ni   R   (   i   i   i   i   (   R   R   R3  R   R4  R   R   R!  R   R   R  R  R   R	   R   Ri   R  R   (   Rb   R   R@  R   Ru   R   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_broadcasted_dims  s    !	c         C` sF   t  j d d g  } | d } | t  j d | |  } | j   d S(   sx   This test the error in gh-1122 that is a caused by the
        combination of merge optimizer and ShapeFeature.
        i    i   N(   R!   R   R;   t   eval(   Rb   RK   RL   t   x1(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_constant_merge  s    
c         ` sa  d t  j f d     Y      } d t  j f d     Y} |    t  j   g     f d    } t j j   j d d  } t j j	 t
 j    } t j d  } | |  } t j | g | j d	 | } | j d
 d d  j t j  }	 t j | |	  d
 d d g k  st  g  | j j j   D] }
 |
 j ^ q2} t |  d k s_t  | | k sqt   | k st  t j |  t j j   j d d  } t j | g | j d	 | } | j d d d  j t j  }	 t j | |	  d d d g k  st  g  | j j j   D] }
 |
 j ^ q'} t |  d k sTt  | | k sft   | k sxt  | | | |    } t j | g | j d	 | } | j d d d  j t j  }	 t j | |	  d d d g k  st  g  | j j j   D] }
 |
 j ^ q} t |  d k s9t  | | k sKt   | k s]t  d  S(   Nt   IdentityNoShapec           B` s    e  Z d  Z d   Z d   Z RS(   s:   Op that does not infer the output shape from the input onec         S` s+   t  |  } t j |  | g | j   g  S(   N(   R5   R   t   ApplyRI   (   Rb   RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt	   make_node  s    c         S` s&   | \ } | \ } | j    | d <d  S(   Ni    (   R  (   Rb   R  R  t   out_RK   Ru   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   perform!  s    		(   R   R   R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   	t   IdentityShapec           B` s)   e  Z d  Z d   Z d   Z d   Z RS(   s6   Op that does infer the output shape from the input onec         S` s+   t  |  } t j |  | g | j   g  S(   N(   R5   R   R  RI   (   Rb   RK   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  +  s    c         S` s&   | \ } | \ } | j    | d <d  S(   Ni    (   R  (   Rb   R  R  R  RK   Ru   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  /  s    		c         S` s   | \ } | f S(   N(    (   Rb   R  t   xshp_t   xshp(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   infer_shape4  s    	(   R   R   R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  )  s   		c         ` s*   t  |  j    r&  |  j d  g Sd S(   s6   Optimization transforming the first Op into the secondi    N(   R   R   R]   (   R  (   R  t   identity_shape(    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt(   local_identity_noshape_to_identity_shape:  s    R   RN   RK   R   i   i   i   i   i   i   i   (   R   t   Opt   local_optimizerR   R	   R   R   R   R   R3  R   R4  Ro   R.   R   R   R  R!  R   R   Rf   R   R   R   R   R   R   R   t   register_specialize(   Rb   t   identity_noshapeR  R  R   R@  RK   t   ins_xR   R  R  t   f_opsRU   t   g_opst   ins_x3R   t   h_ops(    (   R  R  s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_track_shape_i  sF    		$!*(!*(!*(c         C` sr   t  j   } | j d } t j j   j d  } t j | g | d | } t | d d g d d g g   d  S(   Ni    R   R   i   i   i   (	   Ro   R+   R   R   R	   R   R   R   R   (   Rb   R  t   exprR   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_no_shapeopti  s
    c         C` s   d d  l  j j } | j s* t d   n  t j d  d k  rL t d   n  t j j	 t j j
 t j  d d d  } d d	 l m } t | d
  G } t r | | d d } n | |  } | j   } t j |   Wd  QXd  S(   Ni    s   cuda not availablei   i   s$   Test skipped due to a too old pythonR!   t   testss   shape_opt_cycle.pkl(   t   CompatUnpicklert   rbt   encodingt   latin1(   i   i   (   Rq  Rr  Rs  R  R   t   syst   version_infot   ost   pathR;   t   dirnameR   t   __file__t   theano.misc.pkl_utilsR  t   openR   t   loadR   (   Rb   Rs  t   pkl_filenameR  t   pkl_fileR   t   fn_args(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_no_cycler  s    	(   R   R   R  R  R  t   staticmethodR  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   		
	*				O		R  c           B` sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s   t  t |   j   d  S(   N(   R  R  R  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         C` su   t  j   } t  j   } t j | | g t j j j | t  j | |    } | d d  |  j t	 | d d  d  S(   Ni   i    (
   Ro   R"   R   R   R!   R   t	   assert_opRY  R  R   (   Rb   RK   RL   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s
    6c         C` s   t  j j } | d k r! d } n  t j j |  } t j   } t  j | g t  j j	 j
 | d  d | } | d  d k s t  | d  d k s t  | j j j   } t |  d k s t  | d j t k s t  d  S(   NRE   RF   i   R   i   i    (   R   R   R   R	   R   Ro   R"   R   R!   R   R  R   R   R   R   R   R   R
   (   Rb   R   RK   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_local_remove_useless_assert1  s    	-c         C` s  t  j j } | d k r! d } n  t j j |  } t j   } t j   } t  j | | g t  j j	 j
 | | d  d | } | d d  d k s t  | d d  d k s t  | j j j   } t |  d k s t  t | d j  d k s t  | d j t k st  d  S(   NRE   RF   i   R   i   i   i    (   R   R   R   R	   R   Ro   R"   R   R!   R   R  R   R   R   R   R   R]   R   R
   (   Rb   R   RK   RL   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt&   test_test_local_remove_useless_assert2  s    	*	c         C` s   t  j j } | d k r! d } n  t j j |  } t j   } t j   } t  j | | g t  j j	 j
 | | d  d | } |  j t | d d  | j j j   } t |  d k s t  t | d j  d k s t  | d j t k s t  d  S(   NRE   RF   i    R   i   i   i   (   R   R   R   R	   R   Ro   R"   R   R!   R   R  R  R   R   R   R   R   R]   R   R
   (   Rb   R   RK   RL   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_local_remove_useless_assert3  s    	*	c   	      C` s  t  j j } | d k r! d } n  t j j |  j d  } t j   } t j   } t  j | | g t  j	 j
 j | |  d | } t | t  j j j  r |  j t | d d  n | d d  | j j j   } t |  d k s t |   | d j t k st |   t j j   } t  j	 j
 j | t j | d  j    } t  j | g | d | j d  } | j j j   } g  | D]$ } t | j t j
 j  r| ^ q} t |  d k st  d  S(   NRE   RF   R  R   i   i    t   unsafe(   R   R   R   R	   R   R   Ro   R"   R   R!   R   R  R   R  R  R  R   R   R   R   R   R   R
   R   RY  Rk  R   R   (	   Rb   R   RK   RL   R   R
  R   R  t   a_op(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_remove_all_assert1  s(    	'	*$1c         C` s   t    } t    } t j j   } t j j   d } t j j j | |  } |  j | | g | g | | g t	  t
   } t j j d d  } | d 7} t j j j | | |  } |  j | | | g | g | | | g t	  d  S(   Ni   i   i   (   R&   R   R   R   R   R!   R   R  t   _compile_and_checkR   R-   (   Rb   t   adscalt   bdscalt
   adscal_valt
   bdscal_valRu   t   admatt	   admat_val(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_infer_shape  s    			
(	   R   R   R  R  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   						c          C` s  t  j j }  |  d k r! d }  n  t j j |   }  |  j d  }  t j   } t j   } t | g | d d |  } g  | j	 j
 j   D] } | j ^ q } | t g k t | g | d d |  } g  | j	 j
 j   D] } | j ^ q } | t d  t j g k st  t | g | d d |  } g  | j	 j
 j   D] } | j ^ q?} | t j g k slt  t | | g | d | d |  } g  | j	 j
 j   D] } | j ^ q} | t j g k st  t | | g | d | d |  } g  | j	 j
 j   D] } | j ^ q} | t d  t j g k s=t  t | | g | d | d |  } g  | j	 j
 j   D] } | j ^ qt} | t j g k st  t | | g | d | d |  } g  | j	 j
 j   D] } | j ^ q} | t j g k st  d  S(   NRE   RF   R  i   R   i    i(   R   R   R   R	   R   R   Ro   R'   R   R   R   R   R   R
   R   R
  R   Ra  R   (   R   Rs   Rt   R   R  t   nodes(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_mul_specialize  s8    	((!($($(!$(#(t   T_Tilec           B` s   e  Z d    Z RS(   c   	      C` s  t  j   } t  j   } d  } t j j d k r9 d } n  x| d d d g f | d d g d d g g f g D]`\ } } x t | j d  D] } t j	 | g t
 | d
 |  d | } | j j j   } t |  d k s t  t | d j t j  st  | |  q Wx t | j d | j d  D] } t j	 | g t
 | d |  d | } | j j j   } t |  d k st  t | d j t  st  t | d	 t g st  | |  q0Wqm Wd  S(   NRE   RF   i   i   i   i   R   i    Re   (   i   (   i   (   Ro   R'   R+   Rl  R   R   R   R  RB  R   R>   R   R   R   R   R   R   R   R	   R   R?   RB   (	   Rb   Rs   Rt   R   t   varR  RB  R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_useless_tile  s&    	@($((   R   R   R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   c    
      C` s3  t  j j d  }  t j   } t j j   } | j d  } x t	 d d  D] } t
 | g | | d | } t
 | g | | d | } t | j j j    d k s t  t j   } | |   t j   } | |   t j   }	 t | | | |	 | | | |	 | k   | | |	 | k  sL t d  qL qL Wx t	 d d	 d
  D] } t
 | g | | d | } t
 | g | | d | } t | j j j    d k st  t j   } | |   t j   } | |   t j   }	 t | | | |	 | | | |	 | k   | | |	 | k  sGt d  qGqGWd  S(   Ng    cAt   local_pow_specializei  i  R   i   s   WARNING WE ARE SLOWERii$i(   R   R   R   Ro   R'   R	   R   R   R   R   R   R   R   R   R   R   Rm  R   (
   R  Rs   R   t   mode_without_pow_optR.  R:  R;  R  t   t2t   t3(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt    speed_local_pow_specialize_range;  s8    $

)$

)c          C` s?  t  j j }  |  d k r! d }  n  t j j |   }  |  j d  }  t j   } t j	 d d t  j j
 } t j	 d d d t  j j
 } t | g | d d |  } g  | j j j   D] } | j ^ q } | t d  t j g k s t  t j | |  | d  t | g | d d |  } g  | j j j   D] } | j ^ q5} | t g k t j | |  | d  t | g | d	 d |  } g  | j j j   D] } | j ^ q} | t j g k st  t j | |  | d	  t | g | d
 d |  } g  | j j j   D] } | j ^ q} | t j g k sCt  t j | |  | d
  t | g | d d |  } g  | j j j   D] } | j ^ q} t |  d
 k st  | d t j k st  t | d j t  j j j  st  t j | |  | d  t | g | d d |  } g  | j j j   D] } | j ^ q@} | t j g k smt  t j | |  | d  t | g | d d |  } g  | j j j   D] } | j ^ q} t |  d
 k st  | d t j k st  t | d j t  j j j  s!t  t j | |  | d  d  S(   NRE   RF   R  i
   RW   i   i    R   ii   ig      ?g      (   R   R   R   R	   R   R   Ro   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   Rs   R  t   val_no0R   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_pow_specializeZ  sP    	(!((((%((%c          C` s  t  j j }  |  d k r! d }  n  t j j |   }  |  j d  j d  }  t j   } t j	 d d t  j j
 } t j	 d d d t  j j
 } t | g | d d	 |  } g  | j j j   D] } | j ^ q } t |  d k s t  t | j j j   d
 j j j j  d k s t  t | d
 j t  j j  sBt  t j | |  | d  t | g | d d	 |  } g  | j j j   D] } | j ^ q} t |  d k st  t | j j j   d
 j j j j  d k st  t | d
 j t  j j  st  t | d j t  j j j  s3t  t j | |  | d  t | g | d d	 |  } g  | j j j   D] } | j ^ q|} t |  d k st  t | j j j   d
 j j j j  d k st  t | d
 j t  j j  st  t j | |  | d  t | g | d d	 |  } g  | j j j   D] } | j ^ qH} t |  d k sut  t | j j j   d
 j j j j  d k st  t | d
 j t  j j  st  t | d j t  j j j  st  t j | |  | d  d  S(   NRE   RF   R  R{  i
   RW   i   i   R   i    i   ii   ii   i   i(   R   R   R   R	   R   R   Ro   R'   R   R+  R   R   R   R   R   R   R   R   R   t   apply_nodesR   R"   R  R   R   R   R   (   R   Rs   R  R  R   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt7   test_local_pow_specialize_device_more_aggressive_on_cpu  sD    	(4"(4"%(4"(4"%t   T_Rebroadcastc           B` s   e  Z d    Z d   Z RS(   c         C` s   t  j j   j d  } t j   } t j   } t j d | |  } t  j | | g | d | } | d d g d d d g  | j j	 j
   } t g  | D]! } t | j t j  r | ^ q  d k s t  t | d	 d
 s t  d  S(   NR   i    R   i   i   i   i   i   Re   Rf   (   R   R	   R   R   Ro   R'   R;   R   R   R   R   R   R   R   R  R   RB   (   Rb   R   R  R  R  R   Rc   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_useless_rebroadcast  s    @c   	      C` s   t  j j   j d  } t j   } t j | d d  } t j | d  } t  j | g | d | } | d g g  | j	 j
 j   } g  | D]! } t | j t j  r | ^ q } t |  d k s t  | d j j i t d 6k s t  d  S(   NR   i    i   R   iL   (   R   R	   R   R   Ro   R+   t   addbroadcastt   unbroadcastR   R   R   R   R   R   R  R   R   t   axisR   (	   Rb   R   Rt   R   Rs   R   Rc   R  t   rebroadcast_nodes(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_rebroadcast_rebroadcast  s    .(   R   R   R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   	t   T_useless_elemwisec           B` s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s"   t  j j   j d d  |  _ d  S(   NR   R   (   R   R	   R   R   R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c   	      C` s  t  j   } t  j   } t j | | g t  j | |  d |  j } t j j d d  } t j j d d  } | | |  | j	 j
 j   } t |  d k s t  t | d j t  j  s t  t | d j j t j j  s t  t j | g t  j | |  d |  j } t j | |  t j d  k  s>t  | j	 j
 j   } t |  d k sht  t | d j t  j  st  d  S(	   NR   i   i   i   i    i   i(   i   i   (   Ro   R-   R   R   RY  R   R   R   R   R   R   R   R   R   R   R   R   R   R"   t   EQRf   R   R   (	   Rb   RK   RL   R   t   vxt   vyR
  R;  t   topo2(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_eq  s    -%**c   	      C` s  t  j   } t  j   } t j | | g t  j | |  d |  j } t j j d d  } t j j d d  } | | |  | j	 j
 j   } t |  d k s t  t | d j t  j  s t  t | d j j t j j  s t  t j | g t  j | |  d |  j } t j | |  t j d  k  s>t  | j	 j
 j   } t |  d k sht  t | d j t  j  st  d  S(	   NR   i   i   i   i    i   i(   i   i   (   Ro   R-   R   R   RZ  R   R   R   R   R   R   R   R   R   R   R   R   R   R"   t   NEQRf   RD  R   (	   Rb   RK   RL   R   R  R  R
  R;  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_neq  s    -%**c   	      C` s}  t  j   } t  j   } t j | g t  j |  d |  j } t j j d d  } t j j d d  } | |  | j	 j
 j   } t |  d k s t  | d j t k s t  t j | | g t  j | |  d |  j } t j | | |  | | k  st  | j	 j
 j   } t |  d k s5t  t | d j t  j  sTt  t | d j j t j j  syt  d  S(   NR   i   i   i   i    (   Ro   R-   R   R   R   R   R   R   R   R   R   R   R   R   R   R
   Rf   R   R   R   R"   R  (	   Rb   RK   RL   R   R  R  R
  R;  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_mul  s    '
-(c   	      C` s}  t  j   } t  j   } t j | g t  j |  d |  j } t j j d d  } t j j d d  } | |  | j	 j
 j   } t |  d k s t  | d j t k s t  t j | | g t  j | |  d |  j } t j | | |  | | k  st  | j	 j
 j   } t |  d k s5t  t | d j t  j  sTt  t | d j j t j j  syt  d  S(   NR   i   i   i   i    (   Ro   R-   R   R   R  R   R   R   R   R   R   R   R   R   R   R
   Rf   R   R   R   R"   R  (	   Rb   RK   RL   R   R  R  R
  R;  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_add  s    '
-(c         C` s   t  j   } t j | g t  j |  d |  j } t j j d d  j	 t
 j  } | |  | j j j   } t |  d k s t  | d j t k s t  d  S(   NR   i   i   i   i    (   Ro   R+   R   R   t   tensor_copyR   R   R   R   R!  R   R   R   R   R   R   R   R   R
   (   Rb   RK   R   R  R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_identity  s    '!
(   R   R   R  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   					t   T_cast_castc           B` s   e  Z d    Z d   Z RS(   c         C` s%   t  j j   } | j d  |  _ d  S(   Nt   local_cast_cast(   R   R	   R   R   R   (   Rb   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  )  s    c         C` s  t  j   } t  j t j t j d    | j d   } t j | g | d |  j	 } t
 j j d d  j d  } | |  | j j j   } t |  d k s t  t | d j t  j  s t  t  j   } t  j t j t j d    | j d   } t j | g | d |  j	 } t
 j j d d  } | |  | j j j   } t |  d k snt  t | d j t  j  st  d  S(   NRX   R   i   i   R   i   i    (   Ro   R,   R   R"  R  t   ScalarR!  R   R   R   R   R   R   R   R   R   R   R   R   R   R-   (   Rb   RK   R  R   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test-  s     0
0
(   R   R   R  R	  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  (  s   	t   T_func_inversec           B` s)   e  Z d    Z e e d  Z d   Z RS(   c         C` s%   t  j j   } | j d  |  _ d  S(   Nt   local_func_inv(   R   R	   R   R   R   (   Rb   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  C  s    c         C` s  | r t  j   n	 t  j   } | | |   } t j | g | d |  j } | |  | }	 | j j j   }
 | r d g } n d d g } | r t	 j
 |	 d k  } n t	 j
 |	 d k  } |  j t |
  | k  |  j |  |  j t |
 d j t  | d  d S(   sB   
        Check that a pair of funcs is optimized properly
        R   i   i   i    s   Inverse functions not removed!N(   Ro   t   cmatrixR,   R   R   R   R   R   R   R   Rf   R_   R   t   assertEqualR   R   R   (   Rb   t   func1t   func2R  t   should_copyt
   is_complexRK   R  R   t   deltaR
  t   acceptable_topo_lenst   delta_condition(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   assert_func_pair_optimizedG  s    c         C` s  t  j j d d  j d  } |  j t j t j |  t  j j d d  j d  d } |  j t j t j |  t  j j d d  j d  } |  j t j t j	 |  |  j t j
 t j |  |  j t j t j |  |  j t j t j |  |  j t j t j |  | t d d  | d } |  j t j t j | d t |  j t j t j | d	 t d t t  j j d d  j d  d } |  j t j t j | d	 t |  j t j t j | d	 t d
 S(   sG   
        test optimization for consecutive functional inverses
        i   i   R   i   i    i   g{Gz?R  R  N(   R   R   R   R!  R  Ro   t   deg2radt   rad2degRR  t   arccosht   arcsinhR]  t   arctanhR[  R`  Ra  t   complext   conjR   Ri   (   Rb   R   t   cx(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR	  c  s&    ""(   R   R   R  R   Ri   R  R	  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR
  A  s   	c          C` s>  t  j   }  t j j d  j d  } t j |  g |  d |  |  g d | } | j j j	   } t
 |  d k sz t  t  j d  }  |  j d k s t  t j j d  j d  } t j g  |  d |  |  g d | } | j j j	   } t
 |  d k s	t  t g  | D] } t | j t  ^ q s:t  d S(   s    Test that constant folding get registered at fast_compile

    An error removed that registration during the registration.
    RE   R  i   R   i   i    N(   R!   R*   R   R	   R   R   R   R   R   R   R   R   R   RB  Rf   R   R   R   (   RK   R   R   R
  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_constant_folding  s    )&c          C` s  t  j   }  t  j d t  j |    } t j j   } t | _ t j	 |  g | d | } yt
 | j j j    d k s t  | j j j   d j t j j j j k s t  | d  d k s t  t  j d  } t  j d t  j |   } t j	 g  | d | } t
 | j j j    d k s2t  t j |    sJt  |   d k sht |     Wn t k
 rt d   n Xd S(   s  
    Currently Theano enable the constant_folding optimization before stabilization optimization.
    This cause some stabilization optimization not being implemented and thus cause inf value to appear
    when it should not.

    .. note: we can't simply move the constant_folding optimization to specialize as this break other optimization!
    We will need to partially duplicate some canonicalize optimzation to specialize to fix this issue.
    i   R   i    i   so   Theano optimizes constant before stabilization. This breaks stabilization optimization in some cases. See #504.N(   Ro   R"   RT  R0  R   R	   R   Ri   R  R   R   R   R   R   R   R   R!   t   nnetR1  t   softplusR5   R   t   isinfR   (   t   x2R6  R   R;  RK   RL   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_constant_get_stabilized  s$    		$$"t   T_local_switch_sinkc           B` s8   e  Z d    Z d   Z d   Z e d  d    Z RS(   c         C` si  t  j d d d d g d d d d g d d d d g g  |  _ t  j d d d d g  |  _ d d d d g |  _ t  j d d f  |  _ t  j d f  |  _ d |  _ t  j d d d d g d d d d g d d d d g g  g d t  j d d d d g d d d d g d d d d g g  g d	 t  j d d d d g g  g t  j d d f  t  j	 d d f  t  j d d f  t  j	 d d f  g g t  j d f  t  j	 d f  t  j d f  t  j	 d f  g g t  j d  t  j d  t  j d  t  j d  g g |  _
 t j j j   j d
 d  j d d  |  _ t j |  j  |  _ t |  j _ d  S(   Ng?i    i   ig        i   i   g      ?i   R   RH   R{  R  (   R   R   t   condmt   condvt   condsR   t   xmt   xvt   xsRD  t   resmR   R	   R   R   R   R   R  Ri   R  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    	 3=c         ` s%   t  j | |       f d   } | S(   s   Wrapper around theano.function for this test.

        It disables checking
        for NaN removed by optimizations in DebugMode (it has false
        positives in that case).
        c          ` sB   t  t j  } t  t  t _ z   |  |   } Wd  | t _ X| S(   N(   R  R=   t   values_eq_approxR@   (   R  R  t   old_values_eq_approxRu   (   R   (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt	   wrapped_f  s    
(   R   R   (   Rb   R  R  R.  (    (   R   s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   function_remove_nan  s    c   	   
   C` s  t  j   } d } x-t  j d  |  j f t  j d  |  j f t  j d  |  j f g D]} xt  j d  |  j f t  j d  |  j f t  j d  |  j	 f g D]} t  j
 t  j | d d k d | d d | d  t  j | d d k d | d t  j |  | d   } |  j | d | d | g | g d |  j } t | d  t k rx t t | d   D]d } | | d | | d d  } | t j |  j | |  k j   |  j | | j k sst  qsWnR | | d | d d  } | t j |  j |  k j   |  j | j k s0t  | d 7} q WqX Wt  j d  } t  j | d	 k  | t  j | d	   } |  j | g t  j | |  |  j  } | d
  d k st | d
    d  S(   Ni    t   condRK   g      ?g        R   i   ii   i   (   Ro   R&   R-   R%  R*   R&  R'  R(  R)  R*  R   t   switchRT  R/  R   RI   R   R   R   R   R   R+  R&  R[  R   R_  R(  (	   Rb   R   R  t	   conditionRK   RL   R   R.  R/  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_mul_switch_sink  s2    -2(	>('R   c   	   
   C` sF  t  j   } d } x-t  j d  |  j f t  j d  |  j f t  j d  |  j f g D]} xt  j d  |  j f t  j d  |  j f t  j d  |  j	 f g D]} t  j
 t  j | d d k d | d d | d  t  j | d d k d | d t  j |  | d   } |  j | d | d | g | g d |  j } t | d  t k rx t t | d   D]d } | | d | | d d  } | t j |  j | |  k j   |  j | | j k sst  qsWnR | | d | d d  } | t j |  j |  k j   |  j | j k s0t  | d 7} q WqX Wd  S(	   Ni    R0  RK   g      ?g        R   i   i(   Ro   R&   R-   R%  R*   R&  R'  R(  R)  R*  RW  R1  RT  R/  R   RI   R   R   R   R   R   R+  R&  R[  R   (	   Rb   R   R  R2  RK   RL   R   R.  R/  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_div_switch_sink  s$    LL,;#$(   R   R   R  R/  R3  RD   R4  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR$    s   			t   T_local_erfc           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` sq   t  j j j   j d d  j d d  |  _ d |  j j _ t  j j	 d k rm t  j
 j j rm t d   n  d  S(   NR   RH   R{  R  grZ|
 ?t    s    erf need a c++ compiler or scipy(   R   R	   R   R   R   R   R   t   position_cutoffR   R  R"   t   basic_scipyt   imported_scipy_specialR   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  #  s
    "c      
   C` s  t  j d d d d d d d d d	 g	 d
 t j } t j   } t j | g d t j |  d |  j	 } g  | j
 j j   D] } | j ^ q} t j t j g k s t | j
 j j     | |  t j | g t j |  d d |  j	 } g  | j
 j j   D] } | j ^ qt j t j g k sCt | j
 j j     | |  t j | g t j |  d d |  j	 } | j
 j j   } t |  d k st  | d j t j k st  t | d j t j  st  t | d j j t j  st  | |  d  S(   Niiiii    i   i   i   i   RW   R   (   R   R   R   R   Ro   R'   R   R   t   erfR   R   R   R   R   R   t   erfcR   R   R   R   R   R"  R  (   Rb   R  RK   R   R  R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_one_plus_erf*  s$    '+%-
+%-
+"c      
   C` s   t  j d d d d d d d d d	 g	 d
 t j } t j   } t j | g d t j |  d |  j	 } g  | j
 j j   D] } | j ^ q} t j g k s t | j
 j j     t | |   t j | g d t j |  d |  j	 } g  | j
 j j   D] } | j ^ qt j g k s>t | j
 j j     t | |   t j | g t j |  d d |  j	 } g  | j
 j j   D] } | j ^ qt j g k st | j
 j j     t | |   t j | g d t j |  d |  j	 } | j
 j j   } t |  d k s=t | j
 j j     | d j t j k skt | j
 j j     t | d j t j  st | j
 j j     t | d j j t j  st | d j j t j  st | j
 j j     t | |   d  S(   Niiiii    i   i   i   i   RW   R   (   R   R   R   R   Ro   R'   R   R   R:  R   R   R   R   R   R;  R   R   R   R   R   R   R"  R  t   Sub(   Rb   R  RK   R   R  R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_one_minus_erfA  s.    '+7,7,7+*.14c      
   C` s  t  j d d d d d d d d d	 g	 d
 t j } t j   } t j | g t j |  d d |  j	 } g  | j
 j j   D] } | j ^ q} t j t j g k s t  t | |   t j | g t j |  d d |  j	 } g  | j
 j j   D] } | j ^ q t j t j g k s%t  t | |   t j | g d t j |  d |  j	 } g  | j
 j j   D] } | j ^ qst j t j g k st  t | |   t j | g t j |  d d |  j	 } | j
 j j   } t |  d k st  | d j t j k s!t  t | d j t j  s@t  t | d j j t j  s~t | d j j t j  s~t  t | |   d  S(   Niiiii    i   i   i   i   RW   R   (   R   R   R   R   Ro   R'   R   R   R:  R   R   R   R   R   R;  R   R   R   R   R   R   R   R"  R  R=  (   Rb   R  RK   R   R  R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_erf_minus_one^  s(    '+@+@+@+"(   R   R   R  R<  R>  R?  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR5  "  s   			t   T_local_erfcc           B` s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s   t  j j j   j d  j d  j d  |  _ |  j j d  |  _ d |  j j _ t  j	 j
 d k r t  j j j r t d   n  d  S(   NR   RH   R{  R  grZ|
 ?R6  s!   erfc need a c++ compiler or scipy(   R   R	   R   R   R   R   t   mode_fusionR   R7  R   R  R"   R8  R9  R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  z  s    c      
   C` s_  t  j d d d d d d d d d	 g	 d
 t j } t j d  } t j | g d t j |  d |  j	 } g  | j
 j j   D] } | j ^ q t j g k s t | j
 j j     t | |   t j | g t j |  d d |  j	 } g  | j
 j j   D] } | j ^ qt j g k sAt | j
 j j     t | |   t j | g d t j |  d |  j	 } | j
 j j   } t |  d k st | j
 j j     | d j t j k st | j
 j j     t | d j t j  st | j
 j j     t | d j j t j  sKt | j
 j j     t | |   d S(   s@    test opt: 1-erfc(x) => erf(x) and -erfc(x)+1 => erf(x)
        iiiii    i   i   i   i   RW   RK   R   N(   R   R   R   R   Ro   R'   R   R   R;  R   R   R   R   R   R:  R   R   R   R   R   R   R"  R=  (   Rb   R  RK   R   R  R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_one_minus_erfc  s&    '+7,7+*.1c      
   C` s  t  j d d d d d d d d d	 g	 d
 t j } t j d  } t j | g d t j |  d |  j	 } g  | j
 j j   D] } | j ^ q t j g k s t | j
 j j     t | |   t j | g t j |  d d |  j	 } g  | j
 j j   D] } | j ^ q	t j g k sBt | j
 j j     t | |   t j | g t j |  d d |  j	 } g  | j
 j j   D] } | j ^ qt j g k st | j
 j j     t | |   d S(   s     test opt: (-1)+erfc(-x)=>erf(x)iiiii    i   i   i   i   RW   RK   R   N(   R   R   R   R   Ro   R'   R   R   R;  R   R   R   R   R   R:  R   R   (   Rb   R  RK   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_erf_neg_minus_one  s    ',7,7,7c         C` sn  d d d d d d d d d	 d
 d d d d d d d d g } t  j j d k r^ | j d	  n  t j | d t j } t j d  } t	 j	 |  j  } t
 | _ t	 j	 |  j  } t
 | _ t  j | g t j t j |   d | } t | j j j  d k st t | j j j    | j j j d	 j t  j j k sFt  t t j | |    sgt  t  j | g t j t j |   d | } t | j j j  d k st t | j j j    | j j j d	 j t  j j k st  t t j | |    st  t  j | g t j t j |   d | } t | j j j  d
 k sxt t | j j j    | j j j d	 j t  j j k st  t | j j j   d	 j j   d	 j j j j  d k st t | j j j   d	 j j   d	 j j j j    t  j j d k rIt  j j d k rIt d   n  t t j | |    sjt  d  S(    Niiiiiiiii    i   i   i   i
   i   i   i   i   i   R  R  RE   RW   RK   R   i   i   i   R   s   The python code upcast somewhere internally some value of float32 to python float for part of its computation. That make that the c and python code dont generate the same value. You can ignore this error.(   s	   DebugModes
   DEBUG_MODEs   FAST_COMPILE(   s	   DebugModes
   DEBUG_MODE(   R   R   R   t   removeR   R   R   Ro   R'   R  Ri   R  RA  R   RT  R;  R   R   R   R  R   Rq   RW   Rf   R  R   R   R   R   (   Rb   R  RK   R   RA  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_log_erfc  s4    '		-6(!.6("-6(W$c         C` s  d d d d d d d d d	 d
 d d d d d d d d d d d d d d d d g } t  j j d( k rv | j d  n  t  j j d) k r t  j j d k r | j d  n  t j | d t j } t j d   } t j d!  } t	 j	 |  j  } t
 | _ t	 j	 |  j  } t
 | _ t  j | g t j t j t j |   j   |  d" | } t | j j j  d# k st t | j j j    t t j | |    st  | j j j d j t  j j k st  t  j | g t j t j t j t j |    d$  t j |  d" | } t | j j j  d# k sYt t | j j j    | j j j d j t  j j k st  t t j | |    st  t  j | g t j t j t j |    t j |  d" | } t | j j j  d% k st t | j j j    | j j j d j t  j j k sCt  t t j | |    sdt  t  j | | g t j t j t j |    t j |  d" | } t | j j j  d& k st t | j j j    | j j j d j t  j j k st  | | | d  t  j | g t j t j d | |   t j |  d" | } t | j j j  d' k st t | j j j    | j j j d j t  j j k st  t t j | |    st  t  j | g t j t j t j d |   j   |  d" | } t | j j j  d# k sQt t | j j j    t j | |   j   srt  | j j j d j t  j j k st  t  j | g t j t j t j |   j   |  d" | } t | j j j  d k st t | j j j    | j j j d j t  j j k s7t  t  j j d k r^t  j j d* k r^n! t t j | |    st  d  S(+   Niiigffffff:g333333:iiiiiiii    i   i   i   i	   i
   i   i   gffffff:@g333333:@i   i   i   id   R  R  RE   R   RW   RK   RL   R   i   gwF!A$i   i   i   (   s	   DebugModes
   DEBUG_MODEs   FAST_COMPILE(   s	   DebugModes
   DEBUG_MODE(   s	   DebugModes
   DEBUG_MODE(   R   R   R   RD  R   R   R   Ro   R'   R  Ri   R  RA  R   R(  RT  R;  R&  R   R   R   R  R   Rf   R  Rq   RW   R   R0  Ra  R^  (   Rb   R  RK   RL   R   RA  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_grad_log_erfc_neg  s^    '-$		?6!(:	6(!C6(!36(@6(!C6!(?6($c   	      C` s  t  j j d  } t j   } t j j j d  } t j	 | g t j
 t j |   d | j d  } t j	 | g t j
 t j |   d | } t | j j j    t | j j j    t j   } | |  t j   } | |  t j   } t | | | |  d  S(   Ng    .ARF   R   t   local_log_erfc(   R   R   R   Ro   R'   R   R	   R   R   R   RT  R;  R   R   R   R   R   Rm  (	   Rb   R  RK   R   R:  R;  R  R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   speed_local_log_erfc(  s    $-

(   R   R   R  RB  RC  RE  RF  RH  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR@  y  s   					'	Ot   test_local_useless_switchc           B` sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C` s   t  j d  |  _ d  S(   Nt   constant_folding(   R  R   R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  ;  s    c   
      C` s  xd d g D]t} xkd d g D]]} t  j j d d | } t  j j d d | } t  j j d | |  } t  j | | g | d |  j } t g  | j j j	   D]E } t
 | j t  j j  r t
 | j j t  j j j  r | j ^ q  d k s t  t j d d	 d
 g d d d g g d | } t j d d d g d d d g g d | }	 t j | | |	  |	 k  s  t  q  Wq Wd  S(   NRJ  R   RK   RW   RL   i    R   i   i   i   i   i   i   i   i   i	   i
   i   i   (   R   R!   R+   R1  R   R   R   R   R   R   R   R   R   R   R"   R   t   SwitchR   R   t   arrayRf   (
   Rb   R  R  RK   RL   RY   R   R  R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const0>  s    !0--c   
      C` s  xd d g D]t} xkd d g D]]} t  j j d d | } t  j j d d | } t  j j d | |  } t  j | | g | d |  j } t g  | j j j	   D]E } t
 | j t  j j  r t
 | j j t  j j j  r | j ^ q  d k s t  t j d d	 d
 g d d d g g d | } t j d d d g d d d g g d | }	 t j | | |	  | k  s  t  q  Wq Wd  S(   NRJ  R   RK   RW   RL   i   R   i    i   i   i   i   i   i   i   i	   i
   i   i   (   R   R!   R+   R1  R   R   R   R   R   R   R   R   R   R   R"   R   RK  R   R   RL  Rf   (
   Rb   R  R  RK   RL   RY   R   R  R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_const1N  s    !0--c         C` sy  xrd d g D]d} t  j j d d | } t  j j d d | } t  j j d | |  } t  j j d | |  } t  j j | | |  } t  j | g | d |  j } t  j | g | d |  j } t  j | | g | d |  j }	 | j j j   }
 t	 |
  d k st
  |
 d j t k s+t
  | j j j   }
 t	 |
  d k sUt
  |
 d j t k snt
  |	 j j j   }
 t	 |
  d k st
  |
 d j t k st
  t j d d	 d
 g d d d g g d | } t j d d	 d
 g d d d g g d | } t j | |  | k  s,t
  t j | |  | k  sMt
  t j |	 | |  | k  s t
  q Wd  S(   NRJ  R   RK   RW   t   varci   i    R   i   i   i   i   i   (   R   R!   R+   R1  R   R   R   R   R   R   R   R   R
   R   RL  Rf   (   Rb   R  RK   RO  R8  t   z0R9  R:  t   f0R;  R
  R  t   vc(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_left_is_right^  s.    !--!!c         C` sw  xpd d g D]b} t  j j d d | } t  j j t  j j | j d d  d | j d  } t  j | g | d |  j } t | j	 j
 j   d j t  s t  t  j j t  j j | j d d  d | j d  } t  j | g | d |  j } t | j	 j
 j   d j t  s!t  t j j d d  j |  } | |  d k sWt  | |  d k s t  q Wd  S(	   NR   RX   RK   RW   i    R   i   i   (   R   R!   R+   R1  Rh  R   R   R   R   R   R   R   R   R   R   R   R   R  R!  (   Rb   R  RK   RP  RQ  R8  R:  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_shape_le_0|  s    5(5(c         C` sG  t  j j d d d } t  j j d d d } t  j j d | |  } t  j | | g | d |  j } t g  | j j	 j
   D]F } t | j t  j j  r t | j j t  j j j  r | j ^ q  d k s t  t j d d	 d
 g d d d g g d d } t j d d d g d d } t j | | |  | k  sIt  t  j j d | |  } t  j | | g | d |  j } t g  | j j	 j
   D]' } t | j t  j j  r| j ^ q d k st  t j d d	 d
 g d d d g g d d } t j d d d g d d } t j | | |  | k  sCt  d  S(   NRK   RW   RJ  RL   R   i   R   i    i   i   i   i   i   i
   i   i   (   R   R!   R+   R'   R1  R   R   R   R   R   R   R   R   R   R   R"   R   R  R   R   RL  Rf   (   Rb   RK   RL   RY   R   R  R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_broadcast1  s"    !=-$!6-c         C` sG  t  j j d d d } t  j j d d d } t  j j d | |  } t  j | | g | d |  j } t g  | j j	 j
   D]F } t | j t  j j  r t | j j t  j j j  r | j ^ q  d k s t  t j d	 d
 d g d d } t j d d d g d d d g g d d } t j | | |  | k  sIt  t  j j d | |  } t  j | | g | d |  j } t g  | j j	 j
   D]' } t | j t  j j  r| j ^ q d k st  t j d	 d
 d g d d } t j d d d g d d d g g d d } t j | | |  | k  sCt  d  S(   NRK   RW   RJ  RL   R   i   R   i    i   i   i   i   i   i	   i
   i   i   (   R   R!   R'   R+   R1  R   R   R   R   R   R   R   R   R   R   R"   R   R  R   R   RL  Rf   (   Rb   RK   RL   RY   R   R  R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_broadcast2  s"    !=-$!6-c         C` s)  t  j j d d d } t  j j d d d } t  j j | | |  } t  j | | g | d |  j } t j d d g d d g g d d } t j d	 d
 g d d } t	 j
 | | |  t j | | |   t g  | j j j   D]' } t | j t  j j  r | j ^ q  d k s%t  d  S(   NRK   RW   RJ  RL   R   R   i    i   i   i   (   R   R!   R+   R'   R1  R   R   R   RL  R   R   t   whereR   R   R   R   R   R   R   R   (   Rb   RK   RL   RY   R   R  R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_broadcast3  s    !'((
   R   R   R  RM  RN  RS  RT  RU  RV  RX  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRI  :  s   							t!   test_local_merge_switch_same_condc           B` s   e  Z d    Z RS(   c         C` sc  t  j j d  } | \ } } } } } t j | | |  } t j | | |  } x t j t j t j t j t j	 t j
 t j t j t j t j t j t j t j t j t j f D]H }	 t t | |	 | |  g   }
 t |
  j d  d k s t  q Wt  j j d  } | \ } } } } } t j | | |  } t j | | |  } xt t j t j t j t j t j t j f D]H }	 t t | |	 | |  g   }
 t |
  j d  d k szt  qzWt  j j d  \ } } t j | | |  } xi t j t j f D]U }	 t t | | | g |	 | | |  g   }
 t |
  j d  d k st  qWd  S(   Nt   cabxyRK  i   t   uv(    R   R!   R0   Ro   R1  R  R  R   RW  RX  t	   floor_divRk  Rl  Ri  Rg  Rj  Rh  RY  RZ  Ri  RQ   R   R`   R  R   t	   imatricesRf  Rd  Re  t   bitwise_andt
   bitwise_ort   bitwise_xor(   Rb   t   matsR   R   R   RK   RL   R  R  R   RU   R   Rs   t   s3(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_elemwise  s,    '0!%!%.(   R   R   Rc  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRY    s   t   T_local_sum_prodc           B` sV   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   s&   
    Test sum/prod opts in opt.py
    c         C` s"   t  j j   j d d  |  _ d  S(   NR   RN   (   R   R	   R   R   R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c   
      ` s  t  j   } t  j   } t  j   } t  j   } t j j d  } t j j d d  } t j j   } t j j   }   f d   }	 |	 | g | g t  j | d  |	 | | g | | g t  j | | j   d  |	 | | | g | | | g t  j | | | j   d  |	 | | g | | g t  j | | d  |	 | | | g | | | g t  j | | | j   d  |	 | | | | g | | | | g t  j | | | | j   d  |	 | g | g t  j	 j
 | d  |	 | | g | | g t  j	 j
 | | j   d  |	 | | | g | | | g t  j	 j
 | | | j   d  |	 | | g | | g t  j	 j
 | | d  |	 | | | g | | | g t  j	 j
 | | | j   d  |	 | | | | g | | | | g t  j	 j
 | | | | j   d  d  S(   Ni   c   
      ` s   t  j |    } t j |  |   |  d   j } | |   } t j | |  g  | j j j	   D] } t
 | j |  rb | ^ qb }	 t |	  | k s t  d  S(   NR   (   Ro   R   R   R   R   R   R   R   R   R   R   R   R   R   (
   R]   t
   inputs_valt   reduction_opt   expected_outputt   nb_expected_sum_nodest   mul_outR   Ru   R  t
   prod_nodes(   Rb   (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_reduction_opt   s    i    i   (   Ro   R*   R-   R&   R   R   R   t   SumR&  R  t   Prodt   prod(
   Rb   RS  R   t   scalar1t   scalar2t   v_valt   m_valt   s1_valt   s2_valRk  (    (   Rb   s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_local_sum_prod_mul_by_scalar  sD    
!"!c         C` su  t  j   } t j d
 d t j j d d d  } t j | g | j	   d |  j
 } t | j j j  d k sx t  t j | |  | j	    t j | g | j   d |  j
 } t | j j j  d k s t  t j | |  | j    t j | g | j	 d d d g  d |  j
 } t | j j j  d k sFt  t j | |  | j	    t j | g | j d d d g  d |  j
 } t | j j j  d k st  t j | |  | j    t j j } t t j _ zz t j | g | j	 d  j	 d  j	 d  d |  j
 } t | j j j  d k sDt  t j | |  | j	    Wd  | t j _ Xd  S(   Ni   i   i   RW   R   i   i    i   i   i<   (   Ro   R.   R   R+  R   R   R   R   R   R&  R   R   R   R   R  R   R   R   Rn  t   warnt   sum_sum_bugRi   (   Rb   R   R)  R   t   backup(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_sum_prod_all_to_noneD  s*    '$!$!0!0!9! c         C` sG  t  j   } t j d d t j j d d d  } d d d d d d d d d d f d d f d d f g } t j j } t	 t j _ d   } d	   } d
   } z4x | D] \ } }	 | | | |	  }
 t
 j | g | j |  j |	  d |  j } t j | |  |
  t | j j j  d k s t  q Wx | d  D] \ } }	 t
 j | g | j |  j |	  j d  d |  j } t j | |  | j |  j |	  j d   t | j j j  d k s=t  q=Wx d d d g D]| } t
 j | g | j |  j d   d |  j } t j | |  | j |  j    t | j j j  d k st  qWt
 j | g | j d   j   d |  j } t j | |  | j    t | j j j  d k st  Wd  | t j _ Xx | D] \ } }	 | | | |	  }
 t
 j | g | j |  j |	  d |  j } t j | |  |
  t | j j j  d k st  qWx | d  D] \ } }	 t
 j | g | j |  j |	  j d  d |  j } t j | |  | j |  j |	  j d   t | j j j  d k s~t  q~Wx d d d g D]| } t
 j | g | j |  j d   d |  j } t j | |  | j |  j    t | j j j  d k s)t  q)Wt
 j | g | j d   j   d |  j } t j | |  | j    t | j j j  d k st  x | D] \ } }	 | | | |	  }
 t
 j | g | j |  j |	  d |  j } t j | |  |
  t | j j j  d k st  qWx | d  D] \ } }	 t
 j | g | j |  j |	  j d  d |  j } t j | |  | j |  j |	  j d   t | j j j  d k st  qWx d d d g D]| } t
 j | g | j |  j d   d |  j } t j | |  | j |  j    t | j j j  d k sYt  qYWt
 j | g | j d   j   d |  j } t j | |  | j    t | j j j  d k sCt  d  S(   Ni   i   i   RW   i    i   i   c         S` s   t  | t  r6 t  | t  r6 |  j |  j |  St  | t  rx t |  } |  j | d  j | d  j |  St |  } |  j |  j | d  j | d  Sd  S(   Ni   i    (   R   t   tupleRn  t   sorted(   R  R   t   dd(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   my_prodk  s     'c         S` s   t  | t  r6 t  | t  r6 |  j |  j |  St  | t  rx t |  } |  j | d  j | d  j |  St |  } |  j |  j | d  j | d  Sd  S(   Ni   i    (   R   Rz  R&  R{  (   R  R   R|  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   my_sumv  s     'c         S` s   t  | t  r6 t  | t  r6 |  j |  j |  St  | t  rx t |  } |  j | d  j | d  j |  St |  } |  j |  j | d  j | d  Sd  S(   Ni   i    (   R   Rz  R&  Rn  R{  (   R  R   R|  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   my_sum_prod  s     'R   i   i   i<   (   i    i    (   i   i    (   i   i    (   i    i   (   i   i   (   i   i   (   i    i   (   (   i    i   i    (   i   i   (   (   i   i   i    (   i    i   (   i    i   (   i    i   (   Ro   R.   R   R+  R   R   R   Rv  Rw  Ri   R   R   R&  R   R   R   R   R   R   R  R   Rl  Rn  (   Rb   R   R)  R,  Rx  R}  R~  R  R   R|  t   expectedR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_sum_sum_prod_proda  s~    '			0%$1%0%%-%0%$1%0%%-!0%$1%0%%-c         C` s  t  j   } t j t j d  j d d d  d d } |  j j d  j d  } xyt	 j
 t j
 d f t	 j t j d f g D]M\ } } } t j | g | |  j d   d | } t j | |  | |  j    t | j j j  | d k s t  t j | g | |  j d d d g  d | } t j | |  | |  j    t | j j j  | d k syt  x t d  D] } t j | g | |  j |  d | } t j | |  | |  j |   t | j j j  | d k s t  | j j j   }	 |	 d j t  j k s.t  t g  |	 D] }
 t |
 j t  j  ^ q8 st  qWx t d  D] } t j | g | |  j |  d | } t j | |  | |  j |   t | j j j  | d k st  | j j j   }	 |	 d j t  j k st  t g  |	 D] }
 t |
 j t  j  ^ q& stt  qtWt j | g | |  j d   d | } t j | |  | |  j    t j | g | |  j d d d g  d | } t j | |  | |  j    x t d  D] } t j | g | |  j |  d | } t j | |  | |  j |   | j j j   }	 |	 d j t  j k st  t g  |	 D] }
 t |
 j t  j  j!  ^ q st  qWx t d  D] } t j | g | |  j |  d | } t j | |  | |  j |   | j j j   }	 |	 d j t  j k sRt  t g  |	 D] }
 t |
 j t  j  j!  ^ q\ st  qWt" j# j$ } t% t" j# _$ zxd d d d d d g D] \ } } t j | g | |  j |  j |  d | } t j | |  | |  j |  j |   t | j j j  | d k sTt  | j j j   }	 |	 d j t  j k st  t g  |	 D] }
 t |
 j t  j  ^ q st  qWWd  | t" j# _$ Xq Wd  S(   Ni   i   i   RW   RX   RN   R  i   i   i   R   i    ii   i   (   i   i   i   i   (   i   i   i   i   (   i    i    (   i   i    (   i   i    (   i    i   (   i   i   (   i   i   (&   Ro   t   dtensor3R   R   R+  R   R   R   R   R!   R  t	   ones_likeR   R   R&  Rl  R   R   R   R   R   R  R   R   R   R   R
  Rk  R   Rl  Rn  R  R  Rm  R   Rv  Rw  Ri   (   Rb   R   R)  R   t   t_liket   n_liket   nb_nodesR   R   R
  R  R.  Rx  R|  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_sum_prod_alloc  sr    $	%*"%3"%*%%9*%%9*"3"*%<*%<%%7c         C` sj   t  j d d  } | j d d  j d d  } t j } d t _ z t j | g |  Wd | t _ Xd S(   s   
        Test that local_sum_sum works when combining two sums on an int8 array.

        This is a regression test for ticket gh-356.
        RW   Rn  R  i    i   t   raiseN(   R!   R.   R&  R   t   on_opt_errorR   R   (   Rb   RK   RL   Rx  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_sum_sum_int8  s    		c         C` sv   t  j d d  } | j d d d d  j d d d d  } t j } d t _ z t j | g |  Wd	 | t _ Xd	 S(
   sP   
        Test that local_sum_sum works when specifying dtypes manually.
        RW   Rn  R  i    RJ  i   R   R  N(   R!   R.   R&  R   R  R   R   (   Rb   RK   RL   Rx  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_sum_sum_dtype!  s    *		c         C` s  t  j j   j d  j d d  } t j   } t j   } t j   } t  j	 | | g t j
 | |  d | } t | d d s t  t  j	 | g t j
 |  d | } t | d t j g s t  t  j	 | | g t j j   | |  d | } t | d t j j g s t  t  j	 | g t j j   |  d | } t | d t j j g slt  t  j	 | | g t j
 | |  d | } t | d d st  t  j	 | g t j
 |  d | } t | d t j g st  d  S(   Nt   inplace_elemwise_optR   RN   R   Re   Rf   (   R   R	   R   R   R   Ro   R*   R-   R&   R   R&  RB   R   Rl  R  Rm  (   Rb   t   m0RS  R   R"   R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt-   test_local_sum_prod_mul_by_scalar_stack_trace/  s&    	+%"!+!+%(   R   R   R  R  Ru  Ry  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyRd    s   		X		f	J		t   T_local_opt_allocc           B` s   e  Z d    Z d   Z RS(   c         C` s   t  j j   } t  j j t j d d d | |  } t  j j } d t  j _ z) t  j | g | j	    } | d  Wd  | t  j _ Xd  S(   Ni   RW   R   R  (
   R   R!   R$   R
  R   R   R   t   warn_float64R   R&  (   Rb   R   R   t   origR   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_sum_upcastN  s    'c         C` s   t  j j   } t  j j t j d d d | |  } t  j j } d t  j _ z) t  j | g | j	    } | d  Wd  | t  j _ Xd  S(   Ni   RW   R   R  (
   R   R!   R$   R
  R   R   R   R  R   Rn  (   Rb   R   R   R  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_prod_upcastY  s    '(   R   R   R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  M  s   	t   T_local_reducec           B` s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s(   t  j j   j d d d d  |  _ d  S(   NR   RN   RN  t   local_max_and_argmax(   R   R	   R   R   R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  f  s    c         C` s   x t  j t  j t  j t  j t  j t  j g D] } t j d t	 t	 t	 f    } t
 j | g | |  g d |  j } t g  | j j j   D] } t | j t j  ^ q  s+ t  q+ Wd  S(   NR   R   (   R!   R&  Rf   Rk  Rn  R  R  Ro   R=   R   R   R   R   R   R   R   R   R   t   CAReduceR   (   Rb   t   fctRK   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_local_reduce_broadcast_all_0l  s    'c         C` s   x t  j t  j t  j t  j t  j t  j g D] } t j d t	 t	 f    } t
 j | g | | d d d g g d |  j } t g  | j j j   D] } t | j t j  ^ q  s+ t  q+ Wd  S(   NR   R  i    i   R   (   R!   R&  Rf   Rk  Rn  R  R  Ro   R=   R   R   R   R   R   R   R   R   R   R  R   (   Rb   R  RK   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt!   test_local_reduce_broadcast_all_1u  s    3c         C` si  xbt  j t  j t  j t  j t  j t  j g D]6} t j d t	 t
 t	 f    } t j | g | | d d d g g d |  j } | j j j   } d t g  | D] } t | j t j  ^ q  k s t  g  | D]! } t | j t  j  r | ^ q d } | j } t | t j  s!t  | j d j d k sCt |   | j d k s+ t | j   q+ Wd  S(   NR   R  i    i   R   i   (   i    (   R!   R&  Rf   Rk  Rn  R  R  Ro   R=   R   Ri   R   R   R   R   R   R   R   R   R  R   R]   RB  R  (   Rb   R  RK   R   R   R  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt"   test_local_reduce_broadcast_some_0~  s    3	1	"c         C` s   x t  j t  j t  j t  j t  j t  j g D] } t j d t	 t	 t	 f    } t
 j | g | | d d d g g d |  j } t g  | j j j   D] } t | j t j  ^ q  s+ t  q+ Wd  S(   NR   R  i    i   R   (   R!   R&  Rf   Rk  Rn  R  R  Ro   R=   R   R   R   R   R   R   R   R   R   R  R   (   Rb   R  RK   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt"   test_local_reduce_broadcast_some_1  s    3c      	   C` s  t    } t    } t    } t j d d g d d g g d t j } t j d d g d d g g d t j } t j d d g d d g g d t j } xt j | | f d  t j | | f d  f t j | | f d  t j | | f d  f t j | | | f d  t j | | | f d  f t j	 | | | f d  t j	 | | | f d  f t j	 | | j | f d  t j	 | | j | f d  f g D] \ } } t
 j | | | g | d d	 d
 |  j }	 |	 | | |  | k j   st |   |	 j j j   }
 t |
  d k s)t |   t |
 d j t j  st |   qWt
 j t j d d d d d g d d  } t
 j g  t j t j | | g  d d d
 |  j }	 t j |	   d d d d d g  |	 j j j   }
 t |
 d j t j  st  z[ t
 j j j } t t
 j j _ t
 j g  t j t j | | g  d d d
 |  j }	 Wd  | t
 j j _ Xt j |	   d d g  |	 j j j   }
 t |
 d j t j  st  t
 j t j d d d d d g  j d d   } t
 j g  t j t j | | f d d d d d
 |  j }	 t j |	   d d d d d g  |	 j j j   }
 t |
 d j t j  st  t
 j t j d d d d d g  j d d   } t
 j g  t j t j | | f d d d d d
 |  j }	 t j |	   d d g  |	 j j j   }
 t |
 d j t j  sGt  t
 j j j } zL t t
 j j _ t  j | | | g d d  } t
 j | | | g |  }	 Wd  | t
 j j _ Xd  S(   Ni   i    i   i   RW   i   i   t   on_unused_inputR  R   iR   R  i   i   i
   i   ("   R+   R   R   R   R   Ro   R  R  R&  Rn  R   R   R   Rf   R   R   R   R   R   R   R   R   R   RL  t   stackR   R   Rv  t   reduce_joinRi   R   t   concatenateR!   Rl  (   Rb   R  R  t   vzRK   RL   RY   Ru   R/  R   R
  t   At   old(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_reduce_join  sd    			***--33I*)-9"- 33" 33 (   R   R   R  R  R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  e  s   								t   T_local_sum_prod_dimshufflec           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   t  j j   j d  |  _ d  S(   NR   (   R   R	   R   R   R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c      $   C` s_  t  j d  } t  j d  } t  j d  } t  j d  } t j } | | |  | | | j d d   | | | j d d  d d | | | j d d  d d | | |  | | | j d   | | |  | | | j d d d   | | | j d d d  d d | | | j d d d  d d | | | j d d d  d d	 | | | d d | | | j d d  d d | | j d d  | j d d  d d | | j d d  | j d d  d d | | | d d | | | j d d  d d | | | j d d d  d d | | | j d d d  d d | | | j d d d  d d	 | | | j d d d  d d	 | | | d d | | | d d | | | d d | | | j d d  d d | | | j d d  d d	 | | | j d d  d d | | | j d d d  d d | | | j d d d  d d	 | | | j d d d  d d | | | d d | d d | | | d d | d d g  } t j	 j
 t j    } | j d	 d	  j t j  } | j d	  j t j  }	 | j d	 d	 d	  j t j  }
 t j | j   t j  } t j j t j j f } t t j _ t t j _ z x t |  D] \ } } t |  t j | | | | g | d
 |  j d d } | j j j   } t | d j j  t j j! j"  s't#  | | |	 |
 |  qWWd  | \ t j _ t j _ Xd  S(   NR   R   R   R   RK   R  i    i   i   R   R  R  i(   i    i   (   i    i   (   i   i   ($   Ro   R+   R'   R.   R"   R!   R&  R   R   R   R3  R   R4  R  R!  R   R   R   Rv  Rw  t   sum_div_dimshuffle_bugRi   R   R   R   R   R   R   R   R   R   R   R   R   R  R   (   Rb   R   R   R   R   R&  t   sumsR@  t   a_valt   b_valt   c_valt   d_valRx  R.  R   R   RU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_sum_div_dimshuffle  sn    	"""++"""""""%!
$	c      &   C` sX  t  j d  } t  j d  } t  j d  } t  j d  } t  j d  } t  j } | | |  | | | j d d   | | | j d d  d d | | | j d d  d d	 | | |  | | | j d   | | |  | | | j d d d   | | | j d d d  d d | | | j d d d  d d	 | | | j d d d  d d
 | | | d d | | | j d d  d d	 | | j d d	  | j d d  d d	 | | j d	 d  | j d d  d d	 | | | d d | | | j d	 d  d d | | | j d d d	  d d	 | | | j d	 d d  d d	 | | | j d d	 d  d d
 | | | j d	 d d  d d
 | | | d d | | | d d	 | | | d d | | | j d d  d d | | | j d d  d d
 | | | j d d  d d | | | j d d d  d d	 | | | j d d d  d d
 | | | j d d d  d d | | | j d d d  d d | | | j d d d  d d | | | d d | d d | | | d d	 | d d g" } t j j	 t
 j    } | j d
 d
  j t j  }	 | j d
  j t j  }
 | j d
 d
 d
  j t j  } t j | j   t j  } t j j j   } | j d d  } | j d  } x t |  D] \ } } t j | | | | g | d d d | } t j | | | | g | d d d | } t
 j | |	 |
 | |  | |	 |
 | |   qW| | |  | | |  | | | j d d   | | | j d d d  d d	 | | j d	 d  | j d d  d d	 | | | j d d d  d d | | | d d	 | d d | | | d d | d d g } t j j j t j j j t j j j t j j j t j j j t j j j t j j j t j j j g } xv t |  D]h \ } } t j | | | | | g | d d d | } t | j j  j!   d j" j# | |  st$  qWd  S(   NR   R   R   Rc   R   RK   R  i    i   i   t   local_sum_prod_div_dimshufflet   FusionOptimizerR  R  R   i(   i    i   (   i    i   (   i   i   (   i    i   (   i   i    (   i   i    (   i   i   (%   Ro   R+   R'   R.   R"   Rn  R   R   R   R3  R   R4  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   (   Rb   R   R   R   Rc   R   Rn  t   prodsR@  R  R  R  R  t   default_modet   mode_with_optt   mode_without_optR.  R   R   RU   t   expected_outer_operator(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_prod_div_dimshuffle'  s    	"""++"""""""""%!				"+"%	(   R   R   R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   		@t   TestMakeVectorc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   t  t |   j   d  S(   N(   R  R  R  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c      	   ` sV  t  j   } t  j   } t  j   } i d | 6d | 6d | 6 xVd | | f f d | | f f d | | f f d | | f f d | | f f d | | f f d d f d d f g D]\   } t j d    |   } | j   k s t  t j	 | | | g | d	 d
 } |  |  |  |  | j
   } t  j | | d d
 } t  j | | d d
 }	 t  j | | d d
 }
 t j	 | | | g | |	 |
 g  } |  |  |  |  }   t j k rt j | d  q xo t | | | f |  D]U \ } } g  } | j t j k r q| | k rA| d k sNt  q| j |  qW| r    f d   } t j | g  | D] }  | ^ qz q q Wx d | | f f d | | f f d | | f f d | | f f d | | f f d | | f f d | | f f g D]F \   } y& t j d    |   t d   Wqt k
 rMqXqWd  S(   Ni   igffffff?Rn  RJ  RX   R   RW   R  R  t   disconnected_inputsi    c          ` sZ   g  } x; | D]3 } | |  k r/ | j  |  q | j   |  q Wt j d    |   S(   NRW   (   Rp  R   R   (   t	   fl_inputst   f_inputsR  (   RW   R  (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    R   s"   Theano should have raised an error(    (    (   Ro   t   bscalarR#   R&   R   R   RW   R   R   R   R&  R(  R!   t
   int_dtypesR   R   R  Rp  t   verify_gradRy  (   Rb   R   R.  R   R]   t   mvR   R   t   gbt   git   gdRU   t   g_valR  t   grvalt   float_inputsR  t   ri(    (   RW   R  s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_make_vector  s`    

	!$%.c         C` sW  t    } t    } t   } t   } t   } t   } t j j   } t j j   } t j j d  }	 t j j d  }
 t j j d  } t j j d  } |  j | | g t d  | |  g | |	 g t  |  j | | | g t d  | | |  g | | |	 g t  |  j | | | | g t d  | | | |  g |	 |
 | | g t  d  S(   Ni
   RX   RJ  (   R&   R#   R   R   R   R  R  R   (   Rb   R  R  t   aiscalt   biscalt   ciscalt   discalR  R  t
   aiscal_valt
   biscal_valt
   ciscal_valt
   discal_val(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s,    						(   R   R   R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   		Uc          C` sZ  t  j d  }  t  j |  g  } t |  g | d t } | d g  } t j | d g k  sf t  | j j	 j
   } t g  | D] } t | j t  r | ^ q  d k s t  | j j	 j d j t j k s t  t  j d  }  t d |   } t |  g | d t } | d g g  } t j | d g g k  sCt  | j j	 j
   } t g  | D] } t | j t  r_| ^ q_ d k st  | j j	 j d j t j k st  t d |   } t |  g | d t } | d g g  } t j | d g g k  st  | j j	 j
   } t g  | D] } t | j t  r-| ^ q- d k s`t  | j j	 j d j t j k st  t d |  |   } t |  g | d t } | d g g  } t j | d g g k  st  | j j	 j
   } t g  | D] } t | j t  r| ^ q d k s1t  | j j	 j d j t j k sVt  d  S(   NR   R   i   i    (   R!   R'   R  R   R  R   Rf   R   R   R   R   R   R   R   R:   Rq   RW   R   R   R+   R;   (   R   R   R   R  Rc   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_join_1  s<    =%!=%!=%!=c    	      C` s'  t  j g  d t j }  t j d  } t j d | | |   } t | g | d t } | d g  } t  j	 | d g k  s t
  | j j j   } t g  | D] } t | j t  r | ^ q  d k s t
  t	 g  | D]@ } t | j t  r t | j t  pt | j  d k ^ q  s,t
  | j j j d j t j k sQt
  t  j g  g d t j } t j d  } t d | | | |  } t | g | d t } | d g g  } t  j	 | d g g k  st
  | j j j   } t g  | D] } t | j t  r| ^ q d k s-t
  t	 g  | D]@ } t | j t  r7t | j t  ptt | j  d k ^ q7 st
  | j j j d j t j k st
  t j | | |  g  } t | g | d t } | g   } t  j	 | d g k  st
  | j j j   } t g  | D] } t | j t  r!| ^ q! d k sTt
  t	 g  | D]@ } t | j t  r^t | j t  pt | j  d k ^ q^ st
  | j j j d j t j k st
  t d | t  j d	 g g d t j |  } t | g | d t } | d g g  } t  j	 | d g d
 g d g g k  sVt
  | j j j   } t g  | D] } t | j t  rr| ^ qr d k st
  t	 g  | D]@ } t | j t  rt | j t  pt | j  d k ^ q st
  | j j j d j t j k s#t
  d  S(   NRW   R   i    R   i   i   Rt   i   g       @i   (   R   R   R   R   R!   R'   R;   R   R  Rf   R   R   R   R   R   R   R   R:   R]   Rq   RW   R+   R  (	   t	   empty_vecR   R   R   R  Rc   R  t	   empty_matRt   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_join_empty+  sP    =S%!=S%=S%--=Sc       	   C` s  t  j d  \ }  } } } } t  j d  } t t j  } t  j d | |   | | | |  | | |   } t |  | | | | | g | d t } t	 j
 j |  | d d d d d	 d
 d g  }	 t j |	 d d
 d d d d d	 g k  s t  | j j j   } t g  | D] }
 t |
 j t  r|
 ^ q d k sFt  t g  | D]@ }
 t |
 j t  rPt |
 j t  pt |
 j  d k ^ qP st  | j j j d j t j k st  t | d d st  d  S(   Nt   abcdeRs   i    R   i   i   i   i   i   i   i   Re   Rf   (   R!   t   scalarsR'   R   R   R   R;   R   R  R   t   printingt
   debugprintR   Rf   R   R   R   R   R   R   R   R:   R]   Rq   RW   RB   (   R   R   R   R   Rc   Rs   R  R   R   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_join_make_vector]  s    3'!0=S%c          C` s   t  j   }  t  j t  j |    } t j | j  s< t  t  j   }  t  j t  j |    } t j | j  sx t  t  j	 d d d }  t  j	 d d d } |  | } t j | j  } | s t  | d j
 | j
 k s t  d  S(   Ni    RW   R   i   RJ  (   R!   R'   R  R  R   Rp   Rr   R   R"   R   RI   (   R   R   R   t   transformed(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_add_specializeo  s    
c    
      C` s   d d d d d d d d d	 d
 d d g }  x |  D] } t  d | d d  } |   } t j |  } t j |  } t | g | d t } | j j j   } g  | D]* } t	 | j
 t j t j f  r | ^ q }	 t |	  d k s t  | d  q1 Wd  S(   NRn  t   int16RJ  R   t   uint8t   uint16t   uint32t   uint64R   RX   t	   complex64t
   complex128RW   RJ   R   i    (    (   R=   R!   R*  t   tensor_from_scalarR   R  R   R   R   R   R   t   TensorFromScalart   ScalarFromTensorR   R   (
   t   dtypesRW   t   t_typeR  R   R  R   Rc   R  t
   cast_nodes(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_tensor_scalar_tensor  s     	c    
      C` s   d d d d d d d d d	 d
 d d g }  x |  D] } t  j j d |  } |   } t j |  } t j |  } t | g | d t } | j j	 j
   } g  | D]* } t | j t j t j f  r | ^ q }	 t |	  d k s t  | d  q1 Wd  S(   NRn  R  RJ  R   R  R  R  R  R   RX   R  R  RW   R   i    (   R   R"   R  R!   R  R*  R   R  R   R   R   R   R   R  R  R   R   (
   R  RW   t   s_typeR   R  R  R   Rc   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_scalar_tensor_scalar  s     	c          C` s   t  j d  }  t  j d  } t  j d |   } | j d d  } | | } t j | j t t	 f k  sp t
  t j |  | g |  } | d d  } | j d k s t
  t j | d  d  S(	   Nt   num_lent   denomi   RK   i   g       @g      ?(   i   i   (   R!   R$   R"   R
  R   R   Rf   RJ   R   Ri   R   R   R   R   R   R   (   t	   num_len_st   denom_st   num_vt   denom_mRu   R   t   out_val(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_div_to_inv  s    
$c    	      C` s  t  j d  }  t  j d  } t  j |  | d d } t  j |  | d d } t j   j d  } t j |  | g | d | } t j |  | g | d | } | t	 j
 j d d  j t j  d g  | t	 j
 j d d  j t j  d d	 d g  | j j j   } | j j j   } t | d
 j t  s;t  t |  d k sSt  t | d j t  j  srt  t | d t g st  t | d d st  d  S(   NRK   t   splitst   n_splitsi   i   t   local_useless_splitR   i   i   ii    Re   Rf   (   R!   R+   R  t   splitR	   R   R   R   R   R   R   R   R!  R   R   R   R   R   R   R   R   R   R   t   SplitRB   R   (	   RK   R  R   t   nonoptR   R  t   f_nonoptt	   graph_optt   graph_nonopt(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_useless_split  s     +1c          C` s  xt  d d  D]}  t j   } t j t j |  |   } | j |  k sR t  t j	 j
   } | j d  } t j | g | d | } t j j d d d d  j t j  } | |  } | j j j   } t | j |  d   t j | j |  d  f } | | j k st  g  | D]! }	 t |	 j t j  r|	 ^ q}
 t |
  d k rwt j |
 d j d d	 |  s}t  t | d
 j t j   s t  q Wd  S(   Ni   i   t   local_reshape_liftR   i   i   i   i    t   outdimi(!   R   R!   R  t   flattenRo   R0  RB  R   R	   R   R   R   R   R   R   R   R   R!  R   R   R   R   R   Rz  R   Rn  R   R   t   ReshapeR   t   is_flatRq   R   (   R.  RK   Ru   R   R   t   x_npt   out_npR
  t   shape_out_npR  t   reshape_nodes(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_flatten_lift  s     '2.&t   Test_Reshapec           B` s   e  Z d    Z d   Z RS(   c         C` s   t  |  _ t j |  _ d  S(   N(   R  R   R!   R  R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    	c         ` s   t  j   }   j d  | d d d g  }   j d  | d g  } t j | g | d   j } | j j j   } t	   f d   | D  d k s t
    j t | d   j g  d  S(	   Ni   i   i   i   i   R   c         3` s$   |  ] } t  | j   j  Vq d  S(   N(   R   R   (   RK  R  (   Rb   (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    Re   (   R!   R,   R   R   R   R   R   R   R   R&  R   R_   RB   (   Rb   R   R   R   R   R
  (    (   Rb   s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_reshape  s    !((   R   R   R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   	t   Test_local_useless_reshapec           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` s   t  j j t j    |  _ d  S(   N(   R   R   R3  R   R4  R@  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         C` s   t  j j   j d  } t j d  } t  j j d |  f } t  j | g | d | } | j	 j
 j   } t d   | D  s t  d  S(   NR   R.  i    R   c         s` s'   |  ] } t  | j t j j  Vq d  S(   N(   R   R   R!   R   R  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    (   R   R	   R   R   Ro   R#   R!   t   mgridR   R   R   R   Rk  R   (   Rb   R   R.  Rt   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_0  s    	c   	      C` s   t  j j d  } | j | j  } t  j j   } | j d  } t  j | g | d | } | j	 j
 j   } t d   | D  s t  | j d  } t  j | g | d | } | j	 j
 j   } t d   | D  s t  d  S(   NRK   R   R   c         s` s'   |  ] } t  | j t j j  Vq d  S(   N(   R   R   R!   R   R  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    R   c         s` s'   |  ] } t  | j t j j  Vq d  S(   N(   R   R   R!   R   R  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>  s    (   R   R!   R+   R   R   R	   R   R   R   R   R   R   Rk  R   R   (	   Rb   RK   R   R  R  R:  R
  R  R;  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_1  s    c   
      C` s  t  j j d  } | j g  t | j  D] } t |  |  ^ q(  } t  j j   } | j	 d  } t  j
 | g | d | } | j j j   } t d   | D  s t  | j d  } t  j
 | g | d | }	 |	 j j j   } t d   | D  s
t  d  S(   NRK   R   R   c         s` s'   |  ] } t  | j t j j  Vq d  S(   N(   R   R   R!   R   R  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>"  s    R   c         s` s'   |  ] } t  | j t j j  Vq d  S(   N(   R   R   R!   R   R  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>'  s    (   R   R!   R+   R   R   RB  R   R	   R   R   R   R   R   R   Rk  R   R   (
   Rb   RK   R.  R   R  R  R:  R
  R  R;  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_2  s    7(   R   R   R  R  R  R	  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   				t    Test_local_reshape_to_dimshufflec           B` s   e  Z d    Z d   Z RS(   c         C` s   t  j j t j    |  _ d  S(   N(   R   R   R3  R   R4  R@  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  +  s    c         C` s   t  t  } t  t  } t |  j j d   } t |  j j d d   } t j | d  } t j | d	  } t | | g | | g  } |  j	 t
 |  d k  | j |  | j |  |  j	 t
 |  d k  t | d t j t j f s t  d  S(
   Ni   i   i   i   s   [Reshape{2}(<TensorType(float64, vector)>, TensorConstant{[1 4]}), Reshape{6}(<TensorType(float64, matrix)>, TensorConstant{[1 5 1 6 1 1]})]s   [InplaceDimShuffle{x,0}(<TensorType(float64, vector)>), InplaceDimShuffle{x,0,x,1,x,x}(Reshape{2}(<TensorType(float64, matrix)>, TensorConstant{[5 6]}))]Re   (   i   i   (   i   i   i   i   i   i   (   RC   R   R   R   R@  R  R!   R   R   R_   R`   RQ   RB   Ro   R?   R  R   (   Rb   t   reshape_liftt   useless_reshapeRK   RL   t	   reshape_xt	   reshape_yRU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  .  s    (   R   R   R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR
  *  s   	c          C` s  t  j   }  t j |   j |  j g  } | j d k s? t  t j	 j
   } | j d  } t j |  g | d | } | t j j d d d d  j t j   | j j j   } t | d j t  j  s t  t | d	 j t  j  s t  t | d
 d st  d  S(   Ni   R  R   i   i   i   i   iiRe   R"  (   R!   R  Ro   R0  R   R[  RB  R   R	   R   R   R   R   R   R   R   R   R!  R   R   R   R   R   R   R   R  R   RB   (   RK   Ru   R   R   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_reshape_liftJ  s    +t   Test_lift_transpose_through_dotc           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` sF   t  t j  j |  t  t j  j |  t  t j  j |  | S(   N(   RC   R   t   local_useless_elemwiseRQ   t    local_lift_transpose_through_dot(   Rb   RU   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   simple_optimizeZ  s    c         C` s   t  d  \ } } |  j t | | g t j | |  j g   } d } t |  | k sr t t |  | f   |  j t	 | d d  d  S(   Nt   abs;   [dot(InplaceDimShuffle{1,0}(b), InplaceDimShuffle{1,0}(a))]Re   Rf   (
   R0   R  R   R!   R2  Ro   R`   R   R_   RB   (   Rb   R   R   RU   t   sg(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_matrix_matrix`  s
    0*c         C` s   t  d  } t d  } t t | | g t j | j d d  |  j g  d d } d } t |  | k s t	 t |  | f   |  j
 t | d d	  d  S(
   NR   R   RK   i    RV   RO   s;   [dot(InplaceDimShuffle{1,0}(b), InplaceDimShuffle{0,x}(a))]Re   Rf   (   R'   R+   RQ   R   R!   R2  R   Ro   R`   R   R_   RB   (   Rb   R   R   RU   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_row_matrixh  s    	'	*c         C` s   t  d  } t d  } t t | | g t j | | j d d   j g  d d } d } t |  | k s t	 t |  | f   |  j
 t | d d	  d  S(
   NR   R   i    RK   RV   RO   s;   [dot(InplaceDimShuffle{x,0}(a), InplaceDimShuffle{1,0}(b))]Re   Rf   (   R'   R+   RQ   R   R!   R2  R   Ro   R`   R   R_   RB   (   Rb   R   R   RU   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_matrix_colt  s    	'	*(   R   R   R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR  Y  s   			c       
   C` s   t  d  }  t j t j d |    } t |  g t j | |   g  } | d d d d d d d	 d
 d g	  t j j } d t j _ z/ t	   } t | g t j j
 j | d
   Wd  | t j _ Xd  S(   NR   i
   ig ig      i    g?i   i   i   R   (   R*   R!   R&  RT  R   R(  R   R   R   R(   R   RW  (   R   RK   R   R  Rs   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt*   test_local_upcast_elemwise_constant_inputs  s    !%	&t   TestShape_ic           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   t  t |   j   d  S(   N(   R  R  R  (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         C` s   t    } t j j d  j t j  } t | g t d  |   } | |  } t	 j
 | | j d  t   } t j j d d  j t j  } xU t d  D]G } t | g t |  |   } | |  } t	 j
 | | j |  q Wd  S(   Ni   i    i   i   (   R'   R   R   R   R!  R   R   R   R   R   R   R   R+   R   (   Rb   t   advect	   advec_valR   Ru   R  R  R.  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_perform  s    		!c         C` s   t    } t j j d d  j t j  } |  j | g t d  |  g | g t  |  j | g t d  |  g | g t  d  S(   Ni   i   i    i   (	   R+   R   R   R   R!  R   R   R  R   (   Rb   R  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    	!(   R   R   R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s   		t   TestShapeFeaturec           B` s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C` sx   t    } t j d  j   } | | } t | g | g d t } t j   } | j |  | j	 | |  st t
  d  S(   Ni   t   clone(   R"   Ro   R   R  R   Ri   R   t   ShapeFeaturet   attach_featuret
   same_shapeR   (   Rb   RK   t   cstR  R   t   shape_feature(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    	
c         C` sx   t    } t j d  j   } | | } t | g | g d t } t j   } | j |  | j	 | |  st t
  d  S(   Ni   R  (   R'   Ro   R   R  R   Ri   R   R   R!  R"  R   (   Rb   RK   R#  R  R   R$  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_vector  s    	
c         C` s   t    } t    } | | } t | | g | g d t } t j   } | j |  | j | |  sk t  | j | |  s t  d  S(   NR  (   R'   R   Ri   R   R   R!  R"  R   (   Rb   RK   RL   R  R   R$  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_vector2  s    		
c         C` s   t    } t    } | | } t | | g | g d t } t j   } | j |  | j | | d d  sq t  | j | | d d  s t  d  S(   NR  i    (   R'   R   Ri   R   R   R!  R"  R   (   Rb   RK   RL   R  R   R$  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_vector_dim  s    		
c         C` s   t    } t    } | | } t | | g | g d t } t j   } | j |  |  j t | j | | d d  |  j t | j | | d d  d  S(   NR  i   i    (	   R'   R   Ri   R   R   R!  R  R  R"  (   Rb   RK   RL   R  R   R$  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_vector_dim_err  s    		
(   R   R   R  R%  R&  R'  R(  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s
   						c          C` s   t  j d  }  t   } t  j | |  |  j d k    } t  j | |   } t j |  g |  } t j	 d d d t j
 j  } | |  d k s t  d  S(   NRK   i   R   i   RW   (   i   (   Ro   R'   R   R&  R[  R(  R   R   R   R   R   R   R   (   RK   R  R  R(  R<  R   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_assert_op_gradient  s    	!t   TestIntDivByOnec           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` s.   t  j j j   |  _ |  j j d  |  _ d  S(   Nt   local_intdiv_by_one(   R   R	   R   R   R   (   Rb   (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    c         C` s   t  j d  } |  j j d  |  _ t j | g | d d d  d d d  d |  j } | j j j   } g  | D]? } t	 | j
 t  j j  ru t	 | j
 j t j j  ru | ^ qu } t |  d k s t  d S(   s`   Tests removing the extra floor_div by 1 introduced by
        local_subtensor_merge optimizationRL   R  NiR   i    (   Ro   R  R   R   R   R   R   R   R   R   R   R  R   R   R"   t   IntDivR   R   (   Rb   RL   R   t   graphR  t   divs(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    8'c         C` s   t  j d  } | d } t j | g | d |  j } | j j j   } g  | D]? } t | j	 t  j
 j  rP t | j	 j t j j  rP | ^ qP } t |  d k s t  d S(   s+   Simple test case for removing dividing by 1RL   i   R   i    N(   Ro   R  R   R   R   R   R   R   R   R   R  R   R   R"   R,  R   R   (   Rb   RL   RY   R   R-  R  R.  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    
'c         C` s   t  j d  } | t j d  } t j | g | d |  j } | j j j	   } g  | D]? } t
 | j t  j j  rY t
 | j j t j j  rY | ^ qY } t |  d k s t  d S(   s:   Simple test case for removing dividing by a tensor of onesRL   i   R   i    N(   i   i   i   i   (   Ro   R  R   R   R   R   R   R   R   R   R   R   R  R   R   R"   R,  R   R   (   Rb   RL   RY   R   R-  R  R.  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR    s    '(   R   R   R  R  R  R  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyR*    s   			c          C` sB  x;t  j t  j t  j f D]!}  |  d  } xt  j t  j f D] } | d |  } t t | g | g   } g  | j   D]B } t	 | j
 t  j j  r{ t	 | j
 j t | j   r{ | ^ q{ } t |  d k s t  | j d } | j | j k s t  | j | j k st  t j j |  d k s> t  q> Wq Wd S(   s   Tests 0/x -> 0RK   i    N(   Ro   R"   R  t   ftensor4RX  RW  RQ   R   R   R   R   R  R   R   RI   R   R   Rq   RB  R   R!   t   get_scalar_constant_value(   R  RK   R   RL   RU   R  R.  t   output(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_zero_div  s    *c    	      C` sE  t  d  }  t  d  } t j | j d d d  |  j d d d   j d d  } t j j   j d  } t	 | |  g | d	 | } t
 j j d
 d  j t j  } t
 j j d d  j t j  } | | |  } t
 j t
 j |  t
 j |  j d d   } t j | |  t d   | j j j   D  sAt  d  S(   Nt   GR  RK   i    i   R  i   t   local_sumsqr2dotR   i   i   i   c         s` sE   |  ]; } t  | j t j j t j j t j j t j j	 f  Vq d  S(   N(
   R   R   R!   R   R  R%  R'  R&  R#  R$  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr><  s   (   i   i   (   R+   Ro   R^  R   R&  R   R	   R   R   R   R   R   R   R!  R   R   R2  t   squareR   R   Rk  R   R   R   R   (	   R3  R  RL   t   MODER   t   w_valR  t   f_valt   f_test(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_sumsqr2dot,  s    =!!0	c          C` s  t  d  }  t j d  } t j |   d } t j |   d } t j |   |  } t j |  t j d  j t j  } t	 j
 j   j d  } t |  g | d | } t |  g | d | } t |  g | d | }	 t | g | d | }
 t j j d d  j t j  } | |  } t |  g t j |   d | } t j | | |   t d	   | j j j   D  st  t d
   | j j j   D  st  t d   |	 j j j   D  st  t d   |
 j j j   D  st  d  S(   NRK   R   g      ?g       @i   i   t   local_expm1R   c         s` sB   |  ]8 } t  | j t j  o9 t  | j j t j j j  Vq d  S(   N(	   R   R   Ro   R   R   R   R"   R   t   Expm1(   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>T  s   c         s` sB   |  ]8 } t  | j t j  o9 t  | j j t j j j  Vq d  S(   N(	   R   R   Ro   R   R   R   R"   R   R<  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>W  s   c         s` sB   |  ]8 } t  | j t j  o9 t  | j j t j j j  Vq d  S(   N(	   R   R   Ro   R   R   R   R"   R   R<  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>Z  s   c         s` sB   |  ]8 } t  | j t j  o9 t  | j j t j j j  Vq d  S(   N(	   R   R   Ro   R   R   R   R"   R   R<  (   RK  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pys	   <genexpr>]  s   (   i   i   (   R+   Ro   R"   R0  R   R   R!  R   R   R   R	   R   R   R   R   R   t   expm1R   R   Rk  R   R   R   R   (   RK   R   RL   RY   R  R   R6  R   RU   R   R   R   R8  R9  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_expm1A  s.    (!!		 	 	c       	   C` s-  t  j j j   }  |  j d  } t j d  } t j d  } t j d  } t j d  } t j d  } t j d  } t j t j | d | d d  | | | |  } t  j	 | | | | | g | d	 | }	 |	 j
 j j   }
 t |
  d k s t  t |
 d
 j t j  st  |	 d d d d d  } | j d k sHt  t j t j | | d d  | | | |  } t  j	 | | | | | g | d	 | }	 |	 j
 j j   }
 t |
  d k st  t |
 d
 j t j  st  |	 d d d d d  } | j d k st  t j t j | | d d  | | | |  } t  j	 | | | | | | g | d	 | }	 |	 j
 j j   }
 t |
  d k st  t |
 d j t j j  st  t |
 d j t j  st  |	 d d d d d d  } | j d k st  t t t f |	 d d d d d d  d  S(   NR   RK   RL   R6  RY   R3  Rt   i   R   i    g        i   i   i   iii   (   i   i   i   i   (   i   i   i   i   (   i   i   i   i   (   R   R	   R   R   R   Ro   R#   R%   R
  R   R   R   R   R   R   R   R   R   R   R   R   R   RT   (   R  t   opt_modeRK   RL   R6  RY   R3  Rt   R1  R   R
  R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_merge_alloca  s>    0'-'-*"c          C` s  t  t  }  t  t  } t j d  } t j d  } t j d  } t j d  } t j d  } t j d  } t j t j | d | d d  | | | |  } t | | | | | g | g  }	 |  j |	  | j |	  |  j |	  |	 j	   }
 t
 |
  d k st  t |
 d j t j  s-t  t j t j | | d d  | | | |  } t | | | | | g | g  }	 |  j |	  | j |	  |  j |	  |	 j	   }
 t
 |
  d k st  t |
 d j t j  st  t j t j | | d d  | | | |  } t | | | | | | g | g  }	 |  j |	  | j |	  |  j |	  |	 j	   }
 t
 |
  d	 k st  t |
 d
 j t j j  st  t |
 d j t j  st  d  S(   NRK   RL   R6  RY   R3  Rt   i   i    i   ii(   RC   R   R   Ro   R#   R%   R
  R   RQ   R   R   R   R   R   R   R   R   (   t   useless_alloct   merge_allocRK   RL   R6  RY   R3  Rt   R1  RU   R
  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_useless_alloc  sB    0!-!-$"c         C` sp   t  j t  j |   d | } | r3 | |  } n  t  j |  } t j j   j d  } t |  g | d | S(   NR  t   local_log_sum_expR   (	   Ro   R&  R0  RT  R   R	   R   R   R   (   RK   R  t   dimshuffle_opt   sum_expRL   R6  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   compile_graph_log_sum_exp  s    c         C` s   t  |  | |  } | j j j   } x[ | D]S } t | j d  rb | j j t j j	 j
 k rb d  St | j t j j  r+ d  Sq+ Wt d   d  S(   NR   s2   No maximum detected after log_sum_exp optimisation(   RG  R   R   R   R|   R   R   R   R"   R   Rl  R   R!   t   MaxAndArgmaxRy  (   RK   R  RE  R   R   R  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   check_max_log_sum_exp  s    c          C` s  t  d  }  t |  d d d d  t |  d d d d  t |  d d d d  t |  d d d d  t |  d d d d  t t t f d  } t |  d d d | t d d d	 t t t f  d  }  |  j d d d
 t  j j	 } t |  d d d | d  S(   NRK   R  i    RE  i   i   RW   R   RJ   t   keepdims(   i    (   i   (   i   (   i    i   (   i    i   i   (   i   i    (   i    i   (   i    i   (
   R.   RI  Rl  R?   Ri   R=   R   R&  Rr   R   (   RK   t   transpose_opt   sum_keepdims_op(    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_log_sum_exp1  s    $c          C` s  t  d  }  d t j j d d d  j t j  d } t |  d d } t j t j	 t j
 |  d d  } | |  } t j | |  s t  t t t f d  } t |  d d d
 | } t j t j	 t j
 |  d d j  } | |  } t j | |  st  d  S(   NRK   g      ?i   i   i   g      $@R  i   i    RE  (   i   (   i   i    (   i   (   R.   R   R   R   R!  R   R   RG  RT  R&  R0  Ro  R   R?   Ri   Ro   (   RK   R   R   t	   naive_rett   optimised_retRK  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_log_sum_exp2  s    ,'*c          C` sg   t  d  }  t |  d d } t j d d g  j t j  } | |  } t j | d  sc t  d  S(   NRK   R  i    g      Yg      Y@(	   R'   RG  R   RL  R!  R   R   Ro  R   (   RK   R   R   RO  (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   test_local_log_sum_exp3  s
    !(   t
   __future__R    R   R   R  R  R  R  Rm  t   unittestR   t	   six.movesR   t   nose.plugins.skipR   t
   nose.toolsR   R   R   t   theano.scalarR"   R"  t   sixR   R   R	   t   theano.compileR
   R   R   R   R   R   R   R   t
   theano.gofR   t   theano.tensor.optR!   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    Ro   t   theano.tensorR#   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R4   R5   R6   R7   R8   R9   R:   R;   R<   R=   R>   t   theano.tensor.elemwiseR?   t   theano.tensor.typeR@   t   theano.testsRA   R   t   theano.gof.optRB   RC   t   nose.plugins.attribRD   R   R  Ra   R   RS   R7  t   optdbt   queryRR   RP   RM   RQ   R]   t   TestCaseR^   R   R   R   R   R%  R-  R/  RB  RC  R   R  R  R  R  R  R!  R'  R0  RV  RW  Rs  R~  R  R  R  R  R  R*  R+  RH  RM  RW  RX  Ry  R  R  t   InferShapeTesterR  R  R  R  R  R  R  R  R  R
  R  R#  R$  R5  R@  RI  RY  Rd  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R
  R  R  R  R  R  R)  R*  R2  R:  R>  R@  RC  Rl  RG  RI  RM  RP  RQ  (    (    (    s<   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_opt.pyt   <module>   s"  ^("""R				$n	'	
3  				  G	/	)	-	0	q	=v?  a	$	"	*	3	2	=ogk	'		5	)V@		#gW j~u	(	2							/ 	(	4	*			 	.	6			