ó
±éRc           @  s@  d  Z  d d l 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	 m
 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 m Z m Z d d l j Z d d l Z e Z e j j  d	 ƒ rd
 Z! n d Z! d „  Z" d d d „  ƒ  YZ# d S(   s•  
This module supports embedded TeX expressions in matplotlib via dvipng
and dvips for the raster and postscript backends.  The tex and
dvipng/dvips information is cached in ~/.matplotlib/tex.cache for reuse between
sessions

Requirements:

* latex
* \*Agg backends: dvipng
* PS backend: latex w/ psfrag, dvips, and Ghostscript 8.51
  (older versions do not work properly)

Backends:

* \*Agg
* PS
* PDF

For raster output, you can get RGBA numpy arrays from TeX expressions
as follows::

  texmanager = TexManager()
  s = ('\TeX\ is Number '
       '$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!')
  Z = self.texmanager.get_rgba(s, size=12, dpi=80, rgb=(1,0,0))

To enable tex rendering of all text in your matplotlib figure, set
text.usetex in your matplotlibrc file (http://matplotlib.sf.net/matplotlibrc)
or include these two lines in your script::

  from matplotlib import rc
  rc('text', usetex=True)

iÿÿÿÿ(   t   print_functionN(   t   md5(   t   rcParams(   t   read_png(   t   mkdirs(   t   Popent   PIPEt   STDOUTt   wint   &t   ;c          C  s  y7 t  d d g d t d t d t d t j d k ƒ}  Wn% t k
 r^ t j j d d	 ƒ t	 SX|  j
 |  j } } x{ | D]s } | j d
 ƒ ry | j ƒ  d } t j j d | d	 ƒ | j d ƒ } t j j | ƒ } | t j j d ƒ k  Sqy Wt j j d d	 ƒ t	 S(   Nt   dvipngs   -versiont   stdint   stdoutt   stderrt	   close_fdst   win32s   No dvipng was foundt   helpfuls   dvipng iÿÿÿÿs   Found dvipng version %st   asciis   1.6s(   Unexpected response from dvipng -version(   R   R   R   t   syst   platformt   OSErrort   mplt   verboset   reportt   FalseR   R   t
   startswitht   splitt   decodet	   distutilst   versiont   LooseVersion(   t   pR   R   t   lineR   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   dvipng_hack_alphaB   s"    t
   TexManagerc           B  s½  e  Z d  Z e j ƒ  Z e dA k r3 e j ƒ  Z n  e j	 j
 e d ƒ Z e j ƒ  Z e dA k	 rx e j	 j
 e d ƒ Z n dA Z e j	 j e ƒ re dA k	 rñ y e j e e ƒ Wn$ e k
 rÖ Z e j d e ƒ qXe j d e e f ƒ qe j d e ƒ n  e dA k	 re e ƒ n  dA Z i  Z i  Z i  Z d Z dB Z dC Z dD Z dE Z d Z  dF Z! i dG d 6dH d 6dI d 6dJ d 6dK d 6dL d 6dM d  6dN d 6dO d 6dP d# 6dQ d& 6dR d) 6dS d 6dT d* 6dU d+ 6dV d, 6Z" dA Z# dW e$ g  dX e! D] Z% d/ e% ^ qíƒ Z& d0 „  Z' dA d1 „ Z( d2 „  Z) d3 „  Z* d4 „  Z+ d5 „  Z, d6 „  Z- e. j/ d7 ƒ Z0 d8 „  Z1 d9 „  Z2 d: „  Z3 d; „  Z4 d< „  Z5 d= „  Z6 dA dA d> „ Z7 dA dA dY d? „ Z8 dA d@ „ Z9 RS(Z   sZ   
    Convert strings to dvi files using TeX, caching the results to a
    working dir
    s
   .tex.caches	   tex.caches   File could not be renamed: %ssf   Found a TeX cache dir in the deprecated location "%s".
    Moving it to the new default location "%s".sc   Could not rename old TeX cache dir "%s": a suitable configuration
    directory could not be found.i    t   cmrt    t   cmsst   cmttt   pzcs   \usepackage{chancery}t   serifs
   sans-serift   cursivet	   monospacet   pncs   \renewcommand{\rmdefault}{pnc}s   new century schoolbookt   pbks   \renewcommand{\rmdefault}{pbk}t   bookmant   ptms   \usepackage{mathptmx}t   timest   ppls   \usepackage{mathpazo}t   palatinos   zapf chanceryt   pchs   \usepackage{charter}t   chartert   phvs   \usepackage{helvet}t	   helveticat   pags   \usepackage{avant}s   avant gardet   pcrs   \usepackage{courier}t   couriers   computer modern romans   computer modern sans serifs   computer modern typewriters   text.latex.preamblet   familys   font.c         C  s¤  |  j  d  k r t d ƒ ‚ n  t |  j  ƒ t d } t | ƒ d k rv | d j ƒ  |  j k rv | d j ƒ  |  _ nb t	 | t
 ƒ r¬ | j ƒ  |  j k r¬ | j ƒ  |  _ n, t j j d d j |  j ƒ d ƒ d |  _ |  j g } xg  |  j D] } | | j d	 d
 ƒ f ^ qñ D]ã \ } } xº t d | D]| } | j ƒ  |  j k r—t |  | |  j | j ƒ  ƒ t r“t d | | |  j | j ƒ  f ƒ n  Pq.t r.t d ƒ q.q.Wt j j d | d ƒ t |  | |  j | ƒ | j t |  | ƒ d ƒ qWd j | ƒ |  _ |  j d |  j d |  j d g } |  j d k rV| j |  j d ƒ n  x d | k ru| j d ƒ qYWd j | ƒ } d j d | d g ƒ |  _ d  S(   NsB   Cannot create TexManager, as there is no cache directory availables   font.familyi   i    sX   font.family must be one of (%s) when text.usetex is True. serif will be used by default.s   , R   R)   t   -t   _s   font.s   family: %s, font: %s, info: %ss%   $s font is not compatible with usetexsQ   No LaTeX-compatible font found for the %s font family in rcParams. Using default.R%   R*   s   \usepackage{type1cm}s   
