Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 82fd441cd3f2a8bc33fc3ed41403eced > files > 1478

python-astropy-0.2.4-4.mga4.x86_64.rpm


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>astropy.io.ascii.core &mdash; Astropy v0.2.4</title>
    
    <link rel="stylesheet" href="../../../../_static/bootstrap-astropy.css" type="text/css" />
    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../../../../',
        VERSION:     '0.2.4',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
    <script type="text/javascript" src="../../../../_static/sidebar.js"></script>
    <link rel="shortcut icon" href="../../../../_static/astropy_logo.ico"/>
    <link rel="top" title="Astropy v0.2.4" href="../../../../index.html" />
    <link rel="up" title="Module code" href="../../../index.html" /> 
  </head>
  <body>
<div class="topbar">
  <a class="brand" title="Documentation Home" href="../../../../index.html"></a>
  <ul>
    <li><a class="homelink" title="AstroPy Homepage" href="http://www.astropy.org"></a></li>
    <li><a title="General Index" href="../../../../genindex.html">Index</a></li>
    <li><a title="Python Module Index" href="../../../../py-modindex.html">Modules</a></li>
    <li>
      
      
<form action="../../../../search.html" method="get">
  <input type="text" name="q" placeholder="Search" />
  <input type="hidden" name="check_keywords" value="yes" />
  <input type="hidden" name="area" value="default" />
</form>
      
    </li>
  </ul>
</div>

<div class="related">
    <h3>Navigation</h3>
    <ul>
      <li>
	<a href="../../../../index.html">Astropy v0.2.4</a>
	 &raquo;
      </li>
      <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li>
      
       
    </ul>
</div>
  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <h1>Source code for astropy.io.ascii.core</h1><div class="highlight"><pre>
<span class="c"># Licensed under a 3-clause BSD style license - see LICENSE.rst</span>
<span class="sd">&quot;&quot;&quot; An extensible ASCII table reader and writer.</span>

<span class="sd">core.py:</span>
<span class="sd">  Core base classes and functions for reading and writing tables.</span>

<span class="sd">:Copyright: Smithsonian Astrophysical Observatory (2010)</span>
<span class="sd">:Author: Tom Aldcroft (aldcroft@head.cfa.harvard.edu)</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="c">##</span>
<span class="c">## Redistribution and use in source and binary forms, with or without</span>
<span class="c">## modification, are permitted provided that the following conditions are met:</span>
<span class="c">##     * Redistributions of source code must retain the above copyright</span>
<span class="c">##       notice, this list of conditions and the following disclaimer.</span>
<span class="c">##     * Redistributions in binary form must reproduce the above copyright</span>
<span class="c">##       notice, this list of conditions and the following disclaimer in the</span>
<span class="c">##       documentation and/or other materials provided with the distribution.</span>
<span class="c">##     * Neither the name of the Smithsonian Astrophysical Observatory nor the</span>
<span class="c">##       names of its contributors may be used to endorse or promote products</span>
<span class="c">##       derived from this software without specific prior written permission.</span>
<span class="c">##</span>
<span class="c">## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND</span>
<span class="c">## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
<span class="c">## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</span>
<span class="c">## DISCLAIMED. IN NO EVENT SHALL &lt;COPYRIGHT HOLDER&gt; BE LIABLE FOR ANY</span>
<span class="c">## DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span>
<span class="c">## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</span>
<span class="c">## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND</span>
<span class="c">## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span>
<span class="c">## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
<span class="c">## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>

<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">csv</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">numpy</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>

<span class="kn">from</span> <span class="nn">...table</span> <span class="kn">import</span> <span class="n">Table</span>
<span class="kn">from</span> <span class="nn">...utils.data</span> <span class="kn">import</span> <span class="n">get_readable_fileobj</span>

<div class="viewcode-block" id="InconsistentTableError"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.InconsistentTableError.html#astropy.io.ascii.core.InconsistentTableError">[docs]</a><span class="k">class</span> <span class="nc">InconsistentTableError</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span>
    <span class="k">pass</span>

<span class="c"># Python 3 compatibility tweaks.  Should work back through 2.4.</span></div>
<span class="k">try</span><span class="p">:</span>
    <span class="kn">import</span> <span class="nn">cStringIO</span> <span class="kn">as</span> <span class="nn">io</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
    <span class="kn">import</span> <span class="nn">io</span>

<span class="k">try</span><span class="p">:</span>
    <span class="nb">next</span> <span class="o">=</span> <span class="nb">next</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
    <span class="nb">next</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>

<span class="k">try</span><span class="p">:</span>
    <span class="n">izip</span> <span class="o">=</span> <span class="n">itertools</span><span class="o">.</span><span class="n">izip</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
    <span class="n">izip</span> <span class="o">=</span> <span class="nb">zip</span>

<span class="k">try</span><span class="p">:</span>
    <span class="nb">long</span> <span class="o">=</span> <span class="nb">long</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
    <span class="nb">long</span> <span class="o">=</span> <span class="nb">int</span>

<span class="k">try</span><span class="p">:</span>
    <span class="nb">unicode</span> <span class="o">=</span> <span class="nb">unicode</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
    <span class="nb">unicode</span> <span class="o">=</span> <span class="nb">str</span>

<span class="c"># Python 2.4 comptability: any() function is built-in only for 2.5 onward</span>
<span class="k">try</span><span class="p">:</span>
    <span class="nb">any</span> <span class="o">=</span> <span class="nb">any</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">any</span><span class="p">(</span><span class="n">vals</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">val</span><span class="p">:</span>
                <span class="k">return</span> <span class="bp">True</span>
        <span class="k">return</span> <span class="bp">False</span>


<div class="viewcode-block" id="NoType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.NoType.html#astropy.io.ascii.core.NoType">[docs]</a><span class="k">class</span> <span class="nc">NoType</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">pass</span>

</div>
<div class="viewcode-block" id="StrType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.StrType.html#astropy.io.ascii.core.StrType">[docs]</a><span class="k">class</span> <span class="nc">StrType</span><span class="p">(</span><span class="n">NoType</span><span class="p">):</span>
    <span class="k">pass</span>

</div>
<div class="viewcode-block" id="NumType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.NumType.html#astropy.io.ascii.core.NumType">[docs]</a><span class="k">class</span> <span class="nc">NumType</span><span class="p">(</span><span class="n">NoType</span><span class="p">):</span>
    <span class="k">pass</span>

</div>
<div class="viewcode-block" id="FloatType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.FloatType.html#astropy.io.ascii.core.FloatType">[docs]</a><span class="k">class</span> <span class="nc">FloatType</span><span class="p">(</span><span class="n">NumType</span><span class="p">):</span>
    <span class="k">pass</span>

</div>
<div class="viewcode-block" id="IntType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.IntType.html#astropy.io.ascii.core.IntType">[docs]</a><span class="k">class</span> <span class="nc">IntType</span><span class="p">(</span><span class="n">NumType</span><span class="p">):</span>
    <span class="k">pass</span>

