Sophie

Sophie

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

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.votable.tree &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.votable.tree</h1><div class="highlight"><pre>
<span class="c"># Licensed under a 3-clause BSD style license - see LICENSE.rst</span>
<span class="c"># TODO: Test FITS parsing</span>

<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">absolute_import</span>

<span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">IS_PY3K</span>

<span class="c"># STDLIB</span>
<span class="kn">import</span> <span class="nn">codecs</span>
<span class="kn">import</span> <span class="nn">io</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="k">if</span> <span class="n">IS_PY3K</span><span class="p">:</span>
    <span class="n">string_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="n">string_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">)</span>

<span class="c"># THIRD-PARTY</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">ma</span>

<span class="c"># LOCAL</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="kn">import</span> <span class="n">fits</span>
<span class="kn">from</span> <span class="nn">...</span> <span class="kn">import</span> <span class="n">__version__</span> <span class="k">as</span> <span class="n">astropy_version</span>
<span class="kn">from</span> <span class="nn">...utils.collections</span> <span class="kn">import</span> <span class="n">HomogeneousList</span>
<span class="kn">from</span> <span class="nn">...utils.xml.writer</span> <span class="kn">import</span> <span class="n">XMLWriter</span>

<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">converters</span>
<span class="kn">from</span> <span class="nn">.exceptions</span> <span class="kn">import</span> <span class="p">(</span><span class="n">warn_or_raise</span><span class="p">,</span> <span class="n">vo_warn</span><span class="p">,</span> <span class="n">vo_raise</span><span class="p">,</span> <span class="n">vo_reraise</span><span class="p">,</span>
    <span class="n">warn_unknown_attrs</span><span class="p">,</span>
    <span class="n">W06</span><span class="p">,</span> <span class="n">W07</span><span class="p">,</span> <span class="n">W08</span><span class="p">,</span> <span class="n">W09</span><span class="p">,</span> <span class="n">W10</span><span class="p">,</span> <span class="n">W11</span><span class="p">,</span> <span class="n">W12</span><span class="p">,</span> <span class="n">W13</span><span class="p">,</span> <span class="n">W15</span><span class="p">,</span> <span class="n">W17</span><span class="p">,</span> <span class="n">W18</span><span class="p">,</span> <span class="n">W19</span><span class="p">,</span> <span class="n">W20</span><span class="p">,</span>
    <span class="n">W21</span><span class="p">,</span> <span class="n">W22</span><span class="p">,</span> <span class="n">W26</span><span class="p">,</span> <span class="n">W27</span><span class="p">,</span> <span class="n">W28</span><span class="p">,</span> <span class="n">W29</span><span class="p">,</span> <span class="n">W32</span><span class="p">,</span> <span class="n">W33</span><span class="p">,</span> <span class="n">W35</span><span class="p">,</span> <span class="n">W36</span><span class="p">,</span> <span class="n">W37</span><span class="p">,</span> <span class="n">W38</span><span class="p">,</span> <span class="n">W40</span><span class="p">,</span>
    <span class="n">W41</span><span class="p">,</span> <span class="n">W42</span><span class="p">,</span> <span class="n">W43</span><span class="p">,</span> <span class="n">W44</span><span class="p">,</span> <span class="n">W45</span><span class="p">,</span> <span class="n">W50</span><span class="p">,</span> <span class="n">E06</span><span class="p">,</span> <span class="n">E08</span><span class="p">,</span> <span class="n">E09</span><span class="p">,</span> <span class="n">E10</span><span class="p">,</span> <span class="n">E11</span><span class="p">,</span> <span class="n">E12</span><span class="p">,</span> <span class="n">E13</span><span class="p">,</span>
    <span class="n">E14</span><span class="p">,</span> <span class="n">E15</span><span class="p">,</span> <span class="n">E16</span><span class="p">,</span> <span class="n">E17</span><span class="p">,</span> <span class="n">E18</span><span class="p">,</span> <span class="n">E19</span><span class="p">,</span> <span class="n">E20</span><span class="p">,</span> <span class="n">E21</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">ucd</span> <span class="k">as</span> <span class="n">ucd_mod</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">util</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">xmlutil</span>

<span class="k">try</span><span class="p">:</span>
    <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">tablewriter</span>
    <span class="n">_has_c_tabledata_writer</span> <span class="o">=</span> <span class="bp">True</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
    <span class="n">_has_c_tabledata_writer</span> <span class="o">=</span> <span class="bp">False</span>


<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s">&#39;Link&#39;</span><span class="p">,</span> <span class="s">&#39;Info&#39;</span><span class="p">,</span> <span class="s">&#39;Values&#39;</span><span class="p">,</span> <span class="s">&#39;Field&#39;</span><span class="p">,</span> <span class="s">&#39;Param&#39;</span><span class="p">,</span> <span class="s">&#39;CooSys&#39;</span><span class="p">,</span>
    <span class="s">&#39;FieldRef&#39;</span><span class="p">,</span> <span class="s">&#39;ParamRef&#39;</span><span class="p">,</span> <span class="s">&#39;Group&#39;</span><span class="p">,</span> <span class="s">&#39;Table&#39;</span><span class="p">,</span> <span class="s">&#39;Resource&#39;</span><span class="p">,</span>
    <span class="s">&#39;VOTableFile&#39;</span>
    <span class="p">]</span>


<span class="c"># The default number of rows to read in each chunk before converting</span>
<span class="c"># to an array.</span>
<span class="n">DEFAULT_CHUNK_SIZE</span> <span class="o">=</span> <span class="mi">256</span>
<span class="n">RESIZE_AMOUNT</span> <span class="o">=</span> <span class="mf">1.5</span>

<span class="c">######################################################################</span>
<span class="c"># FACTORY FUNCTIONS</span>


<span class="k">def</span> <span class="nf">_resize</span><span class="p">(</span><span class="n">masked</span><span class="p">,</span> <span class="n">new_size</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Masked arrays can not be resized inplace, and `np.resize` and</span>
<span class="sd">    `ma.resize` are both incompatible with structured arrays.</span>
<span class="sd">    Therefore, we do all this.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">new_array</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">new_size</span><span class="p">,),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">masked</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span>
    <span class="n">length</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">masked</span><span class="p">),</span> <span class="n">new_size</span><span class="p">)</span>
    <span class="n">new_array</span><span class="o">.</span><span class="n">data</span><span class="p">[:</span><span class="n">length</span><span class="p">]</span> <span class="o">=</span> <span class="n">masked</span><span class="o">.</span><span class="n">data</span><span class="p">[:</span><span class="n">length</span><span class="p">]</span>
    <span class="k">if</span> <span class="n">length</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
        <span class="n">new_array</span><span class="o">.</span><span class="n">mask</span><span class="p">[:</span><span class="n">length</span><span class="p">]</span> <span class="o">=</span> <span class="n">masked</span><span class="o">.</span><span class="n">mask</span><span class="p">[:</span><span class="n">length</span><span class="p">]</span>
    <span class="k">return</span> <span class="n">new_array</span>


<span class="k">def</span> <span class="nf">_lookup_by_id_factory</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">element_name</span><span class="p">,</span> <span class="n">doc</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Creates a function useful for looking up an element by ID.</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    iterator : generator</span>
<span class="sd">        A generator that iterates over some arbitrary set of elements</span>

<span class="sd">    element_name : str</span>
<span class="sd">        The XML element name of the elements being iterated over (used</span>
<span class="sd">        for error messages only).</span>

<span class="sd">    doc : str</span>
<span class="sd">        A docstring to apply to the generated function.</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    factory : function</span>
<span class="sd">        A function that looks up an element by ID</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">lookup_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Given an XML id *ref*, finds the first element in the iterator</span>
<span class="sd">        with the attribute ID == *ref*.  If *before* is provided, will</span>
<span class="sd">        stop searching at the object *before*.  This is important,</span>
<span class="sd">        since &quot;forward references&quot; are not allowed in the VOTABLE</span>
<span class="sd">        format.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">)():</span>
            <span class="k">if</span> <span class="n">element</span> <span class="ow">is</span> <span class="n">before</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">ID</span> <span class="o">==</span> <span class="n">ref</span><span class="p">:</span>
                    <span class="n">vo_raise</span><span class="p">(</span>
                        <span class="s">&quot;</span><span class="si">%s</span><span class="s"> references itself&quot;</span> <span class="o">%</span> <span class="n">element_name</span><span class="p">,</span>
                        <span class="n">element</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">)</span>
                <span class="k">break</span>
            <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">ID</span> <span class="o">==</span> <span class="n">ref</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">element</span>
        <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span>
            <span class="s">&quot;No </span><span class="si">%s</span><span class="s"> with ID &#39;</span><span class="si">%s</span><span class="s">&#39; found before the referencing </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span>
            <span class="p">(</span><span class="n">element_name</span><span class="p">,</span> <span class="n">ref</span><span class="p">,</span> <span class="n">element_name</span><span class="p">))</span>

    <span class="n">lookup_by_id</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="n">doc</span>
    <span class="k">return</span> <span class="n">lookup_by_id</span>


<span class="k">def</span> <span class="nf">_lookup_by_id_or_name_factory</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">element_name</span><span class="p">,</span> <span class="n">doc</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Like `_lookup_by_id_factory`, but also looks in the &quot;name&quot; attribute.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">lookup_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Given an key *ref*, finds the first element in the iterator</span>
<span class="sd">        with the attribute ID == *ref* or name == *ref*.  If *before*</span>
<span class="sd">        is provided, will stop searching at the object *before*.  This</span>
<span class="sd">        is important, since &quot;forward references&quot; are not allowed in</span>
<span class="sd">        the VOTABLE format.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">)():</span>
            <span class="k">if</span> <span class="n">element</span> <span class="ow">is</span> <span class="n">before</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">ref</span> <span class="ow">in</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
                    <span class="n">vo_raise</span><span class="p">(</span>
                        <span class="s">&quot;</span><span class="si">%s</span><span class="s"> references itself&quot;</span> <span class="o">%</span> <span class="n">element_name</span><span class="p">,</span>
                        <span class="n">element</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">)</span>
                <span class="k">break</span>
            <span class="k">if</span> <span class="n">ref</span> <span class="ow">in</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
                <span class="k">return</span> <span class="n">element</span>
        <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span>
            <span class="s">&quot;No </span><span class="si">%s</span><span class="s"> with ID or name &#39;</span><span class="si">%s</span><span class="s">&#39; found before the referencing </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span>
            <span class="p">(</span><span class="n">element_name</span><span class="p">,</span> <span class="n">ref</span><span class="p">,</span> <span class="n">element_name</span><span class="p">))</span>

    <span class="n">lookup_by_id</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="n">doc</span>
    <span class="k">return</span> <span class="n">lookup_by_id</span>


<span class="c">######################################################################</span>
<span class="c"># ATTRIBUTE CHECKERS</span>
<span class="k">def</span> <span class="nf">check_astroyear</span><span class="p">(</span><span class="n">year</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Raises a `~astropy.io.votable.exceptions.VOTableSpecError` if</span>
<span class="sd">    *year* is not a valid astronomical year as defined by the VOTABLE</span>
<span class="sd">    standard.</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    year : str</span>
<span class="sd">        An astronomical year string</span>

<span class="sd">    field : str</span>
<span class="sd">        The name of the field this year was found in (used for error</span>
<span class="sd">        message)</span>

<span class="sd">    config, pos : optional</span>
<span class="sd">        Information about the source of the value</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">year</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span>
        <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">ur&quot;^[JB]?[0-9]+([.][0-9]*)?$&quot;</span><span class="p">,</span> <span class="n">year</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">):</span>
        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W07</span><span class="p">,</span> <span class="n">W07</span><span class="p">,</span> <span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">year</span><span class="p">),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">False</span>
    <span class="k">return</span> <span class="bp">True</span>


<span class="k">def</span> <span class="nf">check_string</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">attr_name</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Raises a `~astropy.io.votable.exceptions.VOTableSpecError` if</span>
<span class="sd">    *string* is not a string or Unicode string.</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    string : str</span>
<span class="sd">        An astronomical year string</span>

<span class="sd">    field : str</span>
<span class="sd">        The name of the field this year was found in (used for error</span>
<span class="sd">        message)</span>

<span class="sd">    config, pos : optional</span>
<span class="sd">        Information about the source of the value</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">if</span> <span class="n">string</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span>
        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W08</span><span class="p">,</span> <span class="n">W08</span><span class="p">,</span> <span class="n">attr_name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">False</span>
    <span class="k">return</span> <span class="bp">True</span>


<span class="k">def</span> <span class="nf">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">ID</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="nb">id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W09</span><span class="p">,</span> <span class="n">W09</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="k">return</span> <span class="nb">id</span>
    <span class="k">return</span> <span class="n">ID</span>


