<!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>tables — PyTables 3.0.0 documentation</title> <link rel="stylesheet" href="../_static/cloud.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="../" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '3.0.0', 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/jquery.cookie.js"></script> <script type="text/javascript" src="../_static/toggle_sections.js"></script> <script type="text/javascript" src="../_static/toggle_sidebar.js"></script> <link rel="shortcut icon" href="../_static/favicon.ico"/> <link rel="top" title="PyTables 3.0.0 documentation" href="../index.html" /> <link rel="up" title="Module code" href="index.html" /> </head> <body> <div class="relbar-top"> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../py-modindex.html" title="Python Module Index" >modules</a> </li> <li class="right" > <a href="../np-modindex.html" title="Python Module Index" >modules</a> </li> <li><a href="../index.html">PyTables 3.0.0 documentation</a> »</li> <li><a href="index.html" accesskey="U">Module code</a> »</li> </ul> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <h1>Source code for tables</h1><div class="highlight"><pre> <span class="c"># -*- coding: utf-8 -*-</span> <span class="c">########################################################################</span> <span class="c">#</span> <span class="c"># License: BSD</span> <span class="c"># Created: October 1, 2002</span> <span class="c"># Author: Francesc Alted - faltet@pytables.com</span> <span class="c">#</span> <span class="c"># $Id$</span> <span class="c">#</span> <span class="c">########################################################################</span> <span class="sd">"""PyTables, hierarchical datasets in Python</span> <span class="sd">:URL: http://www.pytables.org/</span> <span class="sd">PyTables is a package for managing hierarchical datasets and designed</span> <span class="sd">to efficiently cope with extremely large amounts of data.</span> <span class="sd">"""</span> <span class="kn">import</span> <span class="nn">os</span> <span class="c"># On Windows, pre-load the HDF5 DLLs into the process via Ctypes</span> <span class="c"># to improve diagnostics and avoid issues when loading DLLs during runtime.</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">'nt'</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">ctypes</span> <span class="k">def</span> <span class="nf">_load_library</span><span class="p">(</span><span class="n">dllname</span><span class="p">,</span> <span class="n">loadfunction</span><span class="p">,</span> <span class="n">dllpaths</span><span class="o">=</span><span class="p">(</span><span class="s">''</span><span class="p">,</span> <span class="p">)):</span> <span class="sd">"""Load a DLL via ctypes load function. Return None on failure.</span> <span class="sd"> By default, try to load the DLL from the current package directory</span> <span class="sd"> first, then from the Windows DLL search path.</span> <span class="sd"> """</span> <span class="k">try</span><span class="p">:</span> <span class="n">dllpaths</span> <span class="o">=</span> <span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">)),</span> <span class="p">)</span> <span class="o">+</span> <span class="n">dllpaths</span> <span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="k">pass</span> <span class="c"># PyPy and frozen distributions have no __file__ attribute</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">dllpaths</span><span class="p">:</span> <span class="k">if</span> <span class="n">path</span><span class="p">:</span> <span class="c"># Temporarily add the path to the PATH environment variable</span> <span class="c"># so Windows can find additional DLL dependencies.</span> <span class="k">try</span><span class="p">:</span> <span class="n">oldenv</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">'PATH'</span><span class="p">]</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">'PATH'</span><span class="p">]</span> <span class="o">=</span> <span class="n">path</span> <span class="o">+</span> <span class="s">';'</span> <span class="o">+</span> <span class="n">oldenv</span> <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="n">oldenv</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="n">loadfunction</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dllname</span><span class="p">))</span> <span class="k">except</span> <span class="ne">WindowsError</span><span class="p">:</span> <span class="k">pass</span> <span class="k">finally</span><span class="p">:</span> <span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="n">oldenv</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">'PATH'</span><span class="p">]</span> <span class="o">=</span> <span class="n">oldenv</span> <span class="k">return</span> <span class="bp">None</span> <span class="c"># In order to improve diagnosis of a common Windows dependency</span> <span class="c"># issue, we explicitly test that we can load the HDF5 dll before</span> <span class="c"># loading tables.utilsExtensions.</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">_load_library</span><span class="p">(</span><span class="s">'hdf5dll.dll'</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cdll</span><span class="o">.</span><span class="n">LoadLibrary</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ImportError</span><span class="p">(</span> <span class="s">'Could not load "hdf5dll.dll", please ensure'</span> <span class="s">' that it can be found in the system path'</span><span class="p">)</span> <span class="c"># Some PyTables binary distributions place the dependency DLLs in the</span> <span class="c"># tables package directory.</span> <span class="c"># The lzo2 and libbz2 DLLs are loaded dynamically at runtime but can't be</span> <span class="c"># found because the package directory is not in the Windows DLL search</span> <span class="c"># path.</span> <span class="c"># This pre-loads lzo2 and libbz2 DLLs from the tables package directory.</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">_load_library</span><span class="p">(</span><span class="s">'lzo2.dll'</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cdll</span><span class="o">.</span><span class="n">LoadLibrary</span><span class="p">):</span> <span class="k">pass</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">_load_library</span><span class="p">(</span><span class="s">'libbz2.dll'</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cdll</span><span class="o">.</span><span class="n">LoadLibrary</span><span class="p">):</span> <span class="k">pass</span> <span class="c"># Necessary imports to get versions stored on the cython extension</span> <span class="kn">from</span> <span class="nn">tables.utilsextension</span> <span class="kn">import</span> <span class="p">(</span><span class="n">get_pytables_version</span><span class="p">,</span> <span class="n">get_hdf5_version</span><span class="p">,</span> <span class="n">getPyTablesVersion</span><span class="p">,</span> <span class="n">getHDF5Version</span><span class="p">)</span> <span class="c"># Pending Deprecation!</span> <span class="n">__version__</span> <span class="o">=</span> <span class="n">get_pytables_version</span><span class="p">()</span> <span class="sd">"""The PyTables version number."""</span> <span class="n">hdf5_version</span> <span class="o">=</span> <span class="n">get_hdf5_version</span><span class="p">()</span> <span class="sd">"""The underlying HDF5 library version number.</span> <span class="sd">.. versionadded:: 3.0</span> <span class="sd">"""</span> <span class="n">hdf5Version</span> <span class="o">=</span> <span class="n">hdf5_version</span> <span class="sd">"""The underlying HDF5 library version number.</span> <span class="sd">.. deprecated:: 3.0</span> <span class="sd"> hdf5Version is pending deprecation, use :data:`hdf5_version`</span> <span class="sd"> instead.</span> <span class="sd">"""</span> <span class="kn">from</span> <span class="nn">tables.utilsextension</span> <span class="kn">import</span> <span class="p">(</span><span class="n">is_hdf5_file</span><span class="p">,</span> <span class="n">is_pytables_file</span><span class="p">,</span> <span class="n">which_lib_version</span><span class="p">,</span> <span class="n">set_blosc_max_threads</span><span class="p">,</span> <span class="n">silence_hdf5_messages</span><span class="p">,</span> <span class="c"># Pending Deprecation!</span> <span class="n">isHDF5File</span><span class="p">,</span> <span class="n">isPyTablesFile</span><span class="p">,</span> <span class="n">whichLibVersion</span><span class="p">,</span> <span class="n">setBloscMaxThreads</span><span class="p">,</span> <span class="n">silenceHDF5Messages</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">tables.misc.enum</span> <span class="kn">import</span> <span class="n">Enum</span> <span class="kn">from</span> <span class="nn">tables.atom</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">tables.flavor</span> <span class="kn">import</span> <span class="n">restrict_flavors</span> <span class="kn">from</span> <span class="nn">tables.description</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">tables.filters</span> <span class="kn">import</span> <span class="n">Filters</span> <span class="c"># Import the user classes from the proper modules</span> <span class="kn">from</span> <span class="nn">tables.exceptions</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">tables.file</span> <span class="kn">import</span> <span class="n">File</span><span class="p">,</span> <span class="n">open_file</span><span class="p">,</span> <span class="n">copy_file</span><span class="p">,</span> <span class="n">openFile</span><span class="p">,</span> <span class="n">copyFile</span> <span class="kn">from</span> <span class="nn">tables.node</span> <span class="kn">import</span> <span class="n">Node</span> <span class="kn">from</span> <span class="nn">tables.group</span> <span class="kn">import</span> <span class="n">Group</span> <span class="kn">from</span> <span class="nn">tables.leaf</span> <span class="kn">import</span> <span class="n">Leaf</span> <span class="kn">from</span> <span class="nn">tables.table</span> <span class="kn">import</span> <span class="n">Table</span><span class="p">,</span> <span class="n">Cols</span><span class="p">,</span> <span class="n">Column</span> <span class="kn">from</span> <span class="nn">tables.array</span> <span class="kn">import</span> <span class="n">Array</span> <span class="kn">from</span> <span class="nn">tables.carray</span> <span class="kn">import</span> <span class="n">CArray</span> <span class="kn">from</span> <span class="nn">tables.earray</span> <span class="kn">import</span> <span class="n">EArray</span> <span class="kn">from</span> <span class="nn">tables.vlarray</span> <span class="kn">import</span> <span class="n">VLArray</span> <span class="kn">from</span> <span class="nn">tables.unimplemented</span> <span class="kn">import</span> <span class="n">UnImplemented</span><span class="p">,</span> <span class="n">Unknown</span> <span class="kn">from</span> <span class="nn">tables.expression</span> <span class="kn">import</span> <span class="n">Expr</span> <span class="kn">from</span> <span class="nn">tables.tests</span> <span class="kn">import</span> <span class="n">print_versions</span><span class="p">,</span> <span class="n">test</span> <span class="c"># List here only the objects we want to be publicly available</span> <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span> <span class="c"># Exceptions and warnings:</span> <span class="s">'HDF5ExtError'</span><span class="p">,</span> <span class="s">'ClosedNodeError'</span><span class="p">,</span> <span class="s">'ClosedFileError'</span><span class="p">,</span> <span class="s">'FileModeError'</span><span class="p">,</span> <span class="s">'NaturalNameWarning'</span><span class="p">,</span> <span class="s">'NodeError'</span><span class="p">,</span> <span class="s">'NoSuchNodeError'</span><span class="p">,</span> <span class="s">'UndoRedoError'</span><span class="p">,</span> <span class="s">'UndoRedoWarning'</span><span class="p">,</span> <span class="s">'PerformanceWarning'</span><span class="p">,</span> <span class="s">'FlavorError'</span><span class="p">,</span> <span class="s">'FlavorWarning'</span><span class="p">,</span> <span class="s">'FiltersWarning'</span><span class="p">,</span> <span class="s">'DataTypeWarning'</span><span class="p">,</span> <span class="c"># Functions:</span> <span class="s">'is_hdf5_file'</span><span class="p">,</span> <span class="s">'is_pytables_file'</span><span class="p">,</span> <span class="s">'which_lib_version'</span><span class="p">,</span> <span class="s">'copy_file'</span><span class="p">,</span> <span class="s">'open_file'</span><span class="p">,</span> <span class="s">'print_versions'</span><span class="p">,</span> <span class="s">'test'</span><span class="p">,</span> <span class="s">'split_type'</span><span class="p">,</span> <span class="s">'restrict_flavors'</span><span class="p">,</span> <span class="s">'set_blosc_max_threads'</span><span class="p">,</span> <span class="s">'silence_hdf5_messages'</span><span class="p">,</span> <span class="c"># Helper classes:</span> <span class="s">'IsDescription'</span><span class="p">,</span> <span class="s">'Description'</span><span class="p">,</span> <span class="s">'Filters'</span><span class="p">,</span> <span class="s">'Cols'</span><span class="p">,</span> <span class="s">'Column'</span><span class="p">,</span> <span class="c"># Types:</span> <span class="s">'Enum'</span><span class="p">,</span> <span class="c"># Atom types:</span> <span class="s">'Atom'</span><span class="p">,</span> <span class="s">'StringAtom'</span><span class="p">,</span> <span class="s">'BoolAtom'</span><span class="p">,</span> <span class="s">'IntAtom'</span><span class="p">,</span> <span class="s">'UIntAtom'</span><span class="p">,</span> <span class="s">'Int8Atom'</span><span class="p">,</span> <span class="s">'UInt8Atom'</span><span class="p">,</span> <span class="s">'Int16Atom'</span><span class="p">,</span> <span class="s">'UInt16Atom'</span><span class="p">,</span> <span class="s">'Int32Atom'</span><span class="p">,</span> <span class="s">'UInt32Atom'</span><span class="p">,</span> <span class="s">'Int64Atom'</span><span class="p">,</span> <span class="s">'UInt64Atom'</span><span class="p">,</span> <span class="s">'FloatAtom'</span><span class="p">,</span> <span class="s">'Float32Atom'</span><span class="p">,</span> <span class="s">'Float64Atom'</span><span class="p">,</span> <span class="s">'ComplexAtom'</span><span class="p">,</span> <span class="s">'Complex32Atom'</span><span class="p">,</span> <span class="s">'Complex64Atom'</span><span class="p">,</span> <span class="s">'Complex128Atom'</span><span class="p">,</span> <span class="s">'TimeAtom'</span><span class="p">,</span> <span class="s">'Time32Atom'</span><span class="p">,</span> <span class="s">'Time64Atom'</span><span class="p">,</span> <span class="s">'EnumAtom'</span><span class="p">,</span> <span class="s">'PseudoAtom'</span><span class="p">,</span> <span class="s">'ObjectAtom'</span><span class="p">,</span> <span class="s">'VLStringAtom'</span><span class="p">,</span> <span class="s">'VLUnicodeAtom'</span><span class="p">,</span> <span class="c"># Column types:</span> <span class="s">'Col'</span><span class="p">,</span> <span class="s">'StringCol'</span><span class="p">,</span> <span class="s">'BoolCol'</span><span class="p">,</span> <span class="s">'IntCol'</span><span class="p">,</span> <span class="s">'UIntCol'</span><span class="p">,</span> <span class="s">'Int8Col'</span><span class="p">,</span> <span class="s">'UInt8Col'</span><span class="p">,</span> <span class="s">'Int16Col'</span><span class="p">,</span> <span class="s">'UInt16Col'</span><span class="p">,</span> <span class="s">'Int32Col'</span><span class="p">,</span> <span class="s">'UInt32Col'</span><span class="p">,</span> <span class="s">'Int64Col'</span><span class="p">,</span> <span class="s">'UInt64Col'</span><span class="p">,</span> <span class="s">'FloatCol'</span><span class="p">,</span> <span class="s">'Float32Col'</span><span class="p">,</span> <span class="s">'Float64Col'</span><span class="p">,</span> <span class="s">'ComplexCol'</span><span class="p">,</span> <span class="s">'Complex32Col'</span><span class="p">,</span> <span class="s">'Complex64Col'</span><span class="p">,</span> <span class="s">'Complex128Col'</span><span class="p">,</span> <span class="s">'TimeCol'</span><span class="p">,</span> <span class="s">'Time32Col'</span><span class="p">,</span> <span class="s">'Time64Col'</span><span class="p">,</span> <span class="s">'EnumCol'</span><span class="p">,</span> <span class="c"># Node classes:</span> <span class="s">'Node'</span><span class="p">,</span> <span class="s">'Group'</span><span class="p">,</span> <span class="s">'Leaf'</span><span class="p">,</span> <span class="s">'Table'</span><span class="p">,</span> <span class="s">'Array'</span><span class="p">,</span> <span class="s">'CArray'</span><span class="p">,</span> <span class="s">'EArray'</span><span class="p">,</span> <span class="s">'VLArray'</span><span class="p">,</span> <span class="s">'UnImplemented'</span><span class="p">,</span> <span class="s">'Unknown'</span><span class="p">,</span> <span class="c"># The File class:</span> <span class="s">'File'</span><span class="p">,</span> <span class="c"># Expr class</span> <span class="s">'Expr'</span><span class="p">,</span> <span class="c">#</span> <span class="c"># Pending deprecation!!!</span> <span class="c">#</span> <span class="s">'isHDF5File'</span><span class="p">,</span> <span class="s">'isPyTablesFile'</span><span class="p">,</span> <span class="s">'whichLibVersion'</span><span class="p">,</span> <span class="s">'copyFile'</span><span class="p">,</span> <span class="s">'openFile'</span><span class="p">,</span> <span class="s">'print_versions'</span><span class="p">,</span> <span class="s">'test'</span><span class="p">,</span> <span class="s">'split_type'</span><span class="p">,</span> <span class="s">'restrict_flavors'</span><span class="p">,</span> <span class="s">'setBloscMaxThreads'</span><span class="p">,</span> <span class="s">'silenceHDF5Messages'</span><span class="p">,</span> <span class="p">]</span> <span class="k">if</span> <span class="s">'Float16Atom'</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span> <span class="c"># float16 is new in numpy 1.6.0</span> <span class="n">__all__</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="s">'Float16Atom'</span><span class="p">,</span> <span class="s">'Float16Col'</span><span class="p">))</span> <span class="k">if</span> <span class="s">'Float96Atom'</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span> <span class="n">__all__</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="s">'Float96Atom'</span><span class="p">,</span> <span class="s">'Float96Col'</span><span class="p">))</span> <span class="n">__all__</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="s">'Complex192Atom'</span><span class="p">,</span> <span class="s">'Complex192Col'</span><span class="p">))</span> <span class="c"># XXX check</span> <span class="k">if</span> <span class="s">'Float128Atom'</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span> <span class="n">__all__</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="s">'Float128Atom'</span><span class="p">,</span> <span class="s">'Float128Col'</span><span class="p">))</span> <span class="n">__all__</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="s">'Complex256Atom'</span><span class="p">,</span> <span class="s">'Complex256Col'</span><span class="p">))</span> <span class="c"># XXX check</span> </pre></div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <p class="logo"><a href="../index.html"> <img class="logo" src="../_static/logo-pytables-small.png" alt="Logo"/> </a></p> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="relbar-bottom"> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../py-modindex.html" title="Python Module Index" >modules</a> </li> <li class="right" > <a href="../np-modindex.html" title="Python Module Index" >modules</a> </li> <li><a href="../index.html">PyTables 3.0.0 documentation</a> »</li> <li><a href="index.html" >Module code</a> »</li> </ul> </div> </div> <div class="footer"> © Copyright 2011-2013, PyTables maintainers. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. </div> <!-- cloud_sptheme 1.3 --> </body> </html>