</div>
<div class="viewcode-block" id="AllType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.AllType.html#astropy.io.ascii.core.AllType">[docs]</a><span class="k">class</span> <span class="nc">AllType</span><span class="p">(</span><span class="n">StrType</span><span class="p">,</span> <span class="n">FloatType</span><span class="p">,</span> <span class="n">IntType</span><span class="p">):</span>
    <span class="k">pass</span>

</div>
<div class="viewcode-block" id="Column"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.Column.html#astropy.io.ascii.core.Column">[docs]</a><span class="k">class</span> <span class="nc">Column</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Table column.</span>

<span class="sd">    The key attributes of a Column object are:</span>

<span class="sd">    * **name** : column name</span>
<span class="sd">    * **index** : column index (first column has index=0, second has index=1, etc)</span>
<span class="sd">    * **type** : column type (NoType, StrType, NumType, FloatType, IntType)</span>
<span class="sd">    * **str_vals** : list of column values as strings</span>
<span class="sd">    * **data** : list of converted column values</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">index</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">NoType</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">str_vals</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="p">{}</span>

</div>
<div class="viewcode-block" id="BaseInputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseInputter.html#astropy.io.ascii.core.BaseInputter">[docs]</a><span class="k">class</span> <span class="nc">BaseInputter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the lines from the table input and return a list of lines.  The input</span>
<span class="sd">    table can be one of:</span>

<span class="sd">    * File name</span>
<span class="sd">    * String (newline separated) with all header and data lines (must have at least 2 lines)</span>
<span class="sd">    * File-like object with read() method</span>
<span class="sd">    * List of strings</span>
<span class="sd">    &quot;&quot;&quot;</span>
<div class="viewcode-block" id="BaseInputter.get_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseInputter.html#astropy.io.ascii.core.BaseInputter.get_lines">[docs]</a>    <span class="k">def</span> <span class="nf">get_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Get the lines from the ``table`` input.</span>

<span class="sd">        :param table: table input</span>
<span class="sd">        :returns: list of lines</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">if</span> <span class="p">(</span><span class="nb">hasattr</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="s">&#39;read&#39;</span><span class="p">)</span> <span class="ow">or</span>
                <span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table</span> <span class="ow">and</span> <span class="s">&#39;</span><span class="se">\r</span><span class="s">&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table</span> <span class="o">+</span> <span class="s">&#39;&#39;</span><span class="p">)):</span>
                <span class="k">with</span> <span class="n">get_readable_fileobj</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">as</span> <span class="n">file_obj</span><span class="p">:</span>
                    <span class="n">table</span> <span class="o">=</span> <span class="n">file_obj</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
            <span class="n">lines</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
        <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="c"># See if table supports indexing, slicing, and iteration</span>
                <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
                <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">]</span>
                <span class="nb">iter</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
                <span class="n">lines</span> <span class="o">=</span> <span class="n">table</span>
            <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
                <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
                    <span class="s">&#39;Input &quot;table&quot; must be a string (filename or data) or an iterable&#39;</span><span class="p">)</span>

        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="BaseInputter.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseInputter.html#astropy.io.ascii.core.BaseInputter.process_lines">[docs]</a>    <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Process lines for subsequent use.  In the default case do nothing.</span>
<span class="sd">        This routine is not generally intended for removing comment lines or</span>
<span class="sd">        stripping whitespace.  These are done (if needed) in the header and</span>
<span class="sd">        data line processing.</span>

<span class="sd">        Override this method if something more has to be done to convert raw</span>
<span class="sd">        input lines to the table rows.  For example the</span>
<span class="sd">        ContinuationLinesInputter derived class accounts for continuation</span>
<span class="sd">        characters if a row is split into lines.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">lines</span>

</div></div>
<div class="viewcode-block" id="BaseSplitter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter">[docs]</a><span class="k">class</span> <span class="nc">BaseSplitter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Base splitter that uses python&#39;s split method to do the work.</span>

<span class="sd">    This does not handle quoted values.  A key feature is the formulation of</span>
<span class="sd">    __call__ as a generator that returns a list of the split line values at</span>
<span class="sd">    each iteration.</span>

<span class="sd">    There are two methods that are intended to be overridden, first</span>
<span class="sd">    ``process_line()`` to do pre-processing on each input line before splitting</span>
<span class="sd">    and ``process_val()`` to do post-processing on each split string value.  By</span>
<span class="sd">    default these apply the string ``strip()`` function.  These can be set to</span>
<span class="sd">    another function via the instance attribute or be disabled entirely, for</span>
<span class="sd">    example::</span>

<span class="sd">      reader.header.splitter.process_val = lambda x: x.lstrip()</span>
<span class="sd">      reader.data.splitter.process_val = None</span>

<span class="sd">    :param delimiter: one-character string used to separate fields</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">None</span>

<div class="viewcode-block" id="BaseSplitter.process_line"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter.process_line">[docs]</a>    <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Remove whitespace at the beginning or end of line.  This is especially useful for</span>
<span class="sd">        whitespace-delimited files to prevent spurious columns at the beginning or end.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="BaseSplitter.process_val"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter.process_val">[docs]</a>    <span class="k">def</span> <span class="nf">process_val</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Remove whitespace at the beginning or end of value.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">val</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</div>
    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">:</span>
            <span class="n">lines</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
            <span class="n">vals</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="p">)</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">:</span>
                <span class="k">yield</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">yield</span> <span class="n">vals</span>

<div class="viewcode-block" id="BaseSplitter.join"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter.join">[docs]</a>    <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vals</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">delimiter</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span>
        <span class="k">return</span> <span class="n">delimiter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">)</span>

