Commits

Lynn Rees  committed ac2c4f9

- fix undo

  • Participants
  • Parent commits b2522c0

Comments (0)

Files changed (94)

File docs/_build/doctest/output.txt

+Results of doctest builder run on 2012-10-03 09:34:34
+=====================================================
+
+Document: index
+---------------
+1 items passed all tests:
+  28 tests in default
+28 tests in 1 items.
+28 passed and 0 failed.
+Test passed.
+
+Document: areduceknife
+----------------------
+1 items passed all tests:
+  39 tests in default
+39 tests in 1 items.
+39 passed and 0 failed.
+Test passed.
+
+Document: asliceknife
+---------------------
+1 items passed all tests:
+  42 tests in default
+42 tests in 1 items.
+42 passed and 0 failed.
+Test passed.
+
+Document: lorderknife
+---------------------
+1 items passed all tests:
+  37 tests in default
+37 tests in 1 items.
+37 passed and 0 failed.
+Test passed.
+
+Document: lreduceknife
+----------------------
+1 items passed all tests:
+  39 tests in default
+39 tests in 1 items.
+39 passed and 0 failed.
+Test passed.
+
+Document: lsliceknife
+---------------------
+1 items passed all tests:
+  42 tests in default
+42 tests in 1 items.
+42 passed and 0 failed.
+Test passed.
+
+Document: amapknife
+-------------------
+1 items passed all tests:
+  43 tests in default
+43 tests in 1 items.
+43 passed and 0 failed.
+Test passed.
+
+Document: afilterknife
+----------------------
+1 items passed all tests:
+  54 tests in default
+54 tests in 1 items.
+54 passed and 0 failed.
+Test passed.
+
+Document: arepeatknife
+----------------------
+1 items passed all tests:
+  36 tests in default
+36 tests in 1 items.
+36 passed and 0 failed.
+Test passed.
+
+Document: lazyknife
+-------------------
+1 items passed all tests:
+ 137 tests in default
+137 tests in 1 items.
+137 passed and 0 failed.
+Test passed.
+
+Document: lmathknife
+--------------------
+1 items passed all tests:
+  50 tests in default
+50 tests in 1 items.
+50 passed and 0 failed.
+Test passed.
+
+Document: amathknife
+--------------------
+1 items passed all tests:
+  50 tests in default
+50 tests in 1 items.
+50 passed and 0 failed.
+Test passed.
+
+Document: aorderknife
+---------------------
+1 items passed all tests:
+  37 tests in default
+37 tests in 1 items.
+37 passed and 0 failed.
+Test passed.
+
+Document: acmpknife
+-------------------
+1 items passed all tests:
+  39 tests in default
+39 tests in 1 items.
+39 passed and 0 failed.
+Test passed.
+
+Document: lmapknife
+-------------------
+1 items passed all tests:
+  43 tests in default
+43 tests in 1 items.
+43 passed and 0 failed.
+Test passed.
+
+Document: lrepeatknife
+----------------------
+1 items passed all tests:
+  36 tests in default
+36 tests in 1 items.
+36 passed and 0 failed.
+Test passed.
+
+Document: activeknife
+---------------------
+1 items passed all tests:
+ 137 tests in default
+137 tests in 1 items.
+137 passed and 0 failed.
+Test passed.
+
+Document: lcmpknife
+-------------------
+1 items passed all tests:
+  39 tests in default
+39 tests in 1 items.
+39 passed and 0 failed.
+Test passed.
+
+Document: lfilterknife
+----------------------
+1 items passed all tests:
+  54 tests in default
+54 tests in 1 items.
+54 passed and 0 failed.
+Test passed.
+
+Doctest summary
+===============
+  982 tests
+    0 failures in tests
+    0 failures in setup code
+    0 failures in cleanup code

File docs/_build/doctrees/acmpknife.doctree

Binary file added.

File docs/_build/doctrees/activeknife.doctree

Binary file added.

File docs/_build/doctrees/afilterknife.doctree

Binary file added.

File docs/_build/doctrees/amapknife.doctree

Binary file added.

File docs/_build/doctrees/amathknife.doctree

Binary file added.

File docs/_build/doctrees/aorderknife.doctree

Binary file added.

File docs/_build/doctrees/areduceknife.doctree

Binary file added.

File docs/_build/doctrees/arepeatknife.doctree

Binary file added.

File docs/_build/doctrees/asliceknife.doctree

Binary file added.

File docs/_build/doctrees/environment.pickle

Binary file added.

