
x\c           @  s  d  Z  d d l m Z d d l m Z d d l Z d d l m Z d d l	 m
 Z
 d d l m Z m Z m Z m Z d d l m Z m Z m Z m Z m Z d d	 l m Z m Z m Z m Z m Z m Z m Z m Z m Z m  Z  m! Z! m" Z" d d
 l# m$ Z$ m% Z% m& Z& m' Z' d d l( m) Z) m* Z* d d l+ m, Z, d d l- m. Z. d d l/ j0 j1 Z2 d d l3 m4 Z4 m5 Z5 d d l6 m7 Z7 m8 Z8 d d l9 m: Z: d d l; m< Z< m= Z= d d l> m? Z? m@ Z@ mA ZA d d lB mC ZC d ZD d d d d d d d d d d d f ZE d  ZF d! eG f d"     YZH d# eG f d$     YZI d% eG f d&     YZJ d' eJ f d(     YZK d)   ZL d* eG f d+     YZM d, eM f d-     YZN eO d. eO eO d d/ eO d0  ZP d1 eG f d2     YZQ d3 eQ f d4     YZR d5 eQ f d6     YZS d7 eQ f d8     YZT d9 eQ f d:     YZU d;   ZV d<   ZW eO d= d>  ZX d= eO d?  ZY d= eO d@  ZZ dA   Z[ dB eT f dC     YZ\ dD eQ f dE     YZ] d= e^ dF  Z_ d eO eO dG  Z` d. dH  Za dI   Zb dJ eG f dK     YZc dL e^ dM  Zd dN   Ze dO dP  Zf dQ   Zg d S(R   s{   