</div></div>
<div class="viewcode-block" id="DefaultSplitter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.DefaultSplitter.html#astropy.io.ascii.core.DefaultSplitter">[docs]</a><span class="k">class</span> <span class="nc">DefaultSplitter</span><span class="p">(</span><span class="n">BaseSplitter</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Default class to split strings into columns using python csv.  The class</span>
<span class="sd">    attributes are taken from the csv Dialect class.</span>

<span class="sd">    Typical usage::</span>

<span class="sd">      # lines = ..</span>
<span class="sd">      splitter = ascii.DefaultSplitter()</span>
<span class="sd">      for col_vals in splitter(lines):</span>
<span class="sd">          for col_val in col_vals:</span>
<span class="sd">               ...</span>

<span class="sd">    :param delimiter: one-character string used to separate fields.</span>
<span class="sd">    :param doublequote:  control how instances of *quotechar* in a field are quoted</span>
<span class="sd">    :param escapechar: character to remove special meaning from following character</span>
<span class="sd">    :param quotechar: one-character stringto quote fields containing special characters</span>
<span class="sd">    :param quoting: control when quotes are recognised by the reader</span>
<span class="sd">    :param skipinitialspace: ignore whitespace immediately following the delimiter</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">delimiter</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
    <span class="n">quotechar</span> <span class="o">=</span> <span class="s">&#39;&quot;&#39;</span>
    <span class="n">doublequote</span> <span class="o">=</span> <span class="bp">True</span>
    <span class="n">escapechar</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">quoting</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">QUOTE_MINIMAL</span>
    <span class="n">skipinitialspace</span> <span class="o">=</span> <span class="bp">True</span>

<div class="viewcode-block" id="DefaultSplitter.process_line"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.DefaultSplitter.html#astropy.io.ascii.core.DefaultSplitter.process_line">[docs]</a>    <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Remove whitespace at the beginning or end of line.  This is especially useful for</span>
<span class="sd">        whitespace-delimited files to prevent spurious columns at the beginning or end.</span>
<span class="sd">        If splitting on whitespace then replace unquoted tabs with space first&quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">==</span> <span class="s">&#39;\s&#39;</span><span class="p">:</span>
            <span class="n">line</span> <span class="o">=</span> <span class="n">_replace_tab_with_space</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</div>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">StringIO</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Return an iterator over the table ``lines``, where each iterator output</span>
<span class="sd">        is a list of the split line values.</span>

<span class="sd">        :param lines: list of table lines</span>
<span class="sd">        :returns: iterator</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">:</span>
            <span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">]</span>

        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">==</span> <span class="s">&#39;\s&#39;</span><span class="p">:</span>
            <span class="n">delimiter</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span>

        <span class="n">csv_reader</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span>
                                <span class="n">delimiter</span> <span class="o">=</span> <span class="n">delimiter</span><span class="p">,</span>
                                <span class="n">doublequote</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doublequote</span><span class="p">,</span>
                                <span class="n">escapechar</span> <span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">,</span>
                                <span class="n">quotechar</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span><span class="p">,</span>
                                <span class="n">quoting</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoting</span><span class="p">,</span>
                                <span class="n">skipinitialspace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">skipinitialspace</span>
                                <span class="p">)</span>
        <span class="k">for</span> <span class="n">vals</span> <span class="ow">in</span> <span class="n">csv_reader</span><span class="p">:</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">:</span>
                <span class="k">yield</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">yield</span> <span class="n">vals</span>

<div class="viewcode-block" id="DefaultSplitter.join"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.DefaultSplitter.html#astropy.io.ascii.core.DefaultSplitter.join">[docs]</a>    <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vals</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">delimiter</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span>

        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">writer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="p">,</span>
                                         <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="p">,</span>
                                         <span class="n">doublequote</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doublequote</span><span class="p">,</span>
                                         <span class="n">escapechar</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">,</span>
                                         <span class="n">quotechar</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span><span class="p">,</span>
                                         <span class="n">quoting</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoting</span><span class="p">,</span>
                                         <span class="n">lineterminator</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
                                         <span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="o">.</span><span class="n">truncate</span><span class="p">()</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">:</span>
            <span class="n">vals</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span><span class="o">.</span><span class="n">writerow</span><span class="p">(</span><span class="n">vals</span><span class="p">)</span>

        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>

</div></div>
<span class="k">def</span> <span class="nf">_replace_tab_with_space</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="n">escapechar</span><span class="p">,</span> <span class="n">quotechar</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Replace tab with space within ``line`` while respecting quoted substrings&quot;&quot;&quot;</span>
    <span class="n">newline</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">in_quote</span> <span class="o">=</span> <span class="bp">False</span>
    <span class="n">lastchar</span> <span class="o">=</span> <span class="s">&#39;NONE&#39;</span>
    <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="n">quotechar</span> <span class="ow">and</span> <span class="n">lastchar</span> <span class="o">!=</span> <span class="n">escapechar</span><span class="p">:</span>
            <span class="n">in_quote</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">in_quote</span>
        <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">in_quote</span><span class="p">:</span>
            <span class="n">char</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
        <span class="n">lastchar</span> <span class="o">=</span> <span class="n">char</span>
        <span class="n">newline</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>
    <span class="k">return</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">newline</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">_get_line_index</span><span class="p">(</span><span class="n">line_or_func</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Return the appropriate line index, depending on ``line_or_func`` which</span>
<span class="sd">    can be either a function, a positive or negative int, or None.</span>
<span class="sd">    &quot;&quot;&quot;</span>

    <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">line_or_func</span><span class="p">,</span> <span class="s">&#39;__call__&#39;</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">line_or_func</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
    <span class="k">elif</span> <span class="n">line_or_func</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">line_or_func</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">line_or_func</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">n_lines</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">n_lines</span> <span class="o">+</span> <span class="n">line_or_func</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="k">return</span> <span class="n">line_or_func</span>


<div class="viewcode-block" id="BaseHeader"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader">[docs]</a><span class="k">class</span> <span class="nc">BaseHeader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Base table header reader</span>

<span class="sd">    :param auto_format: format string for auto-generating column names</span>
<span class="sd">    :param start_line: None, int, or a function of ``lines`` that returns None or int</span>
<span class="sd">    :param comment: regular expression for comment lines</span>
<span class="sd">    :param splitter_class: Splitter class for splitting data lines into columns</span>
<span class="sd">    :param names: list of names corresponding to each data column</span>
<span class="sd">    :param include_names: list of names to include in output (default=None selects all names)</span>
<span class="sd">    :param exclude_names: list of names to exlude from output (applied after ``include_names``)</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">auto_format</span> <span class="o">=</span> <span class="s">&#39;col</span><span class="si">%d</span><span class="s">&#39;</span>
    <span class="n">start_line</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">comment</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">splitter_class</span> <span class="o">=</span> <span class="n">DefaultSplitter</span>
    <span class="n">names</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">include_names</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">exclude_names</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">write_spacer_lines</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ASCII_TABLE_WRITE_SPACER_LINE&#39;</span><span class="p">]</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">splitter_class</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">_set_cols_from_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c"># Filter full list of non-null column names with the include/exclude lists</span>
        <span class="n">names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">include_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">names</span><span class="o">.</span><span class="n">intersection_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">include_names</span><span class="p">)</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exclude_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">names</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exclude_names</span><span class="p">)</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">names</span><span class="p">)</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>

<div class="viewcode-block" id="BaseHeader.get_cols"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.get_cols">[docs]</a>    <span class="k">def</span> <span class="nf">get_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Initialize the header Column objects from the table ``lines``.</span>

<span class="sd">        Based on the previously set Header attributes find or create the column names.</span>
<span class="sd">        Sets ``self.cols`` with the list of Columns.  This list only includes the actual</span>
<span class="sd">        requested columns after filtering by the include_names and exclude_names</span>
<span class="sd">        attributes.  See ``self.names`` for the full list.</span>

