
Xc           @   s   d  Z  d d l Z d d l m Z d d l 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
 d d e d d  Z i  d d d d d e d  Z d   Z d S(   s&   Utilities related to Keras unit tests.iN(   t   assert_allclosei   (   t   Modelt   Input(   t
   Sequential(   t   model_from_json(   t   backendi  i  i
   c         C   sW  |  | } | r t  j j d | d | f } t  j | f |  } x t |  D]/ }	 t  j j d | |	 d d d |  | |	 <qQ Wn t  j j | f  }
 t  j | f |  } t  j | f |  } xf t |  D]X }	 t  j j d |
 |	 d d d |  | |	 <t  j j d |
 |	 d d d |  | |	 <q W| |   | |   f | |  | |  f f S(   s   Generates test data to train a model on.

    classification=True overrides output_shape
    (i.e. output_shape is set to (1,)) and the output
    consists in integers in [0, num_class-1].

    Otherwise: float output with shape output_shape.
    i    t   sizet   loct   scalegffffff?(   t   npt   randomt   randintt   zerost   ranget   normal(   t	   num_traint   num_testt   input_shapet   output_shapet   classificationt   num_classest   samplest   yt   Xt   it   y_loc(    (    s5   /tmp/pip-build-isqEY4/keras/keras/utils/test_utils.pyt   get_test_data   s    
0)-c         C   s  | d k r | s t  | s- t j   } n  t |  } xB t |  D]4 \ }	 }
 |
 d k rF t j j d d  | |	 <qF qF Wd t j j |  } | j	 |  } n0 | d k r | j
 } n  | d k r | j } n  | d k r | } n  |  |   } | j   } | j |  d t j |  j  k rA| | d <|  |   } n  | r_t d | d |  } n t d | d d |  } | |  } t j |  | k st  t | |  } | j |  } | j |  } | j
 } x> t | |  D]- \ } } | d k	 r| | k st  qqW| d k	 r8t | | d d	 n  | j   } t j |  } | j r| j   } | j |  | j |  } t | | d d	 n  | j d
 d  | j | |  | j   } | | d <| j j |  } t   } | j |  | j |  } | j
 } x> t | |  D]- \ } } | d k	 r | | k sMt  q q W| d k	 rst | | d d	 n  | j   } t j |  } | j r| j   } | j |  | j |  } t | | d d	 n  | j d
 d  | j | |  | S(   sV   Test routine for a layer with a single input tensor
    and single output tensor.
    i   i   i
   t   weightst   batch_shapet   dtypet   shapet   rtolgMbP?t   rmspropt   mset   batch_input_shapeN(   t   Nonet   AssertionErrort   Kt   floatxt   listt	   enumerateR	   R
   R   t   astypeR   R   t   get_weightst   set_weightst   inspectt
   getargspect   __init__R   R   t   compute_output_shapet   predictt   zipR    t
   get_configt   from_configR   t   compilet   train_on_batcht	   __class__R   t   add(   t	   layer_clst   kwargsR   t   input_dtypet
   input_datat   expected_outputt   expected_output_dtypet   fixed_batch_sizet   input_data_shapeR   t   et   layerR   t   xR   t   modelt   expected_output_shapet   actual_outputt   actual_output_shapet   expected_dimt
   actual_dimt   model_configt   recovered_modelt   _outputt   layer_config(    (    s5   /tmp/pip-build-isqEY4/keras/keras/utils/test_utils.pyt
   layer_test)   s     	
			
				c            s"   t  j      f d    } | S(   s   Function wrapper to clean up after TensorFlow tests.

    # Arguments
        func: test function to clean up after.

    # Returns
        A function wrapping the input function.
    c             s2     |  |   } t  j   d k r. t  j   n  | S(   Nt
   tensorflow(   R%   R   t   clear_session(   t   argsR9   t   output(   t   func(    s5   /tmp/pip-build-isqEY4/keras/keras/utils/test_utils.pyt   wrapper   s    (   t   sixt   wraps(   RR   RS   (    (   RR   s5   /tmp/pip-build-isqEY4/keras/keras/utils/test_utils.pyt
   keras_test   s    	(   i
   (   i   (   t   __doc__t   numpyR	   t   numpy.testingR    R,   RT   t   engineR   R   t   modelsR   R   t    R   R%   t   TrueR   R#   t   FalseRM   RV   (    (    (    s5   /tmp/pip-build-isqEY4/keras/keras/utils/test_utils.pyt   <module>   s   		e