ó
±é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 „  Z
 y d d l Z Wn e k
 r� e d ƒ ‚ n Xd Z e j e k  rÀ e d	 e j e ƒ ‚ n  e j Z [ d d
 l m Z m Z 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 m  Z  d d l! m" Z" e# Z$ e j% d k rrd Z& n d Z& d e f d „  ƒ  YZ' d e f d „  ƒ  YZ( d „  Z) d „  Z* d e f d „  ƒ  YZ+ d S(   s¬  
A Cairo backend for matplotlib
Author: Steve Chaplin

Cairo is a vector graphics library with cross-device output support.
Features of Cairo:
 * anti-aliasing
 * alpha channel
 * saves image files as PNG, PostScript, PDF

http://cairographics.org
Requires (in order, all available from Cairo website):
    cairo, pycairo

Naming Conventions
  * classes MixedUpperCase
  * varables lowerUpper
  * functions underscore_separated
iÿÿÿÿ(   t   divisiont   print_functionNc           C  s   t  j d ƒ j j S(   Ni   (   t   syst	   _getframet   f_codet   co_name(    (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   _fn_name   s    s1   Cairo backend requires that pycairo is installed.i   i   i    sC   Pycairo %d.%d.%d is installed
Pycairo %d.%d.%d or later is required(   t   RendererBaset   GraphicsContextBaset   FigureManagerBaset   FigureCanvasBase(   t   is_string_like(   t   Figure(   t   MathTextParser(   t   Path(   t   Bboxt   Affine2D(   t   ttfFontPropertyt   littlet   RendererCairoc           B  ss  e  Z i e j d  6e j d 6e j d 6e j d 6e j d 6e j d 6e j d 6e j d 6e j d 6e j d	 6e j d
 6e j d 6e j d 6e j d 6e j d 6e j d 6e j d 6e j d 6Z i e j d 6e j d 6e j d 6Z	 d „  Z
 d „  Z d „  Z d „  Z e d „  ƒ Z d" d „ Z d „  Z e d" d „ Z d „  Z d „  Z d „  Z d „  Z d  „  Z d! „  Z RS(#   id   iÈ   i,  i�  iô  iX  i¼  i   i„  t
   ultralightt   lightt   normalt   mediumt   semiboldt   boldt   heavyt	   ultraboldt   blackt   italict   obliquec         C  s…   t  r& t d |  j j t ƒ  f ƒ n  | |  _ t d |  ƒ |  _ t j	 t j
 t j d d ƒ ƒ |  _ t d ƒ |  _ t j |  ƒ d S(   s	   
        s   %s.%s()t   rendereri   t   CairoN(   t   _debugt   printt	   __class__t   __name__R   t   dpit   GraphicsContextCairot   gct   cairot   Contextt   ImageSurfacet   FORMAT_ARGB32t   text_ctxR   t   mathtext_parserR   t   __init__(   t   selfR%   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyR.   X   s      	c         C  s   t  j | ƒ |  j _ d  S(   N(   R(   R)   R'   t   ctx(   R/   t   surface(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   set_ctx_from_surfaced   s    c         C  s4   | |  _  | |  _ t j d d d |  j ƒ |  _ d  S(   Nt   yyiÿÿÿÿt   y0(   t   widtht   heightR(   t   Matrixt   matrix_flipy(   R/   R5   R6   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   set_width_heighth   s    		c         C  sž   | d  k	 r� | j ƒ  t | ƒ d k s. | rS | j | d | d | d | ƒ n& | j | d | d | d | d ƒ | j ƒ  | j ƒ  n  | j ƒ  d  S(   Ni   i    i   i   (   t   Nonet   savet   lent   set_source_rgbat   fill_preservet   restoret   stroke(   R/   R0   t   fill_ct   alphat   alpha_overrides(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   _fill_and_strokeq   s    
%&
c      	   C  sã   xÜ | j  | ƒ D]Ë \ } } | t j k r; |  j | Œ  q | t j k rW |  j ƒ  q | t j k rv |  j | Œ  q | t j k r¼ |  j	 | d | d | d | d | d | d ƒ q | t j
 k r |  j	 | Œ  q q Wd  S(   Ni    i   i   i   (   t   iter_segmentsR   t   MOVETOt   move_tot	   CLOSEPOLYt
   close_patht   LINETOt   line_tot   CURVE3t   curve_tot   CURVE4(   R0   t   patht	   transformt   pointst   code(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   convert_path|   s    c         C  s˜   t  | j ƒ d k r$ t d ƒ ‚ n  | j } | t ƒ  j d d ƒ j d |  j ƒ } | j ƒ  |  j	 | | | ƒ |  j
 | | | j ƒ  | j ƒ  ƒ d  S(   Ni$J  s>   The Cairo backend can not draw paths longer than 18980 points.g      ð?g      ð¿i    (   R<   t   verticest
   ValueErrorR0   R   t   scalet	   translateR6   t   new_pathRS   RD   t	   get_alphat   get_forced_alpha(   R/   R'   RO   RP   t   rgbFaceR0   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt	   draw_path�   s    	%
c   
      C  sÆ   t  r& t d |  j j t ƒ  f ƒ n  | j ƒ  | j t ƒ \ } } } t j	 j
 | t j | | | d ƒ } | j }	 |  j | | } |	 j ƒ  |	 j | | | ƒ |	 j ƒ  |	 j ƒ  | j ƒ  d  S(   Ns   %s.%s()i   (   R!   R"   R#   R$   R   t
   flipud_outt
   color_convt   BYTE_FORMATR(   R*   t   create_for_dataR+   R0   R6   R;   t   set_source_surfacet   paintR?   (
   R/   R'   t   xt   yt   imt   rowst   colst   bufR1   R0   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt
   draw_image›   s      
		


c	         C  s8  t  r& t d |  j j t ƒ  f ƒ n  | rK |  j | | | | | | ƒ né | j }	 |	 j ƒ  |	 j | | ƒ |	 j	 | j
 ƒ  |  j | j ƒ  |  j | j ƒ  ƒ | j ƒ  |  j d }
 |	 j ƒ  | rä |	 j | t j d ƒ n  |	 j |
 ƒ t j d d k  r|	 j | j d ƒ ƒ n |	 j | ƒ |	 j ƒ  d  S(   Ns   %s.%s()g      R@i´   i    i   s   utf-8(   R!   R"   R#   R$   R   t   _draw_mathtextR0   RX   RG   t   select_font_facet   get_namet
   fontanglest	   get_stylet   fontweightst
   get_weightt   get_size_in_pointsR%   R;   t   rotatet   npt   pit   set_font_sizeR   t   version_infot	   show_textt   encodeR?   (   R/   R'   Rc   Rd   t   st   propt   anglet   ismatht   mtextR0   t   size(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt	   draw_text®   s&      	

c         C  sØ  t  r& t d |  j j t ƒ  f ƒ n  | j } |  j j | |  j | ƒ \ } }	 }
 } } | j	 ƒ  | j
 | | ƒ | r• | j | t j d ƒ n  xØ | D]Ð \ } } } } } | j ƒ  | j | | ƒ t | ƒ } | j	 ƒ  | j | j |  j | j |  j | j ƒ | |  j d } | j | ƒ t j d d k  rU| j | j d ƒ ƒ n | j | ƒ | j ƒ  qœ WxW | D]O \ } } } } | j ƒ  | j | | | | ƒ | j d d d ƒ | j ƒ  qwW| j ƒ  d  S(   Ns   %s.%s()i´   g      R@i    i   s   utf-8(    R!   R"   R#   R$   R   R0   R-   t   parseR%   R;   RW   Rr   Rs   Rt   RX   RG   R   Rk   t   nameRm   t   styleRo   t   weightRu   R   Rv   Rw   Rx   R?   t	   rectanglet   set_source_rgbR>   (   R/   R'   Rc   Rd   Ry   Rz   R{   R0   R5   R6   t   descentt   glyphst   rectst   fontt   fontsizet   oxt   oyt   fontPropR~   t   wt   h(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyRj   Ê   s:      		!



c         C  s*   t  r& t d |  j j t ƒ  f ƒ n  t S(   Ns   %s.%s()(   R!   R"   R#   R$   R   t   True(   R/   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   flipyñ   s      c         C  s6   t  r& t d |  j j t ƒ  f ƒ n  |  j |  j f S(   Ns   %s.%s()(   R!   R"   R#   R$   R   R5   R6   (   R/   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   get_canvas_width_heightø   s      c         C  s  t  r& t d |  j j t ƒ  f ƒ n  | rc |  j j | |  j | ƒ \ } } } } } | | | f S|  j }	 |	 j	 ƒ  |	 j
 | j ƒ  |  j | j ƒ  |  j | j ƒ  ƒ | j ƒ  |  j d }
 |	 j |
 ƒ |	 j | ƒ d d !\ } } } |	 j ƒ  | | | | f S(   Ns   %s.%s()g      R@i   i   (   R!   R"   R#   R$   R   R-   R€   R%   R,   R;   Rk   Rl   Rm   Rn   Ro   Rp   Rq   Ru   t   text_extentsR?   (   R/   Ry   Rz   R|   R5   R6   R†   t   fontst   used_charactersR0   R~   t	   y_bearingRŽ   R�   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   get_text_width_height_descentý   s       	!	

c         C  sU   t  r& t d |  j j t ƒ  f ƒ n  |  j j j ƒ  d |  j _ t	 |  j _
 |  j S(   Ns   %s.%s()g      ð?(   R!   R"   R#   R$   R   R'   R0   R;   t   _alphat   Falset   _forced_alpha(   R/   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   new_gc  s      c         C  s5   t  r& t d |  j j t ƒ  f ƒ n  | d |  j S(   Ns   %s.%s()g      R@(   R!   R"   R#   R$   R   R%   (   R/   RQ   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   points_to_pixels"  s      N(   R$   t
   __module__R(   t   FONT_WEIGHT_NORMALt   FONT_WEIGHT_BOLDRo   t   FONT_SLANT_ITALICt   FONT_SLANT_NORMALt   FONT_SLANT_OBLIQUERm   R.   R2   R9   RD   t   staticmethodRS   R:   R\   Ri   R™   R   Rj   R‘   R’   R—   R›   Rœ   (    (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyR   <   sJ   


















							'				R&   c           B  s¶   e  Z i e j d  6e j d 6e j d 6Z i e j d 6e j d 6e j	 d 6Z
 d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z RS(   t   bevelt   mitert   roundt   buttt
   projectingc         C  s   t  j |  ƒ | |  _ d  S(   N(   R   R.   R   (   R/   R   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyR.   5  s    c         C  s   |  j  j ƒ  d  S(   N(   R0   R?   (   R/   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyR?   :  s    c         C  s†   t  j |  | ƒ |  j ƒ  } |  j } |  j ƒ  rY |  j j | d | d | d | ƒ n) |  j j | d | d | d | d ƒ d  S(   Ni    i   i   i   (   R   t	   set_alphaRY   t   _rgbRZ   R0   R=   (   R/   RB   R˜   t   rgb(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyR©   >  s    	(c         C  sC   | d k r/ | |  _  |  j j |  j | ƒ n t d | ƒ ‚ d  S(   NR§   R¦   R¨   s!   Unrecognized cap style.  Found %s(   R§   s   roundR¨   (   t	   _capstyleR0   t   set_line_capt   _capdRU   (   R/   t   cs(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   set_capstyleL  s    	c         C  sš   | s
 d  S| j  \ } } } } t | ƒ t | ƒ t | ƒ t | ƒ f \ } } } } |  j } | j ƒ  | j | |  j j | | | | ƒ | j ƒ  d  S(   N(   t   boundsR¦   R0   RX   R„   R   R6   t   clip(   R/   R„   Rc   Rd   RŽ   R�   R0   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   set_clip_rectangleT  s     6	
$c         C  s{   | s
 d  S| j  ƒ  \ } } |  j } | j ƒ  | t ƒ  j d d ƒ j d |  j j ƒ } t j	 | | | ƒ | j
 ƒ  d  S(   Ng      ð?g      ð¿g        (   t   get_transformed_path_and_affineR0   RX   R   RV   RW   R   R6   R   RS   R²   (   R/   RO   t   tpatht   affineR0   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   set_clip_path^  s     	
+c         C  s]   | | f |  _  | d  k r1 |  j j g  d ƒ n( |  j j |  j j t j | ƒ ƒ | ƒ d  S(   Ni    (   t   _dashesR:   R0   t   set_dashR   Rœ   Rs   t   asarray(   R/   t   offsett   dashes(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt
   set_dashesg  s
    	c         C  sU   t  j |  | | ƒ t |  j ƒ d k r> |  j j |  j Œ  n |  j j |  j Œ  d  S(   Ni   (   R   t   set_foregroundR<   Rª   R0   R…   R=   (   R/   t   fgt   isRGBA(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyR¾   p  s    c         C  sR   t  j |  | ƒ t |  j ƒ d k r; |  j j |  j Œ  n |  j j |  j Œ  d  S(   Ni   (   R   t   set_graylevelR<   Rª   R0   R…   R=   (   R/   t   frac(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyRÁ   w  s    c         C  sC   | d k r/ | |  _  |  j j |  j | ƒ n t d | ƒ ‚ d  S(   NR¥   R¦   R¤   s"   Unrecognized join style.  Found %s(   s   miters   roundR¤   (   t
   _joinstyleR0   t   set_line_joint   _joindRU   (   R/   t   js(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   set_joinstyle  s    	c         C  s)   | |  _  |  j j |  j j | ƒ ƒ d  S(   N(   t
   _linewidthR0   t   set_line_widthR   Rœ   (   R/   RŽ   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   set_linewidth‡  s    	N(   R$   R�   R(   t   LINE_JOIN_BEVELt   LINE_JOIN_MITERt   LINE_JOIN_ROUNDRÅ   t   LINE_CAP_BUTTt   LINE_CAP_SQUAREt   LINE_CAP_ROUNDR®   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_cairo.pyR&   '  s&   



					
						c         O  sH   t  r t d t ƒ  ƒ n  | j d t ƒ } | | | Ž  } t |  | ƒ S(   s.   
    Create a new figure manager instance
    s   %s()t   FigureClass(   R!   R"   R   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_cairo.pyt   new_figure_managerŒ  s
     c         C  s   t  | ƒ } t | |  ƒ } | S(   sD   
    Create a new figure manager instance for the given figure.
    (   t   FigureCanvasCairoR	   (   RÔ   t   figuret   canvast   manager(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyRÓ   –  s    RÙ   c           B  s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         O  sz   |  j  ƒ  \ } } t |  j j ƒ } | j | | ƒ t j t j | | ƒ } | j | ƒ |  j j	 | ƒ | j
 | ƒ d  S(   N(   t   get_width_heightR   RÚ   R%   R9   R(   R*   R+   R2   t   drawt   write_to_png(   R/   t   fobjRÕ   RÖ   R5   R6   R   R1   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt	   print_png   s    c         O  s   |  j  | d | | Ž S(   Nt   pdf(   t   _save(   R/   Rà   RÕ   RÖ   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt	   print_pdf«  s    c         O  s   |  j  | d | | Ž S(   Nt   ps(   Rã   (   R/   Rà   RÕ   RÖ   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   print_ps®  s    c         O  s   |  j  | d | | Ž S(   Nt   svg(   Rã   (   R/   Rà   RÕ   RÖ   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt	   print_svg±  s    c         O  s   |  j  | d | | Ž S(   Nt   svgz(   Rã   (   R/   Rà   RÕ   RÖ   (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt
   print_svgz´  s    c         K  sÌ  | j  d d ƒ } d } | |  j _ |  j j ƒ  \ } } | | | | } }	 | d k rj |	 | } }	 n  | d k r¦ t j sŽ t d ƒ ‚ n  t j | | |	 ƒ }
 nÿ | d k râ t j sÊ t d ƒ ‚ n  t j	 | | |	 ƒ }
 nÃ | d k r�t j
 st d ƒ ‚ n  | d
 k rx| } t | ƒ r<t | d ƒ } t } n t } z t j d  d d | ƒ} Wd  | rt| j ƒ  n  Xn  t j | | |	 ƒ }
 n t j d | ƒ d  St |  j j ƒ } | j | |	 ƒ | j |
 ƒ | j j } | d k r| j t j d ƒ | j d |	 ƒ n  |  j j | ƒ t } | r´| j  ƒ  | j! d d | |	 ƒ | j" d ƒ | j# d d d ƒ | j$ ƒ  | j% d d ƒ | j& d ƒ | j' d ƒ | j( d ƒ n  | j) ƒ  |
 j* ƒ  d  S(   Nt   orientationt   portraitiH   t	   landscapeRå   s3   cairo has not been compiled with PS support enabledRâ   s4   cairo has not been compiled with PDF support enabledRç   Ré   s4   cairo has not been compiled with SVG support enabledt   wbt   fileobjs   unknown format: %si   i    g      @i   i   s
   sans-serifi   s   Origin corner(   s   svgs   svgz(+   t   getRÚ   R%   t   get_size_inchesR(   t   HAS_PS_SURFACEt   RuntimeErrort	   PSSurfacet   HAS_PDF_SURFACEt
   PDFSurfacet   HAS_SVG_SURFACER   t   openR�   R™   t   gzipt   GzipFileR:   t   closet
   SVGSurfacet   warningst   warnR   R9   R2   R'   R0   Rr   Rs   Rt   RW   RÞ   RX   R„   RÉ   R…   R@   RG   Rk   Ru   Rw   t	   show_paget   finish(   R/   t   fot   formatRÖ   Rë   R%   t   w_int   h_int   width_in_pointst   height_in_pointsR1   t   filenameRû   R   R0   t   show_fig_border(    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyRã   ·  sj    				


(   R$   R�   Rá   Rä   Ræ   Rè   Rê   Rã   (    (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyRÙ   Ÿ  s   					(   i   i   i    (,   t   __doc__t
   __future__R    R   t   osR   Rý   Rù   t   numpyRs   R   R(   t   ImportErrort   _version_requiredRv   t   versiont   backend_versiont   matplotlib.backend_basesR   R   R	   R
   t   matplotlib.cbookR   t   matplotlib.figureR   t   matplotlib.mathtextR   t   matplotlib.pathR   t   matplotlib.transformsR   R   t   matplotlib.font_managerR   R™   R!   t	   byteorderR_   R   R&   RØ   RÓ   RÙ   (    (    (    s[   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/backends/backend_cairo.pyt   <module>   s<   0		"	ëe	
		