<span class="sd">        :param lines: list of table lines</span>
<span class="sd">        :returns: None</span>
<span class="sd">        &quot;&quot;&quot;</span>

        <span class="n">start_line</span> <span class="o">=</span> <span class="n">_get_line_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">))</span>
        <span class="k">if</span> <span class="n">start_line</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="c"># No header line so auto-generate names from n_data_cols</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="c"># Get the data values from the first line of table data to determine n_data_cols</span>
                <span class="k">try</span><span class="p">:</span>
                    <span class="n">first_data_vals</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get_str_vals</span><span class="p">())</span>
                <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
                    <span class="k">raise</span> <span class="n">InconsistentTableError</span><span class="p">(</span><span class="s">&#39;No data lines found so cannot autogenerate &#39;</span>
                                                 <span class="s">&#39;column names&#39;</span><span class="p">)</span>
                <span class="n">n_data_cols</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">first_data_vals</span><span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">auto_format</span> <span class="o">%</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">n_data_cols</span><span class="o">+</span><span class="mi">1</span><span class="p">)]</span>

        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="c"># No column names supplied so read them from header line in table.</span>
            <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">)):</span>
                <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">start_line</span><span class="p">:</span>
                    <span class="k">break</span>
            <span class="k">else</span><span class="p">:</span> <span class="c"># No header line matching</span>
                <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;No header line found in table&#39;</span><span class="p">)</span>

            <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="p">([</span><span class="n">line</span><span class="p">]))</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">_set_cols_from_names</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="BaseHeader.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.process_lines">[docs]</a>    <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Generator to yield non-comment lines&quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span>
            <span class="n">re_comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">)</span>
        <span class="c"># Yield non-comment lines</span>
        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">line</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">re_comment</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)):</span>
                <span class="k">yield</span> <span class="n">line</span>
</div>
<div class="viewcode-block" id="BaseHeader.write"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.write">[docs]</a>    <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_line</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">spacer_line</span> <span class="ow">in</span> <span class="n">izip</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">),</span>
                                       <span class="n">itertools</span><span class="o">.</span><span class="n">cycle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">write_spacer_lines</span><span class="p">)):</span>
                <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">spacer_line</span><span class="p">)</span>
            <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">]))</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="BaseHeader.colnames"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.colnames">[docs]</a>    <span class="k">def</span> <span class="nf">colnames</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Return the column names of the table&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">)</span>
</div>
    <span class="k">def</span> <span class="nf">_get_n_data_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Return the number of expected data columns from data splitting.</span>
<span class="sd">        This is either explicitly set (typically for fixedwidth splitters)</span>
<span class="sd">        or set to self.names otherwise.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;_n_data_cols&#39;</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_n_data_cols</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_n_data_cols</span>

    <span class="k">def</span> <span class="nf">_set_n_data_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Return the number of expected data columns from data splitting.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_n_data_cols</span> <span class="o">=</span> <span class="n">val</span>

    <span class="n">n_data_cols</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">_get_n_data_cols</span><span class="p">,</span> <span class="n">_set_n_data_cols</span><span class="p">)</span>

<div class="viewcode-block" id="BaseHeader.get_type_map_key"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.get_type_map_key">[docs]</a>    <span class="k">def</span> <span class="nf">get_type_map_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">col</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">col</span><span class="o">.</span><span class="n">raw_type</span>
</div>
<div class="viewcode-block" id="BaseHeader.get_col_type"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.get_col_type">[docs]</a>    <span class="k">def</span> <span class="nf">get_col_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">col</span><span class="p">):</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">type_map_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_type_map_key</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">col_type_map</span><span class="p">[</span><span class="n">type_map_key</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;Unknown data type &quot;&quot;</span><span class="si">%s</span><span class="s">&quot;&quot; for column &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span>
                    <span class="n">col</span><span class="o">.</span><span class="n">raw_type</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>

</div></div>
<div class="viewcode-block" id="BaseData"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData">[docs]</a><span class="k">class</span> <span class="nc">BaseData</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Base table data reader.</span>

<span class="sd">    :param start_line: None, int, or a function of ``lines`` that returns None or int</span>
<span class="sd">    :param end_line: None, int, or a function of ``lines`` that returns None or int</span>
<span class="sd">    :param comment: Regular expression for comment lines</span>
<span class="sd">    :param splitter_class: Splitter class for splitting data lines into columns</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">start_line</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">end_line</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">comment</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">splitter_class</span> <span class="o">=</span> <span class="n">DefaultSplitter</span>
    <span class="n">write_spacer_lines</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ASCII_TABLE_WRITE_SPACER_LINE&#39;</span><span class="p">]</span>
    <span class="n">formats</span> <span class="o">=</span> <span class="p">{}</span>
    <span class="n">fill_values</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">fill_include_names</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">fill_exclude_names</span> <span class="o">=</span> <span class="bp">None</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">splitter_class</span><span class="p">()</span>

<div class="viewcode-block" id="BaseData.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.process_lines">[docs]</a>    <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Strip out comment lines and blank lines from list of ``lines``</span>

<span class="sd">        :param lines: all lines in table</span>
<span class="sd">        :returns: list of lines</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">nonblank_lines</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">lines</span> <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span>
            <span class="n">re_comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">)</span>
            <span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">nonblank_lines</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">re_comment</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">x</span><span class="p">)]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">nonblank_lines</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="BaseData.get_data_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.get_data_lines">[docs]</a>    <span class="k">def</span> <span class="nf">get_data_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Set the ``data_lines`` attribute to the lines slice comprising the</span>
<span class="sd">        table data values.&quot;&quot;&quot;</span>
        <span class="n">data_lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
        <span class="n">start_line</span> <span class="o">=</span> <span class="n">_get_line_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">,</span> <span class="n">data_lines</span><span class="p">)</span>
        <span class="n">end_line</span> <span class="o">=</span> <span class="n">_get_line_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">end_line</span><span class="p">,</span> <span class="n">data_lines</span><span class="p">)</span>

        <span class="k">if</span> <span class="n">start_line</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">end_line</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">data_lines</span> <span class="o">=</span> <span class="n">data_lines</span><span class="p">[</span><span class="nb">slice</span><span class="p">(</span><span class="n">start_line</span><span class="p">,</span> <span class="n">end_line</span><span class="p">)]</span>
        <span class="k">else</span><span class="p">:</span>  <span class="c"># Don&#39;t copy entire data lines unless necessary</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">data_lines</span> <span class="o">=</span> <span class="n">data_lines</span>
</div>
<div class="viewcode-block" id="BaseData.get_str_vals"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.get_str_vals">[docs]</a>    <span class="k">def</span> <span class="nf">get_str_vals</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Return a generator that returns a list of column values (as strings)</span>
<span class="sd">        for each data line.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_lines</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="BaseData.masks"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.masks">[docs]</a>    <span class="k">def</span> <span class="nf">masks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Set fill value for each column and then apply that fill value</span>

<span class="sd">        In the first step it is evaluated with value from ``fill_values`` applies to</span>
<span class="sd">        which column using ``fill_include_names`` and ``fill_exclude_names``.</span>
<span class="sd">        In the second step all replacements are done for the appropriate columns.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_set_fill_values</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_set_masks</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
</div>
    <span class="k">def</span> <span class="nf">_set_fill_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Set the fill values of the individual cols based on fill_values of BaseData</span>

<span class="sd">        fill values has the following form:</span>
<span class="sd">        &lt;fill_spec&gt; = (&lt;bad_value&gt;, &lt;fill_value&gt;, &lt;optional col_name&gt;...)</span>
<span class="sd">        fill_values = &lt;fill_spec&gt; or list of &lt;fill_spec&gt;&#39;s</span>

<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">:</span>
            <span class="c">#if input is only one &lt;fill_spec&gt;, then make it a list</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;&#39;</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">]</span>
            <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
                <span class="k">pass</span>
            <span class="c"># Step 1: Set the default list of columns which are affected by fill_values</span>
            <span class="n">colnames</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">colnames</span><span class="p">)</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_include_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">colnames</span><span class="o">.</span><span class="n">intersection_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_include_names</span><span class="p">)</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_exclude_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">colnames</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_exclude_names</span><span class="p">)</span>

            <span class="c"># Step 2a: Find out which columns are affected by this tuple</span>
            <span class="c"># iterate over reversed order, so last condition is set first and</span>
            <span class="c"># overwritten by earlier conditions</span>
            <span class="k">for</span> <span class="n">replacement</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">):</span>
                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">replacement</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
                    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;Format of fill_values must be &quot;</span>
                                     <span class="s">&quot;(&lt;bad&gt;, &lt;fill&gt;, &lt;optional col1&gt;, ...)&quot;</span><span class="p">)</span>
                <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">replacement</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
                    <span class="n">affect_cols</span> <span class="o">=</span> <span class="n">colnames</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">affect_cols</span> <span class="o">=</span> <span class="n">replacement</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>

                <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">((</span><span class="n">i</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">colnames</span><span class="p">)</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">affect_cols</span><span class="p">):</span>
                    <span class="n">cols</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">fill_values</span><span class="p">[</span><span class="n">replacement</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">replacement</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>

    <span class="k">def</span> <span class="nf">_set_masks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Replace string values in col.str_vals and set masks&quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="p">(</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">fill_values</span><span class="p">):</span>
                <span class="n">col</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">numpy</span><span class="o">.</span><span class="n">bool</span><span class="p">)</span>
                <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">str_val</span> <span class="ow">in</span> <span class="p">((</span><span class="n">i</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">)</span>
                                   <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">col</span><span class="o">.</span><span class="n">fill_values</span><span class="p">):</span>
                    <span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">fill_values</span><span class="p">[</span><span class="n">str_val</span><span class="p">]</span>
                    <span class="n">col</span><span class="o">.</span><span class="n">mask</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>

