<!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 — 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> » </li> <li><a href="../../../index.html" accesskey="U">Module code</a> »</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">'Link'</span><span class="p">,</span> <span class="s">'Info'</span><span class="p">,</span> <span class="s">'Values'</span><span class="p">,</span> <span class="s">'Field'</span><span class="p">,</span> <span class="s">'Param'</span><span class="p">,</span> <span class="s">'CooSys'</span><span class="p">,</span> <span class="s">'FieldRef'</span><span class="p">,</span> <span class="s">'ParamRef'</span><span class="p">,</span> <span class="s">'Group'</span><span class="p">,</span> <span class="s">'Table'</span><span class="p">,</span> <span class="s">'Resource'</span><span class="p">,</span> <span class="s">'VOTableFile'</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">"""</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"> """</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">"""</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"> """</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">"""</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 "forward references" are not allowed in the VOTABLE</span> <span class="sd"> format.</span> <span class="sd"> """</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">"</span><span class="si">%s</span><span class="s"> references itself"</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">"No </span><span class="si">%s</span><span class="s"> with ID '</span><span class="si">%s</span><span class="s">' found before the referencing </span><span class="si">%s</span><span class="s">"</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">"""</span> <span class="sd"> Like `_lookup_by_id_factory`, but also looks in the "name" attribute.</span> <span class="sd"> """</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">"""</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 "forward references" are not allowed in</span> <span class="sd"> the VOTABLE format.</span> <span class="sd"> """</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">"</span><span class="si">%s</span><span class="s"> references itself"</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">"No </span><span class="si">%s</span><span class="s"> with ID or name '</span><span class="si">%s</span><span class="s">' found before the referencing </span><span class="si">%s</span><span class="s">"</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">"""</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"> """</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"^[JB]?[0-9]+([.][0-9]*)?$"</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">"""</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"> """</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">"""</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"> """</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">'version_1_1_or_later'</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">'version_1_2_or_later'</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">'version_1_2_or_later'</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">'pedantic'</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">"""</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"> """</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">'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">_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">"""An optional name for the element."""</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">'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="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">"""Extended data type information."""</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">'version_1_2_or_later'</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">'xtype'</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">'1.2'</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">'xtype'</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">"""The usage-specific or `unique type`_ of the element."""</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">'version_1_2_or_later'</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">'utype'</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">'1.2'</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">'utype'</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">"""The `unified content descriptor`_ for the element."""</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">''</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">'version_1_2_or_later'</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">'ucd'</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">'1.2'</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">"""</span> <span class="sd"> An optional string describing the element. Corresponds to the</span> <span class="sd"> DESCRIPTION_ element.</span> <span class="sd"> """</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">"""</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"> """</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">'version_1_1_or_later'</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">"""</span> <span class="sd"> A base class for simple elements, such as FIELD, PARAM and INFO</span> <span class="sd"> that don't require any special parsing or outputting machinery.</span> <span class="sd"> """</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">"""</span> <span class="sd"> A base class for simple elements, such as FIELD, PARAM and INFO</span> <span class="sd"> that don't require any special parsing or outputting machinery.</span> <span class="sd"> """</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">"""The content of the element."""</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">'content'</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">"""</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"> """</span> <span class="n">_attr_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ID'</span><span class="p">,</span> <span class="s">'content_role'</span><span class="p">,</span> <span class="s">'content_type'</span><span class="p">,</span> <span class="s">'title'</span><span class="p">,</span> <span class="s">'value'</span><span class="p">,</span> <span class="s">'href'</span><span class="p">,</span> <span class="s">'action'</span><span class="p">]</span> <span class="n">_element_name</span> <span class="o">=</span> <span class="s">'LINK'</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">'content-role'</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">'content_role'</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">'content-type'</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">'content_type'</span><span class="p">)</span> <span class="k">if</span> <span class="s">'gref'</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">'LINK'</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">'content-role'</span><span class="p">,</span> <span class="s">'content_role'</span><span class="p">,</span> <span class="s">'content-type'</span><span class="p">,</span> <span class="s">'content_type'</span><span class="p">,</span> <span class="s">'gref'</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">"""</span> <span class="sd"> Defines the MIME role of the referenced object. Must be one of:</span> <span class="sd"> None, 'query', 'hints', 'doc' or 'location'</span> <span class="sd"> """</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">'query'</span><span class="p">,</span> <span class="s">'hints'</span><span class="p">,</span> <span class="s">'doc'</span><span class="p">,</span> <span class="s">'location'</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">"""Defines the MIME content type of the referenced object."""</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">"""</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"> """</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">'links'</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">'links'</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">"""</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"> """</span> <span class="n">_element_name</span> <span class="o">=</span> <span class="s">'INFO'</span> <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ID'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'value'</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">'xtype'</span><span class="p">,</span> <span class="s">'ref'</span><span class="p">,</span> <span class="s">'unit'</span><span class="p">,</span> <span class="s">'ucd'</span><span class="p">,</span> <span class="s">'utype'</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">'version_1_2_or_later'</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">'INFO'</span><span class="p">,</span> <span class="p">[</span><span class="s">'xtype'</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">'INFO'</span><span class="p">,</span> <span class="p">[</span><span class="s">'ref'</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">'INFO'</span><span class="p">,</span> <span class="p">[</span><span class="s">'unit'</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">'INFO'</span><span class="p">,</span> <span class="p">[</span><span class="s">'ucd'</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">'INFO'</span><span class="p">,</span> <span class="p">[</span><span class="s">'utype'</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">'INFO'</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">"""[*required*] The key of the key-value pair."""</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">'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">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">'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="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">"""</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"> """</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">'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="n">check_string</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s">'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="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">"""The content inside the INFO element."""</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">'content'</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">"""</span> <span class="sd"> Refer to another INFO_ element by ID_, defined previously in</span> <span class="sd"> the document.</span> <span class="sd"> """</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">'version_1_2_or_later'</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">'ref'</span><span class="p">,</span> <span class="s">'INFO'</span><span class="p">,</span> <span class="s">'1.2'</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">'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="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"># "VALUES ref='%s', which has not already been defined." %</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">"""A string specifying the units_ for the INFO_."""</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">'version_1_2_or_later'</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">'unit'</span><span class="p">,</span> <span class="s">'INFO'</span><span class="p">,</span> <span class="s">'1.2'</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">'cds'</span><span class="p">,</span> <span class="n">parse_strict</span><span class="o">=</span><span class="s">'silent'</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">'unit'</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">'unit'</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">'cds'</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">"""</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"> """</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">"legal"</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">'VALUES'</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">"""</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"> """</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">'0'</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">"""</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"> - 'legal': The domain of this column applies in general to</span> <span class="sd"> this datatype. (default)</span> <span class="sd"> - 'actual': The domain of this column applies only to the</span> <span class="sd"> data enclosed in the parent table.</span> <span class="sd"> """</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">'legal'</span><span class="p">,</span> <span class="s">'actual'</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">"""</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"> """</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">'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="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">'VALUES'</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">"""</span> <span class="sd"> The minimum value of the domain. See :attr:`min_inclusive`.</span> <span class="sd"> """</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">'converter'</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">"""When `True`, the domain includes the minimum value."""</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">'yes'</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">'no'</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">"""</span> <span class="sd"> The maximum value of the domain. See :attr:`max_inclusive`.</span> <span class="sd"> """</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">'converter'</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">"""When `True`, the domain includes the maximum value."""</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">'yes'</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">'no'</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">"""</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"> """</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">'VALUES'</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">'MIN'</span><span class="p">:</span> <span class="k">if</span> <span class="s">'value'</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">'MIN'</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">'value'</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">'inclusive'</span><span class="p">,</span> <span class="s">'yes'</span><span class="p">)</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'MIN'</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">'value'</span><span class="p">,</span> <span class="s">'inclusive'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">'MAX'</span><span class="p">:</span> <span class="k">if</span> <span class="s">'value'</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">'MAX'</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">'value'</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">'inclusive'</span><span class="p">,</span> <span class="s">'yes'</span><span class="p">)</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'MAX'</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">'value'</span><span class="p">,</span> <span class="s">'inclusive'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">'OPTION'</span><span class="p">:</span> <span class="k">if</span> <span class="s">'value'</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">'OPTION'</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">'name'</span><span class="p">),</span> <span class="s">'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">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">'name'</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">'value'</span><span class="p">)))</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'OPTION'</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">'data'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">])</span> <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">'VALUES'</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's nothing meaningful or non-default to write,</span> <span class="c"># don'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'yes'</span> <span class="k">return</span> <span class="s">u'no'</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'VALUES'</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'ref'</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'VALUES'</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'ID'</span><span class="p">,</span> <span class="s">u'null'</span><span class="p">,</span> <span class="s">u'ref'</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'MIN'</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'MAX'</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'OPTION'</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'ID'</span><span class="p">,</span> <span class="s">u'null'</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">'min'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="s">'value'</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">'inclusive'</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">'max'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="s">'value'</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">'inclusive'</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">'options'</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">'values'</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">'values'</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">'values'</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'ID'</span><span class="p">,</span> <span class="s">u'null'</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">'min'</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">'min'</span><span class="p">][</span><span class="s">'value'</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">'min'</span><span class="p">][</span><span class="s">'inclusive'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'max'</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">'max'</span><span class="p">][</span><span class="s">'value'</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">'max'</span><span class="p">][</span><span class="s">'inclusive'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'options'</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">'options'</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">"""</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"> """</span> <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ID'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'datatype'</span><span class="p">,</span> <span class="s">'arraysize'</span><span class="p">,</span> <span class="s">'ucd'</span><span class="p">,</span> <span class="s">'unit'</span><span class="p">,</span> <span class="s">'width'</span><span class="p">,</span> <span class="s">'precision'</span><span class="p">,</span> <span class="s">'utype'</span><span class="p">,</span> <span class="s">'ref'</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">'xtype'</span><span class="p">]</span> <span class="n">_element_name</span> <span class="o">=</span> <span class="s">'FIELD'</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">'version_1_2_or_later'</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">'xtype'</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 "double", 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'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">'pedantic'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">name</span> <span class="o">==</span> <span class="s">'cprojection'</span> <span class="ow">and</span> <span class="n">ID</span> <span class="o">==</span> <span class="s">'cprojection'</span> <span class="ow">and</span> <span class="n">ucd</span> <span class="o">==</span> <span class="s">'VOX:WCS_CoordProjection'</span> <span class="ow">and</span> <span class="n">datatype</span> <span class="o">==</span> <span class="s">'double'</span><span class="p">):</span> <span class="n">datatype</span> <span class="o">=</span> <span class="s">'char'</span> <span class="n">arraysize</span> <span class="o">=</span> <span class="s">'3'</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">'PARAM'</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">'version_1_1_or_later'</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">'string'</span> <span class="p">:</span> <span class="s">'char'</span><span class="p">,</span> <span class="s">'unicodeString'</span> <span class="p">:</span> <span class="s">'unicodeChar'</span><span class="p">,</span> <span class="s">'int16'</span> <span class="p">:</span> <span class="s">'short'</span><span class="p">,</span> <span class="s">'int32'</span> <span class="p">:</span> <span class="s">'int'</span><span class="p">,</span> <span class="s">'int64'</span> <span class="p">:</span> <span class="s">'long'</span><span class="p">,</span> <span class="s">'float32'</span> <span class="p">:</span> <span class="s">'float'</span><span class="p">,</span> <span class="s">'float64'</span> <span class="p">:</span> <span class="s">'double'</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">"""</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"> """</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">"_</span><span class="si">%d</span><span class="s">"</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">" </span><span class="si">%d</span><span class="s">"</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">"""</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"> 'boolean', 'bit', 'unsignedByte', 'short', 'int', 'long',</span> <span class="sd"> 'char', 'unicodeChar', 'float', 'double', 'floatComplex', or</span> <span class="sd"> 'doubleComplex'</span> <span class="sd"> Many VOTABLE files in the wild use 'string' instead of 'char',</span> <span class="sd"> so that is also a valid option, though 'string' will always be</span> <span class="sd"> converted to 'char' when writing the file back out.</span> <span class="sd"> """</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">'version_1_1_or_later'</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">'char'</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">"""</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"> """</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"^[FE]?[0-9]+$"</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">"""</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"> """</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"><=</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'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">"""</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"> """</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">'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="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">"""A string specifying the units_ for the FIELD_."""</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">'cds'</span><span class="p">,</span> <span class="n">parse_strict</span><span class="o">=</span><span class="s">'silent'</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">"""</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"> """</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"^([0-9]+x)*[0-9]*[*]?(s\W)?$"</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">"""</span> <span class="sd"> The type attribute on FIELD_ elements is reserved for future</span> <span class="sd"> extensions.</span> <span class="sd"> """</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">"""</span> <span class="sd"> A :class:`Values` instance (or ``None``) defining the domain</span> <span class="sd"> of the column.</span> <span class="sd"> """</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">"""</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"> """</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">'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">__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">'LINK'</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">'DESCRIPTION'</span><span class="p">:</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'DESCRIPTION'</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">'DESCRIPTION'</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">" "</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">"</span><span class="se">\n</span><span class="s">"</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">'unit'</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">'unit'</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">'cds'</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'DESCRIPTION'</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">"""</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"> """</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'ucd'</span><span class="p">,</span> <span class="s">'width'</span><span class="p">,</span> <span class="s">'precision'</span><span class="p">,</span> <span class="s">'utype'</span><span class="p">,</span> <span class="s">'xtype'</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'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">"""</span> <span class="sd"> Restores a `Field` instance from a given</span> <span class="sd"> `astropy.table.Column` instance.</span> <span class="sd"> """</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">'ucd'</span><span class="p">,</span> <span class="s">'width'</span><span class="p">,</span> <span class="s">'precision'</span><span class="p">,</span> <span class="s">'utype'</span><span class="p">,</span> <span class="s">'xtype'</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">'unit'</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">'name'</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">'links'</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">'links'</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">"""</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"> """</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">'value'</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">'value'</span><span class="p">]</span> <span class="n">_element_name</span> <span class="o">=</span> <span class="s">'PARAM'</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">"""</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"> """</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">""</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""</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">"""</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"> """</span> <span class="n">_attr_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ID'</span><span class="p">,</span> <span class="s">'equinox'</span><span class="p">,</span> <span class="s">'epoch'</span><span class="p">,</span> <span class="s">'system'</span><span class="p">]</span> <span class="n">_element_name</span> <span class="o">=</span> <span class="s">'COOSYS'</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">'version_1_2_or_later'</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">'COOSYS'</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">"""</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"> """</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">'version_1_1_or_later'</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">'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">_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">"""</span> <span class="sd"> Specifies the type of coordinate system. Valid choices are:</span> <span class="sd"> 'eq_FK4', 'eq_FK5', 'ICRS', 'ecl_FK4', 'ecl_FK5', 'galactic',</span> <span class="sd"> 'supergalactic', 'xy', 'barycentric', or 'geo_app'</span> <span class="sd"> """</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">'eq_FK4'</span><span class="p">,</span> <span class="s">'eq_FK5'</span><span class="p">,</span> <span class="s">'ICRS'</span><span class="p">,</span> <span class="s">'ecl_FK4'</span><span class="p">,</span> <span class="s">'ecl_FK5'</span><span class="p">,</span> <span class="s">'galactic'</span><span class="p">,</span> <span class="s">'supergalactic'</span><span class="p">,</span> <span class="s">'xy'</span><span class="p">,</span> <span class="s">'barycentric'</span><span class="p">,</span> <span class="s">'geo_app'</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">"""</span> <span class="sd"> A parameter required to fix the equatorial or ecliptic systems</span> <span class="sd"> (as e.g. "J2000" as the default "eq_FK5" or "B1950" as the</span> <span class="sd"> default "eq_FK4").</span> <span class="sd"> """</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">'equinox'</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">"""</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"> """</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">'epoch'</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">"""</span> <span class="sd"> FIELDref_ element: used inside of GROUP_ elements to refer to remote FIELD_ elements.</span> <span class="sd"> """</span> <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ref'</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">'ucd'</span><span class="p">,</span> <span class="s">'utype'</span><span class="p">]</span> <span class="n">_element_name</span> <span class="o">=</span> <span class="s">"FIELDref"</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">"""</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"> """</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">'version_1_2_or_later'</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">'ucd'</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">'utype'</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">"""The ID_ of the FIELD_ that this FIELDref_ references."""</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">'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="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">"""</span> <span class="sd"> Lookup the :class:`Field` instance that this :class:`FieldRef`</span> <span class="sd"> references.</span> <span class="sd"> """</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">"No field named '</span><span class="si">%s</span><span class="s">'"</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">"""</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 <PARAM> element.</span> <span class="sd"> """</span> <span class="n">_attr_list_11</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ref'</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">'ucd'</span><span class="p">,</span> <span class="s">'utype'</span><span class="p">]</span> <span class="n">_element_name</span> <span class="o">=</span> <span class="s">"PARAMref"</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">'version_1_2_or_later'</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">'ucd'</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">'utype'</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">"""The ID_ of the PARAM_ that this PARAMref_ references."""</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">'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="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">"""</span> <span class="sd"> Lookup the :class:`Param` instance that this :class:`PARAMref`</span> <span class="sd"> references.</span> <span class="sd"> """</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">"No params named '</span><span class="si">%s</span><span class="s">'"</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">"""</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"> """</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">'GROUP'</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">"""</span> <span class="sd"> Currently ignored, as it's not clear from the spec how this is</span> <span class="sd"> meant to work.</span> <span class="sd"> """</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">'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="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">"""</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"> """</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">'FIELDref'</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">'PARAMref'</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">'PARAM'</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">'GROUP'</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">'DESCRIPTION'</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">'DESCRIPTION'</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">'GROUP'</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">'GROUP'</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'GROUP'</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'ID'</span><span class="p">,</span> <span class="s">u'name'</span><span class="p">,</span> <span class="s">u'ref'</span><span class="p">,</span> <span class="s">u'ucd'</span><span class="p">,</span> <span class="s">u'utype'</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"DESCRIPTION"</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">"""</span> <span class="sd"> Recursively iterate over all :class:`Param` elements in this</span> <span class="sd"> :class:`Group`.</span> <span class="sd"> """</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">"""</span> <span class="sd"> Recursively iterate over all sub-:class:`Group` instances in</span> <span class="sd"> this :class:`Group`.</span> <span class="sd"> """</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">"""</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 <FIELD> 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's column type is "object"</span> <span class="sd"> (``"O"``), 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` == 'meta') *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"> """</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">'ref'</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">>=</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">'tabledata'</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">'TABLE'</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">"""</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"> """</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">'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="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">'TABLE'</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">"""</span> <span class="sd"> [*required*] The serialization format of the table. Must be</span> <span class="sd"> one of:</span> <span class="sd"> 'tabledata' (TABLEDATA_), 'binary' (BINARY_), 'fits' (FITS_).</span> <span class="sd"> Note that the 'fits' format, since it requires an external</span> <span class="sd"> file, can not be written out. Any file read in with 'fits'</span> <span class="sd"> format will be read out, by default, in 'tabledata' format.</span> <span class="sd"> """</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">'fits'</span><span class="p">:</span> <span class="n">vo_raise</span><span class="p">(</span><span class="s">"fits format can not be written out, only read."</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">'tabledata'</span><span class="p">,</span> <span class="s">'binary'</span><span class="p">):</span> <span class="n">vo_raise</span><span class="p">(</span><span class="s">"Invalid format '</span><span class="si">%s</span><span class="s">'"</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</span> <span class="sd"> Returns True if this table doesn'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"> """</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">"""</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"> """</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">'O'</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">'b'</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">'utf-8'</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">'utf-8'</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">'utf-8'</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">'O'</span> <span class="ow">and</span> <span class="s">'O'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'bool'</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">"""</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"> """</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">'version_1_2_or_later'</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">'INFO'</span><span class="p">,</span> <span class="s">'TABLE'</span><span class="p">,</span> <span class="s">'1.2'</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">'columns'</span><span class="p">)</span> <span class="c"># If we'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">'table_number'</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">'_current_table_number'</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">'_current_table_number'</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">'table_id'</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'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">'DATA'</span><span class="p">:</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'DATA'</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">'TABLE'</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">'DESCRIPTION'</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">'RESOURCE'</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">'FIELD'</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">'PARAM'</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">'GROUP'</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">'LINK'</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">'INFO'</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">'DESCRIPTION'</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">'DATA'</span><span class="p">:</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'DATA'</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">'DESCRIPTION'</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">'RESOURCE'</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">'TABLE'</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"><</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">></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">"Some specified column numbers out of range"</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">"Columns '</span><span class="si">%s</span><span class="s">' not found in fields list"</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">"Invalid columns list"</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">'TABLEDATA'</span><span class="p">:</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'TABLEDATA'</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">'BINARY'</span><span class="p">:</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'BINARY'</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">'FITS'</span><span class="p">:</span> <span class="n">warn_unknown_attrs</span><span class="p">(</span> <span class="s">'FITS'</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">'extnum'</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">'extnum'</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"><</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">'DATA'</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">'INFO'</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">'version_1_2_or_later'</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">'INFO'</span><span class="p">,</span> <span class="s">'TABLE'</span><span class="p">,</span> <span class="s">'1.2'</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">'TABLE'</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't know the number of rows up front, we'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">'invalid'</span><span class="p">,</span> <span class="s">'exception'</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">'chunk_size'</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">'TR'</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">'encoding'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="o">==</span> <span class="s">'base64'</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">'encoding'</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">'TD'</span><span class="p">:</span> <span class="k">if</span> <span class="n">i</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">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">'ascii'</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">"(in row </span><span class="si">%d</span><span class="s">, col '</span><span class="si">%s</span><span class="s">')"</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">"(in row </span><span class="si">%d</span><span class="s">, col '</span><span class="si">%s</span><span class="s">')"</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">'exception'</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">'TR'</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"><</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">></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">'TABLEDATA'</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">>=</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">'STREAM'</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">'STREAM'</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">'type'</span><span class="p">,</span> <span class="s">'href'</span><span class="p">,</span> <span class="s">'actuate'</span><span class="p">,</span> <span class="s">'encoding'</span><span class="p">,</span> <span class="s">'expires'</span><span class="p">,</span> <span class="s">'rights'</span><span class="p">])</span> <span class="k">if</span> <span class="s">'href'</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">'encoding'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="o">!=</span> <span class="s">'base64'</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">'encoding'</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">'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="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">'encoding'</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">'ascii'</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">'http'</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">'ftp'</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">'file'</span><span class="p">)):</span> <span class="n">vo_raise</span><span class="p">(</span> <span class="s">"The vo package only supports remote data through http, "</span> <span class="o">+</span> <span class="s">"ftp or file"</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">'gzip'</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">'rb'</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">'base64'</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">'base64'</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">"Unknown encoding type '</span><span class="si">%s</span><span class="s">'"</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">>=</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">"(in row </span><span class="si">%d</span><span class="s">, col '</span><span class="si">%s</span><span class="s">')"</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">'STREAM'</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">'STREAM'</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">'type'</span><span class="p">,</span> <span class="s">'href'</span><span class="p">,</span> <span class="s">'actuate'</span><span class="p">,</span> <span class="s">'encoding'</span><span class="p">,</span> <span class="s">'expires'</span><span class="p">,</span> <span class="s">'rights'</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">'href'</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">'encoding'</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">'http'</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">'ftp'</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">'file'</span><span class="p">)):</span> <span class="n">vo_raise</span><span class="p">(</span> <span class="s">"The vo package only supports remote data through http, "</span> <span class="s">"ftp or file"</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">'gzip'</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">'r'</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">'base64'</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">'base64'</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">"Unknown encoding type '</span><span class="si">%s</span><span class="s">'"</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'TABLE'</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'ID'</span><span class="p">,</span> <span class="s">u'name'</span><span class="p">,</span> <span class="s">u'ref'</span><span class="p">,</span> <span class="s">u'ucd'</span><span class="p">,</span> <span class="s">u'utype'</span><span class="p">,</span> <span class="s">u'nrows'</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"DESCRIPTION"</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'DATA'</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'fits'</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'tabledata'</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'tabledata'</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'binary'</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">'version_1_2_or_later'</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">'write_null_values'</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'TABLEDATA'</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">'_debug_python_based_parser'</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"><<</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"<TR></span><span class="se">\n</span><span class="s">"</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"</TR></span><span class="se">\n</span><span class="s">"</span> <span class="n">td</span> <span class="o">=</span> <span class="n">indent_spaces</span> <span class="o">+</span> <span class="s">u" <TD></span><span class="si">%s</span><span class="s"></TD></span><span class="se">\n</span><span class="s">"</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" <TD/></span><span class="se">\n</span><span class="s">"</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">"(in row </span><span class="si">%d</span><span class="s">, col '</span><span class="si">%s</span><span class="s">')"</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'BINARY'</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'STREAM'</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s">'base64'</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">''</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">"(in row </span><span class="si">%d</span><span class="s">, col '</span><span class="si">%s</span><span class="s">')"</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">'ascii'</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">"""</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"> """</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">'ID'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'ref'</span><span class="p">,</span> <span class="s">'ucd'</span><span class="p">,</span> <span class="s">'utype'</span><span class="p">,</span> <span class="s">'description'</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">"""</span> <span class="sd"> Create a `Table` instance from a given `astropy.table.Table`</span> <span class="sd"> instance.</span> <span class="sd"> """</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">'ID'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'ref'</span><span class="p">,</span> <span class="s">'ucd'</span><span class="p">,</span> <span class="s">'utype'</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">'description'</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">'description'</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">"""</span> <span class="sd"> Recursively iterate over all FIELD and PARAM elements in the</span> <span class="sd"> TABLE.</span> <span class="sd"> """</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">'iter_fields_and_params'</span><span class="p">,</span> <span class="s">'FIELD or PARAM'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a FIELD or PARAM element by the given ID.</span> <span class="sd"> """</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">'iter_fields_and_params'</span><span class="p">,</span> <span class="s">'FIELD or PARAM'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a FIELD or PARAM element by the given ID or name.</span> <span class="sd"> """</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">"""</span> <span class="sd"> Recursively iterate over all GROUP elements in the TABLE.</span> <span class="sd"> """</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">'iter_groups'</span><span class="p">,</span> <span class="s">'GROUP'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a GROUP element by the given ID. Used by the group's</span> <span class="sd"> "ref" attribute</span> <span class="sd"> """</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">"""</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"> """</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">'results'</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">'RESOURCE'</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">"""</span> <span class="sd"> [*required*] The type of the resource. Must be either:</span> <span class="sd"> - 'results': This resource contains actual result values</span> <span class="sd"> (default)</span> <span class="sd"> - 'meta': This resource contains only datatype descriptions</span> <span class="sd"> (FIELD_ elements), but no actual data.</span> <span class="sd"> """</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">'results'</span><span class="p">,</span> <span class="s">'meta'</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</span> <span class="sd"> A list of tables in the resource. Must contain only</span> <span class="sd"> `Table` objects.</span> <span class="sd"> """</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">"""</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"> """</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">'TABLE'</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">'INFO'</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">'PARAM'</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">'COOSYS'</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">'RESOURCE'</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">'LINK'</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">'DESCRIPTION'</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">'DESCRIPTION'</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">'RESOURCE'</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">'RESOURCE'</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'ID'</span><span class="p">,</span> <span class="s">u'type'</span><span class="p">,</span> <span class="s">u'utype'</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'RESOURCE'</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"DESCRIPTION"</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">"""</span> <span class="sd"> Recursively iterates over all tables in the resource and</span> <span class="sd"> nested resources.</span> <span class="sd"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"1.2"</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">"1.0"</span><span class="p">,</span> <span class="s">"1.1"</span><span class="p">,</span> <span class="s">"1.2"</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">"""</span> <span class="sd"> The version of the VOTable specification that the file uses.</span> <span class="sd"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">"""</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"> """</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">'version_1_2_or_later'</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">'GROUP'</span><span class="p">,</span> <span class="s">'VOTABLE'</span><span class="p">,</span> <span class="s">'1.2'</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">'_current_table_number'</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">'xml'</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">'VOTABLE'</span><span class="p">:</span> <span class="k">if</span> <span class="s">'version'</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">'version'</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">'version'</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">'version'</span><span class="p">]</span> <span class="k">if</span> <span class="n">config</span><span class="p">[</span><span class="s">'version'</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">'v'</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">'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="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">'version'</span><span class="p">]</span> <span class="o">=</span> \ <span class="n">config</span><span class="p">[</span><span class="s">'version'</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">'version'</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">'1.1'</span><span class="p">,</span> <span class="s">'1.2'</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">'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="k">if</span> <span class="s">'xmlns'</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">'http://www.ivoa.net/xml/VOTable/v</span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">config</span><span class="p">[</span><span class="s">'version'</span><span class="p">])</span> <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s">'xmlns'</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">'xmlns'</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">'version_1_1_or_later'</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">'version'</span><span class="p">],</span> <span class="s">'1.1'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span> <span class="n">config</span><span class="p">[</span><span class="s">'version_1_2_or_later'</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">'version'</span><span class="p">],</span> <span class="s">'1.2'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span> <span class="n">tag_mapping</span> <span class="o">=</span> <span class="p">{</span> <span class="s">'PARAM'</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">'RESOURCE'</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">'COOSYS'</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">'INFO'</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">'DEFINITIONS'</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">'DESCRIPTION'</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">'GROUP'</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">'DESCRIPTION'</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">'VOTABLE'</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">"""</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 'null' 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"> """</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span> <span class="s">'write_null_values'</span><span class="p">:</span> <span class="n">write_null_values</span><span class="p">,</span> <span class="s">'version'</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">'version_1_1_or_later'</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'1.1'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">,</span> <span class="s">'version_1_2_or_later'</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'1.2'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">,</span> <span class="s">'_debug_python_based_parser'</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"""</span> <span class="s"><?xml version="1.0" encoding="utf-8"?></span> <span class="s"><!-- 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/ --></span><span class="se">\n</span><span class="s">"""</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'VOTABLE'</span><span class="p">,</span> <span class="p">{</span><span class="s">u'version'</span><span class="p">:</span> <span class="n">version</span><span class="p">,</span> <span class="s">u'xmlns:xsi'</span><span class="p">:</span> <span class="s">u"http://www.w3.org/2001/XMLSchema-instance"</span><span class="p">,</span> <span class="s">u'xsi:noNamespaceSchemaLocation'</span><span class="p">:</span> <span class="s">u"http://www.ivoa.net/xml/VOTable/v</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">version</span><span class="p">,</span> <span class="s">u'xmlns'</span><span class="p">:</span> <span class="s">u"http://www.ivoa.net/xml/VOTable/v</span><span class="si">%s</span><span class="s">"</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"DESCRIPTION"</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">'version_1_2_or_later'</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">"""</span> <span class="sd"> Iterates over all tables in the VOTable file in a "flat" way,</span> <span class="sd"> ignoring the nesting of resources etc.</span> <span class="sd"> """</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">"""</span> <span class="sd"> Often, you know there is only one table in the file, and</span> <span class="sd"> that's all you need. This method returns that first table.</span> <span class="sd"> """</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">"No table found in VOTABLE file."</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">'iter_tables'</span><span class="p">,</span> <span class="s">'TABLE'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a TABLE_ element by the given ID. Used by the table</span> <span class="sd"> "ref" attribute.</span> <span class="sd"> """</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">"""</span> <span class="sd"> Get a table by its ordinal position in the file.</span> <span class="sd"> """</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">"No table at index </span><span class="si">%d</span><span class="s"> found in VOTABLE file."</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">"""</span> <span class="sd"> Recursively iterate over all FIELD_ and PARAM_ elements in the</span> <span class="sd"> VOTABLE_ file.</span> <span class="sd"> """</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">'iter_fields_and_params'</span><span class="p">,</span> <span class="s">'FIELD'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a FIELD_ element by the given ID_. Used by the field's</span> <span class="sd"> "ref" attribute.</span> <span class="sd"> """</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">'iter_fields_and_params'</span><span class="p">,</span> <span class="s">'FIELD'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a FIELD_ element by the given ID_ or name.</span> <span class="sd"> """</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">"""</span> <span class="sd"> Recursively iterate over all VALUES_ elements in the VOTABLE_</span> <span class="sd"> file.</span> <span class="sd"> """</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">'iter_values'</span><span class="p">,</span> <span class="s">'VALUES'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a VALUES_ element by the given ID. Used by the values</span> <span class="sd"> "ref" attribute.</span> <span class="sd"> """</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">"""</span> <span class="sd"> Recursively iterate over all GROUP_ elements in the VOTABLE_</span> <span class="sd"> file.</span> <span class="sd"> """</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">'iter_groups'</span><span class="p">,</span> <span class="s">'GROUP'</span><span class="p">,</span> <span class="sd">"""</span> <span class="sd"> Looks up a GROUP_ element by the given ID. Used by the group's</span> <span class="sd"> "ref" attribute</span> <span class="sd"> """</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">"""</span> <span class="sd"> Recursively iterate over all COOSYS_ elements in the VOTABLE_</span> <span class="sd"> file.</span> <span class="sd"> """</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">'iter_coosys'</span><span class="p">,</span> <span class="s">'COOSYS'</span><span class="p">,</span> <span class="sd">"""Looks up a COOSYS_ element by the given ID."""</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">"""</span> <span class="sd"> Set the output storage format of all tables in the file.</span> <span class="sd"> """</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">"""</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"> """</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"> <a href="#">Back to Top</a></p> <p> © Copyright 2011-2013, The Astropy Developers.<br/> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. Last built 22 Oct 2013. <br/> </p> </footer> </body> </html>