ó
àÆ÷Xc           @` s  d  d l  m Z m Z m Z d  d l m Z d  d l 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 e j j e f e e d e ƒf g ƒ Z d e j f d „  ƒ  YZ d S(   i    (   t   absolute_importt   print_functiont   division(   t   partialN(   t   configt   shared(   t   DisconnectedType(   t   NullType(   t   function(   t   tensor(   t   RandomStreams(   t   OpFromGraph(   t   unittest_toolst   inlinet   T_OpFromGraphc           B` s¶   e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z d „  Z RS(   c         C` s-  t  j d ƒ \ } } } | | | } | | | | g | g ƒ } | | | | ƒ | | | | ƒ } t | | | g | ƒ } t j d d t j ƒ}	 t j d d t j ƒd }
 t j d	 d t j ƒd } | |	 |
 | ƒ t j d | |	 |
 | ƒ k ƒ st ‚ t j d | |	 |
 | ƒ k ƒ s)t ‚ d  S(
   Nt   xyzi   t   dtypei   i   g       @(   i   i   (   i   i   (   i   i   (	   t   Tt   matricesR   t   npt   onesR   t   floatXt   allt   AssertionError(   t   selft   cls_ofgt   xt   yt   zt   et   opt   ft   fnt   xvt   yvt   zv(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_straightforward   s    "'c         C` sJ  t  j d ƒ \ } } } t  j | | ƒ } | | | g | g ƒ } | | | | | ƒ ƒ } t | | | g | ƒ } t j d d t j ƒ}	 t j d	 d t j ƒd }
 t j d
 d t j ƒd } | |	 |
 | ƒ } | j d k sé t	 ‚ t j
 d | k ƒ st	 ‚ | |	 |
 | ƒ } | j d k s+t	 ‚ t j
 d | k ƒ sFt	 ‚ d  S(   NR   i   i   R   i   i   g     €f@(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   t   dotR   R   R   R   R   t   shapeR   R   (   R   R   R   R   R   R   R   R   R    R!   R"   R#   t   res(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_size_changes*   s    c         C` s  t  j d ƒ \ } } } | | | } | | | | g | g ƒ } | | | | ƒ } | t  j t  j | ƒ | ƒ } t | | | g | ƒ } t j d d t j ƒ}	 t j d d t j ƒd }
 t j d	 d t j ƒd } t j	 d | |	 |
 | ƒ k ƒ st
 ‚ d  S(
   NR   i   R   i   i   g      &@(   i   i   (   i   i   (   i   i   (   R   R   t   gradt   sumR   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/compile/tests/test_builders.pyt	   test_grad;   s    c         C` s!  t  j d ƒ \ } } } | | | } | | | | g | g ƒ } | | | | ƒ } | t  j t  j | ƒ | ƒ } | t  j t  j | ƒ | ƒ } t | | | g | ƒ } t j d d t j ƒ}	 t j d d t j ƒd }
 t j d	 d t j ƒd } t j	 d | |	 |
 | ƒ ƒ st
 ‚ d  S(
   NR   i   R   i   i   g      @(   i   i   (   i   i   (   i   i   (   R   R   R)   R*   R   R   R   R   R   t   allcloseR   (   R   R   R   R   R   R   R   R   R    R!   R"   R#   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_grad_gradH   s    c         C` sB  t  j d ƒ \ } } } t t j j d d ƒ j t j ƒ ƒ } | | | | } | | | | g | g ƒ } | | | | ƒ | | | | ƒ } t	 | | | g | ƒ }	 t j
 d d t j ƒ}
 t j
 d d t j ƒd } t j
 d	 d t j ƒd } t j d |	 |
 | | ƒ ƒ st ‚ t j d |	 |
 | | ƒ ƒ s>t ‚ d  S(
   NR   i   R   i   i   g       @(   i   i   (   i   i   (   i   i   (   R   R   R   R   t   randomt   randt   astypeR   R   R   R   R,   R   (   R   R   R   R   R   t   sR   R   R   R    R!   R"   R#   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_sharedV   s    '"$c         C` s®  t  j d ƒ \ } } } t t j j d d ƒ j t j ƒ ƒ } | | | | } | | | | g | g ƒ } | | | | ƒ } | t  j	 t  j
 | ƒ | ƒ } t | | | g | ƒ }	 t j d d t j ƒ}
 t j d	 d t j ƒd } t j d
 d t j ƒd } t j d | j ƒ  |	 |
 | | ƒ ƒ s3t ‚ | | | | ƒ } | t  j	 t  j
 | ƒ | ƒ } t | | | g | ƒ }	 t j d | j ƒ  |	 |
 | | ƒ ƒ sªt ‚ d  S(   NR   i   R   i   i   g      &@g      .@(   i   i   (   i   i   (   i   i   (   R   R   R   R   R.   R/   R0   R   R   R)   R*   R   R   R,   t	   get_valueR   (   R   R   R   R   R   R1   R   R   R   R    R!   R"   R#   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_shared_gradh   s     '.c   &   	   C` s]  t  j d ƒ \ } } d „  } t  j d ƒ } | | | | g | | | g | g ƒ ƒ } | | | g | | g d | ƒ} | | | g | | g d | ƒ} t  j d ƒ t  j d ƒ }	 }
 xî | | g D]à } t  j | |	 |
 ƒ ƒ } t  j | |	 |
 g ƒ \ } } t |	 |
 g | | g ƒ } t j j d ƒ j	 t
 j ƒ } t j j d ƒ j	 t
 j ƒ } | | | ƒ \ } } t j | d | ƒ s‹t ‚ t j | d	 | ƒ sÇ t ‚ qÇ Wd
 „  } d „  } t  j d ƒ \ } } | | | | g | | | g d | | d g ƒ} t  j d ƒ t  j d ƒ t  j d ƒ }	 } } t  j | |	 | | ƒ ƒ } t  j | |	 | | g ƒ \ } } } t |	 | | g | | | g ƒ } t j j d ƒ j	 t
 j ƒ } t j j d ƒ j	 t
 j ƒ } t j j d ƒ j	 t
 j ƒ } | | | | ƒ \ } } }  t j | d | ƒ s$t ‚ t j | d	 | ƒ s@t ‚ t j t j d d t
 j ƒ|  ƒ sjt ‚ | | | | g | | | g d | t ƒ  ƒ  t ƒ  ƒ  g ƒ}! t  j |! |	 | | ƒ ƒ }" t  j |" |	 | | g d d d d d d ƒ\ }# }$ }% t |# j t  j ƒ st ‚ |# j d k s)t ‚ t |$ j t ƒ sAt ‚ t |% j t ƒ sYt ‚ d  S(   Nt   xyc         S` s/   |  \ } } | \ } | | d | | d g S(   Ni   g      ø?(    (   t   inpst   gsR   R   t   g(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   go   s    	t   dedzt   grad_overridest   xxt   yyi   i   g      ø?c         S` s%   |  \ } } } | d } | | d S(   Ni    i   (    (   R6   R7   R   t   wt   bR8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   go1™   s    