<div class="viewcode-block" id="BaseData.write"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.write">[docs]</a>    <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">,</span> <span class="s">&#39;__call__&#39;</span><span class="p">):</span>
            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">&#39;Start_line attribute cannot be callable for write()&#39;</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">data_start_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_line</span> <span class="ow">or</span> <span class="mi">0</span>

        <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">data_start_line</span><span class="p">:</span>
            <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">cycle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">write_spacer_lines</span><span class="p">))</span>

        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_col_formats</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">formats</span><span class="p">):</span>
            <span class="n">col_str_iters</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">iter_str_vals</span><span class="p">()</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">]</span>
            <span class="k">for</span> <span class="n">vals</span> <span class="ow">in</span> <span class="n">izip</span><span class="p">(</span><span class="o">*</span><span class="n">col_str_iters</span><span class="p">):</span>
                <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">vals</span><span class="p">))</span>
</div>
    <span class="nd">@contextmanager</span>
    <span class="k">def</span> <span class="nf">_set_col_formats</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">,</span> <span class="n">formats</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Context manager to save the internal column formats in `cols` and</span>
<span class="sd">        override with any custom `formats`.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">orig_formats</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">format</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">formats</span><span class="p">:</span>
                <span class="n">col</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">formats</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>

        <span class="k">yield</span>  <span class="c"># execute the nested context manager block</span>

        <span class="c"># Restore the original column format values</span>
        <span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">orig_format</span> <span class="ow">in</span> <span class="n">izip</span><span class="p">(</span><span class="n">cols</span><span class="p">,</span> <span class="n">orig_formats</span><span class="p">):</span>
            <span class="n">col</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">orig_format</span>
</div>
<span class="k">class</span> <span class="nc">DictLikeNumpy</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Provide minimal compatibility with numpy rec array API for BaseOutputter</span>
<span class="sd">    object::</span>

<span class="sd">      table = ascii.read(&#39;mytable.dat&#39;, numpy=False)</span>
<span class="sd">      table.field(&#39;x&#39;)    # List of elements in column &#39;x&#39;</span>
<span class="sd">      table.dtype.names   # get column names in order</span>
<span class="sd">      table[1]            # returns row 1 as a list</span>
<span class="sd">      table[1][2]         # 3nd column in row 1</span>
<span class="sd">      table[&#39;col1&#39;][1]    # Row 1 in column col1</span>
<span class="sd">      for row_vals in table:  # iterate over table rows</span>
<span class="sd">          print row_vals  # print list of vals in each row</span>

<span class="sd">    &quot;&quot;&quot;</span>
    <span class="c"># To do: - add colnames property to set colnames and dtype.names as well.</span>
    <span class="c"># - ordered dict?</span>

    <span class="k">class</span> <span class="nc">Dtype</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
        <span class="k">pass</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">=</span> <span class="n">DictLikeNumpy</span><span class="o">.</span><span class="n">Dtype</span><span class="p">()</span>
        <span class="nb">dict</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">return</span> <span class="nb">dict</span><span class="o">.</span><span class="n">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span> <span class="o">+</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
        <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">[</span><span class="nb">dict</span><span class="o">.</span><span class="n">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">)[</span><span class="n">item</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">names</span><span class="p">]</span>

    <span class="k">def</span> <span class="nf">field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colname</span><span class="p">):</span>
        <span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">colname</span><span class="p">]</span>

    <span class="k">def</span> <span class="nf">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">])</span>

    <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">__index</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">return</span> <span class="bp">self</span>

    <span class="k">def</span> <span class="nf">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">vals</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">__index</span><span class="p">]</span>
        <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">StopIteration</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">__index</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">return</span> <span class="n">vals</span>

    <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>  <span class="c"># pragma: py2</span>
        <span class="nb">next</span> <span class="o">=</span> <span class="n">__next__</span>


<div class="viewcode-block" id="convert_numpy"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.convert_numpy.html#astropy.io.ascii.core.convert_numpy">[docs]</a><span class="k">def</span> <span class="nf">convert_numpy</span><span class="p">(</span><span class="n">numpy_type</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Return a tuple ``(converter_func, converter_type)``.  The converter</span>
<span class="sd">    function converts a list into a numpy array of the given ``numpy_type``.</span>
<span class="sd">    This type must be a valid `numpy type</span>
<span class="sd">    &lt;http://docs.scipy.org/doc/numpy/user/basics.types.html&gt;`_, e.g.</span>
<span class="sd">    numpy.int, numpy.uint, numpy.int8, numpy.int64, numpy.float, numpy.float64,</span>
<span class="sd">    numpy.str.  The converter type is used to track the generic data type (int,</span>
<span class="sd">    float, str) that is produced by the converter function.</span>
<span class="sd">    &quot;&quot;&quot;</span>

    <span class="c"># Infer converter type from an instance of numpy_type.</span>
    <span class="n">type_name</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">([],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">numpy_type</span><span class="p">)</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">name</span>
    <span class="k">if</span> <span class="s">&#39;int&#39;</span> <span class="ow">in</span> <span class="n">type_name</span><span class="p">:</span>
        <span class="n">converter_type</span> <span class="o">=</span> <span class="n">IntType</span>
    <span class="k">elif</span> <span class="s">&#39;float&#39;</span> <span class="ow">in</span> <span class="n">type_name</span><span class="p">:</span>
        <span class="n">converter_type</span> <span class="o">=</span> <span class="n">FloatType</span>
    <span class="k">elif</span> <span class="s">&#39;str&#39;</span> <span class="ow">in</span> <span class="n">type_name</span><span class="p">:</span>
        <span class="n">converter_type</span> <span class="o">=</span> <span class="n">StrType</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="n">converter_type</span> <span class="o">=</span> <span class="n">AllType</span>

    <span class="k">def</span> <span class="nf">converter</span><span class="p">(</span><span class="n">vals</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">vals</span><span class="p">,</span> <span class="n">numpy_type</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">converter</span><span class="p">,</span> <span class="n">converter_type</span>
</div>
<div class="viewcode-block" id="BaseOutputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseOutputter.html#astropy.io.ascii.core.BaseOutputter">[docs]</a><span class="k">class</span> <span class="nc">BaseOutputter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Output table as a dict of column objects keyed on column name.  The</span>
<span class="sd">    table data are stored as plain python lists within the column objects.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">converters</span> <span class="o">=</span> <span class="p">{}</span>
    <span class="c"># Derived classes must define default_converters and __call__</span>

    <span class="nd">@staticmethod</span>
    <span class="k">def</span> <span class="nf">_validate_and_copy</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">converters</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Validate the format for the type converters and then copy those</span>
<span class="sd">        which are valid converters for this column (i.e. converter type is</span>
<span class="sd">        a subclass of col.type)&quot;&quot;&quot;</span>
        <span class="n">converters_out</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">converter</span> <span class="ow">in</span> <span class="n">converters</span><span class="p">:</span>
                <span class="n">converter_func</span><span class="p">,</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">converter</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">converter_type</span><span class="p">,</span> <span class="n">NoType</span><span class="p">):</span>
                    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">()</span>
                <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">converter_type</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">type</span><span class="p">):</span>
                    <span class="n">converters_out</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">converter_func</span><span class="p">,</span> <span class="n">converter_type</span><span class="p">))</span>

        <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;Error: invalid format for converters, see documentation</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span>
                             <span class="n">converters</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">converters_out</span>

    <span class="k">def</span> <span class="nf">_convert_vals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">:</span>
            <span class="n">converters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converters</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
                                             <span class="bp">self</span><span class="o">.</span><span class="n">default_converters</span><span class="p">)</span>
            <span class="n">col</span><span class="o">.</span><span class="n">converters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_and_copy</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">converters</span><span class="p">)</span>

            <span class="k">while</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s">&#39;data&#39;</span><span class="p">):</span>
                <span class="k">try</span><span class="p">:</span>
                    <span class="n">converter_func</span><span class="p">,</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">converters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
                    <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">converter_type</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">type</span><span class="p">):</span>
                        <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">()</span>
                    <span class="n">col</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">converter_func</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">)</span>
                    <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">converter_type</span>
                <span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span>
                    <span class="n">col</span><span class="o">.</span><span class="n">converters</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
                    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;Column </span><span class="si">%s</span><span class="s"> failed to convert&#39;</span> <span class="o">%</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>