File docs/_build/doctrees/index.doctree

Binary file added.

File docs/_build/doctrees/lazyknife.doctree

Binary file added.

File docs/_build/doctrees/lcmpknife.doctree

Binary file added.

File docs/_build/doctrees/lfilterknife.doctree

Binary file added.

File docs/_build/doctrees/lmapknife.doctree

Binary file added.

File docs/_build/doctrees/lmathknife.doctree

Binary file added.

File docs/_build/doctrees/lorderknife.doctree

Binary file added.

File docs/_build/doctrees/lreduceknife.doctree

Binary file added.

File docs/_build/doctrees/lrepeatknife.doctree

Binary file added.

File docs/_build/doctrees/lsliceknife.doctree

Binary file added.

File docs/_build/html/.buildinfo

+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: fbd3d81fa8a4f7c427da8b60caacc3dd
+tags: fbb0d17656682115ca4d033fb2f83ba1

File docs/_build/html/_sources/acmpknife.txt

+:class:`knife.active.cmpknife` --- Actively evaluated comparing knife
+=====================================================================
+
+.. module:: knife.active
+
+.. autoclass:: cmpknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/activeknife.txt

+:class:`knife.active.activeknife` --- Actively evaluated combo knife
+====================================================================
+
+.. module:: knife.active
+
+.. autoclass:: activeknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/afilterknife.txt

+:class:`knife.active.filterknife` --- Actively evaluated filtering knife
+========================================================================
+
+.. module:: knife.active
+
+.. autoclass:: filterknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/amapknife.txt

+:class:`knife.active.mapknife` --- Actively evaluated mapping knife
+===================================================================
+
+.. module:: knife.active
+
+.. autoclass:: mapknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/amathknife.txt

+:class:`knife.active.mathknife` --- Actively evaluated mathing knife
+====================================================================
+
+.. module:: knife.active
+
+.. autoclass:: mathknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/aorderknife.txt

+:class:`knife.active.orderknife` --- Actively evaluated ordering knife
+======================================================================
+
+.. module:: knife.active
+
+.. autoclass:: orderknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/areduceknife.txt

+:class:`knife.active.reduceknife` --- Actively evaluated reducing knife
+=======================================================================
+
+.. module:: knife.active
+
+.. autoclass:: reduceknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/arepeatknife.txt

+:class:`knife.active.repeatknife` --- Actively evaluated repeating knife
+========================================================================
+
+.. module:: knife.active
+
+.. autoclass:: repeatknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/asliceknife.txt

+:class:`knife.active.sliceknife` --- Actively evaluated slicing knife
+=====================================================================
+
+.. module:: knife.active
+
+.. autoclass:: sliceknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/index.txt