s   \usepackage{textcomp}(   t   texcachet   Nonet   RuntimeErrorR   R   t   lent   lowert   font_familiest   font_familyt
   isinstancet
   basestringR   R   R   t   joint   replacet	   font_infot   setattrt   DEBUGt   printt   appendt   getattrt   _fontconfigR)   t
   sans_serifR+   R*   t   removet   _font_preamble(   t   selft   fft
   fontconfigRC   t   font_family_attrt   fontt   cmd(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   __init__¡   sR    
+$		5	$c         C  sq   d j  | |  j ƒ  d | |  j ƒ  t | p. d ƒ g ƒ } t | ƒ j d ƒ } t j j  |  j t	 | ƒ j
 ƒ  ƒ S(   sU   
        returns a filename based on a hash of the string, fontsize, and dpi
        R%   s   %fs   utf-8(   RF   t   get_font_configt   get_custom_preamblet   strt   unicodet   encodet   ost   pathR=   R   t	   hexdigest(   RR   t   text   fontsizet   dpit   st   bytes(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   get_basefileØ   s    !c         C  s(  |  j  d k r= t g  |  j D] } | d f ^ q ƒ |  _  n  g  |  j D]# } t | |  j  | k rG | ^ qG } | rt rŒ t d | ƒ n  xS | D]K } t rÄ t d | |  j  | t | f ƒ n  t j t | ƒ |  j  | <q“ Wt rû t d |  j	 ƒ n  |  j
 ƒ  n  t r!t d |  j	 ƒ n  |  j	 S(   s8   Reinitializes self if relevant rcParams on have changed.s   DEBUG following keys changed:s   DEBUG %-20s: %-10s -> %-10ss   DEBUG RE-INIT
old fontconfig:s   DEBUG fontconfig:N(   t	   _rc_cacheR>   t   dictt   _rc_cache_keysR   RJ   RK   t   copyt   deepcopyRN   RX   (   RR   t   kt   part   changed(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyRY   â   s$    .#c         C  s   |  j  S(   sU   
        returns a string containing font configuration for the tex preamble
        (   RQ   (   RR   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   get_font_preambleø   s    c         C  s   d j  t d ƒ S(   s>   returns a string containing user additions to the tex preambles   
s   text.latex.preamble(   RF   R   (   RR   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyRZ   þ   s    c         G  sR   t  j d k r2 d t j j |  j ƒ d g } n g  } | j | ƒ d j | ƒ S(   s–   
        On windows, changing directories can be complicated by the presence of
        multiple drives. get_shell_cmd deals with this issue.
        R   s   %si    s    && (   R   R   R^   R_   t
   splitdriveR=   t   extendRF   (   RR   t   argst   command(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   _get_shell_cmd  s
    #c      	   C  s  |  j  | | ƒ } d | } |  j ƒ  } i d d 6d d 6j |  j d ƒ } | | } t d rh d } n d	 } d
 |  j | | | | d | f } t | d ƒ �p }	 t d rÆ |	 j | j d ƒ ƒ nF y |	 j | j d ƒ ƒ Wn) t	 k
 r}
 t
 j j d d ƒ ‚  n XWd QX| S(   su   
        Generate a tex file to render the tex string at a specific font size

        returns the file name
        s   %s.texs   {\sffamily %s}s
   sans-serifs   {\ttfamily %s}R+   s   {\rmfamily %s}s   text.latex.unicodes-   \usepackage{ucs}
\usepackage[utf8x]{inputenc}R%   s¶   \documentclass{article}
%s
%s
%s
\usepackage[papersize={72in,72in},body={70in,70in},margin={1in,1in}]{geometry}
\pagestyle{empty}
\begin{document}
\fontsize{%f}{%f}%s
\end{document}
g      ô?t   wbt   utf8R   sb   You are using unicode and latex, but have not enabled the matplotlib 'text.latex.unicode' rcParam.R   N(   Rf   RZ   t   getRC   R   RQ   t   opent   writeR]   t   UnicodeEncodeErrorR   R   R   (   RR   Ra   Rb   t   basefilet   texfilet   custom_preamblet   fontcmdt   unicode_preambleRd   t   fht   err(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   make_tex  s,    

	

	
s3   MatplotlibBox:\(([\d.]+)pt\+([\d.]+)pt\)x([\d.]+)ptc      	   C  s  |  j  | | ƒ } d | } |  j ƒ  } i d d 6d d 6j |  j d ƒ } | | } t d rh d } n d	 } d
 |  j | | | | d | f } t | d ƒ �p }	 t d rÆ |	 j | j d ƒ ƒ nF y |	 j | j d ƒ ƒ Wn) t	 k
 r}
 t
 j j d d ƒ ‚  n XWd QX| S(   sá   
        Generate a tex file to render the tex string at a specific
        font size.  It uses the preview.sty to determin the dimension
        (width, height, descent) of the output.

        returns the file name
        s   %s.texs   {\sffamily %s}s
   sans-serifs   {\ttfamily %s}R+   s   {\rmfamily %s}s   text.latex.unicodes-   \usepackage{ucs}
\usepackage[utf8x]{inputenc}R%   s­  \documentclass{article}
%s
%s
%s
\usepackage[active,showbox,tightpage]{preview}
\usepackage[papersize={72in,72in},body={70in,70in},margin={1in,1in}]{geometry}

%% we override the default showbox as it is treated as an error and makes
%% the exit status not zero
\def\showbox#1{\immediate\write16{MatplotlibBox:(\the\ht#1+\the\dp#1)x\the\wd#1}}

\begin{document}
\begin{preview}
{\fontsize{%f}{%f}%s}
\end{preview}
\end{document}
g      ô?Ru   Rv   R   sb   You are using unicode and latex, but have not enabled the matplotlib 'text.latex.unicode' rcParam.R   N(   Rf   RZ   Rw   RC   R   RQ   Rx   Ry   R]   Rz   R   R   R   (   RR   Ra   Rb   R{   R|   R}   R~   R   Rd   R€   R�   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   make_tex_preview?  s,    

	

	
c         C  sÛ  t  d r |  j | | ƒ S|  j | | ƒ } d | } t sO t j j | ƒ r×|  j | | ƒ } | d } |  j d |  j	 d t j j
 | ƒ d | f ƒ } t j j | d ƒ t j | ƒ } y% t | ƒ � }	 |	 j ƒ  }
 Wd QXWn t k
 rþ d	 }
 n Xy t j | ƒ t } Wn t k
 r/t } n X| s=| rZt d
 t | ƒ |
 ƒ ‚ n t j j |
 d ƒ xg t j | d ƒ D]O } | j d ƒ r™q�| j d ƒ r«q�y t j | ƒ Wq�t k
 rÏq�Xq�Wn  | S(   sm   
        generates a dvi file containing latex's layout of tex string

        returns the file name
        s   text.latex.previews   %s.dvis   .outputs   cd "%s"s(   latex -interaction=nonstopmode %s > "%s"iÿÿÿÿt   debugNs    No latex error report available.se   LaTeX was not able to process the following string:
%s
Here is the full report generated by LaTeX: 

t   *t   dviRa   (   R   t   make_dvi_previewRf   RJ   R^   R_   t   existsR‚   Rt   R=   R   R   R   R   t   systemRx   t   readt   IOErrort   statt   TrueR   R   R?   t   reprt   globt   endswithRP   (   RR   Ra   Rb   R{   t   dvifileR|   t   outfileRs   t   exit_statusR€   R   Rˆ   t   fname(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   make_dviy  sL    



 


c         C  s  |  j  | | ƒ } d | } d | } t sR t j j | ƒ sR t j j | ƒ rþ|  j | | ƒ } | d } |  j d |  j d t j j | ƒ d | f ƒ } t	 j
 j | d ƒ t j | ƒ }	 y% t | ƒ � }
 |
 j ƒ  } Wd QXWn t k
 rd	 } n X|	 r%t d
 t | ƒ | ƒ ‚ n t	 j
 j | d ƒ t j j | ƒ } t | d d ƒ �# }
 |
 j d j | j ƒ  ƒ ƒ Wd QXxy t j | d ƒ D]a } | j d ƒ r®q–| j d ƒ rÀq–| j d ƒ rÒq–y t j | ƒ Wq–t k
 röq–Xq–Wn  | S(   sì   
        generates a dvi file containing latex's layout of tex
        string. It calls make_tex_preview() method and store the size
        information (width, height, descent) in a separte file.

        returns the file name
        s   %s.dvis   %s.baselines   .outputs   cd "%s"s(   latex -interaction=nonstopmode %s > "%s"iÿÿÿÿR„   Ns    No latex error report available.se   LaTeX was not able to process the following string:
%s
Here is the full report generated by LaTeX: 

s	   .baselinet   wt    R…   R†   Ra   t   baseline(   Rf   RJ   R^   R_   Rˆ   Rƒ   Rt   R=   R   R   R   R   R‰   Rx   RŠ   R‹   R?   RŽ   R#   t   _re_vboxt   searchRy   RF   t   groupsR�   R�   RP   R   (   RR   Ra   Rb   R{   R‘   t   baselinefileR|   R’   Rs   R“   R€   R   t   mR”   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyR‡   ­  sL    



 
"c         C  sZ  |  j  | | | ƒ } d | } t s8 t j j | ƒ rV|  j | | ƒ } | d } |  j d |  j d | t j j | ƒ d t j j | ƒ d | f ƒ } t	 j
 j | d ƒ t j | ƒ }	 y% t | ƒ � }
 |
 j ƒ  } Wd QXWn t k
 rý d } n X|	 rt d	 | | ƒ ‚ n t	 j
 j | d ƒ y t j | ƒ WqVt k
 rRqVXn  | S(
   so   
        generates a png file containing latex's rendering of tex string

        returns the filename
        s   %s.pngs   .outputs   cd "%s"s9   dvipng -bg Transparent -D %s -T tight -o "%s" "%s" > "%s"iÿÿÿÿR„   Ns!   No dvipng error report available.se   dvipng was not able to process the following file:
%s
Here is the full report generated by dvipng: 

(   Rf   RJ   R^   R_   Rˆ   R•   Rt   R=   R   R   R   R   R‰   Rx   RŠ   R‹   R?   RP   R   (   RR   Ra   Rb   Rc   R{   t   pngfileR‘   R’   Rs   R“   R€   R   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   make_pngæ  s6    


 
c   
      C  s  |  j  | | ƒ } d | } t s5 t j j | ƒ r|  j | | ƒ } | d } |  j d |  j d t j j | ƒ d t j j | ƒ d | f ƒ } t	 j
 j | d ƒ t j | ƒ } t | ƒ �C }	 | rë t d | |	 j ƒ  ƒ ‚ n t	 j
 j |	 j ƒ  d ƒ Wd QXt j | ƒ n  | S(	   sw   
        generates a postscript file containing latex's rendering of tex string

        returns the file name
        s   %s.epsfs   .outputs   cd "%s"s   dvips -q -E -o "%s" "%s" > "%s"iÿÿÿÿR„   sc   dvipng was not able to process the flowing file:
%s
Here is the full report generated by dvipng: 

N(   Rf   RJ   R^   R_   Rˆ   R•   Rt   R=   R   R   R   R   R‰   Rx   R?   RŠ   RP   (
   RR   Ra   Rb   R{   t   psfileR‘   R’   Rs   R“   R€   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   make_ps  s(    


 c      	   C  s‚   |  j  | | ƒ } t | ƒ �N } xD | D]< } | j d ƒ r( g  | j ƒ  d D] } t | ƒ ^ qN Sq( WWd QXt d | ƒ ‚ d S(   sw   
        returns a list containing the postscript bounding box for latex's
        rendering of the tex string
        s   %%BoundingBox:i   Ns   Could not parse %s(   R¡   Rx   R   R   t   intR?   (   RR   Ra   Rb   R    t   psR!   t   val(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   get_ps_bbox,  s    1c   	      C  s  | |  j  ƒ  | | f } |  j j | ƒ } | d k r|  j | | | ƒ } t t j j |  j	 | ƒ ƒ } t
 d d k	 r† t
 d } n' t j d k r¤ t ƒ  t _ n  t j } | rÙ d | d d … d d … d f } n | d d … d d … d f } | |  j | <n  | S(   s   returns the alpha channels   text.dvipnghacki   Ni    iÿÿÿÿ(   RY   t   grey_arraydRw   R>   RŸ   R   R^   R_   RF   R=   R   R#   t   _dvipng_hack_alphaR"   (	   RR   Ra   Rb   Rc   t   keyt   alphaRž   t   Xt   hack(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   get_grey8  s    	&c         C  sE  | s t  d } n  | s& t  d } n  | \ } } } | |  j ƒ  | | t | ƒ f } |  j j | ƒ }	 |	 d k rA|  j | | | ƒ }
 t j |
 j	 d |
 j	 d d f t j
 ƒ }	 | |	 d d … d d … d f <| |	 d d … d d … d f <| |	 d d … d d … d f <|
 |	 d d … d d … d f <|	 |  j | <n  |	 S(	   sN   
        Returns latex's rendering of the tex string as an rgba array
        s	   font.sizes   savefig.dpii    i   i   Ni   i   (   R   RY   t   tuplet   rgba_arraydRw   R>   R¬   t   npt   zerost   shapet   float(   RR   Ra   Rb   Rc   t   rgbt   rt   gt   bR¨   t   ZR©   (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   get_rgbaf  s     !,c         C  sY  | j  ƒ  d k r d S| r. | j d ƒ } n d } t d rì |  j | | ƒ } d | } t ss t j j | ƒ rˆ |  j | | ƒ } n  t	 | ƒ � } | j
 ƒ  j ƒ  }	 Wd QXg  |	 D] }
 t |
 ƒ | ^ q¶ \ } } } | | | | f S|  j | | ƒ } t j | d | ƒ } z t t | ƒ ƒ } Wd | j ƒ  X| j | j | j | j f Sd S(	   s?   
        return width, heigth and descent of the text.
        R%   i    g      ð?s   text.latex.previews   %s.baselineNiH   (   i    i    i    (   t   stript   points_to_pixelsR   Rf   RJ   R^   R_   Rˆ   R‡   Rx   RŠ   R   R²   R•   t   dvireadt   Dvit   nextt   itert   closet   widtht   heightt   descent(   RR   Ra   Rb   t   renderert   dpi_fractionR{   Rœ   R‘   R€   t   lt   l1RÁ   t   depthRÀ   R†   t   page(    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   get_text_width_height_descent  s(    

,N(   R$   R%   (   R&   R%   (   R'   R%   (   R(   s   \usepackage{chancery}(   s   serifs
   sans-serifs   cursives	   monospace(   R,   s   \renewcommand{\rmdefault}{pnc}(   R-   s   \renewcommand{\rmdefault}{pbk}(   R/   s   \usepackage{mathptmx}(   R1   s   \usepackage{mathpazo}(   R(   s   \usepackage{chancery}(   R(   s   \usepackage{chancery}(   R3   s   \usepackage{charter}(   R$   R%   (   R&   R%   (   R5   s   \usepackage{helvet}(   R7   s   \usepackage{avant}(   R8   s   \usepackage{courier}(   R'   R%   (   R$   R%   (   R&   R%   (   R'   R%   (   s   text.latex.preamble(   s   family(   i    i    i    (:   t   __name__t
   __module__t   __doc__R   t   get_homet   oldpathR>   t   get_data_pathR^   R_   RF   t   oldcachet   get_cachedirt   cachedirR=   Rˆ   t   shutilt   moveR‹   t   et   warningst   warnR   R§   R®   R¦   t   postscriptdt   pscntR)   RO   R+   R*   RC   RB   RH   Rg   R­   t   nRi   RX   Rf   RY   Ro   RZ   Rt   R‚   t   ret   compileR™   Rƒ   R•   R‡   RŸ   R¡   R¥   R¬   R¸   RÉ   (    (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyR#   V   sŽ   
		7
					.		:	4	9	'		.(    ($   RÌ   t
   __future__R    Rj   R�   R^   RÓ   R   RÖ   t   hashlibR   t   distutils.versionR   t   numpyR¯   t
   matplotlibR   R   t   matplotlib._pngR   t   matplotlib.cbookR   t   matplotlib.compat.subprocessR   R   R   t   matplotlib.dvireadR»   RÛ   R   RJ   R   R   t	   cmd_splitR"   R#   (    (    (    sO   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/matplotlib/texmanager.pyt   <module>#   s.   		