ó
ąĘ÷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 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 Z d  d l j Z d  d l j Z d  d l m Z m Z d  d	 l m Z m Z d  d
 l m Z d  d l m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' m( Z( m) Z) m* Z* m+ Z+ m, Z, m- Z- m. Z. m/ Z/ d  d l0 m1 Z1 d  d l2 m3 Z3 m4 Z4 m5 Z5 m6 Z6 m7 Z7 m8 Z8 m9 Z9 m: Z: m; Z; m< Z< m= Z= m> Z> d  d l? m@ Z@ mA ZA mB ZB d  d lC mD ZE d  d lF mG ZG e r"d   ZH n	 d   ZH d e jI eE jJ f d     YZK d e jI f d     YZL d e jI f d     YZM d eE jN f d     YZO d S(   i    (   t   absolute_importt   divisiont   print_functionN(   t   SkipTest(   t   assert_equal(   t   assert_array_equal(   t   StringIO(   t   xrange(   t   configt   gof(   t   PY3t   izip(   t
   DeepCopyOp(   t   _sharedt   cscalart   ctensor3t   dmatrixt   dscalart   dtensor4t   dvectort   fmatrixt   fscalart   fvectort   ftensor4t   iscalart   lmatrixt   lrowt   lvectort   matrixt   vector(   t
   DimShuffle(   t   AdvancedIncSubtensort   AdvancedIncSubtensor1t   AdvancedSubtensort   IncSubtensort	   Subtensort   advanced_inc_subtensort   advanced_inc_subtensor1t   advanced_set_subtensort   advanced_set_subtensor1t   get_canonical_form_slicet   inc_subtensort   set_subtensor(   t   inplace_funct   randt   randint_ranged(   t   unittest_tools(   t   attrc         C` s   |  S(   N(    (   t   i(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   L(   s    c         C` s
   t  |   S(   N(   t   long(   R0   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR1   +   s    t   T_subtensorc           B` s  e  Z d  Z e j e j e j e j e j e j	 d@ e j j e j e e d  Z e d@ d@ d d@ d  Z d   Z d@ d@ d d  Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& d   Z' d   Z( d   Z) d   Z* d   Z+ d   Z, d   Z- d   Z. d   Z/ d    Z0 d!   Z1 d"   Z2 d#   Z3 d$   Z4 d%   Z5 d&   Z6 d'   Z7 d(   Z8 e9 d)  d*    Z: d+   Z; d,   Z< d-   Z= d.   Z> d/   Z? d0   Z@ d1   ZA d2   ZB d3   ZC d4   ZD e9 d)  d5    ZE d6   ZF d7   ZG d8   ZH d9   ZI d:   ZJ d;   ZK d<   ZL d=   ZM d>   ZN d?   ZO RS(A   sZ   
    This is build in a way that allow to reuse it to test the
    equivalent gpu op.
    c         C` sÓ   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | d  k ro t j	 j
 j   } | j d  } n  | |  _
 |	 |  _ |
 |  _ | |  _ t j j
 d k |  _ | | | | f |  _ t t |   j |  S(   Nt   local_useless_subtensort   FAST_COMPILE(   t   sharedt   subt   inc_subt   adv_sub1t   adv_incsub1t   adv_subt
   dimshufflet   Nonet   theanot   compilet   modet   get_default_modet	   includingt   dtypet   typet   ignore_topoR   t   fast_compilet   opst   superR3   t   __init__(   t   selft   nameR6   R7   R8   R9   R:   R;   R@   RC   RD   RE   R<   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRI   4   s"    											i   c   	      C` s   |  j  r | d k	 r | } n  | d k r6 |  j } n  | d k rN |  j } n  t j | | d | d | } |  j | | |  | S(   s   wrapper around theano.function that also check the output

        :param N: the number of op expected in the toposort
                  if tuple of length 2, (expected if fast_compile,
                                         if not fast_compile)
        R@   t   accept_inplaceN(   RF   R=   R@   R7   R>   t   functiont   assertFunctionContainsClassN(	   RJ   t   inputst   outputsRL   t   opR@   t   Nt   N_fastt   f(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRM   Q   s    		c         C` s   t  t _ t j   d  S(   N(   t   FalseR#   t   debugt   uttt   seed_rng(   RJ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   setUpe   s    	c   
      C` sŠ   | d  k r |  j } n  | d  k r0 |  j } n  t g  | d | } | j j j   } g  | D]! } t | j |  j	  s^ | ^ q^ } t
 t |  |  | d k rĆ t | d j |  sĆ t  n  |   }	 |	 S(   NR@   i   i    (   R=   R7   R@   R+   t   makert   fgrapht   toposortt
   isinstanceRQ   RE   R   t   lent   AssertionError(
   RJ   t   tt   op_typeR@   t   lengthRT   t   topot   nodet   topo_t   tval(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   eval_output_and_checki   s    	c         C` sh   |  j  t j d d |  j  } y | d Wn* t k
 rY } |  j t | d   d  SX|  j   d  S(   NRC   i    t   subtensor_invalid(    (   R6   t   numpyt   onesRC   t
   ValueErrort
   assertTruet   hasattrt   fail(   RJ   t   nt   e(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test0_err_invalidx   s    !c         C` sŪ   |  j  t j d d |  j  } t j } d t _ z | d } Wd  | t _ X|  j t | j j	 t
   t j d  } | j } | j t j  z4 y |  j |  Wn t k
 rŗ d  SX|  j   Wd  | j |  Xd  S(   Ni   RC   t   offi   s   theano.gof.opt(   R6   Ri   Rj   RC   R   t   compute_test_valueRl   R]   t   ownerRQ   R#   t   loggingt	   getLoggert   levelt   setLevelt   CRITICALRg   t
   IndexErrorRn   (   RJ   Ro   t
   ctv_backupR`   t   _loggert   oldlevel(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_err_bounds   s"    !		
	c         C` sh   |  j  t j d d |  j  } y$ | t d t d d d   d   Wn t k
 rY d  SX|  j   d  S(   Ni   RC   i    i   i   (   R6   Ri   Rj   RC   t   sliceR=   t	   ExceptionRn   (   RJ   Ro   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_err_subslice   s    !$c         C` s   |  j  t j d d |  j  } | d d !} |  j t | j j t   |  j	 |  } |  j | j
 d k  |  j | d d g k j    d  S(   Ni   RC   i    i   i   (   i   (   R6   Ri   t   arangeRC   Rl   R]   Rt   RQ   R#   Rg   t   shapet   all(   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_ok_range_finite¤   s    !c         C` sć   |  j  t j d d |  j j d	   } x² t d d  d f t d d  d f t d d  d f g D]t } | | } |  j t | j j	 t
   |  j |  } |  j | j d
 k  |  j t j | | j   |   qg Wd  S(   Ni   RC   i   i   i    i   i’’’’iü’’’(   i   i   (   i   (   R6   Ri   R   RC   t   reshapeR   Rl   R]   Rt   RQ   R#   Rg   R   t   allcloset	   get_value(   RJ   Ro   t   idxR`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_ok_range_finite¬   s    *C
c         C` su   |  j  t j d d |  j  } |  j g   |  } |  j t | j j t	   |  j
 | d |  j j d  d  S(   NRC   R@   R4   (    (   R6   Ri   Rj   RC   R7   Rl   R]   Rt   RQ   R#   Rg   R@   t	   excluding(   RJ   Ro   R`   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_0_dims¶   s
    !c         C` sh   |  j  t j d d |  j  } y | d Wn* t k
 rY } |  j t | d   d  SX|  j   d  S(   Ni   RC   i    Rh   (   i    i    (   R6   Ri   Rj   RC   Rk   Rl   Rm   Rn   (   RJ   Ro   Rp   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_err_invalid½   s    !c         C` s   |  j  t j d d |  j d  } | d } |  j t | j j t   |  j	 |  } |  j | j
 d k  |  j | d k  d  S(   Ni   RC   i   i    g      @(    (   R6   Ri   Rj   RC   Rl   R]   Rt   RQ   R#   Rg   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_ok_elemĘ   s    %
c         C` s   |  j  t j d d |  j  } | d } |  j t | j j t   |  j	 |  } |  j | j
 d k  |  j | d d g k j    d  S(   Ni   RC   i   i   g      š?g       @(   i   (   R6   Ri   R   RC   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_ok_range_infiniteĪ   s    !
c         C` sļ   |  j  t j d d |  j  } | d d  d  } |  j t | j j t   |  j	 |  } |  j | j
 d k  |  j | d d g k j    | d d d  } |  j	 |  } |  j | j
 d k  |  j | d	 d
 g k j    d  S(   Ni   RC   i   i   g      š?g      @i    i’’’’g        g       @(   i   (   i   (   R6   Ri   R   RC   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test1_ok_stridedÖ   s    !c         C` sß   |  j  t j d
 d |  j d  } t j } d t _ z x d d g D] } | | } |  j t | j j	 t
   t j d	  } | j } | j t j  z |  j t |  j | g  Wd  | j |  XqG WWd  | t _ Xd  S(   Ni   i   RC   i   Rr   i    i   iü’’’s   theano.gof.opt(   i   i   (   i    i   (   i    iü’’’(   R6   Ri   Rj   RC   R   Rs   Rl   R]   Rt   RQ   R#   Ru   Rv   Rw   Rx   Ry   t   assertRaisesRz   Rg   (   RJ   Ro   R{   R   R`   R|   R}   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_err_bounds0ć   s    %		
		c         C` s   |  j  t j d d |  j d  } | d d  d f } |  j t | j j t   t	 j
 } t   t	 _
 z |  j t |  j | g  Wd  | t	 _
 Xd  S(   Ni   i   RC   i   i   (   i   i   (   R6   Ri   Rj   RC   Rl   R]   Rt   RQ   R#   t   syst   stderrR   R   Rz   Rg   (   RJ   Ro   R`   t
   old_stderr(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_err_bounds1÷   s    %		c         C` s   |  j  t j d d |  j j d   } | d } |  j t | j j t	   |  j
 |  } |  j | j d k  |  j t j | d k   d  S(	   Ni   RC   i   i   i    (   i   i   (   i    i   (    (   R6   Ri   R   RC   R   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_ok_elem  s    *
c         C` s·   |  j  t j d d |  j j d   } | d } |  j t | j j   |  j	 t
 | j j t   |  j |  } |  j	 | j d	 k  |  j	 t j | d d d g k   d  S(
   Ni   RC   i   i   i   i   i   (   i   i   (   i   (   R6   Ri   R   RC   R   t   assertFalset   anyRD   t   broadcastableRl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_ok_row  s    *
c         C` sĄ   |  j  t j d d |  j j d   } | d  d   d f } |  j t | j j t	   |  j
 t | j j   |  j |  } |  j | j d k  |  j t j | d d g k   d  S(   Ni   RC   i   i   i    (   i   i   (   i   (   R6   Ri   R   RC   R   Rl   R]   Rt   RQ   R#   R   R   RD   R   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_ok_col  s    *c         C` s§   |  j  t j d d |  j j d	   } | d d  d f } |  j t | j j t	   |  j
 |  } |  j | j d
 k  |  j t j | d d g k   d  S(   Ni   RC   i   i   i   i    i   i   (   i   i   (   i   (   R6   Ri   R   RC   R   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_ok_rows_finite  s    *c         C` s”   |  j  t j d d |  j j d   } | d d d   f } |  j t | j j t	   |  j
 |  } |  j | j d	 k  |  j t j | d k   d  S(
   Ni   RC   i   i   i   i   i   (   i   i   (   i   (   R6   Ri   R   RC   R   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_ok_cols_infinite%  s    *c         C` sæ   |  j  t j d d |  j j d   } | d d d  d d d  f } |  j t | j j t	   |  j
 |  } |  j | j d k  |  j t j | d d g d	 d
 g g k   d  S(   Ni   RC   i   i   i   i   i   i   i   i   (   i   i   (   i   i   (   R6   Ri   R   RC   R   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test2_ok_strided-  s    *"c         C` s   |  j  t j d d |  j j d   } | d } |  j t | j j t	   |  j
 |  } |  j | j d	 k  |  j t j | d k   d  S(
   Ni   RC   i   i   i   i    (   i   i   i   (   i    i    i    (    (   R6   Ri   R   RC   R   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test3_ok_mat5  s    *
c         C` sĀ   |  j  t j d d |  j j d   } | t d  t d  t d   t d  f } |  j t | j j	 t
   |  j |  } |  j | j d	 k  |  j t j | d d g k   d  S(
   Ni   RC   i   i   i   i   i
   (   i   i   (   i   (   R6   Ri   R   RC   R   R1   Rl   R]   Rt   RQ   R#   Rg   R   R   (   RJ   Ro   R`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt	   test_long=  s    *1c         ` sG   |  j  t j d d |  j j d     |  j t   f d    d  S(   Ni   RC   i   i   c           ` s     t  d   S(   Ni   i?   l            (   R1   (    (   Ro   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   <lambda>I  s    (   i   i   (   R6   Ri   R   RC   R   R   R   (   RJ   (    (   Ro   sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_long_too_bigE  s    *c         C` s   t  j j d  j d  } | t d d  g | j j   } t j d  j d  } t j | | t d d  g | j  d  S(   Nid   i   i   i   i’’’’(   i   i   i   (   i   i   i   (	   R>   t   tensorR   R   R   t   ndimt   evalRi   R   (   RJ   t   xt   res(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_list_sliceK  s    #c         C` sŗ   |  j  t j j d d  j |  j   } |  j  t j j d d d  j |  j   } | d  | j d  d  d  d   f } t j	 g  | d |  j
 } |   } | j d k s¶ t  d  S(	   Ni   i   i   i   i   i    R@   (   i   i   i   (   R6   Ri   t   randomR,   t   astypeRC   R   R=   R>   RM   R@   R_   (   RJ   R§   t   yt   oRT   t   ret(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_symbolQ  s    *-&	c         C` sĶ  t  j d d |  j j d  } |  j |  } d t |  j t  j d f d t |  j t  j d f d t |  j t  j d f d t |  j t  j d f d t |  j t  j d f d t |  j t  j d f d t |  j	 t  j d d d d g f f d t |  j	 t  j t  j
 d f f d t |  j t  j d t  j
 d d g f f g	 } x | D]} \ } } } } | | } | | }	 |  j t |	 j j |   |  j |	 d	 | d
 | }
 t |
 j | j  t |
 |  qHWd  S(   Ni   RC   i   i   i   i    .i   Ra   Rb   (   i   i   i   (   .i   (   i   .(   .i   i   i   (   i   .i   i   (   i   i   i   .(   Ri   R   RC   R   R6   R#   R7   t	   index_expR   R<   t   newaxisR!   R;   Rl   R]   Rt   RQ   Rg   R   R   R   (   RJ   t   numpy_nRo   t
   test_casesRb   Ra   t   op_type_optt   slice_t
   numpy_tvalR`   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_ellipsisY  s.    !%

	c   
      C` sĶ  t  j } |  j t  j d d |  j j d   } | j d k sH t  | | d d  d d  d d  f } | j t	 t
 t
 t
 f k s t |   | d d  | d d  d d  f } | j t
 t	 t
 t
 f k sę t |   | d d  d d  | d d  f } | j t
 t
 t	 t
 f k s5t |   | d d  d d  d d  | f } | j t
 t
 t
 t	 f k st |   | j   | d d  | f } | j t	 t
 t	 f k sĒt |   t   } | | } | j t	 f k sųt |   t j | g | | | g  d  \ } } }	 t  j | d g k  sCt  t  j | t  j d  | d d  | f k  szt  t  j |	 t  j d  j d	  d d  d d  d d  | f k  sÉt  d S(
   s  
        newaxis support comes from logic in the __getitem__ of TensorType
        Variables, which currently inserts dimshuffle to get the right number
        of dimensions, and adjusts the slice tuple accordingly.

        So testing is done via square-bracket notation rather than direct
        interaction with the Subtensor Op (which has no support of its own for
        newaxis).
        i   RC   i   i   i   Ng       Ą(   i   i   i   (   i   i   i   (   Ri   R±   R6   R   RC   R   R„   R_   R   t   TrueRU   t   flattenR   R>   RM   R   (
   RJ   R±   Ro   t   n4t   n3t   st   s1t   vs1t   vn3t   vn4(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_newaxist  s,    
	*('('('('$	
-	.	c         C` sō  d } t  j t d d  d |  j } |  j |  } t j |  j d  } | | d   | f } t j	 j
 t j	 j t j	 j |   |  } t g  | d |  j } | j j j   } g  | D]! }	 t |	 j |  j  sĀ |	 ^ qĀ }
 |  j st |
  d k st  n  t  j g  |
 D] }	 t |	 j |  j  ^ q d k sJt  t  j g  |
 D] }	 t |	 j |  j  ^ qW d k st  |   } t  j |  } t  j | | d   | f  | | d   | f <|  j t  j | |  | | f  d  S(	   Ni    i   i   RC   t   int32R@   i   i   (   Ri   t   asarrayR,   RC   R6   t   scalt   constantR«   R>   R¤   t   gradt   sumt   expR+   R@   RZ   R[   R\   R]   RQ   RE   RF   R^   R_   R8   R7   t
   zeros_likeRl   R   (   RJ   t   subit   dataRo   t   zR`   t   gnRT   Rc   Rd   Re   t   gvalt   good(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_grad_1d  s(    !-		4	4	/c   	      ` sa  xZd d	 g d
 d g d d g d d g g D].\ } } xt  t g D] d } t j t |   d |  j } |  j |   t j |   t	 d d |  j } t j t |   d |  j     d    d    f |  } t
 j j t
 j j |   | g  \ } } t j    f d     g  t j     f d   | g  qD Wq+ Wd  S(   Ni   i   i   RC   t   mc         ` s#      d    d    f |   S(   N(    (   RŃ   (   Ro   RQ   RĢ   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢   Ē  s    c         ` s#    |  d    d    f    S(   N(    (   t   nn(   t   mvRQ   RĢ   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢   Č  s    (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   (   R)   R*   Ri   RĆ   R,   RC   R6   RÄ   RÅ   R   R>   R¤   RĘ   RĒ   RW   t   verify_grad(	   RJ   t   n_shapet   m_shapeRŹ   RĖ   RŃ   R`   RĶ   t   gm(    (   RÓ   Ro   RQ   RĢ   sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_grad_2d_inc_set_subtensor¶  s     			%-"c         C` s§  t  j t d d  d |  j } |  j |  } | d } t j j t j j t j j	 |   |  } |  j
 g  |  } | j j j   } g  | D]! } t | j |  j  s | ^ q } |  j sŲ t t |  d  n  t  j g  | D] } t | j |  j  ^ qå  d k st  t  j g  | D] } t | j |  j  ^ q" d k sRt  |   }	 t  j |  }
 t  j	 | d  |
 d	 <|  j t  j |	 |
  |	 |
 f  d  S(
   Ni   i   RC   i   i    i   (   i   i    (   i   i    (   i   i    (   Ri   RĆ   R,   RC   R6   R>   R¤   RĘ   RĒ   RČ   RM   RZ   R[   R\   R]   RQ   RE   RF   R   R^   R8   R_   R7   RÉ   Rl   R   (   RJ   RĖ   Ro   R`   RĶ   RT   Rc   Rd   Re   RĪ   RĻ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_grad_0dŹ  s$    !
-!		4	4	c         ` sB  x;t  d  d d g f t  d d  d d d g f t  d d d  d d g f t  d d d  d d d d d d d d g f t  d d d  d d d d d d d d d d d	 d
 g f t  d d d d  d d d d d d d d d d d	 d
 g f t  d d d  t j j d d d d d d d d g  f g D]\ }   t j | d |  j } |  j |  } |   } |  j t	 | j
 j t j   |  j | d |  j } t	   t  r½|   } n |   j } |  j | j | j k  |  j t j | |  | | f  t |  j  t j k r³|  j   } t   d  rD  j   n  d  g g } | j d  |   g |  | d d } | j d  |   g |  | d d }	 | |	 k s³t  n  t j | j   |  }
 |  j g  |
 d |  j } t j d   t j j  d d  j |  j  g  |   t j   f d   | g  q-Wd  S(   Ni   i   i    i   i   i   i’’’’iž’’’iż’’’iü’’’RC   Ra   RĖ   RQ   c         S` s   |  d d g S(   Ni   i   (    (   RŃ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢     s    c         ` s   |    S(   N(    (   RŃ   (   R   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢     s    (    R,   R>   R¤   RÅ   Ri   RĆ   RC   R6   Rl   R]   Rt   RQ   t   AdvancedSubtensor1Rg   R9   t   listRĖ   R„   R   RD   Rm   R=   t   performR_   RĘ   RĒ   RM   R:   RW   RŌ   RŖ   R«   (   RJ   RĖ   Ro   R`   t   valRĻ   RQ   t   test_outt   out1t   out2RĶ   t   g(    (   R   sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_ok_listß  sJ    -'*:
"%c         C` sĶ   t  d d d  } d d d d d d g } |  j |  } | |  j t j |  j d   d  d  d  } |  j t | j j t	 j
   |  j | d |  j d d } t j | | d  d  d  |  d  S(	   Ni   i   i   i    i   t   int64Ra   Rb   (   R,   R6   Ri   RĆ   R«   Rl   R]   Rt   RQ   R¤   RŚ   Rg   R9   RW   t   assert_allclose(   RJ   RĖ   R   Ro   R`   RŻ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_noncontiguous_idx  s    2c         C` sA   |  j  t j d d |  j  } |  j t | j d d g  d  S(   Ni   RC   i    (   R6   Ri   RĆ   RC   R   t	   TypeErrort   __getitem__(   RJ   Ro   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_err_invalid_list  s    !c         C` sQ   |  j  t j d d |  j d  } |  j t | j d d g d d g f  d  S(   Ni   RC   i   g        i    i   (   i   i   (   R6   Ri   Rj   RC   R   Rę   Rē   (   RJ   Ro   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_err_invalid_2list_dtype!  s    %c         C` s  |  j  t j d d |  j d  } t   } | | } |  j t | j j t	 j
   |  j | g | d |  j } |  j | g t | t j d g g |  j   d |  j } xL d d g d d	 g d
 g g D], } |  j t | |  |  j t | |  qŠ Wd  S(   Ni   i   RC   i   RQ   g      š?i    i   iż’’’iö’’’(   i   i   (   R6   Ri   Rj   RC   R   Rl   R]   Rt   RQ   R¤   RŚ   RM   R9   R)   RĆ   R:   R   Rz   (   RJ   Ro   t   lR`   RT   Rį   t   shp(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_err_bound_list%  s    %	
$%c         C` sf  t  j d d |  j j d  } |  j | d d t t f } t j   } | | } |  j	 t
 | j j t j   |  j | g | d |  j } | j j j   } g  | D]! } t
 | j |  j  s¬ | ^ q¬ } t |  d k sė t  |  j	 t
 | d j |  j   | d g  }	 |  j	 |	 j d k  |  j	 t  j |	 | d   | d d g  }
 |  j	 |
 j d k  |  j	 t  j |
 | d   |  j t | d d g  | j   } t j | |  } |  j | g | d |  j } | d g  } |  j	 | j d k  |  j	 t  j | d   | d d g  } |  j	 | j d k  |  j	 t  j | d   t j d	   t  j  j! d d  j" |  j  g  d
   } t j | t  j  j! d d  j" |  j  t  j  j! d d  j" |  j  g  d   } t j | t  j  j! d d  j" |  j  t  j  j! d d  j" |  j  g  d |  _ t j# d d |  j } t j t  j$ d d d d g   } |  j t  j  j  d  j" |  j   } | | } t j% | | | |  } t j | j   |  } d } t j& j' d k r|  j t j( k rd } n  |  j | g | d |  j d | } | t  j  j  d  j" |  j   d  S(   Ni   RC   i   i   R   RQ   i    i   c         S` s   |  d d g S(   Ni   i   (    (   RŃ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢   W  s    c         S` s   t  |  | d d g  S(   Ni   i   (   R%   (   R§   R¬   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   funZ  s    c         S` s   t  |  | d d g  S(   Ni   i   (   R'   (   R§   R¬   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRķ   _  s    t   float32R§   i   i
   R5   RR   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i
   i
   i   i   (   i
   i
   i   i   ()   Ri   R   RC   R   R6   Rø   RU   R¤   R   Rl   R]   Rt   RQ   RŚ   RM   R9   RZ   R[   R\   RE   R^   R_   R   R   R   Rz   RĒ   R>   RĘ   R:   RW   RŌ   RŖ   R,   R«   t   tensor4RĀ   R*   R   R@   R    (   RJ   t   vRo   R   R`   RT   Rc   Rd   Re   t   f_0t   f_00t   cRĶ   Rį   t   g_0t   g_00Rķ   R§   t   indexest   Wt   hRR   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_adv_sub1_broadcast7  s`    !
 %	'%	'%	$
$	$c         C` s   t  j d
 d |  j } |  j | d  } t j d d d t f    } | j j t f k sd t	  | | } |  j
 t | j j t j   |  j | g | d |  j } | j j j   } g  | D]! } t | j |  j  sÄ | ^ qÄ } t |  d k st	  |  j
 t | d	 j |  j   | d	 g  }	 |  j
 |	 j d k  |  j
 t  j |	 d   | j   }
 t j |
 |  } |  j | g | d |  j } | d	 g  } |  j
 | j d k  |  j
 t  j | d	 d   |  j
 t  j | d d	   d  S(   Ni   i   RC   i   Rć   R   RQ   i   i    (   i   i   (   i   i   (   i   i   (   Ri   Rj   RC   R6   R¤   t
   TensorTypeRø   RD   R   R_   Rl   R]   Rt   RQ   RŚ   RM   R9   RZ   R[   R\   RE   R^   R   R   RĒ   R>   RĘ   R:   (   RJ   Rj   Ro   R   R`   RT   Rc   Rd   Re   Rń   Ró   RĶ   Rį   Rō   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_adv_sub1_idx_broadcastv  s,    
 t   slowc      
   C` sÆ  |  j  j d  } |  j t j t j d  d |  j  } xld  g d d d d d d d	 g D]H} g  } g  } x d  g d d d d d d d	 g D]m } xd d  g d
 d d g D]L } | | | | |  j g 7} | | j	 d t
  | | |  j g 7} q± Wq W|  j g  | d | d |  j d d } |   }	 x8 t |	 |  D]' \ }
 } t j |
 | k  sEt  qEWt j g  | j j j   D] } | j ^ qk s_ t  q_ Wd  S(   Nt   fast_runi   RC   ių’’’iū’’’i’’’’i    i   i   iż’’’i   t   borrowR@   RQ   RR   (   R@   RB   R6   Ri   t   arrayR   RC   R=   R   R   Rø   RM   RG   t   zipR   R_   R¤   R#   RZ   R[   R\   RQ   (   RJ   t   mode_optRĖ   t   startt   outst   shapest   stopt   stepRT   t   t_shapest   t_shapeR   R§   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_shape_i_const  s"    *))%		c   	   
   C` s  |  j  j d  } t j t j d  d |  j } |  j |  } t j d  } t j d  } t j d  } |  j	 | | | g | | | |  j
 d | d |  j d	 d
 } t j g  | j j j   D] } | j ^ qČ k sę t  x© d d d d d
 d d d d g	 D] } x} d d d d d
 d d d d g	 D]Z } xQ d d d d g D]= } t j | | | |  | | | |  j
 k  sIt  qIWq0WqWd  S(   NRż   i   RC   t   bRp   R¼   R@   RQ   RR   i    ių’’’iū’’’iü’’’i’’’’i   i   i   iż’’’i   (   R@   RB   Ri   R’   R   RC   R6   R¤   R   RM   R   RG   R#   RZ   R[   R\   RQ   R_   R   (	   RJ   R  t   v_datat   t_dataR  R  R  RT   R§   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_shape_i_scalarØ  s$    !			.((c      
   C` sņ  t  j d  } t  j d  } t  j d  } t  j d  } t t | | |  |  } |  j | | | | g t  j | d j  t  j | d j  t  j | d j  t  j | d  g d d d |  j	 } d	 } t
 j |  } x	d
 d d d d d d d	 d g	 D]ę } xŻ d
 d d d d d d d	 d g	 D]ŗ } x± d d d d d	 g D] } | | | | |  } | | d | d | d  d  d  | d  }	 | | | |  }
 t
 j |	 |
 k  sĮt  t
 j |	 j |
 j k  sHt  qHWq,WqWd  S(   NR
  Rp   R¼   Rź   i    i   RR   RQ   i   ių’’’iū’’’iü’’’i’’’’i   i   iś’’’iż’’’i   i   (   R¤   R   R(   R   RM   t   as_tensor_variableR  R  R  RG   Ri   R   R   R_   R   (   RJ   R  R  R  Rb   t   cnfRT   t   at   outt   t_outt   v_out(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_canonical_form_0æ  s(    (((0c   
   	   C` s±  t  j d  } t  j d  } t  j d  } t t d  | |  |  } |  j | | | g t  j | d j  t  j | d j  t  j | d j	  t  j | d  g d d d |  j
 } d } t j |  } xŚ d	 d
 d d d d d d d g	 D]· } x® d d d d d g D] } | | | |  } | | d | d | d  d  d  | d  } | d  | |  }	 t j | |	 k  st  t j | j |	 j k  st  qWqņ Wd  S(   NRp   R¼   Rź   i    i   RR   RQ   i   ių’’’iū’’’iü’’’i’’’’i   i   iś’’’iż’’’i   i   (   R¤   R   R(   R   R=   RM   R  R  R  R  RG   Ri   R   R   R_   R   (
   RJ   R  R  Rb   R  RT   R  R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_canonical_form_1Ö  s$    ((0c   
   	   C` s±  t  j d  } t  j d  } t  j d  } t t | d  |  |  } |  j | | | g t  j | d j  t  j | d j  t  j | d j	  t  j | d  g d d d |  j
 } d } t j |  } xŚ d	 d
 d d d d d d d g	 D]· } x® d d d d d g D] } | | | |  } | | d | d | d  d  d  | d  } | | d  |  }	 t j | |	 k  st  t j | j |	 j k  st  qWqņ Wd  S(   NR
  R¼   Rź   i    i   RR   RQ   i   ių’’’iū’’’iü’’’i’’’’i   i   iś’’’iż’’’i   i   (   R¤   R   R(   R   R=   RM   R  R  R  R  RG   Ri   R   R   R_   R   (
   RJ   R  R  Rb   R  RT   R  R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_canonical_form_2ė  s$    ((0c   
   
   C` s½  t  j d  } t  j d  } t  j d  } t t | | d   |  } |  j | | | g t  j | d j  t  j | d j  t  j | d j	  t  j | d  g d d d |  j
 } d } t j |  } xę d	 d
 d d d d d d d g	 D]Ć } xŗ d	 d
 d d d d d d d g	 D] } | | | |  } | | d | d | d  d  d  | d  } | | | d   }	 t j | |	 k  st  t j | j |	 j k  st  qWqņ Wd  S(   NR
  Rp   Rź   i    i   RR   RQ   i   ių’’’iū’’’iü’’’i’’’’i   i   i   i   (   R¤   R   R(   R   R=   RM   R  R  R  R  RG   Ri   R   R   R_   R   (
   RJ   R  R  Rb   R  RT   R  R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_canonical_form_3   s$    (((0c   	      C` sp  t  j d  } t  j d  } t t d  d  |  |  } |  j | | g t  j | d j  t  j | d j  t  j | d j	  t  j | d  g d d d |  j
 } d } t j |  } x« d d	 d
 d d g D] } | | |  } | | d | d | d  d  d  | d  } | d  d  |  } t j | | k  sGt  t j | j | j k  sŌ t  qŌ Wd  S(   NR¼   Rź   i    i   RR   RQ   i   iś’’’iż’’’i’’’’i   i   (   R¤   R   R(   R   R=   RM   R  R  R  R  RG   Ri   R   R   R_   R   (	   RJ   R  Rb   R  RT   R  R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_canonical_form_4  s     (0c   	   	   C` s|  t  j d  } t  j d  } t t | d  d   |  } |  j | | g t  j | d j  t  j | d j  t  j | d j	  t  j | d  g d d d |  j
 } d } t j |  } x· d d	 d
 d d d d d d g	 D] } | | |  } | | d | d | d  d  d  | d  } | | d  d   } t j | | k  sSt  t j | j | j k  są t  qą Wd  S(   NR
  Rź   i    i   RR   RQ   i   ių’’’iū’’’iü’’’i’’’’i   i   i   i   (   R¤   R   R(   R   R=   RM   R  R  R  R  RG   Ri   R   R   R_   R   (	   RJ   R  Rb   R  RT   R  R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_canonical_form_5(  s     ((0c   	   	   C` s|  t  j d  } t  j d  } t t d  | d   |  } |  j | | g t  j | d j  t  j | d j  t  j | d j	  t  j | d  g d d d |  j
 } d } t j |  } x· d d	 d
 d d d d d d g	 D] } | | |  } | | d | d | d  d  d  | d  } | d  | d   } t j | | k  sSt  t j | j | j k  są t  qą Wd  S(   NRp   Rź   i    i   RR   RQ   i   ių’’’iū’’’iü’’’i’’’’i   i   i   i   (   R¤   R   R(   R   R=   RM   R  R  R  R  RG   Ri   R   R   R_   R   (	   RJ   R  Rb   R  RT   R  R  R  R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_slice_canonical_form_6;  s     ((0c      
   ` s¶  |  j  |  } x | D]} t t j |     |   } t j j t j j t j j |   |  } |  j	 g  | | j
 g d |  j } | j j j   } |  j sź t g  | D]' }	 t |	 j |  j  oÕ |	 j j ^ q±  st  n4 t g  | D] }	 t |	 j |  j  ^ qō  st  t g  | D] }	 t |	 j |  j  ^ q( sRt  |   \ }
 } t j |  } x+ | D]# } | | c t j | |  7<qwW|  j |
 j | j k  |  j t j |
 |  |
 | f  |  j t j | | j
     f d   } t j | | g    f d   } t j | | g  |  j sW|  j |  j f } n	 |  j } | | d k r |  j	 g  | j
 |   j
 g d | d d d d } |   q q Wd  S(   NRQ   c         ` s   t  j j |     S(   N(   R>   R¤   RĒ   (   R`   (   t   idx_(    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   fcti  s    c         ` s#   t  j j t  j j |     |   S(   N(   R>   R¤   RĘ   RĒ   (   R`   (   R  (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   fct2n  s    i    RR   RS   i   (   R6   R   Ri   RĆ   R>   R¤   RĘ   RĒ   RČ   RM   R   R:   RZ   R[   R\   RF   R   R]   RQ   t   inplaceR_   R9   RÉ   Rl   R„   R   RW   RŌ   RG   (   RJ   t   idxsRĖ   Ro   R   R`   RĶ   RT   Rc   Rd   RĪ   t   gshapeRĻ   R0   R  R  RG   (    (   R  sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt
   grad_list_N  s@    
-$	=.4!"		c         C` sŠ   t    } t    } t   } y | | | !Wn+ t k
 rG |  j   n t k
 rW n Xy | | Wn+ t k
 r |  j   n t k
 r n Xy | |  Wn+ t k
 r» |  j   n t k
 rĖ n Xd  S(   N(   R   R   t   NotImplementedErrorRn   Rę   (   RJ   R  R
  Ró   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_wrong_exception_regression}  s*    			c         C` s9  t  d  } t j | d |  j } g  t | j d  D] } | g ^ q8 } xd t | j d  D]O } xF t d | j d d  D]+ } | j | | | d | j d g  q Wqa W|  j | |  t  d d  } t j | d |  j } |  j | |  t  d d d  } t j | d |  j } |  j | |  d  S(   Ni   RC   i    i   i   i   (   R,   Ri   RĆ   RC   t   rangeR   t   appendR!  (   RJ   RĖ   R0   R  t   j(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_grad_list  s    ) -c      
   C` s  xt  d  d d g f t  d d  d d g f t  d d d  d d g f t  d d d  d d d d d g f g D] \ } } t j | d |  j } |  j |  } | | } |  j g  | j d |  j d d d	 d } |   } |  j t j	 | | | j   qs Wd  S(
   Ni   i   i    i   i   RC   RQ   RR   RS   (
   R,   Ri   RĆ   RC   R6   RM   R   RG   Rl   R   (   RJ   RĖ   R   Ro   R`   RT   RŻ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_shape_list¦  s    4
*	c      	   C` s  d   } t  j | t d d d    t j d d d d d d g  t j d d	 g  f  t  j | t d d d   t d  d  d    t j d d g d d g d d g g  t j d d	 g g  f  t  j | d d  t j d d g d d g d d g g  t j d	  f  d  S(
   Nc          ` s     f d   } | S(   Nc         ` sX   |    | j    } t j j | |   } t j j | |  } | j    | j    } | S(   N(   RĒ   R>   R¤   RĘ   (   R  R
  t   costt
   cost_wrt_at
   cost_wrt_bt   grads(   R¼   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   just_numeric_args¶  s
    (    (   R¼   R-  (    (   R¼   sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt	   inc_sliceµ  s    i   i   i    i   i   g      @i	   g      "@(   RW   RŌ   R   R=   Ri   RĆ   (   RJ   R.  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt    test_grad_advanced_inc_subtensor“  s    	
7$'c         C` sÉ   |  j  t j d  j |  j   } t | d d d  d d d  f d  } |  j g  | g d |  j d d } |   } t j d  } d | d d d  d d d  f <t j	 | |  sÅ t
  d S(	   s7   
        Test increment and set with broadcast
        i	   i   Ni    RQ   RR   (   i	   i	   (   i	   i	   (   R6   Ri   Rj   R«   RC   R*   R=   RM   R8   R   R_   (   RJ   t   XR¬   RT   R  RØ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_inc_and_set_subtensorĪ  s    $+			"c   %      C` s  t  j j d t j    } g  } g  } g  } g  } g  } xt t f D]s} xjt t f D]\} xSd d d d f D]?}	 t |	  }
 t  j |	  } t  j	 | d
 |  j
 } | j |	  } g  t d t |	  d  D] } |	 | ^ qŌ } | d | d d g 7} x«| D]£} t |  } | j   } |  j d t g |
 d
 |  j
    } t j j d
 d  } | j |	 d  } | d k r¼t |  d k r¼| d d k r¼|	 d d k r¼d } n  | j t  j	 |	 d  | d | } | j d  } |  j d t g | d
 |  j
    } t |  t |	  k rdt |  d k sP| d d k rd| f | d } n  t  j | d
 d } | j d |  j |  j
  } | j |  } | rµt } n t } | | | | d | } | j   } xĆ t |  D]µ \ } } t |  t |	  k r| d d k rQ| d } | r>| | | <q|| | c | 7<q¢| rh| | | | <q¢| | c | | 7<qķ| r| | | <qķ| | c | 7<qķWt j | d t } | | | | g 7} | | | | g 7} | j |  | j |  | j | | |	 | f  t r
