ó
¾÷Xc           @   sŽ   d  Z  d d l Z y d d l Z Wn; e k
 r_ y d d l Z Wq` e k
 r[ d Z q` Xn Xd „  Z e e d „ Z	 d e e d „ Z
 d S(   s)   Utilities related to model visualization.iÿÿÿÿNc           C   s%   t  o t  j ƒ  s! t d ƒ ‚ n  d  S(   NsU   Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.(   t   pydott   find_graphvizt   ImportError(    (    (    s4   /tmp/pip-build-isqEY4/keras/keras/utils/vis_utils.pyt   _check_pydot   s    c         C   sÑ  d d l  m } d d l m } t ƒ  t j ƒ  } | j d d ƒ | j d t ƒ | j	 d d ƒ t
 |  | ƒ r” |  j sˆ |  j ƒ  n  |  j }  n  |  j } xp| D]h} t t | ƒ ƒ } | j }	 | j j }
 t
 | | ƒ rd	 j |	 | j j ƒ }	 | j j j } d	 j |
 | ƒ }
 n  | r7d
 j |	 |
 ƒ } n |
 } | rêy t | j ƒ } Wn t k
 rod } n Xt | d ƒ r‘t | j ƒ } nC t | d ƒ rÎd j g  | j D] } t | ƒ ^ q°ƒ } n d } d | | | f } n  t j | d | ƒ} | j | ƒ q¤ Wxº | D]² } t t | ƒ ƒ } x— t | j ƒ D]† \ } } | j d t | ƒ } | |  j  k r?xQ | j! D]C } t t | ƒ ƒ } t t | ƒ ƒ } | j" t j# | | ƒ ƒ q{Wq?q?WqW| S(   s#  Converts a Keras model to dot format.

    # Arguments
        model: A Keras model instance.
        show_shapes: whether to display shape information.
        show_layer_names: whether to display layer names.

    # Returns
        A `pydot.Dot` instance representing the Keras model.
    i   (   t   Wrapper(   t
   Sequentialt   rankdirt   TBt   concentratet   shapet   records   {}({})s   {}: {}t   multiplet   input_shapet   input_shapess   , s    %s
|{input:|output:}|{{%s}|{%s}}t   labels   _ib-($   t   layers.wrappersR   t   modelsR   R   R    t   Dott   sett   Truet   set_node_defaultst
   isinstancet   builtt   buildt   modelt   layerst   strt   idt   namet	   __class__t   __name__t   formatt   layert   output_shapet   AttributeErrort   hasattrR   t   joinR   t   Nodet   add_nodet	   enumeratet   inbound_nodest   container_nodest   inbound_layerst   add_edget   Edge(   R   t   show_shapest   show_layer_namesR   R   t   dotR   R    t   layer_idt
   layer_namet
   class_namet   child_class_nameR   t   outputlabelst   inputlabelst   ishapet   nodet   it   node_keyt   inbound_layert   inbound_layer_id(    (    s4   /tmp/pip-build-isqEY4/keras/keras/utils/vis_utils.pyt   model_to_dot   s^    			
((s	   model.pngc         C   sZ   t  |  | | ƒ } t j j | ƒ \ } } | s9 d } n
 | d } | j | d | ƒd  S(   Nt   pngi   R   (   R<   t   ost   patht   splitextt   write(   R   t   to_fileR-   R.   R/   t   _t	   extension(    (    s4   /tmp/pip-build-isqEY4/keras/keras/utils/vis_utils.pyt
   plot_model`   s    	
(   t   __doc__R>   t   pydot_ngR    R   t   NoneR   t   FalseR   R<   RE   (    (    (    s4   /tmp/pip-build-isqEY4/keras/keras/utils/vis_utils.pyt   <module>   s   	L