</div>
<div class="viewcode-block" id="TableOutputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.TableOutputter.html#astropy.io.ascii.core.TableOutputter">[docs]</a><span class="k">class</span> <span class="nc">TableOutputter</span><span class="p">(</span><span class="n">BaseOutputter</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Output the table as an astropy.table.Table object.</span>
<span class="sd">    &quot;&quot;&quot;</span>

    <span class="n">default_converters</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert_numpy</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">int</span><span class="p">),</span>
                          <span class="n">convert_numpy</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">float</span><span class="p">),</span>
                          <span class="n">convert_numpy</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">str</span><span class="p">)]</span>

    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_convert_vals</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>

        <span class="c"># If there are any values that were filled and tagged with a mask bit then this</span>
        <span class="c"># will be a masked table.  Otherwise use a plain table.</span>
        <span class="n">masked</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span><span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s">&#39;mask&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">numpy</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">mask</span><span class="p">)</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">)</span>

        <span class="n">out</span> <span class="o">=</span> <span class="n">Table</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">data</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="n">names</span><span class="o">=</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="n">masked</span><span class="o">=</span><span class="n">masked</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">out_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">cols</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
            <span class="k">if</span> <span class="n">masked</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s">&#39;mask&#39;</span><span class="p">):</span>
                <span class="n">out_col</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">mask</span>
            <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;format&#39;</span><span class="p">,</span> <span class="s">&#39;units&#39;</span><span class="p">,</span> <span class="s">&#39;description&#39;</span><span class="p">):</span>
                <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
                    <span class="nb">setattr</span><span class="p">(</span><span class="n">out_col</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span>

        <span class="k">return</span> <span class="n">out</span>

</div>
<div class="viewcode-block" id="BaseReader"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader">[docs]</a><span class="k">class</span> <span class="nc">BaseReader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Class providing methods to read and write an ASCII table using the specified</span>
<span class="sd">    header, data, inputter, and outputter instances.</span>

<span class="sd">    Typical usage is to instantiate a Reader() object and customize the</span>
<span class="sd">    ``header``, ``data``, ``inputter``, and ``outputter`` attributes.  Each</span>
<span class="sd">    of these is an object of the corresponding class.</span>

<span class="sd">    There is one method ``inconsistent_handler`` that can be used to customize the</span>
<span class="sd">    behavior of ``read()`` in the event that a data row doesn&#39;t match the header.</span>
<span class="sd">    The default behavior is to raise an InconsistentTableError.</span>

<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">BaseHeader</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">BaseData</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">inputter</span> <span class="o">=</span> <span class="n">BaseInputter</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">outputter</span> <span class="o">=</span> <span class="n">TableOutputter</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">meta</span> <span class="o">=</span> <span class="p">{}</span>                  <span class="c"># Placeholder for storing table metadata</span>
        <span class="c"># Data and Header instances benefit from a little cross-coupling.  Header may need to</span>
        <span class="c"># know about number of data columns for auto-column name generation and Data may</span>
        <span class="c"># need to know about header (e.g. for fixed-width tables where widths are spec&#39;d in header.</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span>

<div class="viewcode-block" id="BaseReader.read"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.read">[docs]</a>    <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Read the ``table`` and return the results in a format determined by</span>
<span class="sd">        the ``outputter`` attribute.</span>

<span class="sd">        The ``table`` parameter is any string or object that can be processed</span>
<span class="sd">        by the instance ``inputter``.  For the base Inputter class ``table`` can be</span>
<span class="sd">        one of:</span>

<span class="sd">        * File name</span>
<span class="sd">        * String (newline separated) with all header and data lines (must have at least 2 lines)</span>
<span class="sd">        * List of strings</span>

<span class="sd">        :param table: table input</span>
<span class="sd">        :returns: output table</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="c"># If ``table`` is a file then store the name in the ``data``</span>
        <span class="c"># attribute. The ``table`` is a &quot;file&quot; if it is a string</span>
        <span class="c"># without the new line specific to the OS.</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">linesep</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table</span> <span class="o">+</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">table_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
        <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
            <span class="c"># Not a string.</span>
            <span class="k">pass</span>

        <span class="c"># Same from __init__.  ??? Do these need to be here?</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inputter</span><span class="o">.</span><span class="n">get_lines</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get_data_lines</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">get_cols</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">)</span>
        <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">cols</span>         <span class="c"># header.cols corresponds to *output* columns requested</span>
        <span class="n">n_data_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">n_data_cols</span> <span class="c"># number of data cols expected from splitter</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="n">cols</span>

        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">str_vals</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get_str_vals</span><span class="p">()):</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_vals</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_data_cols</span><span class="p">:</span>
                <span class="n">str_vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inconsistent_handler</span><span class="p">(</span><span class="n">str_vals</span><span class="p">,</span> <span class="n">n_data_cols</span><span class="p">)</span>

                <span class="c">#if str_vals is None, we skip this row</span>
                <span class="k">if</span> <span class="n">str_vals</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                    <span class="k">continue</span>

                <span class="c">#otherwise, we raise an error only if it is still inconsistent</span>
                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_vals</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_data_cols</span><span class="p">:</span>
                    <span class="n">errmsg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;Number of header columns (</span><span class="si">%d</span><span class="s">) inconsistent with &#39;</span>
                              <span class="s">&#39;data columns (</span><span class="si">%d</span><span class="s">) at data line </span><span class="si">%d</span><span class="se">\n</span><span class="s">&#39;</span>
                              <span class="s">&#39;Header values: </span><span class="si">%s</span><span class="se">\n</span><span class="s">&#39;</span>
                              <span class="s">&#39;Data values: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cols</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_vals</span><span class="p">),</span> <span class="n">i</span><span class="p">,</span>
                                                   <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="n">str_vals</span><span class="p">))</span>
                    <span class="k">raise</span> <span class="n">InconsistentTableError</span><span class="p">(</span><span class="n">errmsg</span><span class="p">)</span>

            <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">:</span>
                <span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">str_vals</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">index</span><span class="p">])</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">masks</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
        <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputter</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">cols</span>

        <span class="k">return</span> <span class="n">table</span>