|  j | | | g | d | d |  j } | rY| j   } n  | | j   | |  }  t  j |  |  st  | s­| | k j   sŖt  q­q
q
Wqr WqY WqF Wt j  j! j" }! z@ t t j  j! _" |  j | | d t d |  j d t |  } Wd |! t j  j! _" X| |   }" t |"  t |  k sIt  xJ t# | |" |  D]6 \ }# }  }$ t  j |  |$  s\t |# |  |$ f   q\Wd S(   s2   
        Test advanced increment and set.
        t   seedi
   i   i   i   i   i   i   i   RC   i    i’’’’R   Rć   t   replacet   intt   sizeR  t   mutableRL   RQ   RR   N(   i
   (   i   i   (   i   i   i   (   i   i   i   i   (   i   ($   Ri   RŖ   t   RandomStateRW   t
   fetch_seedRU   Rø   R^   t   productR   RC   R   R   t   copyRD   R>   R¤   R   t   randintt   choiceR«   t   uniformR*   R)   t	   enumeratet   InR%  RM   R:   R   R_   R   R   t   warnt   gpu_set_subtensor1R   (%   RJ   t   rngt   all_inputs_vart   all_inputs_numt   all_outputs_vart   all_outputs_numt
   all_paramst   set_instead_of_incR  t
   data_shapet   data_n_dimst	   data_sizet   data_num_initR0   t
   inc_shapest	   inc_shapet
   inc_n_dimst   data_numt   data_vart   idx_vart   n_to_inct   idx_numt   inc_vart   inc_sizet   inc_numRQ   t   outputt	   data_copyR&  R   t   inc_num0RT   t   f_outt	   orig_warnt   f_outst   paramst
   output_num(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_advanced1_inc_and_setŽ  s²    -		
	"		
.	"c         C` s   t  d  } t j d d d g  } t j j |  } t j j d  } | | | f } | | | f } t j j	 | |  s t
  d  S(   NRŃ   i    i   i   R0   (   R   Ri   R’   R>   R¤   RÅ   R   R	   t   grapht   is_same_graphR_   (   RJ   RŃ   t   gvRį   R0   R½   t   s2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_adv_constant_argf  s    c         C` sZ  t  d  } t d  } t | d  d   | f d  } t | d  d   | f d  } t j | | g | | g  } t d d  } t d d d d	 d
 d  } | j   } | j   }	 | | |  \ }
 } x@ | D]8 } d | d  d   | f <|	 d  d   | f c d 7<qŅ Wt	 j
 |
 |  s2t |
 | f   t	 j
 | |	  sVt | |	 f   d  S(   NRŃ   R0   i    i   i   i   t   mint   maxi   R   (   i   (   R   R   R*   R)   R>   RM   R,   R-   R:  Ri   R   R_   (   RJ   RŃ   R0   t   m1t   m2RT   t   m_valt   i_valt   m1_reft   m2_reft   m1_valt   m2_valR   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_adv1_inc_sub_notlastdims  s     $c         C` s`  t  d  } t d  } t | d  d   | f d  } t | d  d   | f d  } t j | | g | | g  } t d d  } t d d d d	 d
 d  } | j   } | j   }	 | | |  \ }
 } xF | j	   D]8 } d | d  d   | f <|	 d  d   | f c d 7<qŲ Wt
 j |
 |  s8t |
 | f   t
 j | |	  s\t | |	 f   d  S(   NRŃ   R0   i    i   i   i   Rf  Rg  i   R   i   i   (   i   i   (   R   R   R*   R)   R>   RM   R,   R-   R:  t   ravelRi   R   R_   (   RJ   RŃ   R0   Rh  Ri  RT   Rj  Rk  Rl  Rm  Rn  Ro  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt"   test_adv1_inc_sub_notlastdim_2didx  s     $c         C` sŽ  t  d  } t d  t d  f } d d f } d d f } t j j } zt t j _ xot | | |  D][\ } } } | d  d   | f }	 t |	 t	 j
 |   }
 t |	 t	 j |   } t j | | g |
 | g  } t d d  } t d d	 d
 d d |  } | j   } | j   } | | |  \ } } xF | j   D]8 } d	 | d  d   | f <| d  d   | f c d 7<qAWt	 j | |  s”t | | f   t	 j | |  sj t | | f   qj WWd  | t j _ Xd  S(   NRŃ   R0   i   i   i   i   i   Rf  i    Rg  R   (   i   (   i   i   (   i   i   (   i   i   i   (   R   R   R   R   R@  t   inc_set_subtensor1RU   R   R*   Ri   t   zerosR)   Rj   R>   RM   R,   R-   R:  Rq  R   R_   (   RJ   RŃ   t   sym_it   shape_it	   shape_valR\  R0   t   shp_it   shp_vt   sub_mRh  Ri  RT   Rj  Rk  Rl  Rm  Rn  Ro  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt.   test_adv1_inc_sub_notlastdim_1_2dval_broadcast£  s.    " $,c         C` sŽ  t  d  } t d  t d  f } d d f } d d f } t j j } zt t j _ xot | | |  D][\ } } } | d  d   | f }	 t |	 t	 j
 |   }
 t |	 t	 j |   } t j | | g |
 | g  } t d d  } t d d d	 d d
 |  } | j   } | j   } | | |  \ } } xF | j   D]8 } d | d  d   | f <| d  d   | f c d 7<qAWt	 j | |  s”t | | f   t	 j | |  sj t | | f   qj WWd  | t j _ Xd  S(   NRŃ   R0   i   i   i   i   Rf  i    Rg  R   i   (   i   (   i   i   (   i   i   (   i   i   i   (   R   R   R   R   R@  Rs  RU   R   R*   Ri   Rt  R)   Rj   R>   RM   R,   R-   R:  Rq  R   R_   (   RJ   RŃ   Ru  Rv  Rw  R\  R0   Rx  Ry  Rz  Rh  Ri  RT   Rj  Rk  Rl  Rm  Rn  Ro  R   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt1   test_adv1_inc_sub_notlastdim_1_2dval_no_broadcastČ  s.    " $,c         C` sV   t  j   } t j | g | j d d d d t } | t j j d d d   d  S(	   Ni    t   axisi’’’’t   allow_input_downcasti   i   i   (   i   i   (	   R¤   R   R>   RM   t   takeRø   Ri   RŖ   t   normal(   RJ   R  RT   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt	   test_takeš  s    *N(P   t   __name__t
   __module__t   __doc__R¤   R   R#   R"   RŚ   R    R!   R=   R>   R   t   floatXRś   R   R   RI   RU   RM   RY   Rg   Rq   R~   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R”   R£   R©   RÆ   R·   RĮ   RŠ   RŲ   RŁ   Rā   Rå   Rč   Ré   Rģ   Rł   Rū   R/   R	  R  R  R  R  R  R  R  R  R!  R#  R'  R(  R/  R1  R`  Re  Rp  Rr  R{  R|  R  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR3   /   s   			
				
																							*				5						?										/									%	(t   TestIncSubtensor1c           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` sm   t  j j d t j    |  _ t j   |  _ t j	   |  _
 t j   |  _ t j   |  _ t j   |  _ d  S(   NR2  (   Ri   RŖ   R7  RW   R8  RB  R¤   R   R¼   R   Rš   R   RŃ   R   R`   R   t   adv1q(   RJ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRY   ś  s    c         ` s     j  t   f d    d  S(   Nc           ` s     j    j S(   N(   R¼   R  (    (   RJ   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢     s    (   R   Rę   (   RJ   (    (   RJ   sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_cant_adv_idx_into_scalar  s    c         C` s/   |  j  |  j } | j |  j  j k s+ t  d  S(   N(   Rš   R  RD   R_   (   RJ   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_index_into_vec_w_vec  s    c         C` s„   t  |  j |  j |  j |  j  } | j |  j j k s> t  t j |  j |  j g | d t } | d d d g d d g  } t j	 | d d d g  s” t  d  S(   NR~  gŁ?gĶĢĢĢĢĢģ?g¹?i   i   (
   R*   Rš   R  RD   R_   R>   RM   Rø   Ri   R   (   RJ   R  RT   t   aval(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_1d_set_adv_selection  s
    #$c         C` s„   t  |  j |  j |  j |  j  } | j |  j j k s> t  t j |  j |  j g | d t } | d d d g d d g  } t j	 | d d d g  s” t  d  S(	   NR~  gŁ?gĶĢĢĢĢĢģ?g¹?i   i   gĶĢĢĢĢĢü?gÉ?(
   R)   Rš   R  RD   R_   R>   RM   Rø   Ri   R   (   RJ   R  RT   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_1d_inc_adv_selection  s
    #$c         C` s   t  |  j |  j d  } | j |  j j k s4 t  t j |  j |  j g | d t } | d d d g d d g  } t j	 | d d d	 g  s t  d  S(
   Ng      @R~  gŁ?gĶĢĢĢĢĢģ?g¹?i   i   g333333@gĶĢĢĢĢĢ@(
   R)   Rš   R  RD   R_   R>   RM   Rø   Ri   R   (   RJ   R  RT   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt(   test_1d_inc_adv_selection_w_broadcasting  s
    $c         ` s     j  t   f d    d  S(   Nc           ` s   t    j   j t    S(   N(   R)   Rš   R  R   (    (   RJ   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢   )  s    (   R   Rę   (   RJ   (    (   RJ   sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt)   test_assigning_matrix_to_vector_selection'  s    	c         C` sõ   t  j   } |  j | } t | |  } t j |  j | g |  } |  j j d  } t j	 d d g d d g g  } | | |  } t
 j | d | d  t
 j | d | d d  t
 j | d | d d  t
 j | d | d d  d  S(   Ni   i
   i   i   i   i    (   i   i
   (   R¤   R   RŃ   R)   R>   RM   RB  t   random_sampleRi   R’   RW   Rä   (   RJ   R   R  t   a2RT   t   mvalt   idxvalt   a2val(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_matrix_idx+  s    !c         C` sī   t  j d g  } t  j   } t  j   } t |  j d  d   | f |  } t |  j d  d   | f |  } t j |  j | | g | | g  } |  j j	 d  } |  j j	 d  j
 t j  } | | | |  \ }	 }
 t j |	 |
  d  S(   Ni    i
   i   i   (   i
   i   (   i
   i   (   R¤   RÅ   t   colR   R)   RŃ   R>   RM   RB  R  R«   R   R  RW   Rä   (   RJ   R   t   c_inct   m_incRß   Rą   RT   R  t   incvalt   out1valt   out2val(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_inc_bcastableidx:  s    ""$(   R  R  RY   R  R  R  R  R  R  R  R  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR  ö  s   	
							t   TestAdvancedSubtensorc           B` sę   e  Z e j e j e j d e j j	 e
 d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` sq   | |  _  | |  _ | |  _ | d  k r< t j j j   } n  | |  _ | |  _ | |  _	 t
 t |   j |  d  S(   N(   R6   R7   R8   R=   R>   R?   R@   RA   RC   RE   RH   R  RI   (   RJ   RK   R6   R7   R8   R@   RC   RE   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRI   L  s    						c         C` sp   t    |  _ t   |  _ t   |  _ t   |  _ t   |  _	 t
   |  _ t
   |  _ t   |  _ t   |  _ d  S(   N(   R   R¼   R   Rš   R   RŃ   R   R`   R   t   ft4R   t   ix1t   ix12R   t   ix2R   t   ixr(   RJ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRY   ]  s    c         C` s   t  g  | d |  j } | j j j   } g  | D]! } t | j |  j  s1 | ^ q1 } t |  d k sp t	  t | d j |  j
  s t	  |   } | S(   NR@   i   i    (   R+   R@   RZ   R[   R\   R]   RQ   RE   R^   R_   R7   (   RJ   R`   RT   Rc   Rd   Re   Rf   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRg   i  s    !	c         ` s     j  t   f d    d  S(   Nc           ` s     j    j S(   N(   R¼   R  (    (   RJ   (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢   t  s    (   R   Rę   (   RJ   (    (   RJ   sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR  s  s    c         C` sD   |  j  |  j } | j |  j  j k s@ t | j |  j  j f   d  S(   N(   Rš   R  RD   R_   (   RJ   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR  v  s    c         C` st   |  j  |  j } | j |  j  j k s@ t | j |  j  j f   | j |  j j k sp t | j |  j j f   d  S(   N(   Rš   R   RC   R_   R   (   RJ   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_index_into_vec_w_matrixz  s    0c         C` sb   |  j  |  j } | j |  j  j k s@ t | j |  j  j f   | j t t t f k s^ t  d  S(   N(   RŃ   R”  RC   R_   R   Rø   RU   (   RJ   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_index_into_mat_w_row  s    0c         C` s  xūt  d d  d d g f t  d d d  d d g f t  d d d  d d d d d d d d g f t  d d d  d d d d d d d d d d d	 d
 g f t  d d d d  d d d d d d d d d d d	 d
 g f t  d d d  t j j d d d d d d d d g  f g D]å \ } } t j | d |  j } |  j |  } | d | f } |  j t	 | j
 j t j   |  j |  } t	 | t  rØ| d | f } n | d | j f } |  j | j | j d k  |  j t j | |  | | f  qWd  S(   Ni   i   i   i   i    i   i’’’’iž’’’iż’’’iü’’’RC   (   R,   R>   R¤   RÅ   Ri   RĆ   RC   R6   Rl   R]   Rt   RQ   R!   Rg   RŪ   RĖ   R„   R   (   RJ   RĖ   R   Ro   R`   RŻ   RĻ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_index_w_int_and_vec  s&    -'*:c         C` sĖ   |  j  |  j } t | |  } | j |  j  j k sO t | j |  j  j f   t j |  j  |  j g | d t d |  j } | d d d g d d g d d g g  } t	 j
 | d d	 d
 g  sĒ t  d  S(   NR~  R@   gŁ?gĶĢĢĢĢĢģ?g¹?i   i   i   g@g433333Ó?(   Rš   R   R)   RD   R_   R>   RM   Rø   R@   Ri   R   (   RJ   t   subtR  RT   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_inc_adv_subtensor_w_matrix¤  s    0!c         C` sŠ   |  j  d d  d   |  j d  d   f } t j |  j  |  j g | d |  j } t j j d	  j d  } t j d d g d d g g  } | | |  } | d d  d   | d  d   f } t	 j
 | |  d  S(
   Ni    R@   i   i   i   i   Rī   i   (   i   i   i   i   (   R  R   R>   RM   R@   Ri   RŖ   R«   RĆ   RW   Rä   (   RJ   R„  RT   t   ft4vt   ix2vR  t   rval(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt#   test_adv_subtensor_w_int_and_matrixÆ  s    ('!"c         C` sā   |  j  d  d   d  d  d   |  j d  d   f } t j |  j  |  j g | d |  j } t j j d	  j d  } t j	 d d g d d g g  } | | |  } | d  d   d  d  d   | d  d   f } t
 j | |  d  S(
   NR@   i   i   i   i   Rī   i    i   (   i   i   i   i   (   R  R=   R   R>   RM   R@   Ri   RŖ   R«   RĆ   RW   Rä   (   RJ   R„  RT   R§  RØ  R  R©  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt$   test_adv_subtensor_w_none_and_matrixø  s    1'!+c         C` sÜ   |  j  d  d   d d  |  j d  d   f } t j |  j  |  j g | d |  j } t j j d	  j d  } t j d d g d d g g  } | | |  } | d  d   d d  | d  d   f } t	 j
 | |  d  S(
   Ni    i   R@   i   i   i   i   Rī   (   i   i   i   i   (   R  R   R>   RM   R@   Ri   RŖ   R«   RĆ   RW   Rä   (   RJ   R„  RT   R§  RØ  R  R©  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt%   test_adv_subtensor_w_slice_and_matrixĮ  s    .'!(c         C` sŠ   |  j  d  d   d  d   |  j d f } t j |  j  |  j g | d |  j } t j j d	  j d  } t j d d g d d g g  } | | |  } | d  d   d  d   | d f } t	 j
 | |  d  S(
   Ni    R@   i   i   i   i   Rī   i   (   i   i   i   i   (   R  R   R>   RM   R@   Ri   RŖ   R«   RĆ   RW   Rä   (   RJ   R„  RT   R§  RØ  R  R©  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt#   test_adv_subtensor_w_matrix_and_intŹ  s    ('!"c         C` sā   |  j  d  d   d  d   |  j d  d  d   f } t j |  j  |  j g | d |  j } t j j d	  j d  } t j	 d d g d d g g  } | | |  } | d  d   d  d   | d  d  d   f } t
 j | |  d  S(
   NR@   i   i   i   i   Rī   i    i   (   i   i   i   i   (   R  R   R=   R>   RM   R@   Ri   RŖ   R«   RĆ   RW   Rä   (   RJ   R„  RT   R§  RØ  R  R©  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt$   test_adv_subtensor_w_matrix_and_noneÓ  s    1'!+c         C` s@  t  j s t d   n  |  j |  j |  j f } t | |  } t j |  j j	 j
 |  j j	 j  } | j	 | k s t | j	 | f   t j |  j |  j |  j g | d t } | d d d g d d d g d	 d
 d g g d d d g d d d g  } t j | d d d g d d d g d	 d d g g  s<t |   d  S(   Ns   config.cxx emptyR~  gŁ?gĶĢĢĢĢĢģ?g¹?i   i   i   g      ą?g333333Ó?g333333Ć?i   i   i    i   i   g333333ć?(   R   t   cxxR   RŃ   R  R  R)   R¤   Rś   RD   RC   R   R   R_   R>   RM   Rø   Ri   R   (   RJ   R„  R  t   typRT   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_inc_adv_subtensor_w_2vecÜ  s"    	$$!		c         C` sw  t  j s t d   n  t   } t |  j |  j |  j f |  } t j	 | j
   |  } | j |  j j k s t | j |  j j f   t j |  j |  j |  j | g | | g d t } | d d d g d d d g d	 d
 d g g d d d g d d d g d  \ } } t j | d d d g d d d d g d	 d d g g  sUt |   t j | d  sst |   d  S(   Ns   config.cxx emptyR~  gŁ?gĶĢĢĢĢĢģ?g¹?i   i   i   g      ą?g333333Ó?g333333Ć?i   i   i    gĶĢĢĢĢĢ @g      @gĶĢĢĢĢĢ@g333333@(   R   RÆ  R   R   R)   RŃ   R  R  R¤   RĘ   RĒ   RD   R_   R>   RM   Rø   Ri   R   (   RJ   t   incR  t   g_incRT   R  RĪ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt(   test_inc_adv_subtensor_with_broadcastingń  s&    		"0*		!c         C` sd  t  j s t d   n  t   } t |  j |  j |  } t j | j	   |  } | j
 |  j j
 k s t | j
 |  j j
 f   t j |  j |  j | g | | g d t } | d d d g d d d g d	 d
 d g g d d d g d  \ } } t j | d d d d d d g d d d g d	 d
 d g g  sBt |   t j | d  s`t |   d  S(   Ns   config.cxx emptyR~  gŁ?gĶĢĢĢĢĢģ?g¹?i   i   i   g      ą?g333333Ó?g333333Ć?i    i   gĶĢĢĢĢĢ @i   g      "@gĶĢĢĢĢĢ@gĶĢĢĢĢĢ@gĶĢĢĢĢĢ@gffffff@g333333 @g333333"@(   R   RÆ  R   R   R)   RŃ   R  R¤   RĘ   RĒ   RD   R_   R>   RM   Rø   Ri   R   (   RJ   R²  R  R³  RT   R  RĪ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt)   test_inc_adv_subtensor1_with_broadcasting  s$    		0$		!c         C` s9  t  j s t d   n  t |  j |  j |  j f d  } | j |  j j k sj t | j |  j j f   t	 j
 |  j |  j |  j g | d t } | d d d g d d d	 g d
 d d g g d d d g d d d g d d d g g  } t j | d d d d d g d d d	 g d
 d d g g  s5t |   d  S(   Ns   config.cxx emptygĶĢĢĢĢĢ @R~  gŁ?gĶĢĢĢĢĢģ?g¹?i   i   i   g      ą?g333333Ó?g333333Ć?i    i   i   gĶĢĢĢĢĢ@gĶĢĢĢĢĢ@g333333@g      @(   R   RÆ  R   R)   RŃ   R  R   RD   R_   R>   RM   Rø   Ri   R   (   RJ   R  RT   R  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt.   test_inc_adv_subtensor_with_index_broadcasting  s     	"0!		c         C` s  t  j j t j    } | j d d  } t j |  } t j	   } t j	   } | | | g d  d   f } t j
 | | g |  } | d d  | d d g d  d   f k } |  j | j    | j d d  }	 t j |	  }
 t j	   } |
 | | | g d  d   | |  f } t j
 | | | g |  } | d d d  |	 d d d g d  d   d d  f k } |  j | j    d  S(	   NR5  i   i    i   i   i   (   i   i   (   i   i   i   (   Ri   RŖ   R7  RW   RX   R=  R>   R6   R¤   R   RM   Rl   R   (   RJ   RB  R  R
  R0   R&  RĢ   t   f1t   cmdt   aat   bbt   kt   f2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_advanced_indexing2  s     +(:c   
      C` sH  t  j d  } t j d	 t j  } xe t d  D]W } xN t d  D]@ } x7 t d  D]) } d | d | | | | | | f <qW WqD Wq1 Wt j d
 d  } d | d <d | d <t j | j d  d  d   t j	 f } t j | j d  t j	 d  d   f } | | | | f j
 i | | 6 }	 t j |	 | | | | f  d  S(   NR0  i   i   id   i
   RĀ   i   i    (   i   i   i   (   i   i   (   i    i   (   i   i   (   R¤   t   tensor3Ri   Rt  R   R  R$  R   R   R±   R¦   RW   Rä   (
   RJ   R0  t   xxR0   R&  R»  t   b_idxt   r_idxt   c_idxR  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_adv_sub_3dF  s    /

))#c         C` sW  t  j d
 d |  j } |  j | d d t t f } t j   } t j   } | | | f } |  j t	 | j
 j t j   t j d   t  j j d d  j |  j  g  d   } t j | t  j j d d  j |  j  t  j j d  j |  j  g  d	   } t j | t  j j d d  j |  j  t  j j d  j |  j  g  d  S(   Ni   i   RC   i   R   c         S` s   |  d d g d d g f S(   Ni   i   i   i   (    (   RŃ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR¢   b  s    c         S` s   t  |  | d d g d d g  S(   Ni   i   i   i   (   R$   (   R§   R¬   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRķ   e  s    i   c         S` s   t  |  | d d g d d g  S(   Ni   i   i   i   (   R&   (   R§   R¬   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRķ   j  s    (   i   i   (   Ri   Rj   RC   R6   Rø   RU   R¤   R   Rl   R]   Rt   RQ   R!   RW   RŌ   RŖ   R,   R«   (   RJ   Rj   Ro   R   t   idx2R`   Rķ   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt	   test_gradZ  s    %	'"	'N(    R  R  R¤   R   R!   R   R=   R>   R   R  R   RI   RY   Rg   R  R  R¢  R£  R¤  R¦  RŖ  R«  R¬  R­  R®  R±  R“  Rµ  R¶  R½  RĆ  RÅ  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyR  I  s4   			
																						t   TestInferShapec           B` s&   e  Z e d   d    Z d   Z RS(   Rü   c      
   C` sÅ	  t    } t    } t   } t   } t d d  } |  j | | g t | d d !|  g | d d d d g g g t  |  j | | g t | d |  g | d d d d g g t  |  j | | g t | d |  g | d g t  |  j | | g t | d d  d f |  g | d g t  |  j | | g t | d d !|  g | d d d d g g g t  |  j | | g t | d |  g | d d d d g g t  |  j | | g t | d |  g | d g t  |  j | | g t | d d  d f |  g | d g t  t   } t   } t d d d d  } |  j | | g t | d  d  d   d d  d  d  d   d  d  d   f |  g | d d d d d g g g g g t d t
 |  j | | g t | d d d  d d  d  d   f |  g | d d d d d g g g t  |  j | | g t | d d d  d  d   d f |  g | d d g g t  |  j | | g t | d d  d d  d  d   d d  f |  g | d g t  |  j | | g t | d  d  d   d d  d  d  d   d  d  d   f |  g | d d d d d g g g g g t d t
 |  j | | g t | d d d  d d  d  d   f |  g | d d d d d g g g t  |  j | | g t | d d d  d  d   d f |  g | d d g g t  |  j | | g t | d d  d d  d  d   d d  f |  g | d g t  t    } t    } t   } t   } t d d  } d d g }	 |  j | | g t | |	 |  g | d d d d g g g t  d d d g }	 |  j | | g t | |	 |  g | d d d d g g t  d d d g }	 |  j | | g t | |	 |  g | d g t  t   } t d d d d  } d d g }	 |  j | | g t | |	 |  g | d d d d d g g g g g t d t
 d d d g }	 |  j | | g t | |	 |  g | d d d d d g g t  d d d g }	 |  j | | g t | |	 |  g | d g t  d d g }	 |  j | | g t | |	 |  g | d d d d g d d d	 d
 g g g t  d d d g }	 |  j | | g t | |	 |  g | d d d d g g t  d d d g }	 |  j | | g t | |	 |  g | d g t  t   } t d d d d  } d d g }	 |  j | | g t | |	 |  g | d d d d d g g g d d	 d
 d d g g g g g t d t
 d d d g }	 |  j | | g t | |	 |  g | d d d d d g g t  d d d g }	 |  j | | g t | |	 |  g | d g t  d d d g }	 d d d g }
 d d d g } |  j | | g t | |	 |
 f |  g | | g t  d  S(   Ni   i   i   i   i   R@  i    i   i   i   i	   i
   i   i   i   (   i   i   (   i   i   (   R   R   R   R,   t   _compile_and_checkR)   R"   R*   R   R=   RU   R    R   (   RJ   t   admatt   bdmatt   advect   adscalt	   admat_valt   adtens4t   bdtens4t   adtens4_valt	   aivec_valt	   bivec_valt	   advec_val(    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_infer_shapeq  s   						@'."(4@'."(4					!	'		c         C` s÷   t    } t   } t   } t d d  } d d d g } d d d g } |  j | | | g | | | f g | | | g t  |  j | | g | | d d  f g | | g t d t |  j | | g | d d  | f g | | g t d t d  S(   Ni   i   i   i   i   i    t
   check_topo(   R   R   R,   RĒ  R!   RU   (   RJ   RČ  t   aivect   bivecRĢ  RŠ  RŃ  (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   test_adv_sub  s"    			(   R  R  R/   RÓ  R×  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyRĘ  p  s   ¤(P   t
   __future__R    R   R   Ru   R   t   unittestRi   t   nose.plugins.skipR   t
   nose.toolsR   t   numpy.testingR   t   sixR   t	   six.movesR   R>   t   theano.scalart   scalarRÄ   t   theano.tensorR¤   R   R	   t   theano.compatR
   R   t   theano.compileR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   theano.tensor.basicR   t   theano.tensor.subtensorR   R    R!   R"   R#   R$   R%   R&   R'   R(   R)   R*   t   theano.tensor.tests.test_basicR+   R,   R-   t   theano.testsR.   RW   t   theano.tests.unittest_toolsR/   R1   t   TestCaset   TestOptimizationMixinR3   R  R  t   InferShapeTesterRĘ  (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/tensor/tests/test_subtensor.pyt   <module>   sB   pR
	’ ’ ’ ’ ĖS’ (