+.. knife documentation master file, created by
+   sphinx-quickstart on Wed Apr 11 00:32:47 2012.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+*knife* Documentation
+#####################
+
+:mod:`knife` is a powerful `Python <http://docs.python.org/>`_ multitool
+loosely inspired by `Underscore.js <http://documentcloud.github.com/underscore/>`_
+but remixed for maximum `pythonicity <http://docs.python.org/glossary.html#term-pythonic>`_. 
+
+:mod:`knife` concentrates power that is normally dispersed across the entire Python
+universe in one convenient shrink-wrapped package.
+
+Vitals
+======
+
+:mod:`knife` works with CPython 2.6, 2.7, 3.1. and 3.2 and PyPy 1.8.
+
+:mod:`knife` documentation is at http://readthedocs.org/docs/knife/en/latest/ or
+http://packages.python.org/knife/
+
+Installation
+============
+
+Install :mod:`knife` with `pip <http://www.pip-installer.org/en/latest/index.html>`_...::
+
+  $ pip install knife
+  [... possibly exciting stuff happening ...]
+  Successfully installed knife
+  
+...or `easy_install <http://packages.python.org/distribute/>`_...::
+
+  $ easy_install knife
+  [... possibly exciting stuff happening ...]
+  Finished processing dependencies for knife
+  
+...or old school by downloading :mod:`knife` from http://pypi.python.org/pypi/knife/::
+
+  $ python setup.py install
+  [... possibly exciting stuff happening ...]
+  Finished processing dependencies for knife
+
+Development
+===========
+
+ * Public repository: https://bitbucket.org/lcrees/knife.
+ * Mirror: https://github.com/kwarterthieves/knife/
+ * Issue tracker: https://bitbucket.org/lcrees/knife/issues
+ * License: `BSD <http://www.opensource.org/licenses/bsd-license.php>`_
+
+3 second *knife*
+================
+
+Things go in:
+
+  >>> from knife import __
+  >>> gauntlet = __(5, 4, 3, 2, 1)
+  
+Things get knifed:
+
+  >>> gauntlet.initial().rest().slice(1, 2).last()
+  knife.lazy.lazyknife ([IN: ([3]) => WORK: ([]) => HOLD: ([]) => OUT: ([3])])
+
+Things come out:
+
+  >>> gauntlet.get()
+  3
+
+Slightly more *knife*
+=====================
+
+:mod:`knife` has 40 plus :term:`method`\s that can be `chained <http://en.wikipedia.org/
+wiki/Fluent_interface>`_ into pipelines...
+
+contrived example:
+^^^^^^^^^^^^^^^^^^
+
+  >>> __(5, 4, 3, 2, 1).initial().rest().slice(1, 2).last().get()
+  3
+
+...or used :term:`object`\-oriented style.
+
+contrived example:
+^^^^^^^^^^^^^^^^^^
+
+  >>> from knife import knife
+  >>> oo = knife(5, 4, 3, 2, 1)
+  >>> oo.initial()
+  knife.active.activeknife ([IN: ([5, 4, 3, 2, 1]) => WORK: ([]) => HOLD: ([]) => OUT: ([5, 4, 3, 2])])
+  >>> oo.rest()
+  knife.active.activeknife ([IN: ([5, 4, 3, 2]) => WORK: ([]) => HOLD: ([]) => OUT: ([4, 3, 2])])
+  >>> oo.slice(1, 2)
+  knife.active.activeknife ([IN: ([4, 3, 2]) => WORK: ([]) => HOLD: ([]) => OUT: ([3])])
+  >>> oo.last()
+  knife.active.activeknife ([IN: ([3]) => WORK: ([]) => HOLD: ([]) => OUT: ([3])])
+  >>> oo.get()
+  3
+  
+A :mod:`knife` :term:`object` can roll its current state back to previous states
+like snapshots of immediately preceding operations, a baseline snapshot, or even 
+a snapshot of the original arguments.
+
+contrived example:
+^^^^^^^^^^^^^^^^^^
+  
+  >>> undone = __(1, 2, 3).prepend(1, 2, 3, 4, 5, 6)
+  >>> undone.peek()
+  [1, 2, 3, 4, 5, 6, 1, 2, 3]
+  >>> undone.append(1).undo().peek()
+  [1, 2, 3, 4, 5, 6, 1, 2, 3]
+  >>> undone.append(1).append(2).undo(2).peek()
+  [1, 2, 3, 4, 5, 6, 1, 2, 3]
+  >>> undone.snapshot().append(1).append(2).baseline().peek()
+  [1, 2, 3, 4, 5, 6, 1, 2, 3]
+  >>> undone.original().peek()
+  [1, 2, 3]
+
+:mod:`knife` knives come in two flavors: :mod:`active` and :mod:`lazy`.
+:mod:`active.knife` :term:`object`\s evaluate the result of calling a
+:term:`method` immediately after the call. Calling the same :term:`method` with
+a :mod:`lazy.knife` :term:`object` only yields results when it is iterated over
+or :meth:`knife.lazy.lazyknife.get` is called to get results.
+  
+:class:`knife.lazy.lazyknife` combines all :mod:`knife` methods in one
+:mod:`knife` class:
+
+  >>> from knife import lazyknife
+
+It can be imported under its *dunderscore* (:class:`knife.__`) alias.
+
+  >>> from knife import __  
+  
+:class:`knife.active.activeknife` also combines every :mod:`knife` method in one
+combo :mod:`knife` :term:`class`:
+
+  >>> from knife import activeknife
+
+It can be imported under its :class:`knife.knife` alias:
+ 
+  >>> from knife import knife
+
+:mod:`knife` :term:`method`\s are available in more focused :term:`class`\es
+that group related :term:`method`\s together. These :term:`class`\es can also be
+chained together into pipelines.
+
+contrived example:
+^^^^^^^^^^^^^^^^^^
+
+  >>> from knife.active import mathknife, reduceknife
+  >>> one = mathknife(10, 5, 100, 2, 1000)
+  >>> two = reduceknife()
+  >>> one.minmax().pipe(two).merge().back().min().get()
+  2
+  >>> one.original().minmax().pipe(two).merge().back().max().get()
+  1000
+  >>> one.original().minmax().pipe(two).merge().back().sum().get()
+  1002
+
+Lazy knives
+===========
+
+.. toctree::
+   :maxdepth: 2
+
+   lazyknife
+   lcmpknife
+   lfilterknife
+   lmapknife
+   lmathknife
+   lorderknife
+   lreduceknife
+   lrepeatknife
+   lsliceknife
+
+Active knives
+=============
+
+.. toctree::
+   :maxdepth: 2
+
+   activeknife
+   acmpknife
+   afilterknife
+   amapknife
+   amathknife
+   aorderknife
+   areduceknife
+   arepeatknife
+   asliceknife
+
+indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`

File docs/_build/html/_sources/lazyknife.txt

+:class:`knife.lazy.lazyknife` --- Lazier evaluated combo knife
+==============================================================
+
+.. module:: knife.lazy
+
+.. autoclass:: lazyknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lcmpknife.txt

+:class:`knife.lazy.cmpknife` --- Lazier evaluated comparing knife
+=================================================================
+
+.. module:: knife.lazy
+    
+.. autoclass:: cmpknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lfilterknife.txt

+:class:`knife.lazy.filterknife` --- Lazier evaluated filtering knife
+====================================================================
+
+.. module:: knife.lazy
+
+.. autoclass:: filterknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lmapknife.txt

+:class:`knife.lazy.mapknife` --- Lazier evaluated mapping knife
+===============================================================
+
+.. module:: knife.lazy
+
+.. autoclass:: mapknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lmathknife.txt

+:class:`knife.lazy.mathknife` --- Lazier evaluated mathing knife
+================================================================
+
+.. module:: knife.lazy
+
+.. autoclass:: mathknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lorderknife.txt

+:class:`knife.lazy.orderknife` --- Lazier evaluated ordering knife
+================================================================== 
+
+.. module:: knife.lazy
+
+.. autoclass:: orderknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lreduceknife.txt

+:class:`knife.lazy.reduceknife` --- Lazier evaluated reducing knife
+===================================================================
+
+.. module:: knife.lazy
+
+.. autoclass:: reduceknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lrepeatknife.txt

+:class:`knife.lazy.repeatknife` --- Lazier evaluated repeating knife
+====================================================================
+
+.. module:: knife.lazy
+
+.. autoclass:: repeatknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, snapshots=5)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_sources/lsliceknife.txt

+:class:`knife.lazy.sliceknife` --- Lazier evaluated slicing knife
+=================================================================
+
+.. module:: knife.lazy
+
+.. autoclass:: sliceknife
+    :inherited-members:
+    
+    .. automethod:: __init__(*things, **kw)
+    .. automethod:: __len__()
+    .. automethod:: __iter__()

File docs/_build/html/_static/ajax-loader.gif

Added
New image

File docs/_build/html/_static/alert_info_32.png

Added
New image

File docs/_build/html/_static/alert_warning_32.png

Added
New image

File docs/_build/html/_static/basic.css

+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    width: 170px;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    width: 30px;
+}
+
+img {
+    border: 0;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li div.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.field-list ul {
+    padding-left: 1em;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px 7px 0 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px 7px 0 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+div.admonition dl {
+    margin-bottom: 0;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd p {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dt:target, .highlighted {
+    background-color: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.refcount {
+    color: #060;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+td.linenos pre {
+    padding: 5px 0px;
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    margin-left: 0.5em;
+}
+
+table.highlighttable td {
+    padding: 0 0.5em 0 0.5em;
+}
+
+tt.descname {
+    background-color: transparent;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+
+tt.descclassname {
+    background-color: transparent;
+}
+
+tt.xref, a tt {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}

File docs/_build/html/_static/bg-page.png

Added
New image

File docs/_build/html/_static/bullet_orange.png

Added
New image

File docs/_build/html/_static/comment-bright.png

Added
New image

File docs/_build/html/_static/comment-close.png

Added
New image

File docs/_build/html/_static/comment.png

Added
New image

File docs/_build/html/_static/doctools.js

+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ */
+jQuery.urldecode = function(x) {
+  return decodeURIComponent(x).replace(/\+/g, ' ');
+}
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s == 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * small function to check if an array contains
+ * a given item.
+ */
+jQuery.contains = function(arr, item) {
+  for (var i = 0; i < arr.length; i++) {
+    if (arr[i] == item)
+      return true;
+  }
+  return false;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node) {
+    if (node.nodeType == 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
+        var span = document.createElement("span");
+        span.className = className;
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this);
+      });
+    }
+  }
+  return this.each(function() {
+    highlight(this);
+  });
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated == 'undefined')
+      return string;
+    return (typeof translated == 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated == 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) == 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this == '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});

File docs/_build/html/_static/down-pressed.png

Added
New image

File docs/_build/html/_static/down.png

Added
New image

File docs/_build/html/_static/file.png

Added
New image

File docs/_build/html/_static/haiku.css

+/*
+ * haiku.css_t
+ * ~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- haiku theme.
+ *
+ * Adapted from http://haiku-os.org/docs/Haiku-doc.css.
+ * Original copyright message:
+ *
+ *     Copyright 2008-2009, Haiku. All rights reserved.
+ *     Distributed under the terms of the MIT License.
+ *
+ *     Authors:
+ *              Francois Revol <revol@free.fr>
+ *              Stephan Assmus <superstippi@gmx.de>
+ *              Braden Ewing <brewin@gmail.com>
+ *              Humdinger <humdingerb@gmail.com>
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+html {
+    margin: 0px;
+    padding: 0px;
+    background: #FFF url(bg-page.png) top left repeat-x;
+}
+
+body {
+    line-height: 1.5;
+    margin: auto;
+    padding: 0px;
+    font-family: "DejaVu Sans", Arial, Helvetica, sans-serif;
+    min-width: 59em;
+    max-width: 70em;
+    color: #333333;
+}
+
+div.footer {
+    padding: 8px;
+    font-size: 11px;
+    text-align: center;
+    letter-spacing: 0.5px;
+}
+
+/* link colors and text decoration */
+
+a:link {
+    font-weight: bold;
+    text-decoration: none;
+    color: #dc3c01;
+}
+
+a:visited {
+    font-weight: bold;
+    text-decoration: none;
+    color: #892601;
+}
+
+a:hover, a:active {
+    text-decoration: underline;
+    color: #ff4500;
+}
+
+/* Some headers act as anchors, don't give them a hover effect */
+
+h1 a:hover, a:active {
+    text-decoration: none;
+    color: #0c3762;
+}
+
+h2 a:hover, a:active {
+    text-decoration: none;
+    color: #0c3762;
+}
+
+h3 a:hover, a:active {
+    text-decoration: none;
+    color: #0c3762;
+}
+
+h4 a:hover, a:active {
+    text-decoration: none;
+    color: #0c3762;
+}
+
+a.headerlink {
+    color: #a7ce38;
+    padding-left: 5px;
+}
+
+a.headerlink:hover {
+    color: #a7ce38;
+}
+
+/* basic text elements */
+
+div.content {
+    margin-top: 20px;
+    margin-left: 40px;
+    margin-right: 40px;
+    margin-bottom: 50px;
+    font-size: 0.9em;
+}
+
+/* heading and navigation */
+
+div.header {
+    position: relative;
+    left: 0px;
+    top: 0px;
+    height: 85px;
+    /* background: #eeeeee; */
+    padding: 0 40px;
+}
+div.header h1 {
+    font-size: 1.6em;
+    font-weight: normal;
+    letter-spacing: 1px;
+    color: #0c3762;
+    border: 0;
+    margin: 0;
+    padding-top: 15px;
+}
+div.header h1 a {
+    font-weight: normal;
+    color: #0c3762;
+}
+div.header h2 {
+    font-size: 1.3em;
+    font-weight: normal;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    color: #aaa;
+    border: 0;
+    margin-top: -3px;
+    padding: 0;
+}
+
+div.header img.rightlogo {
+    float: right;
+}
+
+
+div.title {
+    font-size: 1.3em;
+    font-weight: bold;
+    color: #0c3762;
+    border-bottom: dotted thin #e0e0e0;
+    margin-bottom: 25px;
+}
+div.topnav {
+    /* background: #e0e0e0; */
+}
+div.topnav p {
+    margin-top: 0;
+    margin-left: 40px;
+    margin-right: 40px;
+    margin-bottom: 0px;
+    text-align: right;
+    font-size: 0.8em;
+}
+div.bottomnav {
+    background: #eeeeee;
+}
+div.bottomnav p {
+    margin-right: 40px;
+    text-align: right;
+    font-size: 0.8em;
+}
+
+a.uplink {
+    font-weight: normal;
+}
+
+
+/* contents box */
+
+table.index {
+    margin: 0px 0px 30px 30px;
+    padding: 1px;
+    border-width: 1px;
+    border-style: dotted;
+    border-color: #e0e0e0;
+}
+table.index tr.heading {
+    background-color: #e0e0e0;
+    text-align: center;
+    font-weight: bold;
+    font-size: 1.1em;
+}
+table.index tr.index {
+    background-color: #eeeeee;
+}
+table.index td {
+    padding: 5px 20px;
+}
+
+table.index a:link, table.index a:visited {
+    font-weight: normal;
+    text-decoration: none;
+    color: #dc3c01;
+}
+table.index a:hover, table.index a:active {
+    text-decoration: underline;
+    color: #ff4500;
+}
+
+
+/* Haiku User Guide styles and layout */
+
+/* Rounded corner boxes */
+/* Common declarations */
+div.admonition {
+    -webkit-border-radius: 10px;
+    -khtml-border-radius: 10px;
+    -moz-border-radius: 10px;
+    border-radius: 10px;
+    border-style: dotted;
+    border-width: thin;
+    border-color: #dcdcdc;
+    padding: 10px 15px 10px 15px;
+    margin-bottom: 15px;
+    margin-top: 15px;
+}
+div.note {
+    padding: 10px 15px 10px 80px;
+    background: #e4ffde url(alert_info_32.png) 15px 15px no-repeat;
+    min-height: 42px;
+}
+div.warning {
+    padding: 10px 15px 10px 80px;
+    background: #fffbc6 url(alert_warning_32.png) 15px 15px no-repeat;
+    min-height: 42px;
+}
+div.seealso {
+    background: #e4ffde;
+}
+
+/* More layout and styles */
+h1 {
+    font-size: 1.3em;
+    font-weight: bold;
+    color: #0c3762;
+    border-bottom: dotted thin #e0e0e0;
+    margin-top: 30px;
+}
+
+h2 {
+    font-size: 1.2em;
+    font-weight: normal;
+    color: #0c3762;
+    border-bottom: dotted thin #e0e0e0;
+    margin-top: 30px;
+}
+
+h3 {
+    font-size: 1.1em;
+    font-weight: normal;
+    color: #0c3762;
+    margin-top: 30px;
+}
+
+h4 {
+    font-size: 1.0em;
+    font-weight: normal;
+    color: #0c3762;
+    margin-top: 30px;
+}
+
+p {
+    text-align: justify;
+}
+
+p.last {
+    margin-bottom: 0;
+}
+
+ol {
+    padding-left: 20px;
+}
+
+ul {
+    padding-left: 5px;
+    margin-top: 3px;
+}
+
+li {
+    line-height: 1.3;
+}
+
+div.content ul > li {
+    -moz-background-clip:border;
+    -moz-background-inline-policy:continuous;
+    -moz-background-origin:padding;
+    background: transparent url(bullet_orange.png) no-repeat scroll left 0.45em;
+    list-style-image: none;
+    list-style-type: none;
+    padding: 0 0 0 1.666em;
+    margin-bottom: 3px;
+}
+
+td {
+    vertical-align: top;
+}
+
+tt {
+    background-color: #e2e2e2;
+    font-size: 1.0em;
+    font-family: monospace;
+}
+
+pre {
+    border-color: #0c3762;
+    border-style: dotted;
+    border-width: thin;
+    margin: 0 0 12px 0;
+    padding: 0.8em;
+    background-color: #f0f0f0;
+}
+
+hr {
+    border-top: 1px solid #ccc;
+    border-bottom: 0;
+    border-right: 0;
+    border-left: 0;
+    margin-bottom: 10px;
+    margin-top: 20px;
+}
+
+/* printer only pretty stuff */
+@media print {
+    .noprint {
+        display: none;
+    }
+    /* for acronyms we want their definitions inlined at print time */
+    acronym[title]:after {
+        font-size: small;
+        content: " (" attr(title) ")";
+        font-style: italic;
+    }
+    /* and not have mozilla dotted underline */
+    acronym {
+        border: none;
+    }
+    div.topnav, div.bottomnav, div.header, table.index {
+        display: none;
+    }
+    div.content {
+        margin: 0px;
+        padding: 0px;
+    }
+    html {
+        background: #FFF;
+    }
+}
+
+.viewcode-back {
+    font-family: "DejaVu Sans", Arial, Helvetica, sans-serif;
+}
+
+div.viewcode-block:target {
+    background-color: #f4debf;
+    border-top: 1px solid #ac9;
+    border-bottom: 1px solid #ac9;
+    margin: -1px -12px;
+    padding: 0 12px;
+}

File docs/_build/html/_static/jquery.js

+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,