</div>
<div class="viewcode-block" id="BaseReader.inconsistent_handler"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.inconsistent_handler">[docs]</a>    <span class="k">def</span> <span class="nf">inconsistent_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">str_vals</span><span class="p">,</span> <span class="n">ncols</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Adjust or skip data entries if a row is inconsistent with the header.</span>

<span class="sd">        The default implementation does no adjustment, and hence will always trigger</span>
<span class="sd">        an exception in read() any time the number of data entries does not match</span>
<span class="sd">        the header.</span>

<span class="sd">        Note that this will *not* be called if the row already matches the header.</span>

<span class="sd">        :param str_vals: A list of value strings from the current row of the table.</span>
<span class="sd">        :param ncols: The expected number of entries from the table header.</span>
<span class="sd">        :returns:</span>
<span class="sd">            list of strings to be parsed into data entries in the output table. If</span>
<span class="sd">            the length of this list does not match ``ncols``, an exception will be</span>
<span class="sd">            raised in read().  Can also be None, in which case the row will be</span>
<span class="sd">            skipped.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="c">#an empty list will always trigger an InconsistentTableError in read()</span>
        <span class="k">return</span> <span class="n">str_vals</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="BaseReader.comment_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.comment_lines">[docs]</a>    <span class="k">def</span> <span class="nf">comment_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Return lines in the table that match header.comment regexp&quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;lines&#39;</span><span class="p">):</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;Table must be read prior to accessing the header_comment_lines&#39;</span><span class="p">)</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span>
            <span class="n">re_comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span><span class="p">)</span>
            <span class="n">comment_lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span> <span class="k">if</span> <span class="n">re_comment</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">x</span><span class="p">)]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">comment_lines</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">return</span> <span class="n">comment_lines</span>
</div>
<div class="viewcode-block" id="BaseReader.write"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.write">[docs]</a>    <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Write ``table`` as list of strings.</span>

<span class="sd">        :param table: input table data (astropy.table.Table object)</span>
<span class="sd">        :returns: list of strings corresponding to ASCII table</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="c"># link information about the columns to the writer object (i.e. self)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">cols</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">cols</span>

        <span class="c"># Write header and data to lines list</span>
        <span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>

        <span class="k">return</span> <span class="n">lines</span>
</div></div>
<div class="viewcode-block" id="ContinuationLinesInputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.ContinuationLinesInputter.html#astropy.io.ascii.core.ContinuationLinesInputter">[docs]</a><span class="k">class</span> <span class="nc">ContinuationLinesInputter</span><span class="p">(</span><span class="n">BaseInputter</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Inputter where lines ending in ``continuation_char`` are joined</span>
<span class="sd">    with the subsequent line.  Example::</span>

<span class="sd">      col1 col2 col3</span>
<span class="sd">      1 \</span>
<span class="sd">      2 3</span>
<span class="sd">      4 5 \</span>
<span class="sd">      6</span>
<span class="sd">    &quot;&quot;&quot;</span>

    <span class="n">continuation_char</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span>
    <span class="n">replace_char</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
    <span class="c"># If no_continue is not None then lines matching this regex are not subject</span>
    <span class="c"># to line continuation.  The initial use case here is Daophot.  In this</span>
    <span class="c"># case the continuation character is just replaced with replace_char.</span>
    <span class="n">no_continue</span> <span class="o">=</span> <span class="bp">None</span>

<div class="viewcode-block" id="ContinuationLinesInputter.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.ContinuationLinesInputter.html#astropy.io.ascii.core.ContinuationLinesInputter.process_lines">[docs]</a>    <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
        <span class="n">re_no_continue</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">no_continue</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_continue</span> <span class="k">else</span> <span class="bp">None</span>

        <span class="n">parts</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">outlines</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">re_no_continue</span> <span class="ow">and</span> <span class="n">re_no_continue</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
                <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">continuation_char</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_char</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">continuation_char</span><span class="p">):</span>
                <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">continuation_char</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_char</span><span class="p">))</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
                <span class="n">outlines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">))</span>
                <span class="n">parts</span> <span class="o">=</span> <span class="p">[]</span>

        <span class="k">return</span> <span class="n">outlines</span>

</div></div>
<div class="viewcode-block" id="WhitespaceSplitter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.WhitespaceSplitter.html#astropy.io.ascii.core.WhitespaceSplitter">[docs]</a><span class="k">class</span> <span class="nc">WhitespaceSplitter</span><span class="p">(</span><span class="n">DefaultSplitter</span><span class="p">):</span>
<div class="viewcode-block" id="WhitespaceSplitter.process_line"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.WhitespaceSplitter.html#astropy.io.ascii.core.WhitespaceSplitter.process_line">[docs]</a>    <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Replace tab with space within ``line`` while respecting quoted substrings&quot;&quot;&quot;</span>
        <span class="n">newline</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">in_quote</span> <span class="o">=</span> <span class="bp">False</span>
        <span class="n">lastchar</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span>
                                           <span class="n">lastchar</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">):</span>
                <span class="n">in_quote</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">in_quote</span>
            <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">in_quote</span><span class="p">:</span>
                <span class="n">char</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
            <span class="n">lastchar</span> <span class="o">=</span> <span class="n">char</span>
            <span class="n">newline</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>

        <span class="k">return</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">newline</span><span class="p">)</span>