c         S` s%   |  \ } } } | d } | | d S(   Ni    g      ø?(    (   R6   R7   R   R>   R?   R8   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   go2ž   s    
t   wbt   defaultt   bbR   t   return_disconnectedt   Disconnectedt   disconnected_inputst   ignoret   null_gradientst   returni   (   R   t   vectorst   vectorR*   R)   R   R   R.   R/   R0   R   R   R,   R   R   R   R   t
   isinstancet   typet
   TensorTypet   ndim(&   R   R   R   R   R9   R:   t   op_mul_gradt   op_mult   op_mul2R<   R=   R   t   zzt   dxt   dyR    R!   R"   t   dxvt   dyvR@   RA   R>   R?   t	   op_lineart   wwRD   t   dwt   dbt   wvt   bvt   dwvt   dbvt
   op_linear2t   zz2t   dx2t   dw2t   db2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_grad_override}   sX    	*"" 		2/$!*c         C` s?  t  j ƒ  } t  j ƒ  } t  j | | ƒ } | | | g | g ƒ } t  j ƒ  } t  j ƒ  } | | | ƒ } t  j ƒ  }	 t  j | | |	 ƒ }
 t | | |	 g |
 ƒ } t j j d ƒ j	 t
 j ƒ } t j j d d ƒ j	 t
 j ƒ } t j j d ƒ j	 t
 j ƒ } t j | | ƒ } | | | | ƒ } t j | | ƒ s;t ‚ d  S(   Ni   (   R   RL   t   matrixR%   t   RopR   R   R.   R/   R0   R   R   R,   R   (   R   R   t   at   MR?   t	   op_matmulR   t   WR   t   dut   dvR    t   xvalt   Wvalt   duvalt   dvvalt   dvval2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_ropÁ   s     !c         C` s´  t  j d ƒ \ } } d „  } t  j d ƒ \ } } | | | | | g | | | g | | g ƒ ƒ } | | | g | | g d | ƒ} | | | g | | g d | ƒ}	 t  j d ƒ t  j d ƒ }
 } t  j d ƒ t  j d ƒ } } xÈ | |	 g D]º } | |
 | ƒ } t  j | |
 | g | | g ƒ } t |
 | | | g | ƒ } t j j d	 d
 ƒ j t	 j
 ƒ } | | Œ  } t j | | d | d d | d | d d ƒ sò t ‚ qò Wd  S(   NR5   c         S` s3   |  \ } } | \ } } | | d | | d g S(   Ng       @g      ø?(    (   R6   t   eptsR   R   t   ut   v(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   roØ   s    t   uvt   rop_overridesR<   R=   Rm   Rn   i   i    i    i   g      ø?i   i   g       @(   R   RK   RL   Rh   R   R   R.   R/   R0   R   R   R,   R   (   R   R   R   R   Rx   Rv   Rw   t
   op_mul_ropRR   RS   R<   R=   Rm   Rn   R   RT   R[   R    t   valst   dwval(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_rop_overrideÔ   s     	0""!!c         C` sB  t  j d ƒ \ } } | | | | } } | | | g | | g ƒ } | | | g | d | d g ƒ } t  j d ƒ t  j d ƒ } }	 | | | |	 ƒ Œ  \ }
 } t | |	 g |
 | g ƒ } t j j d ƒ j t j	 ƒ } t j j d ƒ j t j	 ƒ } | | | ƒ \ } } t j
 | | ƒ s&t ‚ t j
 | | ƒ s>t ‚ d  S(   NR5   i   R<   R=   i   (   R   RK   RL   R   R   R.   R/   R0   R   R   R,   R   (   R   R   R   R   Rv   Rw   t   op_ftt   op_iftR<   R=   t   xx2t   yy2R    R!   R"   t   xv2t   yv2(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_nestedð   s    #c         C` s  t  j d ƒ \ } } } | | } | | } | | | | g | | g ƒ } | j d  ƒ } t t g t t g t t g g }	 | |	 k sŒ t ‚ t  j d ƒ \ }
 } } } | |
 | | ƒ \ } } | | | | ƒ \ } } | |
 | | | g | | g ƒ } | j d  ƒ } t t g t t g t t g t t g g }	 | |	 k sCt ‚ t d d ƒ } | j d ƒ } t  j d ƒ \ } } | | } | d } d | } | | | g | | | g ƒ } | j d  ƒ } t t t g t t t g t t t g g }	 | |	 k sýt ‚ d  S(	   NR   t   mnpqt   seediê   i   R5   i   (   i   i   (	   R   R   t   connection_patternt   Nonet   Truet   FalseR   R
   t   uniform(   R   R   R   R   R   t   out1t   out2t   op1t   resultst   expect_resultt   mt   nt   pt   qt   o1t   o2t   op2t   srngt   rv_ut   out3t   op3(    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_connection_pattern  s>    

		!			


c         C` sÊ   t  j d ƒ } t  j d ƒ } | | } | | } t | | g | | g ƒ } t  j d ƒ } t  j d ƒ } |  j | | g | | | ƒ t j d d g d t j ƒt j d d g d t j ƒg t ƒ d  S(   NR   R   R•   R”   i   i   R   (   R   Rg   R   t   _compile_and_checkR   R   R   R   (   R   R   R   R–   R—   t   op_graphR•   R”   (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   test_infer_shape,  s    

(   t   __name__t
   __module__t   test_paramsR$   R(   R+   R-   R2   R4   Rf   Rt   R~   R…   R   R    (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyR      s   D+(   t
   __future__R    R   R   t	   functoolsR   t   numpyR   t   theanoR   R   t   theano.gradientR   t   theano.gof.null_typeR   t   theano.compileR   R	   R   t"   theano.tensor.shared_randomstreamsR
   t   theano.compile.buildersR   t   theano.testsR   t   parameterizedt   expandRŠ   R£   t   InferShapeTesterR   (    (    (    sB   /tmp/pip-build-X4mzal/theano/theano/compile/tests/test_builders.pyt   <module>   s   	!