<span class="k">def</span> <span class="nf">check_ucd</span><span class="p">(</span><span class="n">ucd</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Warns or raises a</span>
<span class="sd">    `~astropy.io.votable.exceptions.VOTableSpecError` if *ucd* is not</span>
<span class="sd">    a valid `unified content descriptor`_ string as defined by the</span>
<span class="sd">    VOTABLE standard.</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    ucd : str</span>
<span class="sd">        A UCD string.</span>

<span class="sd">    config, pos : optional</span>
<span class="sd">        Information about the source of the value</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_1_or_later&#39;</span><span class="p">):</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">ucd_mod</span><span class="o">.</span><span class="n">parse_ucd</span><span class="p">(</span>
                <span class="n">ucd</span><span class="p">,</span>
                <span class="n">check_controlled_vocabulary</span><span class="o">=</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
                    <span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">,</span> <span class="bp">False</span><span class="p">),</span>
                <span class="n">has_colon</span><span class="o">=</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">,</span> <span class="bp">False</span><span class="p">))</span>
        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
            <span class="c"># This weird construction is for Python 3 compatibility</span>
            <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;pedantic&#39;</span><span class="p">):</span>
                <span class="n">vo_raise</span><span class="p">(</span><span class="n">W06</span><span class="p">,</span> <span class="p">(</span><span class="n">ucd</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">e</span><span class="p">)),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">vo_warn</span><span class="p">(</span><span class="n">W06</span><span class="p">,</span> <span class="p">(</span><span class="n">ucd</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">e</span><span class="p">)),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                <span class="k">return</span> <span class="bp">False</span>
    <span class="k">return</span> <span class="bp">True</span>


<span class="c">######################################################################</span>
<span class="c"># PROPERTY MIXINS</span>
<span class="k">class</span> <span class="nc">_IDProperty</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ID</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        The XML ID_ of the element.  May be ``None`` or a string</span>
<span class="sd">        conforming to XML ID_ syntax.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ID</span>

    <span class="nd">@ID.setter</span>
    <span class="k">def</span> <span class="nf">ID</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ID</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ID</span> <span class="o">=</span> <span class="n">ID</span>

    <span class="nd">@ID.deleter</span>
    <span class="k">def</span> <span class="nf">ID</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">_ID</span> <span class="o">=</span> <span class="bp">None</span>


<span class="k">class</span> <span class="nc">_NameProperty</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;An optional name for the element.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span>

    <span class="nd">@name.setter</span>
    <span class="k">def</span> <span class="nf">name</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">xmlutil</span><span class="o">.</span><span class="n">check_token</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</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="nd">@name.deleter</span>
    <span class="k">def</span> <span class="nf">name</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">_name</span> <span class="o">=</span> <span class="bp">None</span>


<span class="k">class</span> <span class="nc">_XtypeProperty</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">xtype</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Extended data type information.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_xtype</span>

    <span class="nd">@xtype.setter</span>
    <span class="k">def</span> <span class="nf">xtype</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xtype</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">xtype</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span>
                <span class="n">W28</span><span class="p">,</span> <span class="n">W28</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;xtype&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="n">check_string</span><span class="p">(</span><span class="n">xtype</span><span class="p">,</span> <span class="s">&#39;xtype&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_xtype</span> <span class="o">=</span> <span class="n">xtype</span>

    <span class="nd">@xtype.deleter</span>
    <span class="k">def</span> <span class="nf">xtype</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">_xtype</span> <span class="o">=</span> <span class="bp">None</span>


<span class="k">class</span> <span class="nc">_UtypeProperty</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="n">_utype_in_v1_2</span> <span class="o">=</span> <span class="bp">False</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">utype</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;The usage-specific or `unique type`_ of the element.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_utype</span>

    <span class="nd">@utype.setter</span>
    <span class="k">def</span> <span class="nf">utype</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">utype</span><span class="p">):</span>
        <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_utype_in_v1_2</span> <span class="ow">and</span>
            <span class="n">utype</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span>
            <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">)):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span>
                <span class="n">W28</span><span class="p">,</span> <span class="n">W28</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;utype&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="n">check_string</span><span class="p">(</span><span class="n">utype</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_utype</span> <span class="o">=</span> <span class="n">utype</span>

    <span class="nd">@utype.deleter</span>
    <span class="k">def</span> <span class="nf">utype</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">_utype</span> <span class="o">=</span> <span class="bp">None</span>


<span class="k">class</span> <span class="nc">_UcdProperty</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="n">_ucd_in_v1_2</span> <span class="o">=</span> <span class="bp">False</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ucd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;The `unified content descriptor`_ for the element.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ucd</span>

    <span class="nd">@ucd.setter</span>
    <span class="k">def</span> <span class="nf">ucd</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ucd</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">ucd</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">ucd</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
            <span class="n">ucd</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="k">if</span> <span class="n">ucd</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_ucd_in_v1_2</span> <span class="ow">and</span>
                <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">)):</span>
                <span class="n">warn_or_raise</span><span class="p">(</span>
                    <span class="n">W28</span><span class="p">,</span> <span class="n">W28</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
            <span class="n">check_ucd</span><span class="p">(</span><span class="n">ucd</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ucd</span> <span class="o">=</span> <span class="n">ucd</span>

    <span class="nd">@ucd.deleter</span>
    <span class="k">def</span> <span class="nf">ucd</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">_ucd</span> <span class="o">=</span> <span class="bp">None</span>


<span class="k">class</span> <span class="nc">_DescriptionProperty</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        An optional string describing the element.  Corresponds to the</span>
<span class="sd">        DESCRIPTION_ element.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_description</span>

    <span class="nd">@description.setter</span>
    <span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">description</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_description</span> <span class="o">=</span> <span class="n">description</span>

    <span class="nd">@description.deleter</span>
    <span class="k">def</span> <span class="nf">description</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">_description</span> <span class="o">=</span> <span class="bp">None</span>


<span class="c">######################################################################</span>
<span class="c"># ELEMENT CLASSES</span>
<span class="k">class</span> <span class="nc">Element</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    A base class for all classes that represent XML elements in the</span>
<span class="sd">    VOTABLE file.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">_add_unknown_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W10</span><span class="p">,</span> <span class="n">W10</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_ignore_add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_definitions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_1_or_later&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W22</span><span class="p">,</span> <span class="n">W22</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>


<span class="k">class</span> <span class="nc">SimpleElement</span><span class="p">(</span><span class="n">Element</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    A base class for simple elements, such as FIELD, PARAM and INFO</span>
<span class="sd">    that don&#39;t require any special parsing or outputting machinery.</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">Element</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="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">tag</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">:</span>
                <span class="k">break</span>

        <span class="k">return</span> <span class="bp">self</span>

    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span>
                  <span class="n">attrib</span><span class="o">=</span><span class="n">w</span><span class="o">.</span><span class="n">object_attrs</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">_attr_list</span><span class="p">))</span>


<span class="k">class</span> <span class="nc">SimpleElementWithContent</span><span class="p">(</span><span class="n">SimpleElement</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    A base class for simple elements, such as FIELD, PARAM and INFO</span>
<span class="sd">    that don&#39;t require any special parsing or outputting machinery.</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">SimpleElement</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="bp">self</span><span class="o">.</span><span class="n">_content</span> <span class="o">=</span> <span class="bp">None</span>

    <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">tag</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">data</span><span class="p">:</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="n">data</span>
                <span class="k">break</span>

        <span class="k">return</span> <span class="bp">self</span>

    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_content</span><span class="p">,</span>
                  <span class="n">attrib</span><span class="o">=</span><span class="n">w</span><span class="o">.</span><span class="n">object_attrs</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">_attr_list</span><span class="p">))</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">content</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;The content of the element.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_content</span>

    <span class="nd">@content.setter</span>
    <span class="k">def</span> <span class="nf">content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
        <span class="n">check_string</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="s">&#39;content&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_content</span> <span class="o">=</span> <span class="n">content</span>

    <span class="nd">@content.deleter</span>
    <span class="k">def</span> <span class="nf">content</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">_content</span> <span class="o">=</span> <span class="bp">None</span>


<div class="viewcode-block" id="Link"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Link.html#astropy.io.votable.tree.Link">[docs]</a><span class="k">class</span> <span class="nc">Link</span><span class="p">(</span><span class="n">SimpleElement</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    LINK_ elements: used to reference external documents and servers through a URI.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">_attr_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;content_role&#39;</span><span class="p">,</span> <span class="s">&#39;content_type&#39;</span><span class="p">,</span> <span class="s">&#39;title&#39;</span><span class="p">,</span> <span class="s">&#39;value&#39;</span><span class="p">,</span>
                  <span class="s">&#39;href&#39;</span><span class="p">,</span> <span class="s">&#39;action&#39;</span><span class="p">]</span>
    <span class="n">_element_name</span> <span class="o">=</span> <span class="s">&#39;LINK&#39;</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">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">href</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</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="bp">self</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>

        <span class="n">SimpleElement</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="n">content_role</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;content-role&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;content_role&#39;</span><span class="p">)</span>
        <span class="n">content_type</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;content-type&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;content_type&#39;</span><span class="p">)</span>

        <span class="k">if</span> <span class="s">&#39;gref&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W11</span><span class="p">,</span> <span class="n">W11</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">ID</span>           <span class="o">=</span> <span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">content_role</span> <span class="o">=</span> <span class="n">content_role</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">content_type</span> <span class="o">=</span> <span class="n">content_type</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">title</span>        <span class="o">=</span> <span class="n">title</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">value</span>        <span class="o">=</span> <span class="n">value</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">href</span>         <span class="o">=</span> <span class="n">href</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">action</span>       <span class="o">=</span> <span class="n">action</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
            <span class="s">&#39;LINK&#39;</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
            <span class="p">[</span><span class="s">&#39;content-role&#39;</span><span class="p">,</span> <span class="s">&#39;content_role&#39;</span><span class="p">,</span> <span class="s">&#39;content-type&#39;</span><span class="p">,</span> <span class="s">&#39;content_type&#39;</span><span class="p">,</span>
             <span class="s">&#39;gref&#39;</span><span class="p">])</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">content_role</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Defines the MIME role of the referenced object.  Must be one of:</span>

<span class="sd">          None, &#39;query&#39;, &#39;hints&#39;, &#39;doc&#39; or &#39;location&#39;</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_content_role</span>

    <span class="nd">@content_role.setter</span>
    <span class="k">def</span> <span class="nf">content_role</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content_role</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">content_role</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="s">&#39;query&#39;</span><span class="p">,</span> <span class="s">&#39;hints&#39;</span><span class="p">,</span> <span class="s">&#39;doc&#39;</span><span class="p">,</span> <span class="s">&#39;location&#39;</span><span class="p">):</span>
            <span class="n">vo_warn</span><span class="p">(</span><span class="n">W45</span><span class="p">,</span> <span class="p">(</span><span class="n">content_role</span><span class="p">,),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_content_role</span> <span class="o">=</span> <span class="n">content_role</span>

    <span class="nd">@content_role.deleter</span>
<div class="viewcode-block" id="Link.content_role"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Link.html#astropy.io.votable.tree.Link.content_role">[docs]</a>    <span class="k">def</span> <span class="nf">content_role</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">_content_role</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">content_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;Defines the MIME content type of the referenced object.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_content_type</span>

    <span class="nd">@content_type.setter</span>
    <span class="k">def</span> <span class="nf">content_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content_type</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_mime_content_type</span><span class="p">(</span><span class="n">content_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_content_type</span> <span class="o">=</span> <span class="n">content_type</span>

    <span class="nd">@content_type.deleter</span>
<div class="viewcode-block" id="Link.content_type"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Link.html#astropy.io.votable.tree.Link.content_type">[docs]</a>    <span class="k">def</span> <span class="nf">content_type</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">_content_type</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">href</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A URI to an arbitrary protocol.  The vo package only supports</span>
<span class="sd">        http and anonymous ftp.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_href</span>

    <span class="nd">@href.setter</span>
    <span class="k">def</span> <span class="nf">href</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">href</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_anyuri</span><span class="p">(</span><span class="n">href</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_href</span> <span class="o">=</span> <span class="n">href</span>

    <span class="nd">@href.deleter</span>
<div class="viewcode-block" id="Link.href"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Link.html#astropy.io.votable.tree.Link.href">[docs]</a>    <span class="k">def</span> <span class="nf">href</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">_href</span> <span class="o">=</span> <span class="bp">None</span>
</div>
<div class="viewcode-block" id="Link.to_table_column"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Link.html#astropy.io.votable.tree.Link.to_table_column">[docs]</a>    <span class="k">def</span> <span class="nf">to_table_column</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</span><span class="p">):</span>
        <span class="n">meta</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span><span class="p">:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">meta</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>

        <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s">&#39;links&#39;</span><span class="p">,</span> <span class="p">[])</span>
        <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s">&#39;links&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">meta</span><span class="p">)</span>
</div>
    <span class="nd">@classmethod</span>
<div class="viewcode-block" id="Link.from_table_column"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Link.html#astropy.io.votable.tree.Link.from_table_column">[docs]</a>    <span class="k">def</span> <span class="nf">from_table_column</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">cls</span><span class="p">(</span><span class="o">**</span><span class="n">d</span><span class="p">)</span>

</div></div>
<div class="viewcode-block" id="Info"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Info.html#astropy.io.votable.tree.Info">[docs]</a><span class="k">class</span> <span class="nc">Info</span><span class="p">(</span><span class="n">SimpleElementWithContent</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">,</span> <span class="n">_XtypeProperty</span><span class="p">,</span>
           <span class="n">_UtypeProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    INFO_ elements: arbitrary key-value pairs for extensions to the standard.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">_element_name</span> <span class="o">=</span> <span class="s">&#39;INFO&#39;</span>
    <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;value&#39;</span><span class="p">]</span>
    <span class="n">_attr_list_12</span> <span class="o">=</span> <span class="n">_attr_list_11</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;xtype&#39;</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="s">&#39;unit&#39;</span><span class="p">,</span> <span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">]</span>
    <span class="n">_utype_in_v1_2</span> <span class="o">=</span> <span class="bp">True</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">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">xtype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">ref</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>

        <span class="n">SimpleElementWithContent</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="bp">self</span><span class="o">.</span><span class="n">ID</span>      <span class="o">=</span> <span class="p">(</span><span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span> <span class="ow">or</span>
                        <span class="n">xmlutil</span><span class="o">.</span><span class="n">fix_id</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</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">value</span>   <span class="o">=</span> <span class="n">value</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">xtype</span>   <span class="o">=</span> <span class="n">xtype</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ref</span>     <span class="o">=</span> <span class="n">ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">unit</span>    <span class="o">=</span> <span class="n">unit</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ucd</span>     <span class="o">=</span> <span class="n">ucd</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">utype</span>   <span class="o">=</span> <span class="n">utype</span>

        <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_12</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_11</span>
            <span class="k">if</span> <span class="n">xtype</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;xtype&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;ref&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">unit</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;unit&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">ucd</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;ucd&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">utype</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;utype&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="n">extra</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;[*required*] The key of the key-value pair.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span>

    <span class="nd">@name.setter</span>
<div class="viewcode-block" id="Info.name"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Info.html#astropy.io.votable.tree.Info.name">[docs]</a>    <span class="k">def</span> <span class="nf">name</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="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W35</span><span class="p">,</span> <span class="n">W35</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_token</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</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>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*required*] The value of the key-value pair.  (Always stored</span>
<span class="sd">        as a string or unicode string).</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span>

    <span class="nd">@value.setter</span>
<div class="viewcode-block" id="Info.value"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Info.html#astropy.io.votable.tree.Info.value">[docs]</a>    <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W35</span><span class="p">,</span> <span class="n">W35</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;value&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="n">check_string</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s">&#39;value&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">value</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">content</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;The content inside the INFO element.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_content</span>

    <span class="nd">@content.setter</span>
    <span class="k">def</span> <span class="nf">content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
        <span class="n">check_string</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="s">&#39;content&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_content</span> <span class="o">=</span> <span class="n">content</span>

    <span class="nd">@content.deleter</span>
<div class="viewcode-block" id="Info.content"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Info.html#astropy.io.votable.tree.Info.content">[docs]</a>    <span class="k">def</span> <span class="nf">content</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">_content</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Refer to another INFO_ element by ID_, defined previously in</span>
<span class="sd">        the document.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>

    <span class="nd">@ref.setter</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W28</span><span class="p">,</span> <span class="n">W28</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span>
                          <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="c"># TODO: actually apply the reference</span>
        <span class="c"># if ref is not None:</span>
        <span class="c">#     try:</span>
        <span class="c">#         other = self._votable.get_values_by_id(ref, before=self)</span>
        <span class="c">#     except KeyError:</span>
        <span class="c">#         vo_raise(</span>
        <span class="c">#             &quot;VALUES ref=&#39;%s&#39;, which has not already been defined.&quot; %</span>
        <span class="c">#             self.ref, self._config, self._pos, KeyError)</span>
        <span class="c">#     self.null = other.null</span>
        <span class="c">#     self.type = other.type</span>
        <span class="c">#     self.min = other.min</span>
        <span class="c">#     self.min_inclusive = other.min_inclusive</span>
        <span class="c">#     self.max = other.max</span>
        <span class="c">#     self.max_inclusive = other.max_inclusive</span>
        <span class="c">#     self._options[:] = other.options</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>

    <span class="nd">@ref.deleter</span>
<div class="viewcode-block" id="Info.ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Info.html#astropy.io.votable.tree.Info.ref">[docs]</a>    <span class="k">def</span> <span class="nf">ref</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">_ref</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;A string specifying the units_ for the INFO_.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unit</span>

    <span class="nd">@unit.setter</span>
    <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">unit</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">_unit</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">return</span>

        <span class="kn">from</span> <span class="nn">...</span> <span class="kn">import</span> <span class="n">units</span> <span class="k">as</span> <span class="n">u</span>

        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W28</span><span class="p">,</span> <span class="n">W28</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;unit&#39;</span><span class="p">,</span> <span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span>
                          <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>

        <span class="n">unit</span> <span class="o">=</span> <span class="n">u</span><span class="o">.</span><span class="n">Unit</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">&#39;cds&#39;</span><span class="p">,</span> <span class="n">parse_strict</span><span class="o">=</span><span class="s">&#39;silent&#39;</span><span class="p">)</span>
        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">u</span><span class="o">.</span><span class="n">UnrecognizedUnit</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W50</span><span class="p">,</span> <span class="n">W50</span><span class="p">,</span> <span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">to_string</span><span class="p">(),),</span>
                          <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_unit</span> <span class="o">=</span> <span class="n">unit</span>

    <span class="nd">@unit.deleter</span>
<div class="viewcode-block" id="Info.unit"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Info.html#astropy.io.votable.tree.Info.unit">[docs]</a>    <span class="k">def</span> <span class="nf">unit</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">_unit</span> <span class="o">=</span> <span class="bp">None</span>
</div>
<div class="viewcode-block" id="Info.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Info.html#astropy.io.votable.tree.Info.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="n">attrib</span> <span class="o">=</span> <span class="n">w</span><span class="o">.</span><span class="n">object_attrs</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">_attr_list</span><span class="p">)</span>
        <span class="k">if</span> <span class="s">&#39;unit&#39;</span> <span class="ow">in</span> <span class="n">attrib</span><span class="p">:</span>
            <span class="n">attrib</span><span class="p">[</span><span class="s">&#39;unit&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unit</span><span class="o">.</span><span class="n">to_string</span><span class="p">(</span><span class="s">&#39;cds&#39;</span><span class="p">)</span>
        <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_content</span><span class="p">,</span>
                  <span class="n">attrib</span><span class="o">=</span><span class="n">attrib</span><span class="p">)</span>

</div></div>
<div class="viewcode-block" id="Values"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values">[docs]</a><span class="k">class</span> <span class="nc">Values</span><span class="p">(</span><span class="n">Element</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    VALUES_ element: used within FIELD_ and PARAM_ elements to define the domain of values.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</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">votable</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ref</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="nb">type</span><span class="o">=</span><span class="s">&quot;legal&quot;</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">extras</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span>  <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>

        <span class="n">Element</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="bp">self</span><span class="o">.</span><span class="n">_votable</span> <span class="o">=</span> <span class="n">votable</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_field</span>   <span class="o">=</span> <span class="n">field</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ID</span>       <span class="o">=</span> <span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">null</span>     <span class="o">=</span> <span class="n">null</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>     <span class="o">=</span> <span class="n">ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">type</span>     <span class="o">=</span> <span class="nb">type</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">min</span>           <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">max</span>           <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">min_inclusive</span> <span class="o">=</span> <span class="bp">True</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">max_inclusive</span> <span class="o">=</span> <span class="bp">True</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_options</span>      <span class="o">=</span> <span class="p">[]</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;VALUES&#39;</span><span class="p">,</span> <span class="n">extras</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">null</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        For integral datatypes, *null* is used to define the value</span>
<span class="sd">        used for missing values.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_null</span>

    <span class="nd">@null.setter</span>
    <span class="k">def</span> <span class="nf">null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">null</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">null</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">null</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="n">null_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">parse_scalar</span><span class="p">(</span>
                    <span class="n">null</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
            <span class="k">except</span><span class="p">:</span>
                <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W36</span><span class="p">,</span> <span class="n">W36</span><span class="p">,</span> <span class="n">null</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
                <span class="n">null_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">parse_scalar</span><span class="p">(</span>
                    <span class="s">&#39;0&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">null_val</span> <span class="o">=</span> <span class="n">null</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_null</span> <span class="o">=</span> <span class="n">null_val</span>

    <span class="nd">@null.deleter</span>
<div class="viewcode-block" id="Values.null"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.null">[docs]</a>    <span class="k">def</span> <span class="nf">null</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">_null</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*required*] Defines the applicability of the domain defined</span>
<span class="sd">        by this VALUES_ element.  Must be one of the following</span>
<span class="sd">        strings:</span>

<span class="sd">          - &#39;legal&#39;: The domain of this column applies in general to</span>
<span class="sd">            this datatype. (default)</span>

<span class="sd">          - &#39;actual&#39;: The domain of this column applies only to the</span>
<span class="sd">            data enclosed in the parent table.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span>

    <span class="nd">@type.setter</span>
<div class="viewcode-block" id="Values.type"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.type">[docs]</a>    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
        <span class="k">if</span> <span class="nb">type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;legal&#39;</span><span class="p">,</span> <span class="s">&#39;actual&#39;</span><span class="p">):</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E08</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="nb">type</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Refer to another VALUES_ element by ID_, defined previously in</span>
<span class="sd">        the document, for MIN/MAX/OPTION information.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>

    <span class="nd">@ref.setter</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="n">other</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_votable</span><span class="o">.</span><span class="n">get_values_by_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
            <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
                <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W43</span><span class="p">,</span> <span class="n">W43</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;VALUES&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span>
                              <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
                <span class="n">ref</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">null</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">null</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">type</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">min</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">min_inclusive</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">min_inclusive</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">max</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">max</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">max_inclusive</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">max_inclusive</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_options</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">options</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>

    <span class="nd">@ref.deleter</span>
<div class="viewcode-block" id="Values.ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.ref">[docs]</a>    <span class="k">def</span> <span class="nf">ref</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">_ref</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">min</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        The minimum value of the domain.  See :attr:`min_inclusive`.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_min</span>

    <span class="nd">@min.setter</span>
    <span class="k">def</span> <span class="nf">min</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">min</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">_field</span><span class="p">,</span> <span class="s">&#39;converter&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">min</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">_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="nb">min</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_min</span> <span class="o">=</span> <span class="nb">min</span>

    <span class="nd">@min.deleter</span>
<div class="viewcode-block" id="Values.min"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.min">[docs]</a>    <span class="k">def</span> <span class="nf">min</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">_min</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">min_inclusive</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;When `True`, the domain includes the minimum value.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_min_inclusive</span>

    <span class="nd">@min_inclusive.setter</span>
    <span class="k">def</span> <span class="nf">min_inclusive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inclusive</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">inclusive</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_min_inclusive</span> <span class="o">=</span> <span class="bp">True</span>
        <span class="k">elif</span> <span class="n">inclusive</span> <span class="o">==</span> <span class="s">&#39;no&#39;</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_min_inclusive</span> <span class="o">=</span> <span class="bp">False</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_min_inclusive</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">inclusive</span><span class="p">)</span>

    <span class="nd">@min_inclusive.deleter</span>
<div class="viewcode-block" id="Values.min_inclusive"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.min_inclusive">[docs]</a>    <span class="k">def</span> <span class="nf">min_inclusive</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">_min_inclusive</span> <span class="o">=</span> <span class="bp">True</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">max</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        The maximum value of the domain.  See :attr:`max_inclusive`.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_max</span>

    <span class="nd">@max.setter</span>
    <span class="k">def</span> <span class="nf">max</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">max</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">_field</span><span class="p">,</span> <span class="s">&#39;converter&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">max</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">_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="nb">max</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_max</span> <span class="o">=</span> <span class="nb">max</span>

    <span class="nd">@max.deleter</span>
<div class="viewcode-block" id="Values.max"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.max">[docs]</a>    <span class="k">def</span> <span class="nf">max</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">_max</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">max_inclusive</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;When `True`, the domain includes the maximum value.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_max_inclusive</span>

    <span class="nd">@max_inclusive.setter</span>
    <span class="k">def</span> <span class="nf">max_inclusive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inclusive</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">inclusive</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_max_inclusive</span> <span class="o">=</span> <span class="bp">True</span>
        <span class="k">elif</span> <span class="n">inclusive</span> <span class="o">==</span> <span class="s">&#39;no&#39;</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_max_inclusive</span> <span class="o">=</span> <span class="bp">False</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_max_inclusive</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">inclusive</span><span class="p">)</span>

    <span class="nd">@max_inclusive.deleter</span>
<div class="viewcode-block" id="Values.max_inclusive"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.max_inclusive">[docs]</a>    <span class="k">def</span> <span class="nf">max_inclusive</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">_max_inclusive</span> <span class="o">=</span> <span class="bp">True</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Values.options"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.options">[docs]</a>    <span class="k">def</span> <span class="nf">options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of string key-value tuples defining other OPTION</span>
<span class="sd">        elements for the domain.  All options are ignored -- they are</span>
<span class="sd">        stored for round-tripping purposes only.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_options</span>
</div>
<div class="viewcode-block" id="Values.parse"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.parse">[docs]</a>    <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</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">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                    <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W44</span><span class="p">,</span> <span class="n">W44</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">tag</span> <span class="o">!=</span> <span class="s">&#39;VALUES&#39;</span><span class="p">:</span>
                        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W44</span><span class="p">,</span> <span class="n">W44</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                    <span class="k">break</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;MIN&#39;</span><span class="p">:</span>
                        <span class="k">if</span> <span class="s">&#39;value&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
                            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E09</span><span class="p">,</span> <span class="s">&#39;MIN&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">min_inclusive</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;inclusive&#39;</span><span class="p">,</span> <span class="s">&#39;yes&#39;</span><span class="p">)</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;MIN&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                            <span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">,</span> <span class="s">&#39;inclusive&#39;</span><span class="p">])</span>
                    <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;MAX&#39;</span><span class="p">:</span>
                        <span class="k">if</span> <span class="s">&#39;value&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
                            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E09</span><span class="p">,</span> <span class="s">&#39;MAX&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">max</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">max_inclusive</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;inclusive&#39;</span><span class="p">,</span> <span class="s">&#39;yes&#39;</span><span class="p">)</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;MAX&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                            <span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">,</span> <span class="s">&#39;inclusive&#39;</span><span class="p">])</span>
                    <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;OPTION&#39;</span><span class="p">:</span>
                        <span class="k">if</span> <span class="s">&#39;value&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
                            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E09</span><span class="p">,</span> <span class="s">&#39;OPTION&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_token</span><span class="p">(</span>
                            <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">),</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
                            <span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">),</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;value&#39;</span><span class="p">)))</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;OPTION&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                            <span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">])</span>
                <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;VALUES&#39;</span><span class="p">:</span>
                    <span class="k">break</span>

        <span class="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="Values.is_defaults"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.is_defaults">[docs]</a>    <span class="k">def</span> <span class="nf">is_defaults</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c"># If there&#39;s nothing meaningful or non-default to write,</span>
        <span class="c"># don&#39;t write anything.</span>
        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ref</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">null</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">max</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">==</span> <span class="p">[])</span>
</div>
<div class="viewcode-block" id="Values.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</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">yes_no</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
                <span class="k">return</span> <span class="s">u&#39;yes&#39;</span>
            <span class="k">return</span> <span class="s">u&#39;no&#39;</span>

        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_defaults</span><span class="p">():</span>
            <span class="k">return</span>

        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="s">u&#39;VALUES&#39;</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="n">w</span><span class="o">.</span><span class="n">object_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="p">[</span><span class="s">u&#39;ref&#39;</span><span class="p">]))</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="s">u&#39;VALUES&#39;</span><span class="p">,</span>
                       <span class="n">attrib</span><span class="o">=</span><span class="n">w</span><span class="o">.</span><span class="n">object_attrs</span><span class="p">(</span>
                           <span class="bp">self</span><span class="p">,</span> <span class="p">[</span><span class="s">u&#39;ID&#39;</span><span class="p">,</span> <span class="s">u&#39;null&#39;</span><span class="p">,</span> <span class="s">u&#39;ref&#39;</span><span class="p">])):</span>
                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                    <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span>
                        <span class="s">u&#39;MIN&#39;</span><span class="p">,</span>
                        <span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">min</span><span class="p">,</span> <span class="bp">False</span><span class="p">),</span>
                        <span class="n">inclusive</span><span class="o">=</span><span class="n">yes_no</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">min_inclusive</span><span class="p">))</span>
                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">max</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                    <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span>
                        <span class="s">u&#39;MAX&#39;</span><span class="p">,</span>
                        <span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max</span><span class="p">,</span> <span class="bp">False</span><span class="p">),</span>
                        <span class="n">inclusive</span><span class="o">=</span><span class="n">yes_no</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max_inclusive</span><span class="p">))</span>
                <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">:</span>
                    <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span>
                        <span class="s">u&#39;OPTION&#39;</span><span class="p">,</span>
                        <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
                        <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Values.to_table_column"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.to_table_column">[docs]</a>    <span class="k">def</span> <span class="nf">to_table_column</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</span><span class="p">):</span>
        <span class="c"># Have the ref filled in here</span>
        <span class="n">ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span>

        <span class="n">meta</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s">u&#39;ID&#39;</span><span class="p">,</span> <span class="s">u&#39;null&#39;</span><span class="p">]:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">meta</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">meta</span><span class="p">[</span><span class="s">&#39;min&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
                <span class="s">&#39;value&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span><span class="p">,</span>
                <span class="s">&#39;inclusive&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_inclusive</span><span class="p">}</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">max</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">meta</span><span class="p">[</span><span class="s">&#39;max&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
                <span class="s">&#39;value&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">max</span><span class="p">,</span>
                <span class="s">&#39;inclusive&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_inclusive</span><span class="p">}</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">):</span>
            <span class="n">meta</span><span class="p">[</span><span class="s">&#39;options&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>

        <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s">&#39;values&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">meta</span>
</div>
<div class="viewcode-block" id="Values.from_table_column"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Values.html#astropy.io.votable.tree.Values.from_table_column">[docs]</a>    <span class="k">def</span> <span class="nf">from_table_column</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="s">&#39;values&#39;</span> <span class="ow">in</span> <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="p">:</span>
            <span class="k">return</span>

        <span class="n">meta</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s">&#39;values&#39;</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s">u&#39;ID&#39;</span><span class="p">,</span> <span class="s">u&#39;null&#39;</span><span class="p">]:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
        <span class="k">if</span> <span class="s">&#39;min&#39;</span> <span class="ow">in</span> <span class="n">meta</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="o">=</span> <span class="n">meta</span><span class="p">[</span><span class="s">&#39;min&#39;</span><span class="p">][</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">min_inclusive</span> <span class="o">=</span> <span class="n">meta</span><span class="p">[</span><span class="s">&#39;min&#39;</span><span class="p">][</span><span class="s">&#39;inclusive&#39;</span><span class="p">]</span>
        <span class="k">if</span> <span class="s">&#39;max&#39;</span> <span class="ow">in</span> <span class="n">meta</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">max</span> <span class="o">=</span> <span class="n">meta</span><span class="p">[</span><span class="s">&#39;max&#39;</span><span class="p">][</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">max_inclusive</span> <span class="o">=</span> <span class="n">meta</span><span class="p">[</span><span class="s">&#39;max&#39;</span><span class="p">][</span><span class="s">&#39;inclusive&#39;</span><span class="p">]</span>
        <span class="k">if</span> <span class="s">&#39;options&#39;</span> <span class="ow">in</span> <span class="n">meta</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_options</span> <span class="o">=</span> <span class="n">meta</span><span class="p">[</span><span class="s">&#39;options&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>

</div></div>
<div class="viewcode-block" id="Field"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field">[docs]</a><span class="k">class</span> <span class="nc">Field</span><span class="p">(</span><span class="n">SimpleElement</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">,</span> <span class="n">_NameProperty</span><span class="p">,</span> <span class="n">_XtypeProperty</span><span class="p">,</span>
            <span class="n">_UtypeProperty</span><span class="p">,</span> <span class="n">_UcdProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    FIELD_ element: describes the datatype of a particular column of data.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</span>

<span class="sd">    If *ID* is provided, it is used for the column name in the</span>
<span class="sd">    resulting recarray of the table.  If no *ID* is provided, *name*</span>
<span class="sd">    is used instead.  If neither is provided, an exception will be</span>
<span class="sd">    raised.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;datatype&#39;</span><span class="p">,</span> <span class="s">&#39;arraysize&#39;</span><span class="p">,</span> <span class="s">&#39;ucd&#39;</span><span class="p">,</span>
                     <span class="s">&#39;unit&#39;</span><span class="p">,</span> <span class="s">&#39;width&#39;</span><span class="p">,</span> <span class="s">&#39;precision&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">]</span>
    <span class="n">_attr_list_12</span> <span class="o">=</span> <span class="n">_attr_list_11</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;xtype&#39;</span><span class="p">]</span>
    <span class="n">_element_name</span> <span class="o">=</span> <span class="s">&#39;FIELD&#39;</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">votable</span><span class="p">,</span> <span class="n">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">datatype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">arraysize</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">precision</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ref</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">xtype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>

        <span class="n">SimpleElement</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="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_12</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_11</span>
            <span class="k">if</span> <span class="n">xtype</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;xtype&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

        <span class="c"># TODO: REMOVE ME ----------------------------------------</span>
        <span class="c"># This is a terrible hack to support Simple Image Access</span>
        <span class="c"># Protocol results from archive.noao.edu.  It creates a field</span>
        <span class="c"># for the coordinate projection type of type &quot;double&quot;, which</span>
        <span class="c"># actually contains character data.  We have to hack the field</span>
        <span class="c"># to store character data, or we can&#39;t read it in.  A warning</span>
        <span class="c"># will be raised when this happens.</span>
        <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;pedantic&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&#39;cprojection&#39;</span> <span class="ow">and</span>
            <span class="n">ID</span> <span class="o">==</span> <span class="s">&#39;cprojection&#39;</span> <span class="ow">and</span> <span class="n">ucd</span> <span class="o">==</span> <span class="s">&#39;VOX:WCS_CoordProjection&#39;</span> <span class="ow">and</span>
            <span class="n">datatype</span> <span class="o">==</span> <span class="s">&#39;double&#39;</span><span class="p">):</span>
            <span class="n">datatype</span> <span class="o">=</span> <span class="s">&#39;char&#39;</span>
            <span class="n">arraysize</span> <span class="o">=</span> <span class="s">&#39;3&#39;</span>
            <span class="n">vo_warn</span><span class="p">(</span><span class="n">W40</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="c"># ----------------------------------------</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_votable</span> <span class="o">=</span> <span class="n">votable</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">ID</span> <span class="o">=</span> <span class="p">(</span><span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span> <span class="ow">or</span>
                   <span class="n">xmlutil</span><span class="o">.</span><span class="n">fix_id</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</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="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span> <span class="o">==</span> <span class="s">&#39;PARAM&#39;</span> <span class="ow">and</span>
                <span class="ow">not</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_1_or_later&#39;</span><span class="p">)):</span>
                <span class="k">pass</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W15</span><span class="p">,</span> <span class="n">W15</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</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="bp">self</span><span class="o">.</span><span class="n">ID</span>

        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ID</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">name</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="n">W12</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

        <span class="n">datatype_mapping</span> <span class="o">=</span> <span class="p">{</span>
            <span class="s">&#39;string&#39;</span>        <span class="p">:</span> <span class="s">&#39;char&#39;</span><span class="p">,</span>
            <span class="s">&#39;unicodeString&#39;</span> <span class="p">:</span> <span class="s">&#39;unicodeChar&#39;</span><span class="p">,</span>
            <span class="s">&#39;int16&#39;</span>         <span class="p">:</span> <span class="s">&#39;short&#39;</span><span class="p">,</span>
            <span class="s">&#39;int32&#39;</span>         <span class="p">:</span> <span class="s">&#39;int&#39;</span><span class="p">,</span>
            <span class="s">&#39;int64&#39;</span>         <span class="p">:</span> <span class="s">&#39;long&#39;</span><span class="p">,</span>
            <span class="s">&#39;float32&#39;</span>       <span class="p">:</span> <span class="s">&#39;float&#39;</span><span class="p">,</span>
            <span class="s">&#39;float64&#39;</span>       <span class="p">:</span> <span class="s">&#39;double&#39;</span><span class="p">}</span>

        <span class="k">if</span> <span class="n">datatype</span> <span class="ow">in</span> <span class="n">datatype_mapping</span><span class="p">:</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W13</span><span class="p">,</span> <span class="n">W13</span><span class="p">,</span> <span class="p">(</span><span class="n">datatype</span><span class="p">,</span> <span class="n">datatype_mapping</span><span class="p">[</span><span class="n">datatype</span><span class="p">]),</span>
                          <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="n">datatype</span> <span class="o">=</span> <span class="n">datatype_mapping</span><span class="p">[</span><span class="n">datatype</span><span class="p">]</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">ref</span>        <span class="o">=</span> <span class="n">ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">datatype</span>   <span class="o">=</span> <span class="n">datatype</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">arraysize</span>  <span class="o">=</span> <span class="n">arraysize</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ucd</span>        <span class="o">=</span> <span class="n">ucd</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">unit</span>       <span class="o">=</span> <span class="n">unit</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">width</span>      <span class="o">=</span> <span class="n">width</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">precision</span>  <span class="o">=</span> <span class="n">precision</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">utype</span>      <span class="o">=</span> <span class="n">utype</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">type</span>       <span class="o">=</span> <span class="nb">type</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_links</span>     <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Link</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">title</span>      <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">values</span>     <span class="o">=</span> <span class="n">Values</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_votable</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">xtype</span>      <span class="o">=</span> <span class="n">xtype</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">_setup</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="n">extra</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@classmethod</span>
<div class="viewcode-block" id="Field.uniqify_names"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.uniqify_names">[docs]</a>    <span class="k">def</span> <span class="nf">uniqify_names</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">fields</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Make sure that all names and titles in a list of fields are</span>
<span class="sd">        unique, by appending numbers if necessary.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">unique</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span>
            <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
            <span class="n">new_id</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">ID</span>
            <span class="k">while</span> <span class="n">new_id</span> <span class="ow">in</span> <span class="n">unique</span><span class="p">:</span>
                <span class="n">new_id</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">ID</span> <span class="o">+</span> <span class="s">&quot;_</span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">i</span>
                <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">if</span> <span class="n">new_id</span> <span class="o">!=</span> <span class="n">field</span><span class="o">.</span><span class="n">ID</span><span class="p">:</span>
                <span class="n">vo_warn</span><span class="p">(</span><span class="n">W32</span><span class="p">,</span> <span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="n">new_id</span><span class="p">),</span> <span class="n">field</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
            <span class="n">field</span><span class="o">.</span><span class="n">ID</span> <span class="o">=</span> <span class="n">new_id</span>
            <span class="n">unique</span><span class="p">[</span><span class="n">new_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">ID</span>

        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span>
            <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
            <span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">new_name</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">ID</span>
                <span class="n">implicit</span> <span class="o">=</span> <span class="bp">True</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">new_name</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
                <span class="n">implicit</span> <span class="o">=</span> <span class="bp">False</span>
            <span class="k">if</span> <span class="n">new_name</span> <span class="o">!=</span> <span class="n">field</span><span class="o">.</span><span class="n">ID</span><span class="p">:</span>
                <span class="k">while</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">unique</span><span class="p">:</span>
                    <span class="n">new_name</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot; </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">i</span>
                    <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>

            <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">implicit</span> <span class="ow">and</span>
                <span class="n">new_name</span> <span class="o">!=</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
                <span class="n">vo_warn</span><span class="p">(</span><span class="n">W33</span><span class="p">,</span> <span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">new_name</span><span class="p">),</span> <span class="n">field</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
            <span class="n">field</span><span class="o">.</span><span class="n">_unique_name</span> <span class="o">=</span> <span class="n">new_name</span>
            <span class="n">unique</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
</div>
    <span class="k">def</span> <span class="nf">_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">_ref</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">values</span><span class="o">.</span><span class="n">ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">_ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">converter</span> <span class="o">=</span> <span class="n">converters</span><span class="o">.</span><span class="n">get_converter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">datatype</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*required*] The datatype of the column.  Valid values (as</span>
<span class="sd">        defined by the spec) are:</span>

<span class="sd">          &#39;boolean&#39;, &#39;bit&#39;, &#39;unsignedByte&#39;, &#39;short&#39;, &#39;int&#39;, &#39;long&#39;,</span>
<span class="sd">          &#39;char&#39;, &#39;unicodeChar&#39;, &#39;float&#39;, &#39;double&#39;, &#39;floatComplex&#39;, or</span>
<span class="sd">          &#39;doubleComplex&#39;</span>

<span class="sd">        Many VOTABLE files in the wild use &#39;string&#39; instead of &#39;char&#39;,</span>
<span class="sd">        so that is also a valid option, though &#39;string&#39; will always be</span>
<span class="sd">        converted to &#39;char&#39; when writing the file back out.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_datatype</span>

    <span class="nd">@datatype.setter</span>
<div class="viewcode-block" id="Field.datatype"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.datatype">[docs]</a>    <span class="k">def</span> <span class="nf">datatype</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">datatype</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">datatype</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_1_or_later&#39;</span><span class="p">):</span>
                <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">E10</span><span class="p">,</span> <span class="n">E10</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span>
                              <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
            <span class="n">datatype</span> <span class="o">=</span> <span class="s">&#39;char&#39;</span>
        <span class="k">if</span> <span class="n">datatype</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">converters</span><span class="o">.</span><span class="n">converter_mapping</span><span class="p">:</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E06</span><span class="p">,</span> <span class="p">(</span><span class="n">datatype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_datatype</span> <span class="o">=</span> <span class="n">datatype</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">precision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Along with :attr:`width`, defines the `numerical accuracy`_</span>
<span class="sd">        associated with the data.  These values are used to limit the</span>
<span class="sd">        precision when writing floating point values back to the XML</span>
<span class="sd">        file.  Otherwise, it is purely informational -- the Numpy</span>
<span class="sd">        recarray containing the data itself does not use this</span>
<span class="sd">        information.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_precision</span>

    <span class="nd">@precision.setter</span>
    <span class="k">def</span> <span class="nf">precision</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">precision</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">precision</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">ur&quot;^[FE]?[0-9]+$&quot;</span><span class="p">,</span> <span class="n">precision</span><span class="p">):</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E11</span><span class="p">,</span> <span class="n">precision</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_precision</span> <span class="o">=</span> <span class="n">precision</span>

    <span class="nd">@precision.deleter</span>
<div class="viewcode-block" id="Field.precision"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.precision">[docs]</a>    <span class="k">def</span> <span class="nf">precision</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">_precision</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Along with :attr:`precision`, defines the `numerical</span>
<span class="sd">        accuracy`_ associated with the data.  These values are used to</span>
<span class="sd">        limit the precision when writing floating point values back to</span>
<span class="sd">        the XML file.  Otherwise, it is purely informational -- the</span>
<span class="sd">        Numpy recarray containing the data itself does not use this</span>
<span class="sd">        information.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_width</span>

    <span class="nd">@width.setter</span>
    <span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">width</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">width</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">width</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">width</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">width</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
                <span class="n">vo_raise</span><span class="p">(</span><span class="n">E12</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_width</span> <span class="o">=</span> <span class="n">width</span>

    <span class="nd">@width.deleter</span>
<div class="viewcode-block" id="Field.width"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.width">[docs]</a>    <span class="k">def</span> <span class="nf">width</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">_width</span> <span class="o">=</span> <span class="bp">None</span>

    <span class="c"># ref on FIELD and PARAM behave differently than elsewhere -- here</span>
    <span class="c"># they&#39;re just informational, such as to refer to a coordinate</span>
    <span class="c"># system.</span></div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        On FIELD_ elements, ref is used only for informational</span>
<span class="sd">        purposes, for example to refer to a COOSYS_ element.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>

    <span class="nd">@ref.setter</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>

    <span class="nd">@ref.deleter</span>
<div class="viewcode-block" id="Field.ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.ref">[docs]</a>    <span class="k">def</span> <span class="nf">ref</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">_ref</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;A string specifying the units_ for the FIELD_.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unit</span>

    <span class="nd">@unit.setter</span>
    <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">unit</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">_unit</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">return</span>

        <span class="kn">from</span> <span class="nn">...</span> <span class="kn">import</span> <span class="n">units</span> <span class="k">as</span> <span class="n">u</span>

        <span class="n">unit</span> <span class="o">=</span> <span class="n">u</span><span class="o">.</span><span class="n">Unit</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">&#39;cds&#39;</span><span class="p">,</span> <span class="n">parse_strict</span><span class="o">=</span><span class="s">&#39;silent&#39;</span><span class="p">)</span>
        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">u</span><span class="o">.</span><span class="n">UnrecognizedUnit</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span>
                <span class="n">W50</span><span class="p">,</span> <span class="n">W50</span><span class="p">,</span> <span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">to_string</span><span class="p">(),),</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_unit</span> <span class="o">=</span> <span class="n">unit</span>

    <span class="nd">@unit.deleter</span>
<div class="viewcode-block" id="Field.unit"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.unit">[docs]</a>    <span class="k">def</span> <span class="nf">unit</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">_unit</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">arraysize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Specifies the size of the multidimensional array if this</span>
<span class="sd">        FIELD_ contains more than a single value.</span>

<span class="sd">        See `multidimensional arrays`_.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arraysize</span>

    <span class="nd">@arraysize.setter</span>
    <span class="k">def</span> <span class="nf">arraysize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arraysize</span><span class="p">):</span>
        <span class="k">if</span> <span class="p">(</span><span class="n">arraysize</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span>
            <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">ur&quot;^([0-9]+x)*[0-9]*[*]?(s\W)?$&quot;</span><span class="p">,</span> <span class="n">arraysize</span><span class="p">)):</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E13</span><span class="p">,</span> <span class="n">arraysize</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_arraysize</span> <span class="o">=</span> <span class="n">arraysize</span>

    <span class="nd">@arraysize.deleter</span>
<div class="viewcode-block" id="Field.arraysize"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.arraysize">[docs]</a>    <span class="k">def</span> <span class="nf">arraysize</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">_arraysize</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        The type attribute on FIELD_ elements is reserved for future</span>
<span class="sd">        extensions.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span>

    <span class="nd">@type.setter</span>
    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="nb">type</span>

    <span class="nd">@type.deleter</span>
<div class="viewcode-block" id="Field.type"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.type">[docs]</a>    <span class="k">def</span> <span class="nf">type</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">_type</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A :class:`Values` instance (or ``None``) defining the domain</span>
<span class="sd">        of the column.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_values</span>

    <span class="nd">@values.setter</span>
    <span class="k">def</span> <span class="nf">values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
        <span class="k">assert</span> <span class="n">values</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">Values</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_values</span> <span class="o">=</span> <span class="n">values</span>

    <span class="nd">@values.deleter</span>
<div class="viewcode-block" id="Field.values"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.values">[docs]</a>    <span class="k">def</span> <span class="nf">values</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">_values</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Field.links"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.links">[docs]</a>    <span class="k">def</span> <span class="nf">links</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of :class:`Link` instances used to reference more</span>
<span class="sd">        details about the meaning of the FIELD_.  This is purely</span>
<span class="sd">        informational and is not used by the `astropy.io.votable`</span>
<span class="sd">        package.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_links</span>
</div>
<div class="viewcode-block" id="Field.parse"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.parse">[docs]</a>    <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;VALUES&#39;</span><span class="p">:</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">_votable</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;LINK&#39;</span><span class="p">:</span>
                    <span class="n">link</span> <span class="o">=</span> <span class="n">Link</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">links</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">link</span><span class="p">)</span>
                    <span class="n">link</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">:</span>
                    <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                        <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">tag</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">:</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">:</span>
                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                        <span class="n">warn_or_raise</span><span class="p">(</span>
                            <span class="n">W17</span><span class="p">,</span> <span class="n">W17</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">data</span> <span class="ow">or</span> <span class="bp">None</span>
                <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">:</span>
                    <span class="k">break</span>

        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</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">title</span> <span class="o">=</span> <span class="s">&quot; &quot;</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">strip</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">description</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">))</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">_setup</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

        <span class="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="Field.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="n">attrib</span> <span class="o">=</span> <span class="n">w</span><span class="o">.</span><span class="n">object_attrs</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">_attr_list</span><span class="p">)</span>
        <span class="k">if</span> <span class="s">&#39;unit&#39;</span> <span class="ow">in</span> <span class="n">attrib</span><span class="p">:</span>
            <span class="n">attrib</span><span class="p">[</span><span class="s">&#39;unit&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unit</span><span class="o">.</span><span class="n">to_string</span><span class="p">(</span><span class="s">&#39;cds&#39;</span><span class="p">)</span>
        <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="n">attrib</span><span class="p">):</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="s">u&#39;DESCRIPTION&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">wrap</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">is_defaults</span><span class="p">():</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">links</span><span class="p">:</span>
                <span class="n">link</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Field.to_table_column"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.to_table_column">[docs]</a>    <span class="k">def</span> <span class="nf">to_table_column</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Sets the attributes of a given `astropy.table.Column` instance</span>
<span class="sd">        to match the information in this `Field`.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="s">&#39;width&#39;</span><span class="p">,</span> <span class="s">&#39;precision&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">,</span> <span class="s">&#39;xtype&#39;</span><span class="p">]:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">is_defaults</span><span class="p">():</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">to_table_column</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">links</span><span class="p">:</span>
            <span class="n">link</span><span class="o">.</span><span class="n">to_table_column</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">column</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unit</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="c"># TODO: Use units framework when it&#39;s available</span>
            <span class="n">column</span><span class="o">.</span><span class="n">units</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unit</span>
        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="p">,</span> <span class="n">converters</span><span class="o">.</span><span class="n">FloatingPoint</span><span class="p">):</span>
            <span class="n">column</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">output_format</span>
</div>
    <span class="nd">@classmethod</span>
<div class="viewcode-block" id="Field.from_table_column"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Field.html#astropy.io.votable.tree.Field.from_table_column">[docs]</a>    <span class="k">def</span> <span class="nf">from_table_column</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">votable</span><span class="p">,</span> <span class="n">column</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Restores a `Field` instance from a given</span>
<span class="sd">        `astropy.table.Column` instance.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="s">&#39;width&#39;</span><span class="p">,</span> <span class="s">&#39;precision&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">,</span> <span class="s">&#39;xtype&#39;</span><span class="p">]:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">kwargs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
        <span class="c"># TODO: Use the unit framework when available</span>
        <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">units</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;unit&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">units</span>
        <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span>
        <span class="n">result</span> <span class="o">=</span> <span class="n">converters</span><span class="o">.</span><span class="n">table_column_to_votable_datatype</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
        <span class="n">kwargs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>

        <span class="n">field</span> <span class="o">=</span> <span class="n">cls</span><span class="p">(</span><span class="n">votable</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>

        <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">field</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">description</span>
        <span class="n">field</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">from_table_column</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
        <span class="k">if</span> <span class="s">&#39;links&#39;</span> <span class="ow">in</span> <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">column</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s">&#39;links&#39;</span><span class="p">]:</span>
                <span class="n">field</span><span class="o">.</span><span class="n">links</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Link</span><span class="o">.</span><span class="n">from_table_column</span><span class="p">(</span><span class="n">link</span><span class="p">))</span>

        <span class="c"># TODO: Parse format into precision and width</span>
        <span class="k">return</span> <span class="n">field</span>

</div></div>
<div class="viewcode-block" id="Param"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Param.html#astropy.io.votable.tree.Param">[docs]</a><span class="k">class</span> <span class="nc">Param</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    PARAM_ element: constant-valued columns in the data.</span>

<span class="sd">    :class:`Param` objects are a subclass of :class:`Field`, and have</span>
<span class="sd">    all of its methods and members.  Additionally, it defines :attr:`value`.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="n">Field</span><span class="o">.</span><span class="n">_attr_list_11</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
    <span class="n">_attr_list_12</span> <span class="o">=</span> <span class="n">Field</span><span class="o">.</span><span class="n">_attr_list_12</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
    <span class="n">_element_name</span> <span class="o">=</span> <span class="s">&#39;PARAM&#39;</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">votable</span><span class="p">,</span> <span class="n">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">datatype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">arraysize</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">precision</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span>
                 <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">value</span>
        <span class="n">Field</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="n">votable</span><span class="p">,</span> <span class="n">ID</span><span class="o">=</span><span class="n">ID</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">datatype</span><span class="o">=</span><span class="n">datatype</span><span class="p">,</span>
                       <span class="n">arraysize</span><span class="o">=</span><span class="n">arraysize</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="n">ucd</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span>
                       <span class="n">precision</span><span class="o">=</span><span class="n">precision</span><span class="p">,</span> <span class="n">utype</span><span class="o">=</span><span class="n">utype</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">type</span><span class="p">,</span>
                       <span class="nb">id</span><span class="o">=</span><span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*required*] The constant value of the parameter.  Its type is</span>
<span class="sd">        determined by the :attr:`~Field.datatype` member.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span>

    <span class="nd">@value.setter</span>
<div class="viewcode-block" id="Param.value"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Param.html#astropy.io.votable.tree.Param.value">[docs]</a>    <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">value</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
        <span class="k">if</span> <span class="p">((</span><span class="n">IS_PY3K</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">))</span> <span class="ow">or</span>
            <span class="p">(</span><span class="ow">not</span> <span class="n">IS_PY3K</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">string_types</span><span class="p">))):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span>
                <span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">value</span>
</div>
    <span class="k">def</span> <span class="nf">_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">Field</span><span class="o">.</span><span class="n">_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span>

<div class="viewcode-block" id="Param.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Param.html#astropy.io.votable.tree.Param.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="n">tmp_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">tmp_value</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
        <span class="c"># We must always have a value</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</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">_value</span> <span class="o">=</span> <span class="s">u&quot;&quot;</span>
        <span class="n">Field</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</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">_value</span> <span class="o">=</span> <span class="n">tmp_value</span>

</div></div>
<div class="viewcode-block" id="CooSys"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.CooSys.html#astropy.io.votable.tree.CooSys">[docs]</a><span class="k">class</span> <span class="nc">CooSys</span><span class="p">(</span><span class="n">SimpleElement</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    COOSYS_ element: defines a coordinate system.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">_attr_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;equinox&#39;</span><span class="p">,</span> <span class="s">&#39;epoch&#39;</span><span class="p">,</span> <span class="s">&#39;system&#39;</span><span class="p">]</span>
    <span class="n">_element_name</span> <span class="o">=</span> <span class="s">&#39;COOSYS&#39;</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">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">equinox</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">epoch</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">system</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>

        <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W27</span><span class="p">,</span> <span class="n">W27</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

        <span class="n">SimpleElement</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="bp">self</span><span class="o">.</span><span class="n">ID</span>      <span class="o">=</span> <span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">equinox</span> <span class="o">=</span> <span class="n">equinox</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">epoch</span>   <span class="o">=</span> <span class="n">epoch</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">system</span>  <span class="o">=</span> <span class="n">system</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;COOSYS&#39;</span><span class="p">,</span> <span class="n">extra</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ID</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*required*] The XML ID of the COOSYS_ element, used for</span>
<span class="sd">        cross-referencing.  May be ``None`` or a string conforming to</span>
<span class="sd">        XML ID_ syntax.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ID</span>

    <span class="nd">@ID.setter</span>
<div class="viewcode-block" id="CooSys.ID"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.CooSys.html#astropy.io.votable.tree.CooSys.ID">[docs]</a>    <span class="k">def</span> <span class="nf">ID</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ID</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_1_or_later&#39;</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">ID</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">vo_raise</span><span class="p">(</span><span class="n">E15</span><span class="p">,</span> <span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ID</span> <span class="o">=</span> <span class="n">ID</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">system</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Specifies the type of coordinate system.  Valid choices are:</span>

<span class="sd">          &#39;eq_FK4&#39;, &#39;eq_FK5&#39;, &#39;ICRS&#39;, &#39;ecl_FK4&#39;, &#39;ecl_FK5&#39;, &#39;galactic&#39;,</span>
<span class="sd">          &#39;supergalactic&#39;, &#39;xy&#39;, &#39;barycentric&#39;, or &#39;geo_app&#39;</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_system</span>

    <span class="nd">@system.setter</span>
    <span class="k">def</span> <span class="nf">system</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">system</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">system</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;eq_FK4&#39;</span><span class="p">,</span> <span class="s">&#39;eq_FK5&#39;</span><span class="p">,</span> <span class="s">&#39;ICRS&#39;</span><span class="p">,</span> <span class="s">&#39;ecl_FK4&#39;</span><span class="p">,</span> <span class="s">&#39;ecl_FK5&#39;</span><span class="p">,</span>
                          <span class="s">&#39;galactic&#39;</span><span class="p">,</span> <span class="s">&#39;supergalactic&#39;</span><span class="p">,</span> <span class="s">&#39;xy&#39;</span><span class="p">,</span> <span class="s">&#39;barycentric&#39;</span><span class="p">,</span>
                          <span class="s">&#39;geo_app&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">E16</span><span class="p">,</span> <span class="n">E16</span><span class="p">,</span> <span class="n">system</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_system</span> <span class="o">=</span> <span class="n">system</span>

    <span class="nd">@system.deleter</span>
<div class="viewcode-block" id="CooSys.system"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.CooSys.html#astropy.io.votable.tree.CooSys.system">[docs]</a>    <span class="k">def</span> <span class="nf">system</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">_system</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">equinox</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A parameter required to fix the equatorial or ecliptic systems</span>
<span class="sd">        (as e.g. &quot;J2000&quot; as the default &quot;eq_FK5&quot; or &quot;B1950&quot; as the</span>
<span class="sd">        default &quot;eq_FK4&quot;).</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_equinox</span>

    <span class="nd">@equinox.setter</span>
    <span class="k">def</span> <span class="nf">equinox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">equinox</span><span class="p">):</span>
        <span class="n">check_astroyear</span><span class="p">(</span><span class="n">equinox</span><span class="p">,</span> <span class="s">&#39;equinox&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_equinox</span> <span class="o">=</span> <span class="n">equinox</span>

    <span class="nd">@equinox.deleter</span>
<div class="viewcode-block" id="CooSys.equinox"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.CooSys.html#astropy.io.votable.tree.CooSys.equinox">[docs]</a>    <span class="k">def</span> <span class="nf">equinox</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">_equinox</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">epoch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Specifies the epoch of the positions.  It must be a string</span>
<span class="sd">        specifying an astronomical year.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_epoch</span>

    <span class="nd">@epoch.setter</span>
    <span class="k">def</span> <span class="nf">epoch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">epoch</span><span class="p">):</span>
        <span class="n">check_astroyear</span><span class="p">(</span><span class="n">epoch</span><span class="p">,</span> <span class="s">&#39;epoch&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_epoch</span> <span class="o">=</span> <span class="n">epoch</span>

    <span class="nd">@epoch.deleter</span>
<div class="viewcode-block" id="CooSys.epoch"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.CooSys.html#astropy.io.votable.tree.CooSys.epoch">[docs]</a>    <span class="k">def</span> <span class="nf">epoch</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">_epoch</span> <span class="o">=</span> <span class="bp">None</span>

</div></div>
<div class="viewcode-block" id="FieldRef"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.FieldRef.html#astropy.io.votable.tree.FieldRef">[docs]</a><span class="k">class</span> <span class="nc">FieldRef</span><span class="p">(</span><span class="n">SimpleElement</span><span class="p">,</span> <span class="n">_UtypeProperty</span><span class="p">,</span> <span class="n">_UcdProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    FIELDref_ element: used inside of GROUP_ elements to refer to remote FIELD_ elements.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ref&#39;</span><span class="p">]</span>
    <span class="n">_attr_list_12</span> <span class="o">=</span> <span class="n">_attr_list_11</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">]</span>
    <span class="n">_element_name</span> <span class="o">=</span> <span class="s">&quot;FIELDref&quot;</span>
    <span class="n">_utype_in_v1_2</span> <span class="o">=</span> <span class="bp">True</span>
    <span class="n">_ucd_in_v1_2</span> <span class="o">=</span> <span class="bp">True</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">table</span><span class="p">,</span> <span class="n">ref</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        *table* is the :class:`Table` object that this :class:`FieldRef`</span>
<span class="sd">        is a member of.</span>

<span class="sd">        *ref* is the ID to reference a :class:`Field` object defined</span>
<span class="sd">        elsewhere.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>

        <span class="n">SimpleElement</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="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="o">=</span> <span class="n">table</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ref</span>    <span class="o">=</span> <span class="n">ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ucd</span>    <span class="o">=</span> <span class="n">ucd</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">utype</span>  <span class="o">=</span> <span class="n">utype</span>

        <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_12</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_11</span>
            <span class="k">if</span> <span class="n">ucd</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;ucd&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">utype</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;utype&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;The ID_ of the FIELD_ that this FIELDref_ references.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>

    <span class="nd">@ref.setter</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>

    <span class="nd">@ref.deleter</span>
<div class="viewcode-block" id="FieldRef.ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.FieldRef.html#astropy.io.votable.tree.FieldRef.ref">[docs]</a>    <span class="k">def</span> <span class="nf">ref</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">_ref</span> <span class="o">=</span> <span class="bp">None</span>
</div>
<div class="viewcode-block" id="FieldRef.get_ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.FieldRef.html#astropy.io.votable.tree.FieldRef.get_ref">[docs]</a>    <span class="k">def</span> <span class="nf">get_ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Lookup the :class:`Field` instance that this :class:`FieldRef`</span>
<span class="sd">        references.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">_votable</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">Field</span><span class="p">)</span> <span class="ow">and</span> <span class="n">field</span><span class="o">.</span><span class="n">ID</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">field</span>
        <span class="n">vo_raise</span><span class="p">(</span>
            <span class="s">&quot;No field named &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span><span class="p">,</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">)</span>

</div></div>
<div class="viewcode-block" id="ParamRef"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.ParamRef.html#astropy.io.votable.tree.ParamRef">[docs]</a><span class="k">class</span> <span class="nc">ParamRef</span><span class="p">(</span><span class="n">SimpleElement</span><span class="p">,</span> <span class="n">_UtypeProperty</span><span class="p">,</span> <span class="n">_UcdProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    PARAMref_ element: used inside of GROUP_ elements to refer to remote PARAM_ elements.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</span>

<span class="sd">    It contains the following publicly-accessible members:</span>

<span class="sd">      *ref*: An XML ID refering to a &lt;PARAM&gt; element.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ref&#39;</span><span class="p">]</span>
    <span class="n">_attr_list_12</span> <span class="o">=</span> <span class="n">_attr_list_11</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">]</span>
    <span class="n">_element_name</span> <span class="o">=</span> <span class="s">&quot;PARAMref&quot;</span>
    <span class="n">_utype_in_v1_2</span> <span class="o">=</span> <span class="bp">True</span>
    <span class="n">_ucd_in_v1_2</span> <span class="o">=</span> <span class="bp">True</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">table</span><span class="p">,</span> <span class="n">ref</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>

        <span class="n">Element</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="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="o">=</span> <span class="n">table</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ref</span>    <span class="o">=</span> <span class="n">ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ucd</span>    <span class="o">=</span> <span class="n">ucd</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">utype</span>  <span class="o">=</span> <span class="n">utype</span>

        <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_12</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_list_11</span>
            <span class="k">if</span> <span class="n">ucd</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;ucd&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">utype</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_element_name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;utype&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;The ID_ of the PARAM_ that this PARAMref_ references.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>

    <span class="nd">@ref.setter</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>

    <span class="nd">@ref.deleter</span>
<div class="viewcode-block" id="ParamRef.ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.ParamRef.html#astropy.io.votable.tree.ParamRef.ref">[docs]</a>    <span class="k">def</span> <span class="nf">ref</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">_ref</span> <span class="o">=</span> <span class="bp">None</span>
</div>
<div class="viewcode-block" id="ParamRef.get_ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.ParamRef.html#astropy.io.votable.tree.ParamRef.get_ref">[docs]</a>    <span class="k">def</span> <span class="nf">get_ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Lookup the :class:`Param` instance that this :class:`PARAMref`</span>
<span class="sd">        references.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">_votable</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">param</span><span class="p">,</span> <span class="n">Param</span><span class="p">)</span> <span class="ow">and</span> <span class="n">param</span><span class="o">.</span><span class="n">ID</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">param</span>
        <span class="n">vo_raise</span><span class="p">(</span>
            <span class="s">&quot;No params named &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span><span class="p">,</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">)</span>

</div></div>
<div class="viewcode-block" id="Group"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Group.html#astropy.io.votable.tree.Group">[docs]</a><span class="k">class</span> <span class="nc">Group</span><span class="p">(</span><span class="n">Element</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">,</span> <span class="n">_NameProperty</span><span class="p">,</span> <span class="n">_UtypeProperty</span><span class="p">,</span>
            <span class="n">_UcdProperty</span><span class="p">,</span> <span class="n">_DescriptionProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    GROUP_ element: groups FIELD_ and PARAM_ elements.</span>

<span class="sd">    This information is currently ignored by the vo package---that is</span>
<span class="sd">    the columns in the recarray are always flat---but the grouping</span>
<span class="sd">    information is stored so that it can be written out again to the</span>
<span class="sd">    XML file.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</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">table</span><span class="p">,</span> <span class="n">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ref</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span>     <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span>        <span class="o">=</span> <span class="n">pos</span>

        <span class="n">Element</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="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="o">=</span> <span class="n">table</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">ID</span>          <span class="o">=</span> <span class="p">(</span><span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                            <span class="ow">or</span> <span class="n">xmlutil</span><span class="o">.</span><span class="n">fix_id</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</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">ref</span>         <span class="o">=</span> <span class="n">ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ucd</span>         <span class="o">=</span> <span class="n">ucd</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">utype</span>       <span class="o">=</span> <span class="n">utype</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="bp">None</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">_entries</span> <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span>
            <span class="p">(</span><span class="n">FieldRef</span><span class="p">,</span> <span class="n">ParamRef</span><span class="p">,</span> <span class="n">Group</span><span class="p">,</span> <span class="n">Param</span><span class="p">))</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;GROUP&#39;</span><span class="p">,</span> <span class="n">extra</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Currently ignored, as it&#39;s not clear from the spec how this is</span>
<span class="sd">        meant to work.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>

    <span class="nd">@ref.setter</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">):</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>

    <span class="nd">@ref.deleter</span>
<div class="viewcode-block" id="Group.ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Group.html#astropy.io.votable.tree.Group.ref">[docs]</a>    <span class="k">def</span> <span class="nf">ref</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">_ref</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Group.entries"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Group.html#astropy.io.votable.tree.Group.entries">[docs]</a>    <span class="k">def</span> <span class="nf">entries</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [read-only] A list of members of the GROUP_.  This list may</span>
<span class="sd">        only contain objects of type :class:`Param`, :class:`Group`,</span>
<span class="sd">        :class:`ParamRef` and :class:`FieldRef`.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_entries</span>
</div>
    <span class="k">def</span> <span class="nf">_add_fieldref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">fieldref</span> <span class="o">=</span> <span class="n">FieldRef</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fieldref</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_paramref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">paramref</span> <span class="o">=</span> <span class="n">ParamRef</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">paramref</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_param</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="p">,</span> <span class="n">VOTableFile</span><span class="p">):</span>
            <span class="n">votable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">votable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">_votable</span>
        <span class="n">param</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">votable</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">param</span><span class="p">)</span>
        <span class="n">param</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">group</span> <span class="o">=</span> <span class="n">Group</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
        <span class="n">group</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

<div class="viewcode-block" id="Group.parse"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Group.html#astropy.io.votable.tree.Group.parse">[docs]</a>    <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="n">tag_mapping</span> <span class="o">=</span> <span class="p">{</span>
            <span class="s">&#39;FIELDref&#39;</span>    <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_fieldref</span><span class="p">,</span>
            <span class="s">&#39;PARAMref&#39;</span>    <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_paramref</span><span class="p">,</span>
            <span class="s">&#39;PARAM&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_param</span><span class="p">,</span>
            <span class="s">&#39;GROUP&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_group</span><span class="p">,</span>
            <span class="s">&#39;DESCRIPTION&#39;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ignore_add</span><span class="p">}</span>

        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                <span class="n">tag_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">)(</span>
                    <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">:</span>
                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W17</span><span class="p">,</span> <span class="n">W17</span><span class="p">,</span> <span class="s">&#39;GROUP&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">data</span> <span class="ow">or</span> <span class="bp">None</span>
                <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;GROUP&#39;</span><span class="p">:</span>
                    <span class="k">break</span>
        <span class="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="Group.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Group.html#astropy.io.votable.tree.Group.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span>
            <span class="s">u&#39;GROUP&#39;</span><span class="p">,</span>
            <span class="n">attrib</span><span class="o">=</span><span class="n">w</span><span class="o">.</span><span class="n">object_attrs</span><span class="p">(</span>
                <span class="bp">self</span><span class="p">,</span> <span class="p">[</span><span class="s">u&#39;ID&#39;</span><span class="p">,</span> <span class="s">u&#39;name&#39;</span><span class="p">,</span> <span class="s">u&#39;ref&#39;</span><span class="p">,</span> <span class="s">u&#39;ucd&#39;</span><span class="p">,</span> <span class="s">u&#39;utype&#39;</span><span class="p">])):</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="s">u&quot;DESCRIPTION&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">wrap</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="p">:</span>
                <span class="n">entry</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Group.iter_fields_and_params"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Group.html#astropy.io.votable.tree.Group.iter_fields_and_params">[docs]</a>    <span class="k">def</span> <span class="nf">iter_fields_and_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all :class:`Param` elements in this</span>
<span class="sd">        :class:`Group`.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="p">:</span>
            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">Param</span><span class="p">):</span>
                <span class="k">yield</span> <span class="n">entry</span>
            <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">Group</span><span class="p">):</span>
                <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">entry</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
                    <span class="k">yield</span> <span class="n">field</span>
</div>
<div class="viewcode-block" id="Group.iter_groups"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Group.html#astropy.io.votable.tree.Group.iter_groups">[docs]</a>    <span class="k">def</span> <span class="nf">iter_groups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all sub-:class:`Group` instances in</span>
<span class="sd">        this :class:`Group`.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="p">:</span>
            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">Group</span><span class="p">):</span>
                <span class="k">yield</span> <span class="n">entry</span>
                <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">entry</span><span class="o">.</span><span class="n">iter_groups</span><span class="p">():</span>
                    <span class="k">yield</span> <span class="n">group</span>

</div></div>
<div class="viewcode-block" id="Table"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table">[docs]</a><span class="k">class</span> <span class="nc">Table</span><span class="p">(</span><span class="n">Element</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">,</span> <span class="n">_NameProperty</span><span class="p">,</span> <span class="n">_UcdProperty</span><span class="p">,</span>
            <span class="n">_DescriptionProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    TABLE_ element: optionally contains data.</span>

<span class="sd">    It contains the following publicly-accessible and mutable</span>
<span class="sd">    attribute:</span>

<span class="sd">        *array*: A Numpy masked array of the data itself, where each</span>
<span class="sd">        row is a row of votable data, and columns are named and typed</span>
<span class="sd">        based on the &lt;FIELD&gt; elements of the table.  The mask is</span>
<span class="sd">        parallel to the data array, except for variable-length fields.</span>
<span class="sd">        For those fields, the numpy array&#39;s column type is &quot;object&quot;</span>
<span class="sd">        (``&quot;O&quot;``), and another masked array is stored there.</span>

<span class="sd">    If the Table contains no data, (for example, its enclosing</span>
<span class="sd">    :class:`Resource` has :attr:`~Resource.type` == &#39;meta&#39;) *array*</span>
<span class="sd">    will have zero-length.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</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">votable</span><span class="p">,</span> <span class="n">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ref</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ucd</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">nrows</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_empty</span> <span class="o">=</span> <span class="bp">False</span>

        <span class="n">Element</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="bp">self</span><span class="o">.</span><span class="n">_votable</span> <span class="o">=</span> <span class="n">votable</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">ID</span> <span class="o">=</span> <span class="p">(</span><span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                   <span class="ow">or</span> <span class="n">xmlutil</span><span class="o">.</span><span class="n">fix_id</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</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="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ucd</span> <span class="o">=</span> <span class="n">ucd</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">utype</span> <span class="o">=</span> <span class="n">utype</span>
        <span class="k">if</span> <span class="n">nrows</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">nrows</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">nrows</span><span class="p">)</span>
            <span class="k">assert</span> <span class="n">nrows</span> <span class="o">&gt;=</span> <span class="mi">0</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_nrows</span> <span class="o">=</span> <span class="n">nrows</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="s">&#39;tabledata&#39;</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">_fields</span> <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Field</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_params</span> <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Param</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span> <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Group</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_links</span>  <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Link</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_infos</span>  <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Info</span><span class="p">)</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;TABLE&#39;</span><span class="p">,</span> <span class="n">extra</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span>

    <span class="nd">@ref.setter</span>
    <span class="k">def</span> <span class="nf">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ref</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Refer to another TABLE, previously defined, by the *ref* ID_</span>
<span class="sd">        for all metadata (FIELD_, PARAM_ etc.) information.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="c"># When the ref changes, we want to verify that it will work</span>
        <span class="c"># by actually going and looking for the referenced table.</span>
        <span class="c"># If found, set a bunch of properties in this table based</span>
        <span class="c"># on the other one.</span>
        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">try</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">_votable</span><span class="o">.</span><span class="n">get_table_by_id</span><span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
            <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
                <span class="n">warn_or_raise</span><span class="p">(</span>
                    <span class="n">W43</span><span class="p">,</span> <span class="n">W43</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;TABLE&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
                <span class="n">ref</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_fields</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">fields</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_params</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">params</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">groups</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_links</span>  <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">links</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fields</span><span class="p">[:]</span>
            <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_params</span><span class="p">[:]</span>
            <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">[:]</span>
            <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_links</span><span class="p">[:]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ref</span> <span class="o">=</span> <span class="n">ref</span>

    <span class="nd">@ref.deleter</span>
<div class="viewcode-block" id="Table.ref"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.ref">[docs]</a>    <span class="k">def</span> <span class="nf">ref</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">_ref</span> <span class="o">=</span> <span class="bp">None</span>
</div>
    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">format</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*required*] The serialization format of the table.  Must be</span>
<span class="sd">        one of:</span>

<span class="sd">          &#39;tabledata&#39; (TABLEDATA_), &#39;binary&#39; (BINARY_), &#39;fits&#39; (FITS_).</span>

<span class="sd">        Note that the &#39;fits&#39; format, since it requires an external</span>
<span class="sd">        file, can not be written out.  Any file read in with &#39;fits&#39;</span>
<span class="sd">        format will be read out, by default, in &#39;tabledata&#39; format.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format</span>

    <span class="nd">@format.setter</span>
<div class="viewcode-block" id="Table.format"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.format">[docs]</a>    <span class="k">def</span> <span class="nf">format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">format</span><span class="p">):</span>
        <span class="n">format</span> <span class="o">=</span> <span class="n">format</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
        <span class="k">if</span> <span class="n">format</span> <span class="o">==</span> <span class="s">&#39;fits&#39;</span><span class="p">:</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="s">&quot;fits format can not be written out, only read.&quot;</span><span class="p">,</span>
                     <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">NotImplementedError</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;tabledata&#39;</span><span class="p">,</span> <span class="s">&#39;binary&#39;</span><span class="p">):</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="s">&quot;Invalid format &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">format</span><span class="p">,</span>
                     <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_format</span> <span class="o">=</span> <span class="n">format</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Table.nrows"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.nrows">[docs]</a>    <span class="k">def</span> <span class="nf">nrows</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*immutable*] The number of rows in the table, as specified in</span>
<span class="sd">        the XML file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nrows</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Table.fields"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.fields">[docs]</a>    <span class="k">def</span> <span class="nf">fields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of :class:`Field` objects describing the types of each</span>
<span class="sd">        of the data columns.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fields</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Table.params"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.params">[docs]</a>    <span class="k">def</span> <span class="nf">params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of parameters (constant-valued columns) for the</span>
<span class="sd">        table.  Must contain only :class:`Param` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_params</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Table.groups"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.groups">[docs]</a>    <span class="k">def</span> <span class="nf">groups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of :class:`Group` objects describing how the columns</span>
<span class="sd">        and parameters are grouped.  Currently this information is</span>
<span class="sd">        only kept around for round-tripping and informational</span>
<span class="sd">        purposes.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Table.links"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.links">[docs]</a>    <span class="k">def</span> <span class="nf">links</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of :class:`Link` objects (pointers to other documents</span>
<span class="sd">        or servers through a URI) for the table.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_links</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Table.infos"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.infos">[docs]</a>    <span class="k">def</span> <span class="nf">infos</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of :class:`Info` objects for the table.  Allows for</span>
<span class="sd">        post-operational diagnostics.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_infos</span>
</div>
<div class="viewcode-block" id="Table.is_empty"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.is_empty">[docs]</a>    <span class="k">def</span> <span class="nf">is_empty</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Returns True if this table doesn&#39;t contain any real data</span>
<span class="sd">        because it was skipped over by the parser (through use of the</span>
<span class="sd">        `table_number` kwarg).</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_empty</span>
</div>
<div class="viewcode-block" id="Table.create_arrays"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.create_arrays">[docs]</a>    <span class="k">def</span> <span class="nf">create_arrays</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nrows</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{}):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Create a new array to hold the data based on the current set</span>
<span class="sd">        of fields, and store them in the *array* and member variable.</span>
<span class="sd">        Any data in the existing array will be lost.</span>

<span class="sd">        *nrows*, if provided, is the number of rows to allocate.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="n">nrows</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">nrows</span> <span class="o">=</span> <span class="mi">0</span>

        <span class="n">fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span>

        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="n">array</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">recarray</span><span class="p">((</span><span class="n">nrows</span><span class="p">,),</span> <span class="n">dtype</span><span class="o">=</span><span class="s">&#39;O&#39;</span><span class="p">)</span>
            <span class="n">mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">nrows</span><span class="p">,),</span> <span class="n">dtype</span><span class="o">=</span><span class="s">&#39;b&#39;</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="c"># for field in fields: field._setup(config)</span>
            <span class="n">Field</span><span class="o">.</span><span class="n">uniqify_names</span><span class="p">(</span><span class="n">fields</span><span class="p">)</span>

            <span class="n">dtype</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">IS_PY3K</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">_unique_name</span> <span class="o">==</span> <span class="n">x</span><span class="o">.</span><span class="n">ID</span><span class="p">:</span>
                        <span class="nb">id</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">ID</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="nb">id</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">_unique_name</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">ID</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">_unique_name</span> <span class="o">==</span> <span class="n">x</span><span class="o">.</span><span class="n">ID</span><span class="p">:</span>
                        <span class="nb">id</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">ID</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;utf-8&#39;</span><span class="p">)</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="nb">id</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">_unique_name</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;utf-8&#39;</span><span class="p">),</span>
                              <span class="n">x</span><span class="o">.</span><span class="n">ID</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;utf-8&#39;</span><span class="p">))</span>
                <span class="n">dtype</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="nb">id</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">format</span><span class="p">))</span>

            <span class="n">array</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">recarray</span><span class="p">((</span><span class="n">nrows</span><span class="p">,),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">dtype</span><span class="p">(</span><span class="n">dtype</span><span class="p">))</span>
            <span class="n">descr_mask</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">array</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">descr</span><span class="p">:</span>
                <span class="n">new_type</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;O&#39;</span> <span class="ow">and</span> <span class="s">&#39;O&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;bool&#39;</span>
                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
                    <span class="n">descr_mask</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">new_type</span><span class="p">))</span>
                <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
                    <span class="n">descr_mask</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">new_type</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
            <span class="n">mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">nrows</span><span class="p">,),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">descr_mask</span><span class="p">)</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">mask</span><span class="p">)</span>
</div>
    <span class="k">def</span> <span class="nf">_resize_strategy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Return a new (larger) size based on size, used for</span>
<span class="sd">        reallocating an array when it fills up.  This is in its own</span>
<span class="sd">        function so the resizing strategy can be easily replaced.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="c"># Once we go beyond 0, make a big step -- after that use a</span>
        <span class="c"># factor of 1.5 to help keep memory usage compact</span>
        <span class="k">if</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">return</span> <span class="mi">512</span>
        <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">size</span> <span class="o">*</span> <span class="n">RESIZE_AMOUNT</span><span class="p">))</span>

    <span class="k">def</span> <span class="nf">_add_field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">field</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_votable</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
        <span class="n">field</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_param</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">param</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_votable</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">param</span><span class="p">)</span>
        <span class="n">param</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">group</span> <span class="o">=</span> <span class="n">Group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
        <span class="n">group</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_link</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">link</span> <span class="o">=</span> <span class="n">Link</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">links</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">link</span><span class="p">)</span>
        <span class="n">link</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W26</span><span class="p">,</span> <span class="n">W26</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="s">&#39;TABLE&#39;</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="n">info</span> <span class="o">=</span> <span class="n">Info</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">infos</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
        <span class="n">info</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

<div class="viewcode-block" id="Table.parse"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.parse">[docs]</a>    <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="n">columns</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;columns&#39;</span><span class="p">)</span>

        <span class="c"># If we&#39;ve requested to read in only a specific table, skip</span>
        <span class="c"># all others</span>
        <span class="n">table_number</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;table_number&#39;</span><span class="p">)</span>
        <span class="n">current_table_number</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;_current_table_number&#39;</span><span class="p">)</span>
        <span class="n">skip_table</span> <span class="o">=</span> <span class="bp">False</span>
        <span class="k">if</span> <span class="n">current_table_number</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">config</span><span class="p">[</span><span class="s">&#39;_current_table_number&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">if</span> <span class="p">(</span><span class="n">table_number</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span>
                <span class="n">table_number</span> <span class="o">!=</span> <span class="n">current_table_number</span><span class="p">):</span>
                <span class="n">skip_table</span> <span class="o">=</span> <span class="bp">True</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_empty</span> <span class="o">=</span> <span class="bp">True</span>

        <span class="n">table_id</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;table_id&#39;</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">table_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">table_id</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID</span><span class="p">:</span>
                <span class="n">skip_table</span> <span class="o">=</span> <span class="bp">True</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_empty</span> <span class="o">=</span> <span class="bp">True</span>

        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="c"># This table doesn&#39;t have its own datatype descriptors, it</span>
            <span class="c"># just references those from another table.</span>

            <span class="c"># This is to call the property setter to go and get the</span>
            <span class="c"># referenced information</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span>

            <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DATA&#39;</span><span class="p">:</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;DATA&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="k">break</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TABLE&#39;</span><span class="p">:</span>
                        <span class="k">return</span> <span class="bp">self</span>
                    <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">:</span>
                        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W17</span><span class="p">,</span> <span class="n">W17</span><span class="p">,</span> <span class="s">&#39;RESOURCE&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">data</span> <span class="ow">or</span> <span class="bp">None</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">tag_mapping</span> <span class="o">=</span> <span class="p">{</span>
                <span class="s">&#39;FIELD&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_field</span><span class="p">,</span>
                <span class="s">&#39;PARAM&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_param</span><span class="p">,</span>
                <span class="s">&#39;GROUP&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_group</span><span class="p">,</span>
                <span class="s">&#39;LINK&#39;</span>        <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_link</span><span class="p">,</span>
                <span class="s">&#39;INFO&#39;</span>        <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_info</span><span class="p">,</span>
                <span class="s">&#39;DESCRIPTION&#39;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ignore_add</span><span class="p">}</span>

            <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DATA&#39;</span><span class="p">:</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;DATA&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="k">break</span>

                    <span class="n">tag_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">)(</span>
                        <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">:</span>
                        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W17</span><span class="p">,</span> <span class="n">W17</span><span class="p">,</span> <span class="s">&#39;RESOURCE&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">data</span> <span class="ow">or</span> <span class="bp">None</span>
                    <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TABLE&#39;</span><span class="p">:</span>
                        <span class="c"># For error checking purposes</span>
                        <span class="n">Field</span><span class="o">.</span><span class="n">uniqify_names</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">)</span>
                        <span class="k">return</span> <span class="bp">self</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">create_arrays</span><span class="p">(</span><span class="n">nrows</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_nrows</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">)</span>
        <span class="n">fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</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">ID</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>
        <span class="c"># Deal with a subset of the columns, if requested.</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span><span class="p">:</span>
            <span class="n">colnumbers</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">))</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span>
                <span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">columns</span><span class="p">]</span>
            <span class="n">columns</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
            <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">columns</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">integer</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">columns</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">columns</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">)):</span>
                    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
                        <span class="s">&quot;Some specified column numbers out of range&quot;</span><span class="p">)</span>
                <span class="n">colnumbers</span> <span class="o">=</span> <span class="n">columns</span>
            <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">columns</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">character</span><span class="p">):</span>
                <span class="k">try</span><span class="p">:</span>
                    <span class="n">colnumbers</span> <span class="o">=</span> <span class="p">[</span><span class="n">names</span><span class="o">.</span><span class="n">index</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">columns</span><span class="p">]</span>
                <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
                    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
                        <span class="s">&quot;Columns &#39;</span><span class="si">%s</span><span class="s">&#39; not found in fields list&quot;</span> <span class="o">%</span> <span class="n">columns</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">&quot;Invalid columns list&quot;</span><span class="p">)</span>

        <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_table</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TABLEDATA&#39;</span><span class="p">:</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;TABLEDATA&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tabledata</span><span class="p">(</span>
                            <span class="n">iterator</span><span class="p">,</span> <span class="n">colnumbers</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>
                        <span class="k">break</span>
                    <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;BINARY&#39;</span><span class="p">:</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;BINARY&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_binary</span><span class="p">(</span>
                            <span class="n">iterator</span><span class="p">,</span> <span class="n">colnumbers</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>
                        <span class="k">break</span>
                    <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;FITS&#39;</span><span class="p">:</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="s">&#39;FITS&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;extnum&#39;</span><span class="p">])</span>
                        <span class="k">try</span><span class="p">:</span>
                            <span class="n">extnum</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;extnum&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
                            <span class="k">if</span> <span class="n">extnum</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
                                <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">()</span>
                        <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
                            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E17</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_fits</span><span class="p">(</span>
                            <span class="n">iterator</span><span class="p">,</span> <span class="n">extnum</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>
                        <span class="k">break</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W37</span><span class="p">,</span> <span class="n">W37</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="k">break</span>

        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DATA&#39;</span><span class="p">:</span>
                <span class="k">break</span>

        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;INFO&#39;</span><span class="p">:</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
                    <span class="n">warn_or_raise</span><span class="p">(</span>
                        <span class="n">W26</span><span class="p">,</span> <span class="n">W26</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span> <span class="s">&#39;TABLE&#39;</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                <span class="n">info</span> <span class="o">=</span> <span class="n">Info</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">infos</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
                <span class="n">info</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>
            <span class="k">elif</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TABLE&#39;</span><span class="p">:</span>
                <span class="k">break</span>

        <span class="k">return</span> <span class="bp">self</span>
</div>
    <span class="k">def</span> <span class="nf">_parse_tabledata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">colnumbers</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="c"># Since we don&#39;t know the number of rows up front, we&#39;ll</span>
        <span class="c"># reallocate the record array to make room as we go.  This</span>
        <span class="c"># prevents the need to scan through the XML twice.  The</span>
        <span class="c"># allocation is by factors of 1.5.</span>
        <span class="n">invalid</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;invalid&#39;</span><span class="p">,</span> <span class="s">&#39;exception&#39;</span><span class="p">)</span>

        <span class="c"># Need to have only one reference so that we can resize the</span>
        <span class="c"># array</span>
        <span class="n">array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>
        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>

        <span class="n">parsers</span> <span class="o">=</span> <span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">parse</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>
        <span class="n">binparsers</span> <span class="o">=</span> <span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">binparse</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>

        <span class="n">numrows</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">alloc_rows</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">array</span><span class="p">)</span>
        <span class="n">colnumbers_bits</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="ow">in</span> <span class="n">colnumbers</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="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">))]</span>
        <span class="n">row_default</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">default</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>
        <span class="n">mask_default</span> <span class="o">=</span> <span class="p">[</span><span class="bp">True</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">)</span>
        <span class="n">array_chunk</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">mask_chunk</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">chunk_size</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;chunk_size&#39;</span><span class="p">,</span> <span class="n">DEFAULT_CHUNK_SIZE</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TR&#39;</span><span class="p">:</span>
                <span class="c"># Now parse one row</span>
                <span class="n">row</span> <span class="o">=</span> <span class="n">row_default</span><span class="p">[:]</span>
                <span class="n">row_mask</span> <span class="o">=</span> <span class="n">mask_default</span><span class="p">[:]</span>
                <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
                <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
                    <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                        <span class="n">binary</span> <span class="o">=</span> <span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;encoding&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="o">==</span> <span class="s">&#39;base64&#39;</span><span class="p">)</span>
                        <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                            <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;encoding&#39;</span><span class="p">])</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TD&#39;</span><span class="p">:</span>
                            <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">):</span>
                                <span class="n">vo_raise</span><span class="p">(</span><span class="n">E20</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

                            <span class="k">if</span> <span class="n">colnumbers_bits</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
                                <span class="k">try</span><span class="p">:</span>
                                    <span class="k">if</span> <span class="n">binary</span><span class="p">:</span>
                                        <span class="kn">import</span> <span class="nn">base64</span>
                                        <span class="n">rawdata</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span>
                                            <span class="n">data</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;ascii&#39;</span><span class="p">))</span>
                                        <span class="n">buf</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">(</span><span class="n">rawdata</span><span class="p">)</span>
                                        <span class="n">buf</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="k">try</span><span class="p">:</span>
                                            <span class="n">value</span><span class="p">,</span> <span class="n">mask_value</span> <span class="o">=</span> <span class="n">binparsers</span><span class="p">[</span><span class="n">i</span><span class="p">](</span>
                                                <span class="n">buf</span><span class="o">.</span><span class="n">read</span><span class="p">)</span>
                                        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
                                            <span class="n">vo_reraise</span><span class="p">(</span>
                                                <span class="n">e</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                                                <span class="s">&quot;(in row </span><span class="si">%d</span><span class="s">, col &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span> <span class="o">%</span>
                                                <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">array_chunk</span><span class="p">),</span>
                                                 <span class="n">fields</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">ID</span><span class="p">))</span>
                                    <span class="k">else</span><span class="p">:</span>
                                        <span class="k">try</span><span class="p">:</span>
                                            <span class="n">value</span><span class="p">,</span> <span class="n">mask_value</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="n">i</span><span class="p">](</span>
                                                <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                                        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
                                            <span class="n">vo_reraise</span><span class="p">(</span>
                                                <span class="n">e</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                                                <span class="s">&quot;(in row </span><span class="si">%d</span><span class="s">, col &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span> <span class="o">%</span>
                                                <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">array_chunk</span><span class="p">),</span>
                                                 <span class="n">fields</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">ID</span><span class="p">))</span>
                                <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
                                    <span class="k">if</span> <span class="n">invalid</span> <span class="o">==</span> <span class="s">&#39;exception&#39;</span><span class="p">:</span>
                                        <span class="n">vo_reraise</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                                <span class="k">else</span><span class="p">:</span>
                                    <span class="n">row</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
                                    <span class="n">row_mask</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">mask_value</span>
                        <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TR&#39;</span><span class="p">:</span>
                            <span class="k">break</span>
                        <span class="k">else</span><span class="p">:</span>
                            <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">(</span>
                                <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>

                <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">):</span>
                    <span class="n">vo_raise</span><span class="p">(</span><span class="n">E21</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">)),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

                <span class="n">array_chunk</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">row</span><span class="p">))</span>
                <span class="n">mask_chunk</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">row_mask</span><span class="p">))</span>

                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">array_chunk</span><span class="p">)</span> <span class="o">==</span> <span class="n">chunk_size</span><span class="p">:</span>
                    <span class="k">while</span> <span class="n">numrows</span> <span class="o">+</span> <span class="n">chunk_size</span> <span class="o">&gt;</span> <span class="n">alloc_rows</span><span class="p">:</span>
                        <span class="n">alloc_rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resize_strategy</span><span class="p">(</span><span class="n">alloc_rows</span><span class="p">)</span>
                    <span class="k">if</span> <span class="n">alloc_rows</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">array</span><span class="p">):</span>
                        <span class="n">array</span> <span class="o">=</span> <span class="n">_resize</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">alloc_rows</span><span class="p">)</span>
                    <span class="n">array</span><span class="p">[</span><span class="n">numrows</span><span class="p">:</span><span class="n">numrows</span> <span class="o">+</span> <span class="n">chunk_size</span><span class="p">]</span> <span class="o">=</span> <span class="n">array_chunk</span>
                    <span class="n">array</span><span class="o">.</span><span class="n">mask</span><span class="p">[</span><span class="n">numrows</span><span class="p">:</span><span class="n">numrows</span> <span class="o">+</span> <span class="n">chunk_size</span><span class="p">]</span> <span class="o">=</span> <span class="n">mask_chunk</span>
                    <span class="n">numrows</span> <span class="o">+=</span> <span class="n">chunk_size</span>
                    <span class="n">array_chunk</span> <span class="o">=</span> <span class="p">[]</span>
                    <span class="n">mask_chunk</span> <span class="o">=</span> <span class="p">[]</span>

            <span class="k">elif</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;TABLEDATA&#39;</span><span class="p">:</span>
                <span class="k">break</span>

        <span class="c"># Now, resize the array to the exact number of rows we need and</span>
        <span class="c"># put the last chunk values in there.</span>
        <span class="n">alloc_rows</span> <span class="o">=</span> <span class="n">numrows</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">array_chunk</span><span class="p">)</span>

        <span class="n">array</span> <span class="o">=</span> <span class="n">_resize</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">alloc_rows</span><span class="p">)</span>
        <span class="n">array</span><span class="p">[</span><span class="n">numrows</span><span class="p">:]</span> <span class="o">=</span> <span class="n">array_chunk</span>
        <span class="k">if</span> <span class="n">alloc_rows</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
            <span class="n">array</span><span class="o">.</span><span class="n">mask</span><span class="p">[</span><span class="n">numrows</span><span class="p">:]</span> <span class="o">=</span> <span class="n">mask_chunk</span>
        <span class="n">numrows</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">array_chunk</span><span class="p">)</span>

        <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nrows</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">nrows</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="ow">and</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">nrows</span> <span class="o">!=</span> <span class="n">numrows</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W18</span><span class="p">,</span> <span class="n">W18</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nrows</span><span class="p">,</span> <span class="n">numrows</span><span class="p">),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_nrows</span> <span class="o">=</span> <span class="n">numrows</span>

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

    <span class="k">def</span> <span class="nf">_parse_binary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">colnumbers</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="n">fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span>

        <span class="n">have_local_stream</span> <span class="o">=</span> <span class="bp">False</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;STREAM&#39;</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                    <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                        <span class="s">&#39;STREAM&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                        <span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">,</span> <span class="s">&#39;href&#39;</span><span class="p">,</span> <span class="s">&#39;actuate&#39;</span><span class="p">,</span> <span class="s">&#39;encoding&#39;</span><span class="p">,</span> <span class="s">&#39;expires&#39;</span><span class="p">,</span>
                         <span class="s">&#39;rights&#39;</span><span class="p">])</span>
                    <span class="k">if</span> <span class="s">&#39;href&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
                        <span class="n">have_local_stream</span> <span class="o">=</span> <span class="bp">True</span>
                        <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;encoding&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="o">!=</span> <span class="s">&#39;base64&#39;</span><span class="p">:</span>
                            <span class="n">warn_or_raise</span><span class="p">(</span>
                                <span class="n">W38</span><span class="p">,</span> <span class="n">W38</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;encoding&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">),</span>
                                <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="n">href</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">&#39;href&#39;</span><span class="p">]</span>
                        <span class="n">xmlutil</span><span class="o">.</span><span class="n">check_anyuri</span><span class="p">(</span><span class="n">href</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="n">encoding</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;encoding&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="nb">buffer</span> <span class="o">=</span> <span class="n">data</span>
                    <span class="k">break</span>

        <span class="k">if</span> <span class="n">have_local_stream</span><span class="p">:</span>
            <span class="kn">import</span> <span class="nn">base64</span>
            <span class="nb">buffer</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="nb">buffer</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;ascii&#39;</span><span class="p">))</span>
            <span class="n">string_io</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">(</span><span class="nb">buffer</span><span class="p">)</span>
            <span class="n">string_io</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="n">read</span> <span class="o">=</span> <span class="n">string_io</span><span class="o">.</span><span class="n">read</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">href</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;http&#39;</span><span class="p">)</span> <span class="ow">or</span>
                    <span class="n">href</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;ftp&#39;</span><span class="p">)</span> <span class="ow">or</span>
                    <span class="n">href</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;file&#39;</span><span class="p">)):</span>
                <span class="n">vo_raise</span><span class="p">(</span>
                    <span class="s">&quot;The vo package only supports remote data through http, &quot;</span> <span class="o">+</span>
                    <span class="s">&quot;ftp or file&quot;</span><span class="p">,</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">NotImplementedError</span><span class="p">)</span>
            <span class="kn">import</span> <span class="nn">urllib2</span>
            <span class="n">fd</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">href</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">encoding</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">encoding</span> <span class="o">==</span> <span class="s">&#39;gzip&#39;</span><span class="p">:</span>
                    <span class="kn">from</span> <span class="nn">...utils.compat</span> <span class="kn">import</span> <span class="n">gzip</span>
                    <span class="n">fd</span> <span class="o">=</span> <span class="n">gzip</span><span class="o">.</span><span class="n">GzipFile</span><span class="p">(</span><span class="n">href</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="n">fd</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">encoding</span> <span class="o">==</span> <span class="s">&#39;base64&#39;</span><span class="p">:</span>
                    <span class="n">fd</span> <span class="o">=</span> <span class="n">codecs</span><span class="o">.</span><span class="n">EncodedFile</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="s">&#39;base64&#39;</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">vo_raise</span><span class="p">(</span>
                        <span class="s">&quot;Unknown encoding type &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">encoding</span><span class="p">,</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">NotImplementedError</span><span class="p">)</span>
            <span class="n">read</span> <span class="o">=</span> <span class="n">fd</span><span class="o">.</span><span class="n">read</span>

        <span class="k">def</span> <span class="nf">careful_read</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
            <span class="n">result</span> <span class="o">=</span> <span class="n">read</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="o">!=</span> <span class="n">length</span><span class="p">:</span>
                <span class="k">raise</span> <span class="ne">EOFError</span>
            <span class="k">return</span> <span class="n">result</span>

        <span class="c"># Need to have only one reference so that we can resize the</span>
        <span class="c"># array</span>
        <span class="n">array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>
        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>

        <span class="n">binparsers</span> <span class="o">=</span> <span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">binparse</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>

        <span class="n">numrows</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">alloc_rows</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">array</span><span class="p">)</span>
        <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
            <span class="c"># Resize result arrays if necessary</span>
            <span class="k">if</span> <span class="n">numrows</span> <span class="o">&gt;=</span> <span class="n">alloc_rows</span><span class="p">:</span>
                <span class="n">alloc_rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resize_strategy</span><span class="p">(</span><span class="n">alloc_rows</span><span class="p">)</span>
                <span class="n">array</span> <span class="o">=</span> <span class="n">_resize</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">alloc_rows</span><span class="p">)</span>

            <span class="n">row_data</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="n">row_mask_data</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">i</span><span class="p">,</span> <span class="n">binparse</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">binparsers</span><span class="p">):</span>
                    <span class="k">try</span><span class="p">:</span>
                        <span class="n">value</span><span class="p">,</span> <span class="n">value_mask</span> <span class="o">=</span> <span class="n">binparse</span><span class="p">(</span><span class="n">careful_read</span><span class="p">)</span>
                    <span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
                        <span class="k">raise</span>
                    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
                        <span class="n">vo_reraise</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                                   <span class="s">&quot;(in row </span><span class="si">%d</span><span class="s">, col &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span> <span class="o">%</span>
                                   <span class="p">(</span><span class="n">numrows</span><span class="p">,</span> <span class="n">fields</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">ID</span><span class="p">))</span>
                    <span class="n">row_data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
                    <span class="n">row_mask_data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value_mask</span><span class="p">)</span>
            <span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
                <span class="k">break</span>

            <span class="n">row</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">default</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>
            <span class="n">row_mask</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">fields</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">colnumbers</span><span class="p">:</span>
                <span class="n">row</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">row_data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
                <span class="n">row_mask</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">row_mask_data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>

            <span class="n">array</span><span class="p">[</span><span class="n">numrows</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
            <span class="n">array</span><span class="o">.</span><span class="n">mask</span><span class="p">[</span><span class="n">numrows</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">row_mask</span><span class="p">)</span>
            <span class="n">numrows</span> <span class="o">+=</span> <span class="mi">1</span>

        <span class="n">array</span> <span class="o">=</span> <span class="n">_resize</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">numrows</span><span class="p">)</span>

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

    <span class="k">def</span> <span class="nf">_parse_fits</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">extnum</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;STREAM&#39;</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                    <span class="n">warn_unknown_attrs</span><span class="p">(</span>
                        <span class="s">&#39;STREAM&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span>
                        <span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">,</span> <span class="s">&#39;href&#39;</span><span class="p">,</span> <span class="s">&#39;actuate&#39;</span><span class="p">,</span> <span class="s">&#39;encoding&#39;</span><span class="p">,</span> <span class="s">&#39;expires&#39;</span><span class="p">,</span>
                         <span class="s">&#39;rights&#39;</span><span class="p">])</span>
                    <span class="n">href</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">&#39;href&#39;</span><span class="p">]</span>
                    <span class="n">encoding</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;encoding&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="k">break</span>

        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">href</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;http&#39;</span><span class="p">)</span> <span class="ow">or</span>
                <span class="n">href</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;ftp&#39;</span><span class="p">)</span> <span class="ow">or</span>
                <span class="n">href</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;file&#39;</span><span class="p">)):</span>
            <span class="n">vo_raise</span><span class="p">(</span>
                <span class="s">&quot;The vo package only supports remote data through http, &quot;</span>
                <span class="s">&quot;ftp or file&quot;</span><span class="p">,</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">NotImplementedError</span><span class="p">)</span>

        <span class="kn">import</span> <span class="nn">urllib2</span>
        <span class="n">fd</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">href</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">encoding</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">encoding</span> <span class="o">==</span> <span class="s">&#39;gzip&#39;</span><span class="p">:</span>
                <span class="kn">from</span> <span class="nn">...utils.compat</span> <span class="kn">import</span> <span class="n">gzip</span>
                <span class="n">fd</span> <span class="o">=</span> <span class="n">gzip</span><span class="o">.</span><span class="n">GzipFile</span><span class="p">(</span><span class="n">href</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="n">fd</span><span class="p">)</span>
            <span class="k">elif</span> <span class="n">encoding</span> <span class="o">==</span> <span class="s">&#39;base64&#39;</span><span class="p">:</span>
                <span class="n">fd</span> <span class="o">=</span> <span class="n">codecs</span><span class="o">.</span><span class="n">EncodedFile</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="s">&#39;base64&#39;</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">vo_raise</span><span class="p">(</span>
                    <span class="s">&quot;Unknown encoding type &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">encoding</span><span class="p">,</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">,</span> <span class="ne">NotImplementedError</span><span class="p">)</span>

        <span class="n">hdulist</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">fd</span><span class="p">)</span>

        <span class="n">array</span> <span class="o">=</span> <span class="n">hdulist</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">extnum</span><span class="p">)]</span><span class="o">.</span><span class="n">data</span>
        <span class="k">if</span> <span class="n">array</span><span class="o">.</span><span class="n">dtype</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="o">.</span><span class="n">dtype</span><span class="p">:</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W19</span><span class="p">,</span> <span class="n">W19</span><span class="p">,</span> <span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>

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

<div class="viewcode-block" id="Table.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span>
            <span class="s">u&#39;TABLE&#39;</span><span class="p">,</span>
            <span class="n">attrib</span><span class="o">=</span><span class="n">w</span><span class="o">.</span><span class="n">object_attrs</span><span class="p">(</span>
                <span class="bp">self</span><span class="p">,</span>
                <span class="p">(</span><span class="s">u&#39;ID&#39;</span><span class="p">,</span> <span class="s">u&#39;name&#39;</span><span class="p">,</span> <span class="s">u&#39;ref&#39;</span><span class="p">,</span> <span class="s">u&#39;ucd&#39;</span><span class="p">,</span> <span class="s">u&#39;utype&#39;</span><span class="p">,</span> <span class="s">u&#39;nrows&#39;</span><span class="p">))):</span>

            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="s">u&quot;DESCRIPTION&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">wrap</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>

            <span class="k">for</span> <span class="n">element_set</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">):</span>
                <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">element_set</span><span class="p">:</span>
                    <span class="n">element</span><span class="o">.</span><span class="n">_setup</span><span class="p">({},</span> <span class="bp">None</span><span class="p">)</span>

            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="k">for</span> <span class="n">element_set</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">groups</span><span class="p">,</span>
                                    <span class="bp">self</span><span class="o">.</span><span class="n">links</span><span class="p">):</span>
                    <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">element_set</span><span class="p">:</span>
                        <span class="n">element</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>

            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">):</span>
                <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="s">u&#39;DATA&#39;</span><span class="p">):</span>
                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">==</span> <span class="s">u&#39;fits&#39;</span><span class="p">:</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="s">u&#39;tabledata&#39;</span>

                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">==</span> <span class="s">u&#39;tabledata&#39;</span><span class="p">:</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">_write_tabledata</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
                    <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">==</span> <span class="s">u&#39;binary&#39;</span><span class="p">:</span>
                        <span class="bp">self</span><span class="o">.</span><span class="n">_write_binary</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>

            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ref</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">]:</span>
                <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_infos</span><span class="p">:</span>
                    <span class="n">element</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
    <span class="k">def</span> <span class="nf">_write_tabledata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="n">fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span>
        <span class="n">array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>

        <span class="n">write_null_values</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;write_null_values&#39;</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
        <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="s">u&#39;TABLEDATA&#39;</span><span class="p">):</span>
            <span class="n">w</span><span class="o">.</span><span class="n">_flush</span><span class="p">()</span>
            <span class="k">if</span> <span class="p">(</span><span class="n">_has_c_tabledata_writer</span> <span class="ow">and</span>
                <span class="ow">not</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;_debug_python_based_parser&#39;</span><span class="p">)):</span>
                <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">output</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>
                <span class="n">indent</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">_tags</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
                <span class="n">tablewriter</span><span class="o">.</span><span class="n">write_tabledata</span><span class="p">(</span>
                    <span class="n">w</span><span class="o">.</span><span class="n">write</span><span class="p">,</span> <span class="n">array</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">array</span><span class="o">.</span><span class="n">mask</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> <span class="n">write_null_values</span><span class="p">,</span>
                    <span class="n">indent</span><span class="p">,</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">8</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">write</span> <span class="o">=</span> <span class="n">w</span><span class="o">.</span><span class="n">write</span>
                <span class="n">indent_spaces</span> <span class="o">=</span> <span class="n">w</span><span class="o">.</span><span class="n">get_indentation_spaces</span><span class="p">()</span>
                <span class="n">tr_start</span> <span class="o">=</span> <span class="n">indent_spaces</span> <span class="o">+</span> <span class="s">u&quot;&lt;TR&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
                <span class="n">tr_end</span> <span class="o">=</span> <span class="n">indent_spaces</span> <span class="o">+</span> <span class="s">u&quot;&lt;/TR&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
                <span class="n">td</span> <span class="o">=</span> <span class="n">indent_spaces</span> <span class="o">+</span> <span class="s">u&quot; &lt;TD&gt;</span><span class="si">%s</span><span class="s">&lt;/TD&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
                <span class="n">td_empty</span> <span class="o">=</span> <span class="n">indent_spaces</span> <span class="o">+</span> <span class="s">u&quot; &lt;TD/&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
                <span class="n">fields</span> <span class="o">=</span> <span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
                          <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">field</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">fields</span><span class="p">)]</span>
                <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">array</span><span class="p">)):</span>
                    <span class="n">write</span><span class="p">(</span><span class="n">tr_start</span><span class="p">)</span>
                    <span class="n">array_row</span> <span class="o">=</span> <span class="n">array</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">row</span><span class="p">]</span>
                    <span class="n">mask_row</span> <span class="o">=</span> <span class="n">array</span><span class="o">.</span><span class="n">mask</span><span class="p">[</span><span class="n">row</span><span class="p">]</span>
                    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">output</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span>
                        <span class="n">data</span> <span class="o">=</span> <span class="n">array_row</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
                        <span class="n">masked</span> <span class="o">=</span> <span class="n">mask_row</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
                        <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">masked</span><span class="p">)</span> <span class="ow">or</span>
                            <span class="n">write_null_values</span><span class="p">):</span>
                            <span class="k">try</span><span class="p">:</span>
                                <span class="n">val</span> <span class="o">=</span> <span class="n">output</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">masked</span><span class="p">)</span>
                            <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
                                <span class="n">vo_reraise</span><span class="p">(</span><span class="n">e</span><span class="p">,</span>
                                           <span class="n">additional</span><span class="o">=</span><span class="s">&quot;(in row </span><span class="si">%d</span><span class="s">, col &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span> <span class="o">%</span>
                                           <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">ID</span><span class="p">))</span>
                            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">val</span><span class="p">):</span>
                                <span class="n">write</span><span class="p">(</span><span class="n">td</span> <span class="o">%</span> <span class="n">val</span><span class="p">)</span>
                            <span class="k">else</span><span class="p">:</span>
                                <span class="n">write</span><span class="p">(</span><span class="n">td_empty</span><span class="p">)</span>
                        <span class="k">else</span><span class="p">:</span>
                            <span class="n">write</span><span class="p">(</span><span class="n">td_empty</span><span class="p">)</span>
                    <span class="n">write</span><span class="p">(</span><span class="n">tr_end</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_write_binary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="kn">import</span> <span class="nn">base64</span>

        <span class="n">fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span>
        <span class="n">array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>

        <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="s">u&#39;BINARY&#39;</span><span class="p">):</span>
            <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="s">u&#39;STREAM&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s">&#39;base64&#39;</span><span class="p">):</span>
                <span class="n">fields_basic</span> <span class="o">=</span> <span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">binoutput</span><span class="p">)</span>
                                <span class="k">for</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">fields</span><span class="p">)]</span>

                <span class="n">data</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">()</span>
                <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">array</span><span class="p">)):</span>
                    <span class="n">array_row</span> <span class="o">=</span> <span class="n">array</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">row</span><span class="p">]</span>
                    <span class="n">array_mask</span> <span class="o">=</span> <span class="n">array</span><span class="o">.</span><span class="n">mask</span><span class="p">[</span><span class="n">row</span><span class="p">]</span>
                    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">converter</span> <span class="ow">in</span> <span class="n">fields_basic</span><span class="p">:</span>
                        <span class="k">try</span><span class="p">:</span>
                            <span class="n">chunk</span> <span class="o">=</span> <span class="n">converter</span><span class="p">(</span><span class="n">array_row</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">array_mask</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                            <span class="k">assert</span> <span class="nb">type</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="n">b</span><span class="s">&#39;&#39;</span><span class="p">)</span>
                        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
                            <span class="n">vo_reraise</span><span class="p">(</span><span class="n">e</span><span class="p">,</span>
                                       <span class="n">additional</span><span class="o">=</span><span class="s">&quot;(in row </span><span class="si">%d</span><span class="s">, col &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span> <span class="o">%</span>
                                       <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">fields</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">ID</span><span class="p">))</span>
                        <span class="n">data</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span>

                <span class="n">w</span><span class="o">.</span><span class="n">_flush</span><span class="p">()</span>
                <span class="n">w</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">getvalue</span><span class="p">())</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s">&#39;ascii&#39;</span><span class="p">))</span>

<div class="viewcode-block" id="Table.to_table"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.to_table">[docs]</a>    <span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Convert this VO Table to an `astropy.table.Table` instance.</span>

<span class="sd">        .. warning::</span>

<span class="sd">           Variable-length array fields may not be restored</span>
<span class="sd">           identically when round-tripping through the</span>
<span class="sd">           `astropy.table.Table` instance.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="kn">from</span> <span class="nn">...table</span> <span class="kn">import</span> <span class="n">Table</span>

        <span class="n">meta</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">,</span> <span class="s">&#39;description&#39;</span><span class="p">]:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">meta</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>

        <span class="n">table</span> <span class="o">=</span> <span class="n">Table</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">meta</span><span class="o">=</span><span class="n">meta</span><span class="p">)</span>

        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">:</span>
            <span class="n">column</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">ID</span><span class="p">]</span>
            <span class="n">field</span><span class="o">.</span><span class="n">to_table_column</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>

        <span class="k">return</span> <span class="n">table</span>
</div>
    <span class="nd">@classmethod</span>
<div class="viewcode-block" id="Table.from_table"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.from_table">[docs]</a>    <span class="k">def</span> <span class="nf">from_table</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">votable</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Create a `Table` instance from a given `astropy.table.Table`</span>
<span class="sd">        instance.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;ref&#39;</span><span class="p">,</span> <span class="s">&#39;ucd&#39;</span><span class="p">,</span> <span class="s">&#39;utype&#39;</span><span class="p">]:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">kwargs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
        <span class="n">new_table</span> <span class="o">=</span> <span class="n">cls</span><span class="p">(</span><span class="n">votable</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
        <span class="k">if</span> <span class="s">&#39;description&#39;</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">meta</span><span class="p">:</span>
            <span class="n">new_table</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s">&#39;description&#39;</span><span class="p">]</span>

        <span class="k">for</span> <span class="n">colname</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">colnames</span><span class="p">:</span>
            <span class="n">column</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="n">colname</span><span class="p">]</span>
            <span class="n">new_table</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Field</span><span class="o">.</span><span class="n">from_table_column</span><span class="p">(</span><span class="n">votable</span><span class="p">,</span> <span class="n">column</span><span class="p">))</span>

        <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">mask</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">new_table</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">table</span><span class="p">))</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">new_table</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">table</span><span class="p">),</span> <span class="n">mask</span><span class="o">=</span><span class="n">table</span><span class="o">.</span><span class="n">mask</span><span class="p">)</span>

        <span class="k">return</span> <span class="n">new_table</span>
</div>
<div class="viewcode-block" id="Table.iter_fields_and_params"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.iter_fields_and_params">[docs]</a>    <span class="k">def</span> <span class="nf">iter_fields_and_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all FIELD and PARAM elements in the</span>
<span class="sd">        TABLE.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">param</span>
        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">field</span>
        <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">groups</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">field</span>
</div>
    <span class="n">get_field_by_id</span> <span class="o">=</span> <span class="n">_lookup_by_id_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_fields_and_params&#39;</span><span class="p">,</span> <span class="s">&#39;FIELD or PARAM&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a FIELD or PARAM element by the given ID.</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>

    <span class="n">get_field_by_id_or_name</span> <span class="o">=</span> <span class="n">_lookup_by_id_or_name_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_fields_and_params&#39;</span><span class="p">,</span> <span class="s">&#39;FIELD or PARAM&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a FIELD or PARAM element by the given ID or name.</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>

<div class="viewcode-block" id="Table.iter_groups"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Table.html#astropy.io.votable.tree.Table.iter_groups">[docs]</a>    <span class="k">def</span> <span class="nf">iter_groups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all GROUP elements in the TABLE.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">groups</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">group</span>
            <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">iter_groups</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">g</span>
</div>
    <span class="n">get_group_by_id</span> <span class="o">=</span> <span class="n">_lookup_by_id_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_groups&#39;</span><span class="p">,</span> <span class="s">&#39;GROUP&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a GROUP element by the given ID.  Used by the group&#39;s</span>
<span class="sd">        &quot;ref&quot; attribute</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>


</div>
<div class="viewcode-block" id="Resource"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource">[docs]</a><span class="k">class</span> <span class="nc">Resource</span><span class="p">(</span><span class="n">Element</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">,</span> <span class="n">_NameProperty</span><span class="p">,</span> <span class="n">_UtypeProperty</span><span class="p">,</span>
               <span class="n">_DescriptionProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    RESOURCE_ element: Groups TABLE_ and RESOURCE_ elements.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</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="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">utype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">&#39;results&#39;</span><span class="p">,</span>
                 <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</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="bp">self</span><span class="o">.</span><span class="n">_config</span>           <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span>              <span class="o">=</span> <span class="n">pos</span>

        <span class="n">Element</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="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">ID</span>                <span class="o">=</span> <span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">utype</span>             <span class="o">=</span> <span class="n">utype</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">type</span>              <span class="o">=</span> <span class="nb">type</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_extra_attributes</span> <span class="o">=</span> <span class="n">kwargs</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">description</span>       <span class="o">=</span> <span class="bp">None</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">_coordinate_systems</span> <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">CooSys</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_params</span>             <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Param</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_infos</span>              <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Info</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_links</span>              <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Link</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_tables</span>             <span class="o">=</span> <span class="n">HomogeneousList</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">_resources</span>          <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Resource</span><span class="p">)</span>

        <span class="n">warn_unknown_attrs</span><span class="p">(</span><span class="s">&#39;RESOURCE&#39;</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

    <span class="nd">@property</span>
    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        [*required*] The type of the resource.  Must be either:</span>

<span class="sd">          - &#39;results&#39;: This resource contains actual result values</span>
<span class="sd">            (default)</span>

<span class="sd">          - &#39;meta&#39;: This resource contains only datatype descriptions</span>
<span class="sd">            (FIELD_ elements), but no actual data.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span>

    <span class="nd">@type.setter</span>
<div class="viewcode-block" id="Resource.type"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.type">[docs]</a>    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
        <span class="k">if</span> <span class="nb">type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;results&#39;</span><span class="p">,</span> <span class="s">&#39;meta&#39;</span><span class="p">):</span>
            <span class="n">vo_raise</span><span class="p">(</span><span class="n">E18</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="nb">type</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Resource.extra_attributes"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.extra_attributes">[docs]</a>    <span class="k">def</span> <span class="nf">extra_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A dictionary of string keys to string values containing any</span>
<span class="sd">        extra attributes of the RESOURCE_ element that are not defined</span>
<span class="sd">        in the specification.  (The specification explicitly allows</span>
<span class="sd">        for extra attributes here, but nowhere else.)</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extra_attributes</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Resource.coordinate_systems"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.coordinate_systems">[docs]</a>    <span class="k">def</span> <span class="nf">coordinate_systems</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of coordinate system definitions (COOSYS_ elements) for</span>
<span class="sd">        the RESOURCE_.  Must contain only `CooSys` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_coordinate_systems</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Resource.infos"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.infos">[docs]</a>    <span class="k">def</span> <span class="nf">infos</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of informational parameters (key-value pairs) for the</span>
<span class="sd">        resource.  Must only contain `Info` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_infos</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Resource.params"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.params">[docs]</a>    <span class="k">def</span> <span class="nf">params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of parameters (constant-valued columns) for the</span>
<span class="sd">        resource.  Must contain only `Param` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_params</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Resource.links"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.links">[docs]</a>    <span class="k">def</span> <span class="nf">links</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of links (pointers to other documents or servers</span>
<span class="sd">        through a URI) for the resource.  Must contain only `Link`</span>
<span class="sd">        objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_links</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Resource.tables"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.tables">[docs]</a>    <span class="k">def</span> <span class="nf">tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of tables in the resource.  Must contain only</span>
<span class="sd">        `Table` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tables</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="Resource.resources"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.resources">[docs]</a>    <span class="k">def</span> <span class="nf">resources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of nested resources inside this resource.  Must contain</span>
<span class="sd">        only `Resource` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span>
</div>
    <span class="k">def</span> <span class="nf">_add_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">table</span> <span class="o">=</span> <span class="n">Table</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_votable</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
        <span class="n">table</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">info</span> <span class="o">=</span> <span class="n">Info</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">infos</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
        <span class="n">info</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_param</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">param</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_votable</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">param</span><span class="p">)</span>
        <span class="n">param</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_coosys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">coosys</span> <span class="o">=</span> <span class="n">CooSys</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">coordinate_systems</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">coosys</span><span class="p">)</span>
        <span class="n">coosys</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_resource</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">resource</span> <span class="o">=</span> <span class="n">Resource</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
        <span class="n">resource</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_votable</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_link</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">link</span> <span class="o">=</span> <span class="n">Link</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">links</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">link</span><span class="p">)</span>
        <span class="n">link</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

<div class="viewcode-block" id="Resource.parse"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.parse">[docs]</a>    <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">votable</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_votable</span> <span class="o">=</span> <span class="n">votable</span>

        <span class="n">tag_mapping</span> <span class="o">=</span> <span class="p">{</span>
            <span class="s">&#39;TABLE&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_table</span><span class="p">,</span>
            <span class="s">&#39;INFO&#39;</span>        <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_info</span><span class="p">,</span>
            <span class="s">&#39;PARAM&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_param</span><span class="p">,</span>
            <span class="s">&#39;COOSYS&#39;</span>      <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_coosys</span><span class="p">,</span>
            <span class="s">&#39;RESOURCE&#39;</span>    <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_resource</span><span class="p">,</span>
            <span class="s">&#39;LINK&#39;</span>        <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_link</span><span class="p">,</span>
            <span class="s">&#39;DESCRIPTION&#39;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ignore_add</span>
            <span class="p">}</span>

        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                <span class="n">tag_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">)(</span>
                    <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">:</span>
                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                    <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W17</span><span class="p">,</span> <span class="n">W17</span><span class="p">,</span> <span class="s">&#39;RESOURCE&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">data</span> <span class="ow">or</span> <span class="bp">None</span>
            <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;RESOURCE&#39;</span><span class="p">:</span>
                <span class="k">break</span>

        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_votable</span>

        <span class="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="Resource.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="n">attrs</span> <span class="o">=</span> <span class="n">w</span><span class="o">.</span><span class="n">object_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="p">(</span><span class="s">u&#39;ID&#39;</span><span class="p">,</span> <span class="s">u&#39;type&#39;</span><span class="p">,</span> <span class="s">u&#39;utype&#39;</span><span class="p">))</span>
        <span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">extra_attributes</span><span class="p">)</span>
        <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="s">u&#39;RESOURCE&#39;</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="n">attrs</span><span class="p">):</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="s">u&quot;DESCRIPTION&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">wrap</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">element_set</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">coordinate_systems</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">,</span>
                                <span class="bp">self</span><span class="o">.</span><span class="n">infos</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">links</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">,</span>
                                <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">):</span>
                <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">element_set</span><span class="p">:</span>
                    <span class="n">element</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Resource.iter_tables"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.iter_tables">[docs]</a>    <span class="k">def</span> <span class="nf">iter_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterates over all tables in the resource and</span>
<span class="sd">        nested resources.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">table</span>
        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">resource</span><span class="o">.</span><span class="n">iter_tables</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">table</span>
</div>
<div class="viewcode-block" id="Resource.iter_fields_and_params"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.iter_fields_and_params">[docs]</a>    <span class="k">def</span> <span class="nf">iter_fields_and_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterates over all FIELD_ and PARAM_ elements in</span>
<span class="sd">        the resource, its tables and nested resources.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">param</span>
        <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">param</span>
        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">resource</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">param</span>
</div>
<div class="viewcode-block" id="Resource.iter_coosys"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.Resource.html#astropy.io.votable.tree.Resource.iter_coosys">[docs]</a>    <span class="k">def</span> <span class="nf">iter_coosys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterates over all the COOSYS_ elements in the</span>
<span class="sd">        resource and nested resources.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">coosys</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coordinate_systems</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">coosys</span>
        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">coosys</span> <span class="ow">in</span> <span class="n">resource</span><span class="o">.</span><span class="n">iter_coosys</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">coosys</span>

</div></div>
<div class="viewcode-block" id="VOTableFile"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile">[docs]</a><span class="k">class</span> <span class="nc">VOTableFile</span><span class="p">(</span><span class="n">Element</span><span class="p">,</span> <span class="n">_IDProperty</span><span class="p">,</span> <span class="n">_DescriptionProperty</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    VOTABLE_ element: represents an entire file.</span>

<span class="sd">    The keyword arguments correspond to setting members of the same</span>
<span class="sd">    name, documented below.</span>

<span class="sd">    *version* is settable at construction time only, since conformance</span>
<span class="sd">    tests for building the rest of the structure depend on it.</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">ID</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="p">{},</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="s">&quot;1.2&quot;</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_config</span>             <span class="o">=</span> <span class="n">config</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span>                <span class="o">=</span> <span class="n">pos</span>

        <span class="n">Element</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="bp">self</span><span class="o">.</span><span class="n">ID</span>                  <span class="o">=</span> <span class="n">resolve_id</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">description</span>         <span class="o">=</span> <span class="bp">None</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">_coordinate_systems</span> <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">CooSys</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_params</span>             <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Param</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_infos</span>              <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Info</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span>          <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Resource</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span>             <span class="o">=</span> <span class="n">HomogeneousList</span><span class="p">(</span><span class="n">Group</span><span class="p">)</span>

        <span class="n">version</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
        <span class="k">assert</span> <span class="n">version</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&quot;1.0&quot;</span><span class="p">,</span> <span class="s">&quot;1.1&quot;</span><span class="p">,</span> <span class="s">&quot;1.2&quot;</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_version</span>            <span class="o">=</span> <span class="n">version</span>

    <span class="nd">@property</span>
<div class="viewcode-block" id="VOTableFile.version"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.version">[docs]</a>    <span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        The version of the VOTable specification that the file uses.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_version</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="VOTableFile.coordinate_systems"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.coordinate_systems">[docs]</a>    <span class="k">def</span> <span class="nf">coordinate_systems</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of coordinate system descriptions for the file.  Must</span>
<span class="sd">        contain only `CooSys` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_coordinate_systems</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="VOTableFile.params"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.params">[docs]</a>    <span class="k">def</span> <span class="nf">params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of parameters (constant-valued columns) that apply to</span>
<span class="sd">        the entire file.  Must contain only `Param` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_params</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="VOTableFile.infos"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.infos">[docs]</a>    <span class="k">def</span> <span class="nf">infos</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of informational parameters (key-value pairs) for the</span>
<span class="sd">        entire file.  Must only contain `Info` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_infos</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="VOTableFile.resources"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.resources">[docs]</a>    <span class="k">def</span> <span class="nf">resources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of resources, in the order they appear in the file.</span>
<span class="sd">        Must only contain `Resource` objects.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span>
</div>
    <span class="nd">@property</span>
<div class="viewcode-block" id="VOTableFile.groups"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.groups">[docs]</a>    <span class="k">def</span> <span class="nf">groups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        A list of groups, in the order they appear in the file.  Only</span>
<span class="sd">        supported as a child of the VOTABLE element in VOTable 1.2 or</span>
<span class="sd">        later.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span>
</div>
    <span class="k">def</span> <span class="nf">_add_param</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">param</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">param</span><span class="p">)</span>
        <span class="n">param</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_resource</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">resource</span> <span class="o">=</span> <span class="n">Resource</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
        <span class="n">resource</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_coosys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">coosys</span> <span class="o">=</span> <span class="n">CooSys</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">coordinate_systems</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">coosys</span><span class="p">)</span>
        <span class="n">coosys</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="n">info</span> <span class="o">=</span> <span class="n">Info</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">infos</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
        <span class="n">info</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_add_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">):</span>
            <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W26</span><span class="p">,</span> <span class="n">W26</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;GROUP&#39;</span><span class="p">,</span> <span class="s">&#39;VOTABLE&#39;</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="n">group</span> <span class="o">=</span> <span class="n">Group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">data</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
        <span class="n">group</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">)</span>

<div class="viewcode-block" id="VOTableFile.parse"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.parse">[docs]</a>    <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iterator</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
        <span class="n">config</span><span class="p">[</span><span class="s">&#39;_current_table_number&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>

        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;xml&#39;</span><span class="p">:</span>
                    <span class="k">pass</span>
                <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;VOTABLE&#39;</span><span class="p">:</span>
                    <span class="k">if</span> <span class="s">&#39;version&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
                        <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W20</span><span class="p">,</span> <span class="n">W20</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                        <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">]</span>
                        <span class="k">if</span> <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;v&#39;</span><span class="p">):</span>
                            <span class="n">warn_or_raise</span><span class="p">(</span>
                                <span class="n">W29</span><span class="p">,</span> <span class="n">W29</span><span class="p">,</span> <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                            <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">]</span> <span class="o">=</span> \
                                            <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span>
                        <span class="k">if</span> <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;1.1&#39;</span><span class="p">,</span> <span class="s">&#39;1.2&#39;</span><span class="p">):</span>
                            <span class="n">vo_warn</span><span class="p">(</span><span class="n">W21</span><span class="p">,</span> <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">],</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

                    <span class="k">if</span> <span class="s">&#39;xmlns&#39;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
                        <span class="n">correct_ns</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;http://www.ivoa.net/xml/VOTable/v</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span>
                                      <span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">])</span>
                        <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s">&#39;xmlns&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="n">correct_ns</span><span class="p">:</span>
                            <span class="n">vo_warn</span><span class="p">(</span>
                                <span class="n">W41</span><span class="p">,</span> <span class="p">(</span><span class="n">correct_ns</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="s">&#39;xmlns&#39;</span><span class="p">]),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="n">vo_warn</span><span class="p">(</span><span class="n">W42</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>

                    <span class="k">break</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">vo_raise</span><span class="p">(</span><span class="n">E19</span><span class="p">,</span> <span class="p">(),</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
        <span class="n">config</span><span class="p">[</span><span class="s">&#39;version_1_1_or_later&#39;</span><span class="p">]</span> <span class="o">=</span> \
            <span class="n">util</span><span class="o">.</span><span class="n">version_compare</span><span class="p">(</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">],</span> <span class="s">&#39;1.1&#39;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span>
        <span class="n">config</span><span class="p">[</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">]</span> <span class="o">=</span> \
            <span class="n">util</span><span class="o">.</span><span class="n">version_compare</span><span class="p">(</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;version&#39;</span><span class="p">],</span> <span class="s">&#39;1.2&#39;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span>

        <span class="n">tag_mapping</span> <span class="o">=</span> <span class="p">{</span>
            <span class="s">&#39;PARAM&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_param</span><span class="p">,</span>
            <span class="s">&#39;RESOURCE&#39;</span>    <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_resource</span><span class="p">,</span>
            <span class="s">&#39;COOSYS&#39;</span>      <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_coosys</span><span class="p">,</span>
            <span class="s">&#39;INFO&#39;</span>        <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_info</span><span class="p">,</span>
            <span class="s">&#39;DEFINITIONS&#39;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_definitions</span><span class="p">,</span>
            <span class="s">&#39;DESCRIPTION&#39;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ignore_add</span><span class="p">,</span>
            <span class="s">&#39;GROUP&#39;</span>       <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_group</span><span class="p">}</span>

        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">iterator</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">start</span><span class="p">:</span>
                <span class="n">tag_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_unknown_tag</span><span class="p">)(</span>
                    <span class="n">iterator</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
            <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;DESCRIPTION&#39;</span><span class="p">:</span>
                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                    <span class="n">warn_or_raise</span><span class="p">(</span><span class="n">W17</span><span class="p">,</span> <span class="n">W17</span><span class="p">,</span> <span class="s">&#39;VOTABLE&#39;</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">data</span> <span class="ow">or</span> <span class="bp">None</span>

        <span class="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="VOTableFile.to_xml"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fd</span><span class="p">,</span> <span class="n">write_null_values</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
               <span class="n">compressed</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
               <span class="n">_debug_python_based_parser</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
               <span class="n">_astropy_version</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Write to an XML file.</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        fd : str path or writable file-like object</span>
<span class="sd">           Where to write the file.</span>

<span class="sd">        write_null_values : bool, optional</span>
<span class="sd">           When `True`, write the &#39;null&#39; value (specified in the null</span>
<span class="sd">           attribute of the VALUES element for each FIELD) for empty</span>
<span class="sd">           values.  When False (default), simply write no value.</span>

<span class="sd">        compressed : bool, optional</span>
<span class="sd">           When `True`, write to a gzip-compressed file.  (Default:</span>
<span class="sd">           `False`)</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
            <span class="s">&#39;write_null_values&#39;</span><span class="p">:</span> <span class="n">write_null_values</span><span class="p">,</span>
            <span class="s">&#39;version&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
            <span class="s">&#39;version_1_1_or_later&#39;</span><span class="p">:</span>
                <span class="n">util</span><span class="o">.</span><span class="n">version_compare</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="s">u&#39;1.1&#39;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">,</span>
            <span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">:</span>
                <span class="n">util</span><span class="o">.</span><span class="n">version_compare</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="s">u&#39;1.2&#39;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">,</span>
            <span class="s">&#39;_debug_python_based_parser&#39;</span><span class="p">:</span> <span class="n">_debug_python_based_parser</span><span class="p">}</span>

        <span class="k">with</span> <span class="n">util</span><span class="o">.</span><span class="n">convert_to_writable_filelike</span><span class="p">(</span>
            <span class="n">fd</span><span class="p">,</span> <span class="n">compressed</span><span class="o">=</span><span class="n">compressed</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span>
            <span class="n">w</span> <span class="o">=</span> <span class="n">XMLWriter</span><span class="p">(</span><span class="n">fd</span><span class="p">)</span>
            <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
            <span class="k">if</span> <span class="n">_astropy_version</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">lib_version</span> <span class="o">=</span> <span class="n">astropy_version</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">lib_version</span> <span class="o">=</span> <span class="n">_astropy_version</span>

            <span class="n">xml_header</span> <span class="o">=</span> <span class="s">u&quot;&quot;&quot;</span>
<span class="s">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span>
<span class="s">&lt;!-- Produced with astropy.io.votable version </span><span class="si">%(lib_version)s</span><span class="s"></span>
<span class="s">     http://www.astropy.org/ --&gt;</span><span class="se">\n</span><span class="s">&quot;&quot;&quot;</span>
            <span class="n">w</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">xml_header</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">())</span>

            <span class="k">with</span> <span class="n">w</span><span class="o">.</span><span class="n">tag</span><span class="p">(</span><span class="s">u&#39;VOTABLE&#39;</span><span class="p">,</span>
                       <span class="p">{</span><span class="s">u&#39;version&#39;</span><span class="p">:</span> <span class="n">version</span><span class="p">,</span>
                        <span class="s">u&#39;xmlns:xsi&#39;</span><span class="p">:</span>
                            <span class="s">u&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span class="p">,</span>
                        <span class="s">u&#39;xsi:noNamespaceSchemaLocation&#39;</span><span class="p">:</span>
                            <span class="s">u&quot;http://www.ivoa.net/xml/VOTable/v</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">version</span><span class="p">,</span>
                        <span class="s">u&#39;xmlns&#39;</span><span class="p">:</span>
                            <span class="s">u&quot;http://www.ivoa.net/xml/VOTable/v</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">version</span><span class="p">}):</span>
                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                    <span class="n">w</span><span class="o">.</span><span class="n">element</span><span class="p">(</span><span class="s">u&quot;DESCRIPTION&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">wrap</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
                <span class="n">element_sets</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">coordinate_systems</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">,</span>
                                <span class="bp">self</span><span class="o">.</span><span class="n">infos</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">]</span>
                <span class="k">if</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;version_1_2_or_later&#39;</span><span class="p">]:</span>
                    <span class="n">element_sets</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">groups</span>
                <span class="k">for</span> <span class="n">element_set</span> <span class="ow">in</span> <span class="n">element_sets</span><span class="p">:</span>
                    <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">element_set</span><span class="p">:</span>
                        <span class="n">element</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="VOTableFile.iter_tables"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.iter_tables">[docs]</a>    <span class="k">def</span> <span class="nf">iter_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Iterates over all tables in the VOTable file in a &quot;flat&quot; way,</span>
<span class="sd">        ignoring the nesting of resources etc.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">resource</span><span class="o">.</span><span class="n">iter_tables</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">table</span>
</div>
<div class="viewcode-block" id="VOTableFile.get_first_table"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.get_first_table">[docs]</a>    <span class="k">def</span> <span class="nf">get_first_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Often, you know there is only one table in the file, and</span>
<span class="sd">        that&#39;s all you need.  This method returns that first table.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">iter_tables</span><span class="p">():</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="o">.</span><span class="n">is_empty</span><span class="p">():</span>
                <span class="k">return</span> <span class="n">table</span>
        <span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s">&quot;No table found in VOTABLE file.&quot;</span><span class="p">)</span>
</div>
    <span class="n">get_table_by_id</span> <span class="o">=</span> <span class="n">_lookup_by_id_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_tables&#39;</span><span class="p">,</span> <span class="s">&#39;TABLE&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a TABLE_ element by the given ID.  Used by the table</span>
<span class="sd">        &quot;ref&quot; attribute.</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>

<div class="viewcode-block" id="VOTableFile.get_table_by_index"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.get_table_by_index">[docs]</a>    <span class="k">def</span> <span class="nf">get_table_by_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get a table by its ordinal position in the file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">table</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">iter_tables</span><span class="p">()):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">idx</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">table</span>
        <span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s">&quot;No table at index </span><span class="si">%d</span><span class="s"> found in VOTABLE file.&quot;</span> <span class="o">%</span> <span class="n">idx</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="VOTableFile.iter_fields_and_params"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.iter_fields_and_params">[docs]</a>    <span class="k">def</span> <span class="nf">iter_fields_and_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all FIELD_ and PARAM_ elements in the</span>
<span class="sd">        VOTABLE_ file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">resource</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">field</span>
</div>
    <span class="n">get_field_by_id</span> <span class="o">=</span> <span class="n">_lookup_by_id_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_fields_and_params&#39;</span><span class="p">,</span> <span class="s">&#39;FIELD&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a FIELD_ element by the given ID_.  Used by the field&#39;s</span>
<span class="sd">        &quot;ref&quot; attribute.</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>

    <span class="n">get_field_by_id_or_name</span> <span class="o">=</span> <span class="n">_lookup_by_id_or_name_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_fields_and_params&#39;</span><span class="p">,</span> <span class="s">&#39;FIELD&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a FIELD_ element by the given ID_ or name.</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>

<div class="viewcode-block" id="VOTableFile.iter_values"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.iter_values">[docs]</a>    <span class="k">def</span> <span class="nf">iter_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all VALUES_ elements in the VOTABLE_</span>
<span class="sd">        file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">iter_fields_and_params</span><span class="p">():</span>
            <span class="k">yield</span> <span class="n">field</span><span class="o">.</span><span class="n">values</span>
</div>
    <span class="n">get_values_by_id</span> <span class="o">=</span> <span class="n">_lookup_by_id_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_values&#39;</span><span class="p">,</span> <span class="s">&#39;VALUES&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a VALUES_ element by the given ID.  Used by the values</span>
<span class="sd">        &quot;ref&quot; attribute.</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>

<div class="viewcode-block" id="VOTableFile.iter_groups"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.iter_groups">[docs]</a>    <span class="k">def</span> <span class="nf">iter_groups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all GROUP_ elements in the VOTABLE_</span>
<span class="sd">        file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">iter_tables</span><span class="p">():</span>
            <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">iter_groups</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">group</span>
</div>
    <span class="n">get_group_by_id</span> <span class="o">=</span> <span class="n">_lookup_by_id_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_groups&#39;</span><span class="p">,</span> <span class="s">&#39;GROUP&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Looks up a GROUP_ element by the given ID.  Used by the group&#39;s</span>
<span class="sd">        &quot;ref&quot; attribute</span>
<span class="sd">        &quot;&quot;&quot;</span><span class="p">)</span>

<div class="viewcode-block" id="VOTableFile.iter_coosys"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.iter_coosys">[docs]</a>    <span class="k">def</span> <span class="nf">iter_coosys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Recursively iterate over all COOSYS_ elements in the VOTABLE_</span>
<span class="sd">        file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">coosys</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coordinate_systems</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">coosys</span>
        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">coosys</span> <span class="ow">in</span> <span class="n">resource</span><span class="o">.</span><span class="n">iter_coosys</span><span class="p">():</span>
                <span class="k">yield</span> <span class="n">coosys</span>
</div>
    <span class="n">get_coosys_by_id</span> <span class="o">=</span> <span class="n">_lookup_by_id_factory</span><span class="p">(</span>
        <span class="s">&#39;iter_coosys&#39;</span><span class="p">,</span> <span class="s">&#39;COOSYS&#39;</span><span class="p">,</span>
        <span class="sd">&quot;&quot;&quot;Looks up a COOSYS_ element by the given ID.&quot;&quot;&quot;</span><span class="p">)</span>

<div class="viewcode-block" id="VOTableFile.set_all_tables_format"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.set_all_tables_format">[docs]</a>    <span class="k">def</span> <span class="nf">set_all_tables_format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">format</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Set the output storage format of all tables in the file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">iter_tables</span><span class="p">():</span>
            <span class="n">table</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">format</span>
</div>
    <span class="nd">@classmethod</span>
<div class="viewcode-block" id="VOTableFile.from_table"><a class="viewcode-back" href="../../../../_generated/astropy.io.votable.tree.VOTableFile.html#astropy.io.votable.tree.VOTableFile.from_table">[docs]</a>    <span class="k">def</span> <span class="nf">from_table</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">table_id</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Create a `VOTableFile` instance from a given</span>
<span class="sd">        `astropy.table.Table` instance.</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        table_id : str, optional</span>
<span class="sd">            Set the given ID attribute on the returned Table instance.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">votable_file</span> <span class="o">=</span> <span class="n">cls</span><span class="p">()</span>
        <span class="n">resource</span> <span class="o">=</span> <span class="n">Resource</span><span class="p">()</span>
        <span class="n">votable</span> <span class="o">=</span> <span class="n">Table</span><span class="o">.</span><span class="n">from_table</span><span class="p">(</span><span class="n">votable_file</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">table_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
            <span class="n">votable</span><span class="o">.</span><span class="n">ID</span> <span class="o">=</span> <span class="n">table_id</span>
        <span class="n">resource</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">votable</span><span class="p">)</span>
        <span class="n">votable_file</span><span class="o">.</span><span class="n">resources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">votable_file</span></div></div>
</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>