</div></div>
<span class="n">extra_reader_pars</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;Reader&#39;</span><span class="p">,</span> <span class="s">&#39;Inputter&#39;</span><span class="p">,</span> <span class="s">&#39;Outputter&#39;</span><span class="p">,</span>
                     <span class="s">&#39;delimiter&#39;</span><span class="p">,</span> <span class="s">&#39;comment&#39;</span><span class="p">,</span> <span class="s">&#39;quotechar&#39;</span><span class="p">,</span> <span class="s">&#39;header_start&#39;</span><span class="p">,</span>
                     <span class="s">&#39;data_start&#39;</span><span class="p">,</span> <span class="s">&#39;data_end&#39;</span><span class="p">,</span> <span class="s">&#39;converters&#39;</span><span class="p">,</span>
                     <span class="s">&#39;data_Splitter&#39;</span><span class="p">,</span> <span class="s">&#39;header_Splitter&#39;</span><span class="p">,</span>
                     <span class="s">&#39;names&#39;</span><span class="p">,</span> <span class="s">&#39;include_names&#39;</span><span class="p">,</span> <span class="s">&#39;exclude_names&#39;</span><span class="p">,</span>
                     <span class="s">&#39;fill_values&#39;</span><span class="p">,</span> <span class="s">&#39;fill_include_names&#39;</span><span class="p">,</span> <span class="s">&#39;fill_exclude_names&#39;</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_get_reader</span><span class="p">(</span><span class="n">Reader</span><span class="p">,</span> <span class="n">Inputter</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">Outputter</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Initialize a table reader allowing for common customizations.  See ui.get_reader()</span>
<span class="sd">    for param docs.  This routine is for internal (package) use only and is useful</span>
<span class="sd">    because it depends only on the &quot;core&quot; module.</span>
<span class="sd">    &quot;&quot;&quot;</span>

    <span class="n">reader_kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">extra_reader_pars</span><span class="p">)</span>
    <span class="n">reader</span> <span class="o">=</span> <span class="n">Reader</span><span class="p">(</span><span class="o">**</span><span class="n">reader_kwargs</span><span class="p">)</span>

    <span class="k">if</span> <span class="n">Inputter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">inputter</span> <span class="o">=</span> <span class="n">Inputter</span><span class="p">()</span>
    <span class="n">reader</span><span class="o">.</span><span class="n">outputter</span> <span class="o">=</span> <span class="n">TableOutputter</span><span class="p">()</span>

    <span class="k">if</span> <span class="n">Outputter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">outputter</span> <span class="o">=</span> <span class="n">Outputter</span><span class="p">()</span>

    <span class="k">if</span> <span class="s">&#39;delimiter&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;delimiter&#39;</span><span class="p">]</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;delimiter&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;comment&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;comment&#39;</span><span class="p">]</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;comment&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;quotechar&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;quotechar&#39;</span><span class="p">]</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;quotechar&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;data_start&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">start_line</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;data_start&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;data_end&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">end_line</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;data_end&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;header_start&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">start_line</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;header_start&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;converters&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">outputter</span><span class="o">.</span><span class="n">converters</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;converters&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;data_Splitter&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;data_Splitter&#39;</span><span class="p">]()</span>
    <span class="k">if</span> <span class="s">&#39;header_Splitter&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;header_Splitter&#39;</span><span class="p">]()</span>
    <span class="k">if</span> <span class="s">&#39;names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;include_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;include_names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;exclude_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;exclude_names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;fill_values&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;fill_values&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;fill_include_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;fill_include_names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;fill_exclude_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;fill_exclude_names&#39;</span><span class="p">]</span>

    <span class="k">return</span> <span class="n">reader</span>

<span class="n">extra_writer_pars</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;delimiter&#39;</span><span class="p">,</span> <span class="s">&#39;comment&#39;</span><span class="p">,</span> <span class="s">&#39;quotechar&#39;</span><span class="p">,</span> <span class="s">&#39;formats&#39;</span><span class="p">,</span> 
                     <span class="s">&#39;strip_whitespace&#39;</span><span class="p">,</span>
                     <span class="s">&#39;names&#39;</span><span class="p">,</span> <span class="s">&#39;include_names&#39;</span><span class="p">,</span> <span class="s">&#39;exclude_names&#39;</span><span class="p">,</span>
                     <span class="s">&#39;fill_values&#39;</span><span class="p">,</span> <span class="s">&#39;fill_include_names&#39;</span><span class="p">,</span>
                     <span class="s">&#39;fill_exclude_names&#39;</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_get_writer</span><span class="p">(</span><span class="n">Writer</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Initialize a table writer allowing for common customizations. This</span>
<span class="sd">    routine is for internal (package) use only and is useful because it depends</span>
<span class="sd">    only on the &quot;core&quot; module. &quot;&quot;&quot;</span>

    <span class="n">writer_kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">extra_writer_pars</span><span class="p">)</span>
    <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="o">**</span><span class="n">writer_kwargs</span><span class="p">)</span>

    <span class="k">if</span> <span class="s">&#39;delimiter&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;delimiter&#39;</span><span class="p">]</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;delimiter&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;comment&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">write_comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;comment&#39;</span><span class="p">]</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">write_comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;comment&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;quotechar&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;quotechar&#39;</span><span class="p">]</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;quotechar&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;formats&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">formats</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;formats&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;strip_whitespace&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;strip_whitespace&#39;</span><span class="p">]:</span>
            <span class="c"># Restore the default SplitterClass process_val method which strips</span>
            <span class="c"># whitespace.  This may have been changed in the Writer</span>
            <span class="c"># initialization (e.g. Rdb and Tab)</span>
            <span class="n">Class</span> <span class="o">=</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">__class__</span>
            <span class="n">obj</span> <span class="o">=</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span>
            <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">process_val</span> <span class="o">=</span> <span class="n">Class</span><span class="o">.</span><span class="n">process_val</span><span class="o">.</span><span class="n">__get__</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Class</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">process_val</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="k">if</span> <span class="s">&#39;names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;include_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;include_names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;exclude_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;exclude_names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;fill_values&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;fill_values&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;fill_include_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;fill_include_names&#39;</span><span class="p">]</span>
    <span class="k">if</span> <span class="s">&#39;fill_exclude_names&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
        <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;fill_exclude_names&#39;</span><span class="p">]</span>
    <span class="k">return</span> <span class="n">writer</span>
</pre></div>

          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper"><h3>Page Contents</h3>


        </div>
      </div>
      <div class="clearer"></div>
    </div>
<footer class="footer">
  <p class="pull-right"> &nbsp;
    <a href="#">Back to Top</a></p>
  <p>
    &copy; Copyright 2011-2013, The Astropy Developers.<br/>
    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. &nbsp;
    Last built 22 Oct 2013. <br/>
  </p>
</footer>
  </body>
</html>