Internal module for formatting output data in csv, html,
and latex files. This module also applies to display formatting.
i(   t   print_function(   t   partialN(   t   lib(   t   format_array_from_datetime(   t   NaTt	   Timedeltat	   Timestampt   iNaT(   t   StringIOt   lzipt   mapt   ut   zip(   t   is_categorical_dtypet   is_datetime64_dtypet   is_datetime64tz_dtypet   is_extension_array_dtypet   is_floatt   is_float_dtypet
   is_integert   is_integer_dtypet   is_list_liket   is_numeric_dtypet	   is_scalart   is_timedelta64_dtype(   t   ABCIndexClasst   ABCMultiIndext	   ABCSeriest   ABCSparseArray(   t   isnat   notna(   t   compat(   t   PandasObject(   t
   get_optiont
   set_option(   t   Indext   ensure_index(   t   DatetimeIndex(   t   _expand_usert   _stringify_path(   t   adjoint   justifyt   pprint_thing(   t   get_terminal_sizes  
        Parameters
        ----------
        buf : StringIO-like, optional
            Buffer to write to.
        columns : sequence, optional, default None
            The subset of columns to write. Writes all columns by default.
        col_space : int, optional
            The minimum width of each column.
        header : bool, optional
            %(header)s.
        index : bool, optional, default True
            Whether to print index (row) labels.
        na_rep : str, optional, default 'NaN'
            String representation of NAN to use.
        formatters : list or dict of one-param. functions, optional
            Formatter functions to apply to columns' elements by position or
            name.
            The result of each function must be a unicode string.
            List must be of length equal to the number of columns.
        float_format : one-parameter function, optional, default None
            Formatter function to apply to columns' elements if they are
            floats. The result of this function must be a unicode string.
        sparsify : bool, optional, default True
            Set to False for a DataFrame with a hierarchical index to print
            every multiindex key at each row.
        index_names : bool, optional, default True
            Prints the names of the indexes.
        justify : str, default None
            How to justify the column labels. If None uses the option from
            the print configuration (controlled by set_option), 'right' out
            of the box. Valid values are

            * left
            * right
            * center
            * justify
            * justify-all
            * start
            * end
            * inherit
            * match-parent
            * initial
            * unset.
        max_rows : int, optional
            Maximum number of rows to display in the console.
        max_cols : int, optional
            Maximum number of columns to display in the console.
        show_dimensions : bool, default False
            Display DataFrame dimensions (number of rows by number of columns).
        decimal : str, default '.'
            Character recognized as decimal separator, e.g. ',' in Europe.

            .. versionadded:: 0.18.0
    t   leftt   rightt   centerR)   s   justify-allt   startt   endt   inherits   match-parentt   initialt   unsets   
        Returns
        -------
        str (or unicode, depending on data and options)
            String representation of the dataframe.
    t   CategoricalFormatterc           B  s8   e  Z d e d  e d  Z d   Z d   Z d   Z RS(   t   NaNc         C  sO   | |  _  | d  k	 r | n t t d   |  _ | |  _ | |  _ | |  _ d  S(   Nt    (   t   categoricalt   NoneR   R   t   buft   na_rept   lengtht   footer(   t   selfR7   R9   R;   R:   R<   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   __init__o   s
    	'		c         C  s}   d } |  j  rD | r" | d 7} n  | d j d t |  j   7} n  |  j j   } | rf | d 7} n  | | 7} t j |  S(   NR6   s   , s   Length: {length}R;   s   
(   R;   t   formatt   lenR7   t   _repr_categories_infoR   t	   text_type(   R=   R<   t
   level_info(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _get_footerw   s    	"
c         C  s%   t  |  j j   d  d d  d |  j S(   Nt   float_formatR:   (   t   format_arrayR7   t
   get_valuesR8   R:   (   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _get_formatted_values   s    c         C  s  |  j  } t |  d k r; |  j r. |  j   St d  Sn  |  j   } g  | D] } t d  j d |  ^ qN } g  | D] } | j   ^ qy } t d  j |  } t d  | t d  g } |  j r |  j   } | r | j	 |  q n  t
 j t d  j |   S(	   Ni    R6   s   {i}t   is   , t   [t   ]s   
(   R7   R@   R<   RD   R   RH   R?   t   stript   joint   appendR   RB   (   R=   R7   t
   fmt_valuesRI   t   resultR<   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt	   to_string   s    		
+	N(   t   __name__t
   __module__R8   t   TrueR>   RD   RH   RQ   (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR4   m   s
   			t   SeriesFormatterc        
   B  sY   e  Z d e e e d  e d e d d 	 Z d   Z d   Z d   Z d   Z	 d   Z
 RS(   R5   c         C  s   | |  _  | d  k	 r | n t   |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |
 |  _	 | d  k rx t
 d  } n  | |  _ |	 |  _ t   |  _ |  j   d  S(   Ns   display.float_format(   t   seriesR8   R   R9   t   nameR:   t   headerR;   t   indext   max_rowsR!   RE   t   dtypet   _get_adjustmentt   adjt   _chk_truncate(   R=   RV   R9   R;   RX   RY   R:   RW   RE   R[   RZ   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>      s    									c         C  s   d d l  m } |  j } | o1 t |  j  | k } |  j } | r | d k re | } | j |  } n+ | d } | | j |  | j | f  } | |  _ n  | |  _ | |  _ d  S(   Ni(   t   concati   i   (	   t   pandas.core.reshape.concatR_   RZ   R@   RV   t   iloct
   tr_row_numt	   tr_seriest
   truncate_v(   R=   R_   RZ   Rd   RV   t   row_num(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR^      s    		
	c         C  s  |  j  j } t d  } t |  j  j d d   d  k	 rX | d j d |  j  j j  7} n  |  j t k	 r | d  k	 r | r | d 7} n  t	 | d d } | | d  k	 r d	 j d
 |  n d 7} n  |  j
 t k s |  j
 d k r|  j r| r | d 7} n  | d j d t |  j    7} n  |  j t k	 r|  j d  k	 rt |  j j d d   } | r| rn| d 7} n  | d j d t	 |   7} qn  t |  j j  r|  j j j   } | r| d 7} n  | | 7} n  t j |  S(   NR6   t   freqs   Freq: {freq}s   , t   escape_charss   	s   s   
u   Name: {sname}t   snamet   truncates   Length: {length}R;   RW   u   dtype: {typ}t   typ(   s   	s   s   
(   RV   RW   R   t   getattrRY   R8   R?   t   freqstrt   FalseR*   R;   RT   Rd   R@   R[   Rc   R   t   _valuesRA   R   RB   (   R=   RW   R<   t   series_nameRC   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRD      s8    "		(""c         C  sz   |  j  j } t | t  } | rO t d   | j D  } | j d t  } n! | j d  k	 } | j d t  } | | f S(   Nc         s  s   |  ] } | Vq d  S(   N(    (   t   .0RW   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>   s    t   namesRW   (
   Rc   RY   t
   isinstanceR   t   anyRq   R?   RT   RW   R8   (   R=   RY   t   is_multit   have_headert	   fmt_index(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _get_formatted_index   s    c         C  s.   |  j  j   } t | d  d |  j d |  j S(   NRE   R:   (   Rc   t   _formatting_valuesRF   R8   RE   R:   (   R=   t   values_to_format(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRH      s    c         C  s  |  j  } |  j   } t |  d k r3 d | d S|  j   \ } } |  j   } |  j r d } |  j } |  j j | | d  } | d k r d }	 n d }	 |  j j |	 g | d d	 d }	 | j	 | | |	  | j	 | d d
  n  |  j
 r|  j j d | d | g  }
 n |  j j d |  }
 |  j rO| rO| d d |
 }
 n  | rf|
 d | 7}
 n  t j t d
  j |
   S(   Ni    s   Series([], t   )i   i   s   ...s   ..t   modeR.   R6   s   
(   Rc   RD   R@   Rw   RH   Rd   Rb   R]   R)   t   insertRY   R(   RX   R   RB   R   RM   (   R=   RV   R<   Rv   Ru   RO   t   n_header_rowsRe   t   widtht   dot_strRP   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRQ     s0    				"	"N(   RR   RS   R8   RT   Rm   R>   R^   RD   Rw   RH   RQ   (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRU      s   		'		t   TextAdjustmentc           B  s/   e  Z d    Z d   Z d d  Z d   Z RS(   c         C  s   t  d  |  _ d  S(   Ns   display.encoding(   R!   t   encoding(   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>   *  s    c         C  s   t  j | d |  j S(   NR   (   R   t   strlenR   (   R=   t   text(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR@   -  s    R-   c         C  s   t  | | d | S(   NR{   (   R)   (   R=   t   textst   max_lenR{   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR)   0  s    c         O  s"   t  | d |  j d |  j | | S(   NR   t   justfunc(   R(   R@   R)   (   R=   t   spacet   listst   kwargs(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR(   3  s    (   RR   RS   R>   R@   R)   R(   (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR   (  s   		t   EastAsianTextAdjustmentc           B  s&   e  Z d    Z d   Z d d  Z RS(   c         C  s8   t  t |   j   t d  r+ d |  _ n	 d |  _ d  S(   Ns!   display.unicode.ambiguous_as_widei   i   (   t   superR   R>   R!   t   ambiguous_width(   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>   :  s    c         C  s   t  j | d |  j d |  j S(   NR   R   (   R   t   east_asian_lenR   R   (   R=   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR@   A  s    R-   c           s      f d   } | d k rD g  | D] } | j  | |   ^ q% S| d k rv g  | D] } | j | |   ^ qW Sg  | D] } | j | |   ^ q} Sd  S(   Nc           s      j  |   t  |   S(   N(   R@   (   t   t(   R   R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _get_padG  s    R,   R.   (   t   ljustR.   t   rjust(   R=   R   R   R{   R   t   x(    (   R   R=   s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR)   E  s    &&(   RR   RS   R>   R@   R)   (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR   8  s   		c          C  s$   t  d  }  |  r t   St   Sd  S(   Ns    display.unicode.east_asian_width(   R!   R   R   (   t   use_east_asian_width(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR\   R  s    t   TableFormatterc           B  s,   e  Z e Z d Z e d     Z d   Z RS(   c         C  s%   |  j  t k p$ |  j  d k o$ |  j S(   NRi   (   t   show_dimensionsRT   t   is_truncated(   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   should_show_dimensions_  s    c         C  sx   t  |  j t t f  r6 t |  r/ |  j | Sd  Sn> t |  ra | |  j k ra |  j | } n  |  j j | d   Sd  S(   N(   Rr   t
   formatterst   listt   tupleR   R8   t   columnst   get(   R=   RI   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _get_formatterd  s    N(	   RR   RS   Rm   R   R8   R   t   propertyR   R   (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR   Z  s   t   DataFrameFormatterc           B  s  e  Z d  Z e r e n d Z e e e 7Z d d d e e d d d d d e d d d e d d e d  Z d   Z	 d   Z
 d   Z d   Z d e d e d e d	  Z d
   Z d e d d  Z d   Z e d    Z e d    Z e d    Z e d    Z d   Z d   Z RS(   s   
    Render a DataFrame

    self.to_string() : console-friendly tabular output
    self.to_html()   : html table
    self.to_latex()   : LaTeX tabular environment table

    R6   R5   t   .c         K  s  | |  _  | d  k	 r- t t |   |  _ n t   |  _ | |  _ | d  k r] t d  } n  | |  _ |
 |  _	 | d  k	 r | n i  |  _
 | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ t | p t |  j   t |  j    |  _ | |  _ | |  _ | |  _ |	 d  k r5t d  |  _ n	 |	 |  _ | |  _ | d  k	 rxt |  |  _ |  j  |  j |  _  n | j |  _ |  j   t   |  _ d  S(   Ns   display.multi_sparses   display.colheader_justify(    t   frameR8   R&   R'   R9   R   t   show_index_namesR!   t   sparsifyRE   R   R:   t   decimalt	   col_spaceRX   RY   t
   line_widthRZ   t   max_colst   minR@   t   max_rows_displayedR   t   table_idt   render_linksR)   t   kwdsR$   R   R^   R\   R]   (   R=   R   R9   R   R   RX   RY   R:   R   R)   RE   R   t   index_namesR   RZ   R   R   R   R   R   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>   }  sB    																	
c         C  s  d d l  m } |  j } |  j } | d k s: | d k rt   \ } } | |  _ | |  _ |  j d k r d } d } |  j r d } n  |  j | | | }	 |  j |	 }
 |
 |  _	 n  | d k r t
 |  j j  | k r | } n  | d k rt
 |  j  | k r| } qn  t |  d  s+| |  _	 n  t |  d  sF| |  _ n  |  j } |  j	 }
 | opt
 |  j  | k } |
 ot
 |  j  |
 k } |  j } | rP| d k rt
 | j  } n | d k r| j d d  d |  f } | } nU | d	 } | | j d d  d |  f | j d d  | d  f f d
 d } | |  _ n  | r|
 d k r| } | j d |  d d  f } nO |
 d	 } | | j d |  d d  f | j | d  d d  f f  } | |  _ n  | |  _ | |  _ | |  _ |  j p|  j |  _ d S(   sc   
        Checks whether the frame should be truncated. If so, slices
        the frame up.
        i(   R_   i    i   i   t   max_rows_adjt   max_cols_adjNi   t   axis(   R`   R_   R   RZ   R+   t   wt   hR   RX   R   R@   R   R   t   hasattrR   Ra   t
   tr_col_numRb   t   tr_framet
   truncate_hRd   R   (   R=   R_   R   RZ   R   R   t   dot_rowt
   prompt_rowt   show_dimension_rowst
   n_add_rowsR   R   R   Rd   R   t   col_numRe   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR^     sf    						$	!				
,"
&			c           s    j  }   j |  } t   j  r   j r g  } xt |  D]R \ } }   j |  } t |   j d   j p{ d d   j	 } | j
 |  qE Wnjt   j  r t   j  t   j  k r t d j d t   j  d t   j     n  g    j D] } | g ^ q} n   j |  } g  } x t |  D] \ } } | | }	 t   j pgd   f d   |	 D  }
   j |  } t |   j d |
 d   j	 } t t   f d   | D  |
  }   j	 j |	 | d	   j }	 | j
 |	 |  qBW| }   j r*| j d |  n    j }   j } | rr  j } | j   j d
 d g t |   n  | r{t |  t |  }   j } x t |  D] \ } }   j	 j | | |  } t } | r| | d
 k } n  | d k s| rd } n d } | d k rd } n | r4d } d } n d }   j	 j | g | d	 | d } | | j | | |  qWn  | S(   sP   
        Render a DataFrame to a list of columns (as lists of strings).
        t   minimumi    R]   s-   Writing {ncols} cols but got {nalias} aliasest   ncolst   naliasc         3  s!   |  ] }   j  j |  Vq d  S(   N(   R]   R@   (   Rp   R   (   R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>  s    c         3  s!   |  ] }   j  j |  Vq d  S(   N(   R]   R@   (   Rp   R   (   R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>  s    R{   i   s    ...i   s   ...s   ..R,   i   R-   (   R   Rw   R   RX   t	   enumeratet   _format_colt   _make_fixed_widthR)   R   R]   RN   R@   R   t
   ValueErrorR?   t   _get_formatted_column_labelst   maxRY   R|   R   Rd   R   Rb   Rm   (   R=   R   t	   str_indext   stringifiedRI   t   cRO   t   labelt   str_columnst   cheadert   header_colwidthR   t   strcolsR   Rd   R   R}   Re   t   ixt   colt   cwidtht
   is_dot_colt   my_strt   dot_modeR   (    (   R=   s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _to_str_columns  st    	"
					'				"c         C  s  d d l  m } |  j } t | j  d k sC t | j  d k r t d  j d t |  j  j	 d t
 | j  d t
 | j   } | } n|  j   } |  j d k r |  j j d |  } nt |  j t  s |  j d k r |  j |   } ne|  j j d |  j d	  } | |  j j   j   } | |  j } | d } | g  | D]! }	 | |	  j t  j   ^ qO }
 t |
  } d } x| | d k r	| d k r	| d 7} t t | d
   } |
 j | } |
 | } | | d 8} |
 j |  }
 t |
  } qW| |  j } t | d  } | |  _ |  j   |  j   } |  j j d |  } |  j j |  |  j r|  j j  d j d t |  d t | j    n  d S(   sJ   
        Render a DataFrame to a console-friendly tabular output.
        i(   t   Seriesi    s(   Empty {name}
Columns: {col}
Index: {idx}RW   R   t   idxi   s   
g       @i   s"   

[{nrows} rows x {ncols} columns]t   nrowsR   N(!   t   pandasR   R   R@   R   RY   R   R?   t   typeRR   R*   R   R   R8   R]   R(   Rr   R   t   intt   _join_multilinet   splitt   strR   R   t   applyt   roundt   dropR   R^   R9   t
   writelinesR   t   write(   R=   R   R   t	   info_lineR   R   R   t   dift   adj_dift   elet   col_lenst   n_colst   countert   midt   mid_ixt   col_lenR   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRQ   F  sP    	*	
.

	
	c         G  s  |  j  } d } t |  } |  j rr | j d  } | t j g  | D] } |  j j |  ^ qC  j   | 8} n  g  | D]R } t |  d k r t j g  | D] } |  j j |  ^ q  j   n d ^ qy } t	 | |  } t |  }	 |  j
 r|  j d }
 n t |  j  }
 g  } d } x t |  D] \ } } | | | !} |  j rb| j d |  n  |	 d k r| t |  k r| |	 d k  r| j d g d g |
 d  q| j d g |
  n  | j |  j j | |   | } q-Wd j |  S(   Ni   i    s    \s     t    s   

(   R   R   RY   t   popt   npt   arrayR]   R@   R   t   _binifyRd   R   R   R   R|   RN   R(   RM   (   R=   R   t   lwidtht   adjoin_widthR   R   R   t
   col_widthst   col_binst   nbinsR   t   str_lstt   stRI   t   edt   row(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR     s6    		3\		""
c         C  s   d d l  m } | |  d | d | d | d | d | } | d k r^ t j rU d n d	 } n  t |  j d
  r | j |  j  na t |  j t j	  r d d l
 }	 |	 j |  j d d |  }
 | j |
  Wd QXn t d   d S(   sU   
        Render a DataFrame to a LaTeX tabular/longtable environment output.
        i(   t   LatexFormattert   column_formatt	   longtablet   multicolumnt   multicolumn_formatt   multirowt   asciis   utf-8R   NR   R   s1   buf is not a file name and it has no write method(   t   pandas.io.formats.latexR   R8   R   t   PY2R   R9   t   write_resultRr   t   string_typest   codecst   opent	   TypeError(   R=   R   R   R   R   R   R   R   t   latex_rendererR  t   f(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   to_latex  s    	c         C  sh   |  j  } |  j |  } | j d  d   | f j   } t | | d |  j d |  j d |  j d |  j S(   NRE   R:   R   R   (	   R   R   Ra   Rx   RF   RE   R:   R   R   (   R=   RI   R   t	   formatterRy   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR     s    	c   	      C  s   d d l  m } m } | r" | n | } | |  d | d | j   } t |  j d  rk t |  j |  nL t |  j t j	  r t
 |  j d   } t | |  Wd QXn t d   d S(	   sG  
        Render a DataFrame to a html table.

        Parameters
        ----------
        classes : str or list-like
            classes to include in the `class` attribute of the opening
            ``<table>`` tag, in addition to the default "dataframe".
        notebook : {True, False}, optional, default False
            Whether the generated HTML is for IPython Notebook.
        border : int
            A ``border=border`` attribute is included in the opening
            ``<table>`` tag. Default ``pd.options.html.border``.

            .. versionadded:: 0.19.0
         i(   t   HTMLFormattert   NotebookFormattert   classest   borderR   R   Ns2   buf is not a file name and it has no write  method(   t   pandas.io.formats.htmlR  R  t   renderR   R9   t   buffer_put_linesRr   R   R  R  R  (	   R=   R  t   notebookR  R  R  t   Klasst   htmlR	  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   to_html  s    c      	     s  d d l  m } | j } t | t  r4| j d t d t  } t |   }  j j	 j
 } t d   | j D   t t | t t |          f d   } t t g  | D]( } g  | D] } | | |  ^ q ^ q    }	  j rt |	  r| |	  }	 n  g  t |	   D] } t |  ^ q}	 n | j   }  j j	 } t t | t t |      g  t t | |   D]? \ }
 \ } }  j |
  r  | rd | n | g ^ q}	  j rx |	 D] } | j d  qWn  |	 S(	   Ni(   t	   _sparsifyR   R(   c         s  s   |  ] } | j  Vq d  S(   N(   t   is_floating(   Rp   t   l(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>  s    c           s,   |  j  k r(   |  r(  r( d | S| S(   NR   (   R   (   R   t   y(   t   need_leadspt   restrict_formattingR=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   space_format  s    R   R6   (   t   pandas.core.indexR  R   Rr   R   R?   Rm   R	   R   t   dtypesRn   Rs   t   levelst   dictR   R
   R   R   R   R@   R   R   t   show_row_idx_namesRN   (   R=   R   R  R   t   fmt_columnsR  R  R   R  R   RI   R   (    (   R  R  R=   s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR     s0    		8(	O	c         C  s   t  |  j j  S(   N(   t
   _has_namesR   RY   (   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   has_index_names  s    c         C  s   t  |  j j  S(   N(   R$  R   R   (   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   has_column_names  s    c         C  s   t  |  j |  j |  j f  S(   N(   t   allR%  RY   R   (   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR"    s    	c         C  s   t  |  j |  j |  j f  S(   N(   R'  R&  R   RX   (   R=   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   show_col_idx_names  s    	c   	      C  sB  | j  } | j } |  j d  } t | t  r] | j d |  j d t d |  j d |  } n | j d |  j d |  g } g  | D]< } t	 t
 t |  d d d	 |  j p d
 d |  j  ^ q } |  j j d |  j d  } |  j rg  |  j   D] } d j d |  ^ q } n d g | j } |  j r:| | S| Sd  S(   Nt	   __index__R   R(   Rq   R  RW   R)   R,   R   i    R]   i   s   
s   {x}R   R6   (   RY   R   R   Rr   R   R?   R   Rm   R"  R   R   R   R   R]   R(   R   R(  t   _get_column_name_listt   nlevelsRX   (	   R=   R   RY   R   t   fmtRv   R   t   adjoinedt
   col_header(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRw   !  s&    				F	+	c         C  sg   g  } |  j  j } t | t  r> | j d   | j D  n% | j | j d  k rY d n | j  | S(   Nc         s  s'   |  ] } | d k r d  n | Vq d S(   R6   N(   R8   (   Rp   RW   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>F  s   R6   (	   R   R   Rr   R   t   extendRq   RN   RW   R8   (   R=   Rq   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR*  B  s    %N(   RR   RS   t   __doc__t   common_docstringt   return_docstringR8   RT   Rm   R>   R^   R   RQ   R   R
  R   R  R   R   R%  R&  R"  R(  Rw   R*  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR   p  s0   				-	H	O	<	"			*	!R5   R   c	         C  s*  t  |  j  r t }	 n{ t |   r- t }	 nf t |  j  rE t }	 nN t |  j  r] t }	 n6 t	 |  j  ru t
 }	 n t |  j  r t }	 n t }	 | d k r t d  } n  | d k r t d  } n  | d k r t d  } n  |	 |  d | d | d | d | d | d	 | d
 | d | }
 |
 j   S(   sV  
    Format an array for printing.

    Parameters
    ----------
    values
    formatter
    float_format
    na_rep
    digits
    space
    justify
    decimal
    leading_space : bool, optional
        Whether the array should be formatted with a leading space.
        When an array as a column of a Series or DataFrame, we do want
        the leading space to pad between columns.

        When formatting an Index subclass
        (e.g. IntervalIndex._format_native_types), we don't want the
        leading space since it should be left-aligned.

    Returns
    -------
    List[str]
    s   display.column_spaces   display.float_formats   display.precisiont   digitsR:   RE   R  R   R)   R   t   leading_spaceN(   R   R[   t   Datetime64FormatterR   t   Datetime64TZFormatterR   t   Timedelta64FormatterR   t   ExtensionArrayFormatterR   t   FloatArrayFormatterR   t   IntArrayFormattert   GenericArrayFormatterR8   R!   t
   get_result(   t   valuesR  RE   R:   R3  R   R)   R   R4  t	   fmt_klasst   fmt_obj(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRF   P  s0    							R;  c           B  sA   e  Z d  d d d d d d d e d d 
 Z d   Z d   Z RS(	   i   R5   i   R-   R   c         C  sg   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _ |
 |  _	 | |  _
 d  S(   N(   R=  R3  R:   R   R  RE   R)   R   t   quotingt   fixed_widthR4  (   R=   R=  R3  R  R:   R   RE   R)   R   R@  RA  R4  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>     s    										c         C  s   |  j    } t | |  j  S(   N(   t   _format_stringsR   R)   (   R=   RO   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR<    s    c   
        s   j  d  k rT t d  } | d  k r] d j d t d       f d   } q] n	  j  }  j d  k	 ru  j n d      f d   }  j } t | t  r | j } n t | t	  r | j } n  t
 j | t  t |  @}  j } | d  k r| j   } n  g  } x t |  D] \ } } | | ra| ra| j d j d	 | |    q"| | r| j | |   q"| t k rd
 }	 n d }	 | j |	 j d	 | |    q"W| S(   Ns   display.float_formats   {{x: .{prec:d}g}}t   precs   display.precisionc           s     j  d |   S(   NR   (   R?   (   R   (   t   fmt_str(    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   <lambda>  s    c         S  s   t  |  d d S(   NRg   s   	s   s   
(   s   	s   s   
(   R*   (   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRE    s    c           s    j  d  k	 rN t |   rN t |   rN |  d  k r7 d S|  t k rG d S j  St |  t  rm d j d |   Sd j d   |    Sd  S(   NR8   R   u   {x}R   (   R:   R8   R   R   R   Rr   R    R?   (   R   (   R  R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _format  s    'u    {v}t   vu   {v}(   RE   R8   R!   R?   R  R=  Rr   R#   Rn   R   R   t	   map_inferR   R   R4  Rs   R   RN   Rm   (
   R=   RE   RF  t   valst   is_float_typeR4  RO   RI   RG  t   tpl(    (   RD  R  R=   s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRB    s<    					"
	#N(   RR   RS   R8   RT   R>   R<  RB  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR;    s
   		R9  c           B  s8   e  Z d  Z d   Z d d d  Z d   Z d   Z RS(   s   

    c         O  sh   t  j |  | |  |  j d  k	 rd |  j d  k rd t |  _ t |  j  rd |  j |  _ d  |  _ qd n  d  S(   N(   R;  R>   RE   R8   R  Rm   RA  t   callable(   R=   t   argsR   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>     s    	c           s    d k r  j  n   r3   f d     n  f d      j d k rf    f d    n     d k r|  S   f d   } | S(   sD   Returns a function to be applied on each value to format it
        c           s    t  |   r   d |   S j S(   Nt   value(   R   R:   (   RG  (   RE   R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   base_formatter  s    c           s   t  |   r t |   S  j S(   N(   R   R   R:   (   RG  (   R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRO    s    R   c           s     |   j  d  j d  S(   NR   i   (   t   replaceR   (   RG  (   RO  R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   decimal_formatter  s    c           s@   t  |   r5 t |    k r(   |   S  d  Sn  j Sd  S(   Ng        (   R   t   absR:   (   RN  (   RQ  R=   t	   threshold(    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR  
  s
    
N(   R8   RE   R   (   R=   RE   RS  R  (    (   RO  RQ  RE   R=   RS  s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _value_formatter  s    	c   
        s    j  d k	 r; t j g    j D] }   j  |  ^ q  S  j rS t d   n d     f d   }   j d k r   j r t d j	 d   j
 } q   j } n   f d   } | |  }   j s | St |  d k rt d   | D  } |   j
 d k } n t } t j d	 d
  M t j   j  } | d k j   } | d   j
 k  | d k @j   }	 Wd QX|	 s| r| rt d j	 d   j
 } | |  } n  | S(   s   
        Returns the float values converted into strings using
        the parameters given at initialisation, as a numpy array
        s   display.chop_thresholdc           s     j  |    }   j d k r1 d   j } n	   j }   j } t |  } t | d  rm | j   } n  t j | d d } | | | <| j	   } t j g  | j	   | D] } | |  ^ q  | j
 | <  j r t | |  S| S(   NR,   R   t   to_denseR[   t   object(   RT  R)   R:   R=  R   R   RU  R   R   t   ravelt   flatRA  t   _trim_zeros(   RE   R  R:   R=  t   maskt   imaskt   val(   R=   RS  (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   format_values_with$  s     		
	0	s   {value: .{digits:d}f}R3  c           s     j  |  S(   N(   RE   (   RN  (   R=   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRE  G  s    i    c         s  s   |  ] } t  |  Vq d  S(   N(   R@   (   Rp   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>S  s    i   t   invalidt   ignoreg    .Ai
   Ns   {value: .{digits:d}e}(   R  R8   R   R   R=  RA  R!   RE   R   R?   R3  R@   R   Rm   t   errstateRR  Rs   (
   R=   R   R]  RE   t   formatted_valuest   maxlent   too_longt   abs_valst   has_large_valuest   has_small_values(    (   R=   RS  s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   get_result_as_array  s:    ,			c         C  sB   |  j  d  k	 r2 g  |  j D] } |  j  |  ^ q St |  j    S(   N(   R  R8   R=  R   Rg  (   R=   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRB  h  s    #N(   RR   RS   R0  R>   R8   RT  Rg  RB  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR9    s
   	)	SR:  c           B  s   e  Z d    Z RS(   c         C  s8   |  j  p d   } g  |  j D] } | |  ^ q } | S(   Nc         S  s   d j  d |   S(   Ns   {x: d}R   (   R?   (   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRE  s  s    (   R  R=  (   R=   R  R   RO   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRB  r  s    "(   RR   RS   RB  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR:  p  s   R5  c           B  s    e  Z d  d d  Z d   Z RS(   R   c         K  s/   t  t |   j | |  | |  _ | |  _ d  S(   N(   R   R5  R>   t   nat_rept   date_format(   R=   R=  Rh  Ri  R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>   z  s    	c         C  s   |  j  } t | t  s' t |  } n  |  j d k	 re t |  j  re g  | D] } |  j |  ^ qL St | j j   d t	 | |  j
  d |  j j | j  } | j   S(   s(    we by definition have DO NOT have a TZ R?   R:   N(   R=  Rr   R%   R  R8   RL  R   t   asi8RW  t"   _get_format_datetime64_from_valuesRi  Rh  t   reshapet   shapet   tolist(   R=   R=  R   RO   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRB    s    	 N(   RR   RS   R8   R>   RB  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR5  x  s   R8  c           B  s   e  Z d    Z RS(   c         C  s   |  j  } t | t t f  r* | j } n  | j d t  } t | j  rZ | j	   } n t
 j |  } t | | d |  j d |  j d |  j d |  j d |  j d |  j } | S(   Nt   boxedRE   R:   R3  R   R)   R4  (   R=  Rr   R   R   Rn   t
   _formatterRT   R   R[   RG   R   t   asarrayRF   RE   R:   R3  R   R)   R4  (   R=   R=  R  R   RO   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRB    s    		(   RR   RS   RB  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR8    s   c      
   C  s  t  j |   }  t  j d d  M t |   s[ t  j |  d k  s[ t  j |  d k  rj t d   n  Wd QXd |  }  |  j t  |  k } t  j |  r |  j t  j t  } g  | D] } | d ^ q St  j	 |   } | d d k r | d n d } | d	 d k  rd | d	 n d } t  j t  j t  j t  j | d
 | d |    j t  } t d |  } t  j |  d t } |  | j t  j t  | | <|  | j |  j t  | | <g  | D] } | d ^ qS(   s  
    Outputs rounded and formatted percentiles.

    Parameters
    ----------
    percentiles : list-like, containing floats from interval [0,1]

    Returns
    -------
    formatted : list of strings

    Notes
    -----
    Rounding precision is chosen so that: (1) if any two elements of
    ``percentiles`` differ, they remain different after rounding
    (2) no entry is *rounded* to 0% or 100%.
    Any non-integer is always rounded to at least 1 decimal place.

    Examples
    --------
    Keeps all entries different after rounding:

    >>> format_percentiles([0.01999, 0.02001, 0.5, 0.666666, 0.9999])
    ['1.999%', '2.001%', '50%', '66.667%', '99.99%']

    No element is rounded to 0% or 100% (unless already equal to it).
    Duplicates are allowed:

    >>> format_percentiles([0, 0.5, 0.02001, 0.5, 0.666666, 0.9999])
    ['0%', '50%', '2.0%', '50%', '66.67%', '99.99%']
    R^  R_  i    i   s/   percentiles should all be in the interval [0,1]Nid   t   %it   to_begint   to_endR[   (   R   Rq  R`  R   R'  R   t   astypeR   R   t   uniqueR8   t   floort   log10R   t   ediff1dR   t
   empty_likeRV  R   (   t   percentilest   int_idxt   outRI   t   unique_pctsRs  Rt  RC  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   format_percentiles  s*    !#
 $$
 "c         C  sv   t  |   }  |  j d  k	 r t S|  j } | t k } d } t j | | t |  d k  j	   d k } | rr t
 St S(   NiQ g    eAi    g  S$B(   R%   t   tzR8   Rm   Rj  R   R   t   logical_andR   t   sumRT   (   R=  t
   values_intt   consider_valuest   one_day_nanost	   even_days(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _is_dates_only  s    		%R   c         C  s   |  d  k s$ t |   r( t |   r( | S| d  k	 sD t |  t  r t |  d d   d  k	 rt t |   j |  }  q t |   j |  }  n  t |   S(   Nt   tzinfo(	   R8   R   R   Rr   R   Rk   t
   tz_convertt   tz_localizeR   (   R   R  Rh  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _format_datetime64  s    $c         C  sd   |  d  k s$ t |   r( t |   r( | St |  t  sF t |   }  n  | rY |  j |  S|  j Sd  S(   N(   R8   R   R   Rr   R   t   strftimet
   _date_repr(   R   Rh  Ri  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _format_datetime64_dateonly  s    $c           s-   |  r d     f d  Sd   f d  Sd  S(   Nc           s   t  |  d  d   S(   NRh  Ri  (   R  (   R   R  (   Ri  Rh  (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRE    s   c           s   t  |  d | d   S(   NR  Rh  (   R  (   R   R  (   Rh  (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRE    s    (   R8   (   t   is_dates_onlyRh  Ri  (    (   Ri  Rh  s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _get_format_datetime64  s    c         C  s    t  |   } | r | p d S| S(   s8    given values and a date_format, return a string format s   %Y-%m-%d(   R  (   R=  Ri  R  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRk    s    
R6  c           B  s   e  Z d    Z RS(   c         C  s_   |  j  j t  } t |  } |  j p9 t | d |  j } g  | D] } | |  ^ qC } | S(   s    we by definition have a TZ Ri  (   R=  Ru  RV  R  R  R  Ri  (   R=   R=  R  R  R   RO   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRB  %  s    		(   RR   RS   RB  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR6  #  s   R7  c           B  s    e  Z d  e d  Z d   Z RS(   R   c         K  s/   t  t |   j | |  | |  _ | |  _ d  S(   N(   R   R7  R>   Rh  t   box(   R=   R=  Rh  R  R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>   4  s    	c         C  sY   |  j  p' t |  j d |  j d |  j } t j g  |  j D] } | |  ^ q:  } | S(   NRh  R  (   R  t   _get_format_timedelta64R=  Rh  R  R   R   (   R=   R  R   RO   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRB  9  s
    	+(   RR   RS   Rm   R>   RB  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR7  2  s   c   	        s   |  j  t j  } | t k } d } t j | | | d k  j   d k } t j | t j |  | k  j   d k } | r d  n | r d  n d      f d   } | S(	   s   
    Return a formatter function for a range of timedeltas.
    These will all have the same format argument

    If box, then show the return in quotes
    iQ g    eAi    t   sub_dayt   longc           sw   |  d  k s$ t |   r( t |   r(  St |  t  sF t |   }  n  |  j d   }   rs d j d |  } n  | S(   NR?   s   '{res}'t   res(   R8   R   R   Rr   R   t
   _repr_baseR?   (   R   RP   (   R  R?   Rh  (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRp  Z  s    $g  S$BN(   Ru  R   t   int64R   R  R  RR  R8   (	   R=  Rh  R  R  R  R  R  t   all_sub_dayRp  (    (   R  R?   Rh  s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR  A  s    	'		c           s   t  |   d k s | d k r" |  S  d  k r: t     n  t   f d   |  D   | d  k	 rt t |    n  t d    d  k	 r   k r   n      f d   } g  |  D] } | |  ^ q }    j |   d | } | S(   Ni    R'  c         3  s   |  ] }   j  |  Vq d  S(   N(   R@   (   Rp   R   (   R]   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>p  s    s   display.max_colwidthc           sG    d  k	 rC  d k   j |    k @rC |   d  d }  qC n  |  S(   Ni   s   ...(   R8   R@   (   R   (   R]   t   conf_maxR   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   justy  s    R{   (   R@   R8   R\   R   R!   R)   (   t   stringsR)   R   R]   R  R   RP   (    (   R]   R  R   s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR   h  s    	c           s   |  }  f d       f d   } x? | |  re g  | D]" }   |  rV | d  n | ^ q: } q' Wg  | D]1 } | j  d  r   |  r | d n | ^ qm S(   sM   
    Trims zeros, leaving just one before the decimal points if need be.
    c           s   |    k o |  j  d  S(   Nt   inf(   t   endswith(   R   (   R:   (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt
   _is_number  s    c           sb   g  |  D] }   |  r | ^ q } t  |  d k oa t d   | D  oa t d   | D  S(   Ni    c         s  s   |  ] } | j  d   Vq d S(   t   0N(   R  (   Rp   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>  s    c         s  s'   |  ] } d  | k p d | k Vq d S(   t   et   EN(    (   Rp   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>  s    (   R@   R'  Rs   (   R=  R   t   finite(   R  (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   _cond  s    %(iR   R  (   R  (   t
   str_floatsR:   t   trimmedR  R   (    (   R  R:   s7   lib/python2.7/site-packages/pandas/io/formats/format.pyRY    s    3c         C  s0   t  |  t  r t j |  j   S|  j d  k	 Sd  S(   N(   Rr   R   t   comt   _any_not_noneRq   RW   R8   (   RY   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR$    s    t   EngFormatterc           B  s   e  Z d  Z i d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6Z d% e d#  Z d$   Z RS(&   sl   
    Formats float values according to engineering format.

    Based on matplotlib.ticker.EngFormatter
    R  it   zit   aiR	  it   pit   niR   it   miR6   i    t   ki   t   Mi   t   Gi	   t   Ti   t   Pi   R  i   t   Zi   t   Yi   c         C  s   | |  _  | |  _ d  S(   N(   t   accuracyt   use_eng_prefix(   R=   R  R  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR>     s    	c         C  s  d d l  } d d l } | j t |   } | j j |  rC d S| j j |  rY d Sd } | d k  r{ d } | } n  | d k r | j t | j | j   d  d   } n | j d  } | j	 t
 |  j j     } | j
 t	 |  j j     } t |  } |  j r&|  j | } n4 | d k  rHd j d	 |  } n d
 j d	 |  } | | d | }	 |  j d k rt d  }
 n t d  j d |  j  }
 |
 j d |	 d |  } | S(   s   Formats a number in engineering notation, appending a letter
        representing the power of 1000 of the original number. Some examples:

        >>> format_eng(0)       # for self.accuracy = 0
        ' 0'

        >>> format_eng(1000000) # for self.accuracy = 1,
                                #     self.use_eng_prefix = True
        ' 1.0M'

        >>> format_eng("-1e-6") # for self.accuracy = 2
                                #     self.use_eng_prefix = False
        '-1.00E-06'

        @param num: the value to represent
        @type num: either a numeric value or a string that can be converted to
                   a numeric value (as per decimal.Decimal constructor)

        @return: engineering formatted string
        iNR5   R  i   i    i   s   E-{pow10:02d}t   pow10s   E+{pow10:02d}i
   s   {mant: g}{prefix}s   {{mant: .{acc:d}f}}{{prefix}}t   acct   mantt   prefix(   R   t   matht   DecimalR   t   is_nant   is_infiniteR   Rw  Rx  R   R   t   ENG_PREFIXESt   keysR  R?   R  R8   R   (   R=   t   numR   R  t   dnumt   signR  t	   int_pow10R  R  t
   format_strt	   formatted(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   __call__  s:    
/	N(   RR   RS   R0  R  R8   Rm   R>   R  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR    s*   
i   c         C  s4   t  d t |  |   t  d t d |  d   d S(   s   
    Alter default behavior on how float is formatted in DataFrame.
    Format float in engineering format. By accuracy, we mean the number of
    decimal digits after the floating point.

    See also EngFormatter.
    s   display.float_formats   display.column_spacei   i	   N(   R"   R  R   (   R  R  (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   set_eng_float_format  s    	c   
      C  s   d } g  } d } t  |   d } x t |   D] \ } } | | } | | 7} | | k rz | d | k ot | d k }	 n | d | k o | d k }	 |	 r/ | j |  | } q/ q/ W| j t  |    | S(   Ni   i    i   (   R@   R   RN   (
   t   colsR   R   t   binst
   curr_widtht   i_last_columnRI   R   t
   w_adjoinedt   wrap(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR     s    

R6   c   	      C  s   t  |   d k r g  St g t  |  d  } g  } x |  D] } d } i  } xQ t |  D]C \ } } | | r~ | | k r~ qY t | | <| | | | <| } qY Wt  |  | | | <| j |  q: W| S(   s  For each index in each level the function returns lengths of indexes.

    Parameters
    ----------
    levels : list of lists
        List of values on for level.
    sentinel : string, optional
        Value which states that no new index starts on there.

    Returns
    ----------
    Returns list of maps. For each level returns map of indexes (key is index
    in row and value is length of index).
    i    (   R@   RT   R   Rm   RN   (	   R   t   sentinelt   controlRP   t   levelt
   last_indext   lengthsRI   t   key(    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   get_level_lengths%  s     

c         C  sU   t  d   | D  r; g  | D] } t j |  ^ q } n  |  j d j |   d S(   s   
    Appends lines to a buffer.

    Parameters
    ----------
    buf
        The buffer to write to
    lines
        The lines to append.
    c         s  s!   |  ] } t  | t j  Vq d  S(   N(   Rr   R   RB   (   Rp   R   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pys	   <genexpr>X  s    s   
N(   Rs   R   RB   R   RM   (   R9   t   linesR   (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyR  M  s    %(h   R0  t
   __future__R    t	   functoolsR   t   numpyR   t   pandas._libsR   t   pandas._libs.tslibR   t   pandas._libs.tslibsR   R   R   R   t   pandas.compatR   R	   R
   R   R   t   pandas.core.dtypes.commonR   R   R   R   R   R   R   R   R   R   R   R   t   pandas.core.dtypes.genericR   R   R   R   t   pandas.core.dtypes.missingR   R   R   R   t   pandas.core.baseR    t   pandas.core.commont   coret   commonR  t   pandas.core.configR!   R"   R  R#   R$   t   pandas.core.indexes.datetimesR%   t   pandas.io.commonR&   R'   t   pandas.io.formats.printingR(   R)   R*   t   pandas.io.formats.terminalR+   R1  t   _VALID_JUSTIFY_PARAMETERSR2  RV  R4   RU   R   R   R\   R   R   R8   RF   R;  R9  R:  R5  R8  R  R  R  R  R  Rk  R6  R7  Rm   R  R   RY  R$  R  R  R   R  R  (    (    (    s7   lib/python2.7/site-packages/pandas/io/formats/format.pyt   <module>   sr   "(R";6	 <M	?			'	c	(