ó
±éRc           @  s	  d  Z  d d l 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 Z y d d l Z Wn e k
 r« e d ƒ ‚ n Xd 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 d d l m Z d d	 l m Z d d
 l m Z d „  Z d e j f d „  ƒ  YZ  e  ƒ  Z! d „  Z" d „  Z# d e j$ f d „  ƒ  YZ% d e j& f d „  ƒ  YZ' d e j( f d „  ƒ  YZ) d e j* f d „  ƒ  YZ+ d e j, j- f d „  ƒ  YZ. d S(   s8   
Displays Agg images in the browser, with interactivity
iÿÿÿÿ(   t   divisiont   print_functionNs$   The WebAgg backend requires Tornado.(   t   rcParams(   t   Figure(   t   backend_agg(   t   backend_bases(   t   Gcf(   t   _pngc          C  s;   t  j ƒ  r7 t j ƒ  }  |  d k	 r7 |  j j ƒ  q7 n  d S(   s5   
    Is called after every pylab drawing command
    N(   t
   matplotlibt   is_interactiveR   t
   get_activet   Nonet   canvast	   draw_idle(   t
   figManager(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   draw_if_interactive"   s    t   Showc           B  s   e  Z d  „  Z RS(   c         C  so   t  j ƒ  d j d t  j d t  j ƒ } t d rN d d  l } | j | ƒ n t d j | ƒ ƒ t  j	 ƒ  d  S(   Ns   http://127.0.0.1:{port}{prefix}t   portt   prefixs   webagg.open_in_browseriÿÿÿÿs   To view figure, visit {0}(
   t   WebAggApplicationt
   initializet   formatR   t
   url_prefixR   t
   webbrowsert   opent   printt   start(   t   selft   urlR   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   mainloop-   s    
		
(   t   __name__t
   __module__R   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR   ,   s   c         O  s.   | j  d t ƒ } | | | Ž  } t |  | ƒ S(   s.   
    Create a new figure manager instance
    t   FigureClass(   t   popR   t   new_figure_manager_given_figure(   t   numt   argst   kwargsR    t   thisFig(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   new_figure_manager?   s    c         C  s   t  | ƒ } t | |  ƒ } | S(   sD   
    Create a new figure manager instance for the given figure.
    (   t   FigureCanvasWebAggt   FigureManagerWebAgg(   R#   t   figureR   t   manager(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR"   H   s    t   TimerTornadoc           B  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C  s~   |  j  ƒ  |  j rO t j j j ƒ  } | j t j d |  j	 ƒ |  j
 ƒ |  _ n t j j |  j
 |  j	 ƒ |  _ |  j j ƒ  d  S(   Nt   milliseconds(   t   _timer_stopt   _singlet   tornadot   ioloopt   IOLoopt   instancet   add_timeoutt   datetimet	   timedeltat   intervalt	   _on_timert   _timert   PeriodicCallbackR   (   R   R1   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   _timer_startR   s    
		c         C  s,   |  j  d  k	 r( |  j  j ƒ  d  |  _  n  d  S(   N(   R9   R   t   stop(   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR.   _   s    c         C  s*   |  j  d  k	 r& |  j ƒ  |  j ƒ  n  d  S(   N(   R9   R   R.   R;   (   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   _timer_set_intervald   s    
(   R   R   R;   R.   R=   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR,   Q   s   		R(   c           B  s¡   e  Z e Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e d „ Z
 d „  Z d „  Z d	 „  Z d
 „  Z e j j j e _ d „  Z e j j j e _ RS(   c         O  sD   t  j j |  | | Ž t j ƒ  |  _ t |  _ t |  _ d  |  _
 d  S(   N(   R   t   FigureCanvasAggt   __init__t   iot   BytesIOt   _png_buffert   Truet   _png_is_oldt   _force_fullR   t   _pending_draw(   R   R$   R%   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR?   n   s
    		c         C  s   t  ƒ  d  S(   N(   t   show(   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRG   ‚   s    c         C  s^   |  j  ƒ  } t |  _ t j j j ƒ  z |  j j | ƒ Wd  t j j j	 ƒ  |  j
 j ƒ  Xd  S(   N(   t   get_rendererRC   RD   R   t   RendererAggt   lockt   acquireR*   t   drawt   releaseR+   t   refresh_all(   R   t   renderer(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRL   †   s    	c         C  sL   |  j  d  k rH t j j j ƒ  } | j t j d d ƒ |  j	 ƒ |  _  n  d  S(   NR-   i2   (
   RF   R   R0   R1   R2   R3   R4   R5   R6   t   _draw_idle_callback(   R   R1   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR   ”   s
    c         C  s   z |  j  ƒ  Wd  d  |  _ Xd  S(   N(   RL   R   RF   (   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRP   ›   s    c         C  s9  |  j  r,t j |  j j ƒ  d t j ƒ} |  j j |  j j f | _ |  j	 s® t j |  j
 j ƒ  d t j ƒ} |  j j |  j j f | _ | | k } t j | | d ƒ } n | } |  j j ƒ  |  j j d ƒ t j | j ƒ  | j d | j d |  j ƒ |  j
 |  j |  _ |  _
 t |  _	 t |  _  n  |  j j ƒ  S(   Nt   dtypei    i   (   RD   t   npt
   frombuffert	   _renderert   buffer_rgbat   uint32t   heightt   widtht   shapeRE   t   _last_renderert   whereRB   t   truncatet   seekR   t	   write_pngt   tostringt   Falset   getvalue(   R   t   bufft   last_buffert   difft   output(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   get_diff_image¡   s*    			
	c         C  sÂ   |  j  j j \ } } } } | | |  j  j f } y |  j |  j f Wn t k
 r] t } n X|  j | k } | r» t j	 | | |  j  j ƒ |  _ t j	 | | |  j  j ƒ |  _
 | |  _ n  |  j S(   N(   R*   t   bboxt   boundst   dpit   _lastKeyRT   t   AttributeErrorRC   R   RI   RZ   (   R   t   clearedt   _t   wt   ht   keyt   need_new_renderer(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRH   Ê   s    
c         C  sc  | d } | d k rÆ | d } | d } |  j  ƒ  j | } | d d } | d	 k r` d
 } n  | d k r‚ |  j | | | ƒ q_| d k r¤ |  j | | | ƒ q_| d k r_|  j | | ƒ q_n™ | d k r| d } | d k rø |  j | ƒ q_| d k r_|  j | ƒ q_nH | d k r=t |  j | d ƒ ƒ  n" | d k r_t	 |  _
 |  j ƒ  n  d  S(   Nt   typet   button_presst   button_releaset   motion_notifyt   xt   yt   buttoni   i   i   t	   key_presst   key_releaseRp   t   toolbar_buttont   namet   refresh(   Rs   Rt   Ru   (   Ry   Rz   (   RH   RW   t   button_press_eventt   button_release_eventt   motion_notify_eventt   key_press_eventt   key_release_eventt   getattrt   toolbarRC   RE   R   (   R   t   eventt   e_typeRv   Rw   Rx   Rp   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   handle_eventà   s2    


	
	c         K  s   |  j  j | | � d  S(   N(   R+   t
   send_event(   R   t
   event_typeR%   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRˆ     s    c         O  s   t  | | Ž  S(   N(   R,   (   R   R$   R%   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt	   new_timer	  s    c         C  s   t  j j |  | ƒ d  S(   N(   R   t   FigureCanvasBaset   start_event_loop_default(   R   t   timeout(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   start_event_loop  s    	c         C  s   t  j j |  ƒ d  S(   N(   R   R‹   t   stop_event_loop_default(   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   stop_event_loop  s    (   R   R   R`   t   supports_blitR?   RG   RL   R   RP   Rf   RH   R‡   Rˆ   RŠ   RŽ   R   R‹   RŒ   t   __doc__R�   R�   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR(   k   s   						)	&				R)   c           B  sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C  s8   t  j j |  | | ƒ t ƒ  |  _ |  j | ƒ |  _ d  S(   N(   R   t   FigureManagerBaseR?   t   sett   web_socketst   _get_toolbarR„   (   R   R   R#   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR?     s    c         C  s   d  S(   N(    (   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRG      s    c         C  s   |  j  j | ƒ d  S(   N(   R•   t   add(   R   t
   web_socket(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   add_web_socket#  s    c         C  s   |  j  j | ƒ d  S(   N(   R•   t   remove(   R   R˜   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   remove_web_socket&  s    c         C  s@   |  j  r< |  j j ƒ  } x! |  j  D] } | j | ƒ q" Wn  d  S(   N(   R•   R   Rf   t   send_diff_image(   R   Rd   t   s(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRN   )  s    	c         K  s(   x! |  j  D] } | j | | � q
 Wd  S(   N(   R•   Rˆ   (   R   R‰   R%   R�   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRˆ   /  s    c         C  s   t  | ƒ } | S(   N(   t   NavigationToolbar2WebAgg(   R   R   R„   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR–   3  s    c         C  s   |  j  d d | | f ƒd  S(   Nt   resizet   size(   Rˆ   (   R   Rn   Ro   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRŸ   7  s    (
   R   R   R?   RG   R™   R›   RN   Rˆ   R–   RŸ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR)     s   							Rž   c           B  s~   e  Z i d  d 6d d 6d d 6d d 6d d	 6d
 d 6d d 6Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   s   ui-icon ui-icon-homet   homes   ui-icon ui-icon-circle-arrow-wt   backs   ui-icon ui-icon-circle-arrow-et   forwards   ui-icon ui-icon-searcht   zoom_to_rects   ui-icon ui-icon-arrow-4t   moves   ui-icon ui-icon-diskt   downloadc           sE   t  j j d } t ‡  f d †  | Dƒ ƒ t _ d ˆ  _ d ˆ  _ d  S(	   Nt   Downloads   Download plotR¦   c         3  sC   |  ]9 \ } } } } | ˆ  j  k r | | ˆ  j  | | f Vq d  S(   N(   t   _jquery_icon_classes(   t   .0t   textt   tooltip_textt
   image_filet   name_of_method(   R   (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pys	   <genexpr>L  s   t    i    (   s   Downloads   Download plotR¦   R¦   (   (   s   Downloads   Download plotR¦   R¦   (   R   t   NavigationToolbar2t	   toolitemst   tupleRž   t   messaget   cursor(   R   R°   (    (   R   s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   _init_toolbarE  s    		c         C  s
   t  | ƒ S(   N(   R(   (   R   t   fig(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   _get_canvasT  s    c         C  s5   | |  j  k r( |  j j d d | ƒn  | |  _  d  S(   NR²   (   R²   R   Rˆ   (   R   R²   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   set_messageW  s    c         C  s5   | |  j  k r( |  j j d d | ƒn  | |  _  d  S(   NR³   (   R³   R   Rˆ   (   R   R³   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt
   set_cursor\  s    c         C  s   |  j  j ƒ  d  S(   N(   R   R   (   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   dynamic_updatea  s    c      
   C  s,   |  j  j d d | d | d | d | ƒd  S(   Nt
   rubberbandt   x0t   y0t   x1t   y1(   R   Rˆ   (   R   R…   R»   R¼   R½   R¾   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   draw_rubberbandd  s    	c      
   C  sB   t  t |  ƒ j | ƒ |  j j d d d d d d d d d ƒd  S(   NRº   R»   iÿÿÿÿR¼   R½   R¾   (   t   superRž   t   release_zoomR   Rˆ   (   R   R…   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRÁ   h  s    	N(   R   R   R   R¨   R´   R¶   R·   R¸   R¹   R¿   RÁ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRž   ;  s   

						R   c           B  s[  e  Z e Z e Z e j j e j j e j j e	 ƒ ƒ d  ƒ Z
 i e
 d  6e j j e
 d ƒ d 6e j j e j j e	 ƒ d ƒ d 6Z d e j j f d „  ƒ  YZ d e j j f d „  ƒ  YZ d e j j f d „  ƒ  YZ d	 e j j f d
 „  ƒ  YZ d e j j f d „  ƒ  YZ d e j j f d „  ƒ  YZ d d „ Z e d d „ ƒ Z e d „  ƒ Z RS(   s   mpl-datat   imagest   web_backendt   FavIconc           B  s   e  Z d  „  Z RS(   c         C  sU   |  j  d d ƒ t t j j t j d d ƒ d ƒ � } |  j | j ƒ  ƒ Wd  QXd  S(   Ns   Content-Types	   image/pngRÂ   s   matplotlib.pngt   rb(	   t
   set_headerR   t   ost   patht   joinR   t	   _mpl_dirst   writet   read(   R   t   fd(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   getz  s    (   R   R   RÎ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRÄ   y  s   t   SingleFigurePagec           B  s   e  Z d  „  Z d „  Z RS(   c         K  s1   | j  d d ƒ |  _ t j j j |  | | | � S(   NR   R®   (   R!   R   R0   t   webt   RequestHandlerR?   (   R   t   applicationt   requestR%   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR?   �  s    c         C  sÀ   t  t j j t j d d ƒ ƒ � } | j ƒ  } Wd  QXt | ƒ } t j	 | ƒ } d j
 d |  j d |  j ƒ } t j j | ƒ } |  j | j d |  j d | d | d t j d	 | j ƒ ƒ d  S(
   NRÃ   s   single_figure.htmls   ws://{req.host}{prefix}/t   reqR   t   ws_urit   fig_idR°   R   (   R   RÇ   RÈ   RÉ   R   RÊ   RÌ   t   intR   t   get_fig_managerR   RÓ   R   R0   t   templatet   TemplateRË   t   generateRž   R°   R   (   R   t   fignumRÍ   t   tplR+   RÕ   t   t(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRÎ   †  s    		(   R   R   R?   RÎ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRÏ   €  s   	t   AllFiguresPagec           B  s   e  Z d  „  Z d „  Z RS(   c         K  s1   | j  d d ƒ |  _ t j j j |  | | | � S(   NR   R®   (   R!   R   R0   RÐ   RÑ   R?   (   R   RÒ   RÓ   R%   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR?   ™  s    c         C  sº   t  t j j t j d d ƒ ƒ � } | j ƒ  } Wd  QXd j d |  j d |  j	 ƒ } t
 j j | ƒ } |  j | j d |  j	 d | d t t t j j ƒ  ƒ d d	 „  ƒd
 t j ƒ ƒ d  S(   NRÃ   s   all_figures.htmls   ws://{req.host}{prefix}/RÔ   R   RÕ   t   figuresRp   c         S  s   |  d S(   Ni    (    (   t   item(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   <lambda>ª  s    R°   (   R   RÇ   RÈ   RÉ   R   RÊ   RÌ   R   RÓ   R   R0   RÙ   RÚ   RË   RÛ   t   sortedt   listR   t   figst   itemsRž   R°   (   R   RÍ   RÝ   RÕ   RÞ   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRÎ   ž  s    	$(   R   R   R?   RÎ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRß   ˜  s   	t   MPLInterfaceJSc           B  s   e  Z d  „  Z RS(   c         C  s�   t  t j j t j d d ƒ ƒ � } | j ƒ  } Wd  QXt | ƒ } t j	 | ƒ } t
 j j | ƒ } |  j | j d t j d | j ƒ ƒ d  S(   NRÃ   s   mpl_interface.jsR°   R   (   R   RÇ   RÈ   RÉ   R   RÊ   RÌ   R×   R   RØ   R0   RÙ   RÚ   RË   RÛ   Rž   R°   R   (   R   RÜ   RÍ   RÝ   R+   RÞ   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRÎ   ¯  s    	(   R   R   RÎ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRç   ®  s   R§   c           B  s   e  Z d  „  Z RS(   c         C  s´   t  | ƒ |  _ t j |  j ƒ } i d d 6d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6} |  j d | j | d ƒ ƒ t j ƒ  } | j j	 | d | ƒ|  j
 | j ƒ  ƒ d  S(   Ns   application/postscriptt   pst   epss   application/pdft   pdfs   image/svg+xmlt   svgs	   image/pngt   pngs
   image/jpegt   jpegs
   image/tifft   tifs   application/emft   emfs   Content-Typet   binaryR   (   R×   RÜ   R   RØ   RÆ   RÎ   R@   RA   R   t   print_figureRË   Ra   (   R   RÜ   t   fmtR+   t	   mimetypesRb   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRÎ   ½  s    
(   R   R   RÎ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR§   ¼  s   t	   WebSocketc           B  s;   e  Z e Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C  sŒ   t  | ƒ |  _ t j |  j ƒ } | j |  ƒ | j j j j \ } } } } | j	 | | ƒ |  j
 d ƒ t |  d ƒ rˆ |  j t ƒ n  d  S(   Ns   {"type":"refresh"}t   set_nodelay(   R×   RÜ   R   RØ   R™   R   R*   Rg   Rh   RŸ   t
   on_messaget   hasattrRõ   RC   (   R   RÜ   R+   Rm   Rn   Ro   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR   Ö  s    c         C  s   t  j |  j ƒ j |  ƒ d  S(   N(   R   RØ   RÜ   R›   (   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   on_closeà  s    c         C  sh   t  j | ƒ } | d d k r/ | d |  _ n5 | d d k rB n" t j |  j ƒ j } | j | ƒ d  S(   NRr   t   supports_binaryt   valuet   ack(   t   jsont   loadsRù   R   RØ   RÜ   R   R‡   (   R   R²   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRö   ã  s    c         K  s4   i | d 6} | j  | ƒ |  j t j | ƒ ƒ d  S(   NRr   (   t   updatet   write_messageRü   t   dumps(   R   R‰   R%   t   payload(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRˆ   ÷  s    c         C  sT   |  j  r |  j | d t ƒn1 d j | j d ƒ j d d ƒ ƒ } |  j | ƒ d  S(   NRð   s   data:image/png;base64,{0}t   base64s   
R®   (   Rù   Rÿ   RC   R   t   encodet   replace(   R   Rd   t   data_uri(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRœ   ü  s
    	(	   R   R   RC   Rù   R   Rø   Rö   Rˆ   Rœ   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyRô   Ó  s   	
			R®   c         C  sï  | r5 | d d k r& | d d k s5 t  d ƒ ‚ n  t t |  ƒ j | d t j j i |  j d d 6f | d t j j i |  j d	 d 6f | d
 t j j i t j	 j
 |  j d d d d d ƒ d 6f | d t j j i t j	 j
 |  j d d d d d d	 ƒ d 6f | d t j j i t j	 j
 |  j d d d ƒ d 6f | d t j j i t j	 j
 |  j d d ƒ d 6f | d |  j f | d |  j i | d 6f | d |  j f | d |  j f | d |  j f | d |  j i | d 6f g ƒ d  S(   Ni    t   /iÿÿÿÿs6   url_prefix must start with a "/" and not end with one.s   /_static/(.*)RÃ   RÈ   s   /_static/images/(.*)RÂ   s$   /_static/jquery/css/themes/base/(.*)t   jqueryt   csst   themest   bases+   /_static/jquery/css/themes/base/images/(.*)s   /_static/jquery/js/(.*)t   jss   /_static/css/(.*)s   /favicon.icos	   /([0-9]+)R   s   /([0-9]+)/mpl_interface.jss   /([0-9]+)/wss   /([0-9]+)/download.([a-z]+)s   /?(   t   AssertionErrorRÀ   R   R?   R0   RÐ   t   StaticFileHandlerRÊ   RÇ   RÈ   RÉ   RÄ   RÏ   Rç   Rô   R§   Rß   (   R   R   (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR?     s>    #				#c         C  sÖ   |  j  r d  S|  d | ƒ } | |  _ d „  } d  } t d |  _ xp | |  j t d ƒ D]X } y | j | ƒ Wn. t j k
 rŸ } | j t j	 k r° ‚  q° qX X| |  _ t
 } PqX W| sÉ t d ƒ ‚ n  t
 |  _  d  S(   NR   c         s  se   x& t  t d | ƒ ƒ D] } |  | Vq Wx5 t  | d ƒ D]# } |  t j d | d | ƒ Vq: Wd S(   sâ   
            Generate a list of n random ports near the given port.

            The first 5 ports will be sequential, and the remaining n-5 will be
            randomly selected in the range [port-2*n, port+2*n].
            i   iþÿÿÿi   N(   t   ranget   mint   randomt   randint(   R   t   nt   i(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   random_portsF  s    s   webagg.ports   webagg.port_retriessS   The webagg server could not be started because an available port could not be found(   t   initializedR   R   R   R   t   listent   sockett   errort   errnot
   EADDRINUSERC   t
   SystemExit(   t   clsR   t   appR  t   successR   t   e(    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR   :  s(    			
	c         C  s\   |  j  r d  St d ƒ y t j j j ƒ  j ƒ  Wn t k
 rN t d ƒ n Xt |  _  d  S(   Ns   Press Ctrl+C to stop servers   Server stopped(	   t   startedR   R0   R1   R2   R3   R   t   KeyboardInterruptRC   (   R  (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR   f  s    	
(   R   R   R`   R  R   RÇ   RÈ   RÉ   t   dirnamet   __file__t   _mpl_data_pathRÊ   R0   RÐ   RÑ   RÄ   RÏ   Rß   Rç   R§   t	   websockett   WebSocketHandlerRô   R?   t   classmethodR   R   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyR   n  s$   $	
16+(/   R’   t
   __future__R    R   R5   R  R@   Rü   RÇ   R  R  t   numpyRR   R0   t   ImportErrort   RuntimeErrort   tornado.webt   tornado.ioloopt   tornado.websockett   tornado.templateR   R   t   matplotlib.figureR   t   matplotlib.backendsR   R   t   matplotlib._pylab_helpersR   R   R   t   ShowBaseR   RG   R'   R"   t	   TimerBaseR,   R>   R(   R“   R)   R¯   Rž   RÐ   t   ApplicationR   (    (    (    s\   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_webagg.pyt   <module>   sD   	
					­#3