Bug 1337145 - Remove python components used for EME generation; r=glandium
authorMike Shal <mshal@mozilla.com>
Mon, 10 Apr 2017 13:40:03 -0400
changeset 402864 f04a9d6fc819cf90473b9e2f073485fc75ce818c
parent 402863 5579ec1531b5bbe1f8bbad23c9234aaef903b07f
child 402865 3738427d1f2f1bf1ac661cc97a9dedbb2a9da964
push id1490
push usermtabara@mozilla.com
push dateMon, 31 Jul 2017 14:08:16 +0000
treeherdermozilla-release@70e32e6bf15e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersglandium
bugs1337145
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1337145 - Remove python components used for EME generation; r=glandium MozReview-Commit-ID: G8OhcbStQkG
build/virtualenv_packages.txt
python/altgraph/MANIFEST.in
python/altgraph/PKG-INFO
python/altgraph/README.txt
python/altgraph/altgraph.egg-info/PKG-INFO
python/altgraph/altgraph.egg-info/SOURCES.txt
python/altgraph/altgraph.egg-info/dependency_links.txt
python/altgraph/altgraph.egg-info/top_level.txt
python/altgraph/altgraph.egg-info/zip-safe
python/altgraph/altgraph/Dot.py
python/altgraph/altgraph/Graph.py
python/altgraph/altgraph/GraphAlgo.py
python/altgraph/altgraph/GraphStat.py
python/altgraph/altgraph/GraphUtil.py
python/altgraph/altgraph/ObjectGraph.py
python/altgraph/altgraph/__init__.py
python/altgraph/altgraph_tests/__init__.py
python/altgraph/altgraph_tests/test_altgraph.py
python/altgraph/altgraph_tests/test_dot.py
python/altgraph/altgraph_tests/test_graph.py
python/altgraph/altgraph_tests/test_graphstat.py
python/altgraph/altgraph_tests/test_graphutil.py
python/altgraph/altgraph_tests/test_object_graph.py
python/altgraph/doc/Makefile
python/altgraph/doc/_build/doctrees/changelog.doctree
python/altgraph/doc/_build/doctrees/core.doctree
python/altgraph/doc/_build/doctrees/dot.doctree
python/altgraph/doc/_build/doctrees/environment.pickle
python/altgraph/doc/_build/doctrees/graph.doctree
python/altgraph/doc/_build/doctrees/graphalgo.doctree
python/altgraph/doc/_build/doctrees/graphstat.doctree
python/altgraph/doc/_build/doctrees/graphutil.doctree
python/altgraph/doc/_build/doctrees/index.doctree
python/altgraph/doc/_build/doctrees/license.doctree
python/altgraph/doc/_build/doctrees/objectgraph.doctree
python/altgraph/doc/_build/html/.buildinfo
python/altgraph/doc/_build/html/_sources/changelog.txt
python/altgraph/doc/_build/html/_sources/core.txt
python/altgraph/doc/_build/html/_sources/dot.txt
python/altgraph/doc/_build/html/_sources/graph.txt
python/altgraph/doc/_build/html/_sources/graphalgo.txt
python/altgraph/doc/_build/html/_sources/graphstat.txt
python/altgraph/doc/_build/html/_sources/graphutil.txt
python/altgraph/doc/_build/html/_sources/index.txt
python/altgraph/doc/_build/html/_sources/license.txt
python/altgraph/doc/_build/html/_sources/objectgraph.txt
python/altgraph/doc/_build/html/_static/ajax-loader.gif
python/altgraph/doc/_build/html/_static/basic.css
python/altgraph/doc/_build/html/_static/comment-bright.png
python/altgraph/doc/_build/html/_static/comment-close.png
python/altgraph/doc/_build/html/_static/comment.png
python/altgraph/doc/_build/html/_static/doctools.js
python/altgraph/doc/_build/html/_static/down-pressed.png
python/altgraph/doc/_build/html/_static/down.png
python/altgraph/doc/_build/html/_static/file.png
python/altgraph/doc/_build/html/_static/jquery.js
python/altgraph/doc/_build/html/_static/minus.png
python/altgraph/doc/_build/html/_static/nature.css
python/altgraph/doc/_build/html/_static/plus.png
python/altgraph/doc/_build/html/_static/pygments.css
python/altgraph/doc/_build/html/_static/searchtools.js
python/altgraph/doc/_build/html/_static/underscore.js
python/altgraph/doc/_build/html/_static/up-pressed.png
python/altgraph/doc/_build/html/_static/up.png
python/altgraph/doc/_build/html/_static/websupport.js
python/altgraph/doc/_build/html/changelog.html
python/altgraph/doc/_build/html/core.html
python/altgraph/doc/_build/html/dot.html
python/altgraph/doc/_build/html/genindex.html
python/altgraph/doc/_build/html/graph.html
python/altgraph/doc/_build/html/graphalgo.html
python/altgraph/doc/_build/html/graphstat.html
python/altgraph/doc/_build/html/graphutil.html
python/altgraph/doc/_build/html/index.html
python/altgraph/doc/_build/html/license.html
python/altgraph/doc/_build/html/objectgraph.html
python/altgraph/doc/_build/html/objects.inv
python/altgraph/doc/_build/html/py-modindex.html
python/altgraph/doc/_build/html/search.html
python/altgraph/doc/_build/html/searchindex.js
python/altgraph/doc/changelog.rst
python/altgraph/doc/conf.py
python/altgraph/doc/core.rst
python/altgraph/doc/dot.rst
python/altgraph/doc/graph.rst
python/altgraph/doc/graphalgo.rst
python/altgraph/doc/graphstat.rst
python/altgraph/doc/graphutil.rst
python/altgraph/doc/index.rst
python/altgraph/doc/license.rst
python/altgraph/doc/objectgraph.rst
python/altgraph/setup.cfg
python/altgraph/setup.py
python/bitstring/PKG-INFO
python/bitstring/README.txt
python/bitstring/bitstring.py
python/bitstring/doc/bitstring_manual.pdf
python/bitstring/release_notes.txt
python/bitstring/setup.py
python/bitstring/test/smalltestfile
python/bitstring/test/test.m1v
python/bitstring/test/test_bitarray.py
python/bitstring/test/test_bits.py
python/bitstring/test/test_bitstore.py
python/bitstring/test/test_bitstream.py
python/bitstring/test/test_bitstring.py
python/bitstring/test/test_constbitstream.py
python/eme/gen-eme-voucher.py
python/macholib/MANIFEST.in
python/macholib/PKG-INFO
python/macholib/README.txt
python/macholib/doc/MachO.rst
python/macholib/doc/MachoOGraph.rst
python/macholib/doc/MachoOStandalone.rst
python/macholib/doc/Makefile
python/macholib/doc/SymbolTable.rst
python/macholib/doc/_build/doctrees/MachO.doctree
python/macholib/doc/_build/doctrees/MachoOGraph.doctree
python/macholib/doc/_build/doctrees/MachoOStandalone.doctree
python/macholib/doc/_build/doctrees/SymbolTable.doctree
python/macholib/doc/_build/doctrees/changelog.doctree
python/macholib/doc/_build/doctrees/dyld.doctree
python/macholib/doc/_build/doctrees/dylib.doctree
python/macholib/doc/_build/doctrees/environment.pickle
python/macholib/doc/_build/doctrees/framework.doctree
python/macholib/doc/_build/doctrees/index.doctree
python/macholib/doc/_build/doctrees/license.doctree
python/macholib/doc/_build/doctrees/macho_o.doctree
python/macholib/doc/_build/doctrees/ptypes.doctree
python/macholib/doc/_build/doctrees/scripts.doctree
python/macholib/doc/_build/html/.buildinfo
python/macholib/doc/_build/html/MachO.html
python/macholib/doc/_build/html/MachoOGraph.html
python/macholib/doc/_build/html/MachoOStandalone.html
python/macholib/doc/_build/html/SymbolTable.html
python/macholib/doc/_build/html/_sources/MachO.txt
python/macholib/doc/_build/html/_sources/MachoOGraph.txt
python/macholib/doc/_build/html/_sources/MachoOStandalone.txt
python/macholib/doc/_build/html/_sources/SymbolTable.txt
python/macholib/doc/_build/html/_sources/changelog.txt
python/macholib/doc/_build/html/_sources/dyld.txt
python/macholib/doc/_build/html/_sources/dylib.txt
python/macholib/doc/_build/html/_sources/framework.txt
python/macholib/doc/_build/html/_sources/index.txt
python/macholib/doc/_build/html/_sources/license.txt
python/macholib/doc/_build/html/_sources/macho_o.txt
python/macholib/doc/_build/html/_sources/ptypes.txt
python/macholib/doc/_build/html/_sources/scripts.txt
python/macholib/doc/_build/html/_static/ajax-loader.gif
python/macholib/doc/_build/html/_static/basic.css
python/macholib/doc/_build/html/_static/comment-bright.png
python/macholib/doc/_build/html/_static/comment-close.png
python/macholib/doc/_build/html/_static/comment.png
python/macholib/doc/_build/html/_static/doctools.js
python/macholib/doc/_build/html/_static/down-pressed.png
python/macholib/doc/_build/html/_static/down.png
python/macholib/doc/_build/html/_static/file.png
python/macholib/doc/_build/html/_static/jquery.js
python/macholib/doc/_build/html/_static/minus.png
python/macholib/doc/_build/html/_static/nature.css
python/macholib/doc/_build/html/_static/plus.png
python/macholib/doc/_build/html/_static/pygments.css
python/macholib/doc/_build/html/_static/searchtools.js
python/macholib/doc/_build/html/_static/underscore.js
python/macholib/doc/_build/html/_static/up-pressed.png
python/macholib/doc/_build/html/_static/up.png
python/macholib/doc/_build/html/_static/websupport.js
python/macholib/doc/_build/html/changelog.html
python/macholib/doc/_build/html/dyld.html
python/macholib/doc/_build/html/dylib.html
python/macholib/doc/_build/html/framework.html
python/macholib/doc/_build/html/genindex.html
python/macholib/doc/_build/html/index.html
python/macholib/doc/_build/html/license.html
python/macholib/doc/_build/html/macho_o.html
python/macholib/doc/_build/html/objects.inv
python/macholib/doc/_build/html/ptypes.html
python/macholib/doc/_build/html/py-modindex.html
python/macholib/doc/_build/html/scripts.html
python/macholib/doc/_build/html/search.html
python/macholib/doc/_build/html/searchindex.js
python/macholib/doc/changelog.rst
python/macholib/doc/conf.py
python/macholib/doc/dyld.rst
python/macholib/doc/dylib.rst
python/macholib/doc/framework.rst
python/macholib/doc/index.rst
python/macholib/doc/license.rst
python/macholib/doc/macho_o.rst
python/macholib/doc/ptypes.rst
python/macholib/doc/scripts.rst
python/macholib/macholib.egg-info/PKG-INFO
python/macholib/macholib.egg-info/SOURCES.txt
python/macholib/macholib.egg-info/dependency_links.txt
python/macholib/macholib.egg-info/entry_points.txt
python/macholib/macholib.egg-info/requires.txt
python/macholib/macholib.egg-info/top_level.txt
python/macholib/macholib.egg-info/zip-safe
python/macholib/macholib/MachO.py
python/macholib/macholib/MachOGraph.py
python/macholib/macholib/MachOStandalone.py
python/macholib/macholib/SymbolTable.py
python/macholib/macholib/__init__.py
python/macholib/macholib/__main__.py
python/macholib/macholib/_cmdline.py
python/macholib/macholib/dyld.py
python/macholib/macholib/dylib.py
python/macholib/macholib/framework.py
python/macholib/macholib/itergraphreport.py
python/macholib/macholib/mach_o.py
python/macholib/macholib/macho_dump.py
python/macholib/macholib/macho_find.py
python/macholib/macholib/macho_standalone.py
python/macholib/macholib/ptypes.py
python/macholib/macholib/util.py
python/macholib/macholib_tests/__init__.py
python/macholib/macholib_tests/binaries/src/build.py
python/macholib/macholib_tests/test_MachO.py
python/macholib/macholib_tests/test_MachOGraph.py
python/macholib/macholib_tests/test_MachOStandalone.py
python/macholib/macholib_tests/test_SymbolTable.py
python/macholib/macholib_tests/test_command_line.py
python/macholib/macholib_tests/test_dyld.py
python/macholib/macholib_tests/test_dylib.py
python/macholib/macholib_tests/test_framework.py
python/macholib/macholib_tests/test_itergraphreport.py
python/macholib/macholib_tests/test_mach_o.py
python/macholib/macholib_tests/test_ptypes.py
python/macholib/setup.cfg
python/macholib/setup.py
python/moz.build
--- a/build/virtualenv_packages.txt
+++ b/build/virtualenv_packages.txt
@@ -1,9 +1,8 @@
-altgraph.pth:python/altgraph
 marionette_driver.pth:testing/marionette/client
 marionette_harness.pth:testing/marionette/harness
 browsermobproxy.pth:testing/marionette/harness/marionette_harness/runner/mixins/browsermob-proxy-py
 six.pth:testing/web-platform/tests/tools/six
 wptserve.pth:testing/web-platform/tests/tools/wptserve
 blessings.pth:python/blessings
 configobj.pth:python/configobj
 jsmin.pth:python/jsmin
@@ -11,33 +10,31 @@ mach.pth:python/mach
 mozbuild.pth:python/mozbuild
 mozversioncontrol.pth:python/mozversioncontrol
 mozlint.pth:python/mozlint
 pymake.pth:build/pymake
 optional:setup.py:python/psutil:build_ext:--inplace
 optional:psutil.pth:python/psutil
 which.pth:python/which
 ply.pth:other-licenses/ply/
-macholib.pth:python/macholib
 mock.pth:python/mock-1.0.0
 py.pth:python/py
 pytest.pth:python/pytest
 mozilla.pth:build
 mozilla.pth:config
 mozilla.pth:xpcom/typelib/xpt/tools
 mozilla.pth:dom/bindings
 mozilla.pth:dom/bindings/parser
 mozilla.pth:layout/tools/reftest
 moztreedocs.pth:tools/docs
 packages.txt:testing/mozbase/packages.txt
 objdir:build
 gyp.pth:media/webrtc/trunk/tools/gyp/pylib
 pyasn1.pth:python/pyasn1
 pyasn1_modules.pth:python/pyasn1-modules
-bitstring.pth:python/bitstring
 redo.pth:python/redo
 requests.pth:python/requests
 rsa.pth:python/rsa
 futures.pth:python/futures
 ecc.pth:python/PyECC
 xpcshell.pth:testing/xpcshell
 pyyaml.pth:python/pyyaml/lib
 pytoml.pth:python/pytoml
deleted file mode 100644
--- a/python/altgraph/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-include ReadMe.txt
-include *.txt MANIFEST.in *.py
-graft doc
-graft doc/_static
-graft doc/_templates
-graft altgraph_tests
-global-exclude .DS_Store
-global-exclude *.pyc
-global-exclude *.so
deleted file mode 100644
--- a/python/altgraph/PKG-INFO
+++ /dev/null
@@ -1,216 +0,0 @@
-Metadata-Version: 1.1
-Name: altgraph
-Version: 0.12
-Summary: Python graph (network) package
-Home-page: http://packages.python.org/altgraph
-Author: Ronald Oussoren
-Author-email: ronaldoussoren@mac.com
-License: MIT
-Download-URL: http://pypi.python.org/pypi/altgraph
-Description: altgraph is a fork of graphlib: a graph (network) package for constructing
-        graphs, BFS and DFS traversals, topological sort, shortest paths, etc. with
-        graphviz output.
-        
-        altgraph includes some additional usage of Python 2.6+ features and
-        enhancements related to modulegraph and macholib.
-        
-        
-        Release history
-        ===============
-        
-        0.12
-        ----
-        
-        - Added ``ObjectGraph.edgeData`` to retrieve the edge data
-          from a specific edge.
-        
-        - Added ``AltGraph.update_edge_data`` and ``ObjectGraph.updateEdgeData``
-          to update the data associated with a graph edge.
-        
-        0.11
-        ----
-        
-        - Stabilize the order of elements in dot file exports,
-          patch from bitbucket user 'pombredanne'.
-        
-        - Tweak setup.py file to remove dependency on distribute (but
-          keep the dependency on setuptools)
-        
-        
-        0.10.2
-        ------
-        
-        - There where no classifiers in the package metadata due to a bug
-          in setup.py
-        
-        0.10.1
-        ------
-        
-        This is a bugfix release
-        
-        Bug fixes:
-        
-        - Issue #3: The source archive contains a README.txt
-          while the setup file refers to ReadMe.txt.
-        
-          This is caused by a misfeature in distutils, as a
-          workaround I've renamed ReadMe.txt to README.txt
-          in the source tree and setup file.
-        
-        
-        0.10
-        -----
-        
-        This is a minor feature release
-        
-        Features:
-        
-        - Do not use "2to3" to support Python 3.
-        
-          As a side effect of this altgraph now supports
-          Python 2.6 and later, and no longer supports
-          earlier releases of Python.
-        
-        - The order of attributes in the Dot output
-          is now always alphabetical.
-        
-          With this change the output will be consistent
-          between runs and Python versions.
-        
-        0.9
-        ---
-        
-        This is a minor bugfix release
-        
-        Features:
-        
-        - Added ``altgraph.ObjectGraph.ObjectGraph.nodes``, a method
-          yielding all nodes in an object graph.
-        
-        Bugfixes:
-        
-        - The 0.8 release didn't work with py2app when using
-          python 3.x.
-        
-        
-        0.8
-        -----
-        
-        This is a minor feature release. The major new feature
-        is a extensive set of unittests, which explains almost
-        all other changes in this release.
-        
-        Bugfixes:
-        
-        - Installing failed with Python 2.5 due to using a distutils
-          class that isn't available in that version of Python
-          (issue #1 on the issue tracker)
-        
-        - ``altgraph.GraphStat.degree_dist`` now actually works
-        
-        - ``altgraph.Graph.add_edge(a, b, create_nodes=False)`` will
-          no longer create the edge when one of the nodes doesn't
-          exist.
-        
-        - ``altgraph.Graph.forw_topo_sort`` failed for some sparse graphs.
-        
-        - ``altgraph.Graph.back_topo_sort`` was completely broken in
-          previous releases.
-        
-        - ``altgraph.Graph.forw_bfs_subgraph`` now actually works.
-        
-        - ``altgraph.Graph.back_bfs_subgraph`` now actually works.
-        
-        - ``altgraph.Graph.iterdfs`` now returns the correct result
-          when the ``forward`` argument is ``False``.
-        
-        - ``altgraph.Graph.iterdata`` now returns the correct result
-          when the ``forward`` argument is ``False``.
-        
-        
-        Features:
-        
-        - The ``altgraph.Graph`` constructor now accepts an argument
-          that contains 2- and 3-tuples instead of requireing that
-          all items have the same size. The (optional) argument can now
-          also be any iterator.
-        
-        - ``altgraph.Graph.Graph.add_node`` has no effect when you
-          add a hidden node.
-        
-        - The private method ``altgraph.Graph._bfs`` is no longer
-          present.
-        
-        - The private method ``altgraph.Graph._dfs`` is no longer
-          present.
-        
-        - ``altgraph.ObjectGraph`` now has a ``__contains__`` methods,
-          which means you can use the ``in`` operator to check if a
-          node is part of a graph.
-        
-        - ``altgraph.GraphUtil.generate_random_graph`` will raise
-          ``GraphError`` instead of looping forever when it is
-          impossible to create the requested graph.
-        
-        - ``altgraph.Dot.edge_style`` raises ``GraphError`` when
-          one of the nodes is not present in the graph. The method
-          silently added the tail in the past, but without ensuring
-          a consistent graph state.
-        
-        - ``altgraph.Dot.save_img`` now works when the mode is
-          ``"neato"``.
-        
-        0.7.2
-        -----
-        
-        This is a minor bugfix release
-        
-        Bugfixes:
-        
-        - distutils didn't include the documentation subtree
-        
-        0.7.1
-        -----
-        
-        This is a minor feature release
-        
-        Features:
-        
-        - Documentation is now generated using `sphinx <http://pypi.python.org/pypi/sphinx>`_
-          and can be viewed at <http://packages.python.org/altgraph>.
-        
-        - The repository has moved to bitbucket
-        
-        - ``altgraph.GraphStat.avg_hops`` is no longer present, the function had no
-          implementation and no specified behaviour.
-        
-        - the module ``altgraph.compat`` is gone, which means altgraph will no
-          longer work with Python 2.3.
-        
-        
-        0.7.0
-        -----
-        
-        This is a minor feature release.
-        
-        Features:
-        
-        - Support for Python 3
-        
-        - It is now possible to run tests using 'python setup.py test'
-        
-          (The actual testsuite is still very minimal though)
-        
-Keywords: graph
-Platform: any
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Scientific/Engineering :: Mathematics
-Classifier: Topic :: Scientific/Engineering :: Visualization
deleted file mode 100644
--- a/python/altgraph/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-altgraph is a fork of graphlib: a graph (network) package for constructing
-graphs, BFS and DFS traversals, topological sort, shortest paths, etc. with
-graphviz output.
-
-altgraph includes some additional usage of Python 2.6+ features and
-enhancements related to modulegraph and macholib.
deleted file mode 100644
--- a/python/altgraph/altgraph.egg-info/PKG-INFO
+++ /dev/null
@@ -1,216 +0,0 @@
-Metadata-Version: 1.1
-Name: altgraph
-Version: 0.12
-Summary: Python graph (network) package
-Home-page: http://packages.python.org/altgraph
-Author: Ronald Oussoren
-Author-email: ronaldoussoren@mac.com
-License: MIT
-Download-URL: http://pypi.python.org/pypi/altgraph
-Description: altgraph is a fork of graphlib: a graph (network) package for constructing
-        graphs, BFS and DFS traversals, topological sort, shortest paths, etc. with
-        graphviz output.
-        
-        altgraph includes some additional usage of Python 2.6+ features and
-        enhancements related to modulegraph and macholib.
-        
-        
-        Release history
-        ===============
-        
-        0.12
-        ----
-        
-        - Added ``ObjectGraph.edgeData`` to retrieve the edge data
-          from a specific edge.
-        
-        - Added ``AltGraph.update_edge_data`` and ``ObjectGraph.updateEdgeData``
-          to update the data associated with a graph edge.
-        
-        0.11
-        ----
-        
-        - Stabilize the order of elements in dot file exports,
-          patch from bitbucket user 'pombredanne'.
-        
-        - Tweak setup.py file to remove dependency on distribute (but
-          keep the dependency on setuptools)
-        
-        
-        0.10.2
-        ------
-        
-        - There where no classifiers in the package metadata due to a bug
-          in setup.py
-        
-        0.10.1
-        ------
-        
-        This is a bugfix release
-        
-        Bug fixes:
-        
-        - Issue #3: The source archive contains a README.txt
-          while the setup file refers to ReadMe.txt.
-        
-          This is caused by a misfeature in distutils, as a
-          workaround I've renamed ReadMe.txt to README.txt
-          in the source tree and setup file.
-        
-        
-        0.10
-        -----
-        
-        This is a minor feature release
-        
-        Features:
-        
-        - Do not use "2to3" to support Python 3.
-        
-          As a side effect of this altgraph now supports
-          Python 2.6 and later, and no longer supports
-          earlier releases of Python.
-        
-        - The order of attributes in the Dot output
-          is now always alphabetical.
-        
-          With this change the output will be consistent
-          between runs and Python versions.
-        
-        0.9
-        ---
-        
-        This is a minor bugfix release
-        
-        Features:
-        
-        - Added ``altgraph.ObjectGraph.ObjectGraph.nodes``, a method
-          yielding all nodes in an object graph.
-        
-        Bugfixes:
-        
-        - The 0.8 release didn't work with py2app when using
-          python 3.x.
-        
-        
-        0.8
-        -----
-        
-        This is a minor feature release. The major new feature
-        is a extensive set of unittests, which explains almost
-        all other changes in this release.
-        
-        Bugfixes:
-        
-        - Installing failed with Python 2.5 due to using a distutils
-          class that isn't available in that version of Python
-          (issue #1 on the issue tracker)
-        
-        - ``altgraph.GraphStat.degree_dist`` now actually works
-        
-        - ``altgraph.Graph.add_edge(a, b, create_nodes=False)`` will
-          no longer create the edge when one of the nodes doesn't
-          exist.
-        
-        - ``altgraph.Graph.forw_topo_sort`` failed for some sparse graphs.
-        
-        - ``altgraph.Graph.back_topo_sort`` was completely broken in
-          previous releases.
-        
-        - ``altgraph.Graph.forw_bfs_subgraph`` now actually works.
-        
-        - ``altgraph.Graph.back_bfs_subgraph`` now actually works.
-        
-        - ``altgraph.Graph.iterdfs`` now returns the correct result
-          when the ``forward`` argument is ``False``.
-        
-        - ``altgraph.Graph.iterdata`` now returns the correct result
-          when the ``forward`` argument is ``False``.
-        
-        
-        Features:
-        
-        - The ``altgraph.Graph`` constructor now accepts an argument
-          that contains 2- and 3-tuples instead of requireing that
-          all items have the same size. The (optional) argument can now
-          also be any iterator.
-        
-        - ``altgraph.Graph.Graph.add_node`` has no effect when you
-          add a hidden node.
-        
-        - The private method ``altgraph.Graph._bfs`` is no longer
-          present.
-        
-        - The private method ``altgraph.Graph._dfs`` is no longer
-          present.
-        
-        - ``altgraph.ObjectGraph`` now has a ``__contains__`` methods,
-          which means you can use the ``in`` operator to check if a
-          node is part of a graph.
-        
-        - ``altgraph.GraphUtil.generate_random_graph`` will raise
-          ``GraphError`` instead of looping forever when it is
-          impossible to create the requested graph.
-        
-        - ``altgraph.Dot.edge_style`` raises ``GraphError`` when
-          one of the nodes is not present in the graph. The method
-          silently added the tail in the past, but without ensuring
-          a consistent graph state.
-        
-        - ``altgraph.Dot.save_img`` now works when the mode is
-          ``"neato"``.
-        
-        0.7.2
-        -----
-        
-        This is a minor bugfix release
-        
-        Bugfixes:
-        
-        - distutils didn't include the documentation subtree
-        
-        0.7.1
-        -----
-        
-        This is a minor feature release
-        
-        Features:
-        
-        - Documentation is now generated using `sphinx <http://pypi.python.org/pypi/sphinx>`_
-          and can be viewed at <http://packages.python.org/altgraph>.
-        
-        - The repository has moved to bitbucket
-        
-        - ``altgraph.GraphStat.avg_hops`` is no longer present, the function had no
-          implementation and no specified behaviour.
-        
-        - the module ``altgraph.compat`` is gone, which means altgraph will no
-          longer work with Python 2.3.
-        
-        
-        0.7.0
-        -----
-        
-        This is a minor feature release.
-        
-        Features:
-        
-        - Support for Python 3
-        
-        - It is now possible to run tests using 'python setup.py test'
-        
-          (The actual testsuite is still very minimal though)
-        
-Keywords: graph
-Platform: any
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Scientific/Engineering :: Mathematics
-Classifier: Topic :: Scientific/Engineering :: Visualization
deleted file mode 100644
--- a/python/altgraph/altgraph.egg-info/SOURCES.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-MANIFEST.in
-README.txt
-ReadMe.txt
-setup.cfg
-setup.py
-altgraph/Dot.py
-altgraph/Graph.py
-altgraph/GraphAlgo.py
-altgraph/GraphStat.py
-altgraph/GraphUtil.py
-altgraph/ObjectGraph.py
-altgraph/__init__.py
-altgraph.egg-info/PKG-INFO
-altgraph.egg-info/SOURCES.txt
-altgraph.egg-info/dependency_links.txt
-altgraph.egg-info/top_level.txt
-altgraph.egg-info/zip-safe
-altgraph_tests/__init__.py
-altgraph_tests/test_altgraph.py
-altgraph_tests/test_dot.py
-altgraph_tests/test_graph.py
-altgraph_tests/test_graphstat.py
-altgraph_tests/test_graphutil.py
-altgraph_tests/test_object_graph.py
-doc/Makefile
-doc/changelog.rst
-doc/conf.py
-doc/core.rst
-doc/dot.rst
-doc/graph.rst
-doc/graphalgo.rst
-doc/graphstat.rst
-doc/graphutil.rst
-doc/index.rst
-doc/license.rst
-doc/objectgraph.rst
-doc/_build/doctrees/changelog.doctree
-doc/_build/doctrees/core.doctree
-doc/_build/doctrees/dot.doctree
-doc/_build/doctrees/environment.pickle
-doc/_build/doctrees/graph.doctree
-doc/_build/doctrees/graphalgo.doctree
-doc/_build/doctrees/graphstat.doctree
-doc/_build/doctrees/graphutil.doctree
-doc/_build/doctrees/index.doctree
-doc/_build/doctrees/license.doctree
-doc/_build/doctrees/objectgraph.doctree
-doc/_build/html/.buildinfo
-doc/_build/html/changelog.html
-doc/_build/html/core.html
-doc/_build/html/dot.html
-doc/_build/html/genindex.html
-doc/_build/html/graph.html
-doc/_build/html/graphalgo.html
-doc/_build/html/graphstat.html
-doc/_build/html/graphutil.html
-doc/_build/html/index.html
-doc/_build/html/license.html
-doc/_build/html/objectgraph.html
-doc/_build/html/objects.inv
-doc/_build/html/py-modindex.html
-doc/_build/html/search.html
-doc/_build/html/searchindex.js
-doc/_build/html/_sources/changelog.txt
-doc/_build/html/_sources/core.txt
-doc/_build/html/_sources/dot.txt
-doc/_build/html/_sources/graph.txt
-doc/_build/html/_sources/graphalgo.txt
-doc/_build/html/_sources/graphstat.txt
-doc/_build/html/_sources/graphutil.txt
-doc/_build/html/_sources/index.txt
-doc/_build/html/_sources/license.txt
-doc/_build/html/_sources/objectgraph.txt
-doc/_build/html/_static/ajax-loader.gif
-doc/_build/html/_static/basic.css
-doc/_build/html/_static/comment-bright.png
-doc/_build/html/_static/comment-close.png
-doc/_build/html/_static/comment.png
-doc/_build/html/_static/doctools.js
-doc/_build/html/_static/down-pressed.png
-doc/_build/html/_static/down.png
-doc/_build/html/_static/file.png
-doc/_build/html/_static/jquery.js
-doc/_build/html/_static/minus.png
-doc/_build/html/_static/nature.css
-doc/_build/html/_static/plus.png
-doc/_build/html/_static/pygments.css
-doc/_build/html/_static/searchtools.js
-doc/_build/html/_static/underscore.js
-doc/_build/html/_static/up-pressed.png
-doc/_build/html/_static/up.png
-doc/_build/html/_static/websupport.js
\ No newline at end of file
deleted file mode 100644
--- a/python/altgraph/altgraph.egg-info/dependency_links.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-
deleted file mode 100644
--- a/python/altgraph/altgraph.egg-info/top_level.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-altgraph
deleted file mode 100644
--- a/python/altgraph/altgraph.egg-info/zip-safe
+++ /dev/null
@@ -1,1 +0,0 @@
-
deleted file mode 100644
--- a/python/altgraph/altgraph/Dot.py
+++ /dev/null
@@ -1,299 +0,0 @@
-'''
-altgraph.Dot - Interface to the dot language
-============================================
-
-The :py:mod:`~altgraph.Dot` module provides a simple interface to the
-file format used in the `graphviz <http://www.research.att.com/sw/tools/graphviz/>`_
-program. The module is intended to offload the most tedious part of the process
-(the **dot** file generation) while transparently exposing most of its features.
-
-To display the graphs or to generate image files the `graphviz <http://www.research.att.com/sw/tools/graphviz/>`_
-package needs to be installed on the system, moreover the :command:`dot` and :command:`dotty` programs must
-be accesible in the program path so that they can be ran from processes spawned
-within the module.
-
-Example usage
--------------
-
-Here is a typical usage::
-
-    from altgraph import Graph, Dot
-
-    # create a graph
-    edges = [ (1,2), (1,3), (3,4), (3,5), (4,5), (5,4) ]
-    graph = Graph.Graph(edges)
-
-    # create a dot representation of the graph
-    dot = Dot.Dot(graph)
-
-    # display the graph
-    dot.display()
-
-    # save the dot representation into the mydot.dot file
-    dot.save_dot(file_name='mydot.dot')
-
-    # save dot file as gif image into the graph.gif file
-    dot.save_img(file_name='graph', file_type='gif')
-
-Directed graph and non-directed graph
--------------------------------------
-
-Dot class can use for both directed graph and non-directed graph
-by passing ``graphtype`` parameter.
-
-Example::
-
-    # create directed graph(default)
-    dot = Dot.Dot(graph, graphtype="digraph")
-
-    # create non-directed graph
-    dot = Dot.Dot(graph, graphtype="graph")
-
-Customizing the output
-----------------------
-
-The graph drawing process may be customized by passing
-valid :command:`dot` parameters for the nodes and edges. For a list of all
-parameters see the `graphviz <http://www.research.att.com/sw/tools/graphviz/>`_
-documentation.
-
-Example::
-
-    # customizing the way the overall graph is drawn
-    dot.style(size='10,10', rankdir='RL', page='5, 5' , ranksep=0.75)
-
-    # customizing node drawing
-    dot.node_style(1, label='BASE_NODE',shape='box', color='blue' )
-    dot.node_style(2, style='filled', fillcolor='red')
-
-    # customizing edge drawing
-    dot.edge_style(1, 2, style='dotted')
-    dot.edge_style(3, 5, arrowhead='dot', label='binds', labelangle='90')
-    dot.edge_style(4, 5, arrowsize=2, style='bold')
-
-
-.. note::
-
-   dotty (invoked via :py:func:`~altgraph.Dot.display`) may not be able to
-   display all graphics styles. To verify the output save it to an image file
-   and look at it that way.
-
-Valid attributes
-----------------
-
-    - dot styles, passed via the :py:meth:`Dot.style` method::
-
-        rankdir = 'LR'   (draws the graph horizontally, left to right)
-        ranksep = number (rank separation in inches)
-
-    - node attributes, passed via the :py:meth:`Dot.node_style` method::
-
-        style = 'filled' | 'invisible' | 'diagonals' | 'rounded'
-        shape = 'box' | 'ellipse' | 'circle' | 'point' | 'triangle'
-
-    - edge attributes, passed via the :py:meth:`Dot.edge_style` method::
-
-        style     = 'dashed' | 'dotted' | 'solid' | 'invis' | 'bold'
-        arrowhead = 'box' | 'crow' | 'diamond' | 'dot' | 'inv' | 'none' | 'tee' | 'vee'
-        weight    = number (the larger the number the closer the nodes will be)
-
-    - valid `graphviz colors <http://www.research.att.com/~erg/graphviz/info/colors.html>`_
-
-    - for more details on how to control the graph drawing process see the
-      `graphviz reference <http://www.research.att.com/sw/tools/graphviz/refs.html>`_.
-'''
-import os
-import warnings
-
-from altgraph import GraphError
-
-
-class Dot(object):
-    '''
-    A  class providing a **graphviz** (dot language) representation
-    allowing a fine grained control over how the graph is being
-    displayed.
-
-    If the :command:`dot` and :command:`dotty` programs are not in the current system path
-    their location needs to be specified in the contructor.
-    '''
-
-    def __init__(self, graph=None, nodes=None, edgefn=None, nodevisitor=None, edgevisitor=None, name="G", dot='dot', dotty='dotty', neato='neato', graphtype="digraph"):
-        '''
-        Initialization.
-        '''
-        self.name, self.attr = name, {}
-
-        assert graphtype in ['graph', 'digraph']
-        self.type = graphtype
-
-        self.temp_dot = "tmp_dot.dot"
-        self.temp_neo = "tmp_neo.dot"
-
-        self.dot, self.dotty, self.neato = dot, dotty, neato
-
-        # self.nodes: node styles
-        # self.edges: edge styles
-        self.nodes, self.edges = {}, {}
-
-        if graph is not None and nodes is None:
-            nodes = graph
-        if graph is not None and edgefn is None:
-            def edgefn(node, graph=graph):
-                return graph.out_nbrs(node)
-        if nodes is None:
-            nodes = ()
-
-        seen = set()
-        for node in nodes:
-            if nodevisitor is None:
-                style = {}
-            else:
-                style = nodevisitor(node)
-            if style is not None:
-                self.nodes[node] = {}
-                self.node_style(node, **style)
-                seen.add(node)
-        if edgefn is not None:
-            for head in seen:
-                for tail in (n for n in edgefn(head) if n in seen):
-                    if edgevisitor is None:
-                        edgestyle = {}
-                    else:
-                        edgestyle = edgevisitor(head, tail)
-                    if edgestyle is not None:
-                        if head not in self.edges:
-                            self.edges[head] = {}
-                        self.edges[head][tail] = {}
-                        self.edge_style(head, tail, **edgestyle)
-
-    def style(self, **attr):
-        '''
-        Changes the overall style
-        '''
-        self.attr = attr
-
-    def display(self, mode='dot'):
-        '''
-        Displays the current graph via dotty
-        '''
-
-        if  mode == 'neato':
-            self.save_dot(self.temp_neo)
-            neato_cmd = "%s -o %s %s" % (self.neato, self.temp_dot, self.temp_neo)
-            os.system(neato_cmd)
-        else:
-            self.save_dot(self.temp_dot)
-
-        plot_cmd = "%s %s" % (self.dotty, self.temp_dot)
-        os.system(plot_cmd)
-
-    def node_style(self, node, **kwargs):
-        '''
-        Modifies a node style to the dot representation.
-        '''
-        if node not in self.edges:
-            self.edges[node] = {}
-        self.nodes[node] = kwargs
-
-    def all_node_style(self, **kwargs):
-        '''
-        Modifies all node styles
-        '''
-        for node in self.nodes:
-            self.node_style(node, **kwargs)
-
-    def edge_style(self, head, tail, **kwargs):
-        '''
-        Modifies an edge style to the dot representation.
-        '''
-        if tail not in self.nodes:
-            raise GraphError("invalid node %s" % (tail,))
-
-        try:
-            if tail not in self.edges[head]:
-                self.edges[head][tail]= {}
-            self.edges[head][tail] = kwargs
-        except KeyError:
-            raise GraphError("invalid edge  %s -> %s " % (head, tail) )
-
-    def iterdot(self):
-        # write graph title
-        if self.type == 'digraph':
-            yield 'digraph %s {\n' % (self.name,)
-        elif self.type == 'graph':
-            yield 'graph %s {\n' % (self.name,)
-
-        else:
-            raise GraphError("unsupported graphtype %s" % (self.type,))
-
-        # write overall graph attributes
-        for attr_name, attr_value in sorted(self.attr.items()):
-            yield '%s="%s";' % (attr_name, attr_value)
-        yield '\n'
-
-        # some reusable patterns
-        cpatt  = '%s="%s",'      # to separate attributes
-        epatt  = '];\n'          # to end attributes
-
-        # write node attributes
-        for node_name, node_attr in sorted(self.nodes.items()):
-            yield '\t"%s" [' % (node_name,)
-            for attr_name, attr_value in sorted(node_attr.items()):
-                yield cpatt % (attr_name, attr_value)
-            yield epatt
-
-        # write edge attributes
-        for head in sorted(self.edges):
-            for tail in sorted(self.edges[head]):
-                if self.type == 'digraph':
-                    yield '\t"%s" -> "%s" [' % (head, tail)
-                else:
-                    yield '\t"%s" -- "%s" [' % (head, tail)
-                for attr_name, attr_value in sorted(self.edges[head][tail].items()):
-                    yield cpatt % (attr_name, attr_value)
-                yield epatt
-
-        # finish file
-        yield '}\n'
-
-    def __iter__(self):
-        return self.iterdot()
-
-    def save_dot(self, file_name=None):
-        '''
-        Saves the current graph representation into a file
-        '''
-
-        if not file_name:
-            warnings.warn(DeprecationWarning, "always pass a file_name")
-            file_name = self.temp_dot
-
-        fp   = open(file_name, "w")
-        try:
-            for chunk in self.iterdot():
-                fp.write(chunk)
-        finally:
-            fp.close()
-
-    def save_img(self, file_name=None, file_type="gif", mode='dot'):
-        '''
-        Saves the dot file as an image file
-        '''
-
-        if not file_name:
-            warnings.warn(DeprecationWarning, "always pass a file_name")
-            file_name = "out"
-
-        if  mode == 'neato':
-            self.save_dot(self.temp_neo)
-            neato_cmd = "%s -o %s %s" % (self.neato, self.temp_dot, self.temp_neo)
-            os.system(neato_cmd)
-            plot_cmd = self.dot
-        else:
-            self.save_dot(self.temp_dot)
-            plot_cmd = self.dot
-
-        file_name  = "%s.%s" % (file_name, file_type)
-        create_cmd = "%s -T%s %s -o %s" % (plot_cmd, file_type, self.temp_dot, file_name)
-        os.system(create_cmd)
deleted file mode 100644
--- a/python/altgraph/altgraph/Graph.py
+++ /dev/null
@@ -1,677 +0,0 @@
-"""
-altgraph.Graph - Base Graph class
-=================================
-
-..
-  #--Version 2.1
-  #--Bob Ippolito October, 2004
-
-  #--Version 2.0
-  #--Istvan Albert June, 2004
-
-  #--Version 1.0
-  #--Nathan Denny, May 27, 1999
-"""
-
-from altgraph import GraphError
-from collections import deque
-
-class Graph(object):
-    """
-    The Graph class represents a directed graph with *N* nodes and *E* edges.
-
-    Naming conventions:
-
-    - the prefixes such as *out*, *inc* and *all* will refer to methods
-      that operate on the outgoing, incoming or all edges of that node.
-
-      For example: :py:meth:`inc_degree` will refer to the degree of the node
-      computed over the incoming edges (the number of neighbours linking to
-      the node).
-
-    - the prefixes such as *forw* and *back* will refer to the
-      orientation of the edges used in the method with respect to the node.
-
-      For example: :py:meth:`forw_bfs` will start at the node then use the outgoing
-      edges to traverse the graph (goes forward).
-    """
-
-    def __init__(self, edges=None):
-        """
-        Initialization
-        """
-
-        self.next_edge = 0
-        self.nodes, self.edges = {}, {}
-        self.hidden_edges, self.hidden_nodes = {}, {}
-
-        if edges is not None:
-            for item in edges:
-                if len(item) == 2:
-                    head, tail = item
-                    self.add_edge(head, tail)
-                elif len(item) == 3:
-                    head, tail, data = item
-                    self.add_edge(head, tail, data)
-                else:
-                    raise GraphError("Cannot create edge from %s"%(item,))
-
-
-    def __repr__(self):
-        return '<Graph: %d nodes, %d edges>' % (
-            self.number_of_nodes(), self.number_of_edges())
-
-    def add_node(self, node, node_data=None):
-        """
-        Adds a new node to the graph.  Arbitrary data can be attached to the
-        node via the node_data parameter.  Adding the same node twice will be
-        silently ignored.
-
-        The node must be a hashable value.
-        """
-        #
-        # the nodes will contain tuples that will store incoming edges,
-        # outgoing edges and data
-        #
-        # index 0 -> incoming edges
-        # index 1 -> outgoing edges
-
-        if node in self.hidden_nodes:
-            # Node is present, but hidden
-            return
-
-        if node not in self.nodes:
-            self.nodes[node] = ([], [], node_data)
-
-    def add_edge(self, head_id, tail_id, edge_data=1, create_nodes=True):
-        """
-        Adds a directed edge going from head_id to tail_id.
-        Arbitrary data can be attached to the edge via edge_data.
-        It may create the nodes if adding edges between nonexisting ones.
-
-        :param head_id: head node
-        :param tail_id: tail node
-        :param edge_data: (optional) data attached to the edge
-        :param create_nodes: (optional) creates the head_id or tail_id node in case they did not exist
-        """
-        # shorcut
-        edge = self.next_edge
-
-        # add nodes if on automatic node creation
-        if create_nodes:
-            self.add_node(head_id)
-            self.add_node(tail_id)
-
-        # update the corresponding incoming and outgoing lists in the nodes
-        # index 0 -> incoming edges
-        # index 1 -> outgoing edges
-
-        try:
-            self.nodes[tail_id][0].append(edge)
-            self.nodes[head_id][1].append(edge)
-        except KeyError:
-            raise GraphError('Invalid nodes %s -> %s' % (head_id, tail_id))
-
-        # store edge information
-        self.edges[edge] = (head_id, tail_id, edge_data)
-
-
-        self.next_edge += 1
-
-    def hide_edge(self, edge):
-        """
-        Hides an edge from the graph. The edge may be unhidden at some later
-        time.
-        """
-        try:
-            head_id, tail_id, edge_data = self.hidden_edges[edge] = self.edges[edge]
-            self.nodes[tail_id][0].remove(edge)
-            self.nodes[head_id][1].remove(edge)
-            del self.edges[edge]
-        except KeyError:
-            raise GraphError('Invalid edge %s' % edge)
-
-    def hide_node(self, node):
-        """
-        Hides a node from the graph.  The incoming and outgoing edges of the
-        node will also be hidden.  The node may be unhidden at some later time.
-        """
-        try:
-            all_edges = self.all_edges(node)
-            self.hidden_nodes[node] = (self.nodes[node], all_edges)
-            for edge in all_edges:
-                self.hide_edge(edge)
-            del self.nodes[node]
-        except KeyError:
-            raise GraphError('Invalid node %s' % node)
-
-    def restore_node(self, node):
-        """
-        Restores a previously hidden node back into the graph and restores
-        all of its incoming and outgoing edges.
-        """
-        try:
-            self.nodes[node], all_edges = self.hidden_nodes[node]
-            for edge in all_edges:
-                self.restore_edge(edge)
-            del self.hidden_nodes[node]
-        except KeyError:
-            raise GraphError('Invalid node %s' % node)
-
-    def restore_edge(self, edge):
-        """
-        Restores a previously hidden edge back into the graph.
-        """
-        try:
-            head_id, tail_id, data = self.hidden_edges[edge]
-            self.nodes[tail_id][0].append(edge)
-            self.nodes[head_id][1].append(edge)
-            self.edges[edge] = head_id, tail_id, data
-            del self.hidden_edges[edge]
-        except KeyError:
-            raise GraphError('Invalid edge %s' % edge)
-
-    def restore_all_edges(self):
-        """
-        Restores all hidden edges.
-        """
-        for edge in list(self.hidden_edges.keys()):
-            try:
-                self.restore_edge(edge)
-            except GraphError:
-                pass
-
-    def restore_all_nodes(self):
-        """
-        Restores all hidden nodes.
-        """
-        for node in list(self.hidden_nodes.keys()):
-            self.restore_node(node)
-
-    def __contains__(self, node):
-        """
-        Test whether a node is in the graph
-        """
-        return node in self.nodes
-
-    def edge_by_id(self, edge):
-        """
-        Returns the edge that connects the head_id and tail_id nodes
-        """
-        try:
-            head, tail, data =  self.edges[edge]
-        except KeyError:
-            head, tail = None, None
-            raise GraphError('Invalid edge %s' % edge)
-
-        return (head, tail)
-
-    def edge_by_node(self, head, tail):
-        """
-        Returns the edge that connects the head_id and tail_id nodes
-        """
-        for edge in self.out_edges(head):
-            if self.tail(edge) == tail:
-                return edge
-        return None
-
-    def number_of_nodes(self):
-        """
-        Returns the number of nodes
-        """
-        return len(self.nodes)
-
-    def number_of_edges(self):
-        """
-        Returns the number of edges
-        """
-        return len(self.edges)
-
-    def __iter__(self):
-        """
-        Iterates over all nodes in the graph
-        """
-        return iter(self.nodes)
-
-    def node_list(self):
-        """
-        Return a list of the node ids for all visible nodes in the graph.
-        """
-        return list(self.nodes.keys())
-
-    def edge_list(self):
-        """
-        Returns an iterator for all visible nodes in the graph.
-        """
-        return list(self.edges.keys())
-
-    def number_of_hidden_edges(self):
-        """
-        Returns the number of hidden edges
-        """
-        return len(self.hidden_edges)
-
-    def number_of_hidden_nodes(self):
-        """
-        Returns the number of hidden nodes
-        """
-        return len(self.hidden_nodes)
-
-    def hidden_node_list(self):
-        """
-        Returns the list with the hidden nodes
-        """
-        return list(self.hidden_nodes.keys())
-
-    def hidden_edge_list(self):
-        """
-        Returns a list with the hidden edges
-        """
-        return list(self.hidden_edges.keys())
-
-    def describe_node(self, node):
-        """
-        return node, node data, outgoing edges, incoming edges for node
-        """
-        incoming, outgoing, data = self.nodes[node]
-        return node, data, outgoing, incoming
-
-    def describe_edge(self, edge):
-        """
-        return edge, edge data, head, tail for edge
-        """
-        head, tail, data = self.edges[edge]
-        return edge, data, head, tail
-
-    def node_data(self, node):
-        """
-        Returns the data associated with a node
-        """
-        return self.nodes[node][2]
-
-    def edge_data(self, edge):
-        """
-        Returns the data associated with an edge
-        """
-        return self.edges[edge][2]
-
-    def update_edge_data(self, edge, edge_data):
-        """
-        Replace the edge data for a specific edge
-        """
-        self.edges[edge] = self.edges[edge][0:2] + (edge_data,)
-
-    def head(self, edge):
-        """
-        Returns the node of the head of the edge.
-        """
-        return self.edges[edge][0]
-
-    def tail(self, edge):
-        """
-        Returns node of the tail of the edge.
-        """
-        return self.edges[edge][1]
-
-    def out_nbrs(self, node):
-        """
-        List of nodes connected by outgoing edges
-        """
-        l = [self.tail(n) for n in self.out_edges(node)]
-        return l
-
-    def inc_nbrs(self, node):
-        """
-        List of nodes connected by incoming edges
-        """
-        l = [self.head(n) for n in self.inc_edges(node)]
-        return l
-
-    def all_nbrs(self, node):
-        """
-        List of nodes connected by incoming and outgoing edges
-        """
-        l = dict.fromkeys( self.inc_nbrs(node) + self.out_nbrs(node) )
-        return list(l)
-
-    def out_edges(self, node):
-        """
-        Returns a list of the outgoing edges
-        """
-        try:
-            return list(self.nodes[node][1])
-        except KeyError:
-            raise GraphError('Invalid node %s' % node)
-
-        return None
-
-    def inc_edges(self, node):
-        """
-        Returns a list of the incoming edges
-        """
-        try:
-            return list(self.nodes[node][0])
-        except KeyError:
-            raise GraphError('Invalid node %s' % node)
-
-        return None
-
-    def all_edges(self, node):
-        """
-        Returns a list of incoming and outging edges.
-        """
-        return set(self.inc_edges(node) + self.out_edges(node))
-
-    def out_degree(self, node):
-        """
-        Returns the number of outgoing edges
-        """
-        return len(self.out_edges(node))
-
-    def inc_degree(self, node):
-        """
-        Returns the number of incoming edges
-        """
-        return len(self.inc_edges(node))
-
-    def all_degree(self, node):
-        """
-        The total degree of a node
-        """
-        return self.inc_degree(node) + self.out_degree(node)
-
-    def _topo_sort(self, forward=True):
-        """
-        Topological sort.
-
-        Returns a list of nodes where the successors (based on outgoing and
-        incoming edges selected by the forward parameter) of any given node
-        appear in the sequence after that node.
-        """
-        topo_list = []
-        queue = deque()
-        indeg = {}
-
-        # select the operation that will be performed
-        if forward:
-            get_edges = self.out_edges
-            get_degree = self.inc_degree
-            get_next = self.tail
-        else:
-            get_edges = self.inc_edges
-            get_degree = self.out_degree
-            get_next = self.head
-
-        for node in self.node_list():
-            degree = get_degree(node)
-            if degree:
-                indeg[node] = degree
-            else:
-                queue.append(node)
-
-        while queue:
-            curr_node = queue.popleft()
-            topo_list.append(curr_node)
-            for edge in get_edges(curr_node):
-                tail_id = get_next(edge)
-                if tail_id in indeg:
-                    indeg[tail_id] -= 1
-                    if indeg[tail_id] == 0:
-                        queue.append(tail_id)
-
-        if len(topo_list) == len(self.node_list()):
-            valid = True
-        else:
-            # the graph has cycles, invalid topological sort
-            valid = False
-
-        return (valid, topo_list)
-
-    def forw_topo_sort(self):
-        """
-        Topological sort.
-
-        Returns a list of nodes where the successors (based on outgoing edges)
-        of any given node appear in the sequence after that node.
-        """
-        return self._topo_sort(forward=True)
-
-    def back_topo_sort(self):
-        """
-        Reverse topological sort.
-
-        Returns a list of nodes where the successors (based on incoming edges)
-        of any given node appear in the sequence after that node.
-        """
-        return self._topo_sort(forward=False)
-
-    def _bfs_subgraph(self, start_id, forward=True):
-        """
-        Private method creates a subgraph in a bfs order.
-
-        The forward parameter specifies whether it is a forward or backward
-        traversal.
-        """
-        if forward:
-            get_bfs  = self.forw_bfs
-            get_nbrs = self.out_nbrs
-        else:
-            get_bfs  = self.back_bfs
-            get_nbrs = self.inc_nbrs
-
-        g = Graph()
-        bfs_list = get_bfs(start_id)
-        for node in bfs_list:
-            g.add_node(node)
-
-        for node in bfs_list:
-            for nbr_id in get_nbrs(node):
-                g.add_edge(node, nbr_id)
-
-        return g
-
-    def forw_bfs_subgraph(self, start_id):
-        """
-        Creates and returns a subgraph consisting of the breadth first
-        reachable nodes based on their outgoing edges.
-        """
-        return self._bfs_subgraph(start_id, forward=True)
-
-    def back_bfs_subgraph(self, start_id):
-        """
-        Creates and returns a subgraph consisting of the breadth first
-        reachable nodes based on the incoming edges.
-        """
-        return self._bfs_subgraph(start_id, forward=False)
-
-    def iterdfs(self, start, end=None, forward=True):
-        """
-        Collecting nodes in some depth first traversal.
-
-        The forward parameter specifies whether it is a forward or backward
-        traversal.
-        """
-        visited, stack = set([start]), deque([start])
-
-        if forward:
-            get_edges = self.out_edges
-            get_next = self.tail
-        else:
-            get_edges = self.inc_edges
-            get_next = self.head
-
-        while stack:
-            curr_node = stack.pop()
-            yield curr_node
-            if curr_node == end:
-                break
-            for edge in sorted(get_edges(curr_node)):
-                tail = get_next(edge)
-                if tail not in visited:
-                    visited.add(tail)
-                    stack.append(tail)
-
-    def iterdata(self, start, end=None, forward=True, condition=None):
-        """
-        Perform a depth-first walk of the graph (as ``iterdfs``)
-        and yield the item data of every node where condition matches. The
-        condition callback is only called when node_data is not None.
-        """
-
-        visited, stack = set([start]), deque([start])
-
-        if forward:
-            get_edges = self.out_edges
-            get_next = self.tail
-        else:
-            get_edges = self.inc_edges
-            get_next = self.head
-
-        get_data = self.node_data
-
-        while stack:
-            curr_node = stack.pop()
-            curr_data = get_data(curr_node)
-            if curr_data is not None:
-                if condition is not None and not condition(curr_data):
-                    continue
-                yield curr_data
-            if curr_node == end:
-                break
-            for edge in get_edges(curr_node):
-                tail = get_next(edge)
-                if tail not in visited:
-                    visited.add(tail)
-                    stack.append(tail)
-
-    def _iterbfs(self, start, end=None, forward=True):
-        """
-        The forward parameter specifies whether it is a forward or backward
-        traversal.  Returns a list of tuples where the first value is the hop
-        value the second value is the node id.
-        """
-        queue, visited = deque([(start, 0)]), set([start])
-
-        # the direction of the bfs depends on the edges that are sampled
-        if forward:
-            get_edges = self.out_edges
-            get_next = self.tail
-        else:
-            get_edges = self.inc_edges
-            get_next = self.head
-
-        while queue:
-            curr_node, curr_step = queue.popleft()
-            yield (curr_node, curr_step)
-            if curr_node == end:
-                break
-            for edge in get_edges(curr_node):
-                tail = get_next(edge)
-                if tail not in visited:
-                    visited.add(tail)
-                    queue.append((tail, curr_step + 1))
-
-
-    def forw_bfs(self, start, end=None):
-        """
-        Returns a list of nodes in some forward BFS order.
-
-        Starting from the start node the breadth first search proceeds along
-        outgoing edges.
-        """
-        return [node for node, step in self._iterbfs(start, end, forward=True)]
-
-    def back_bfs(self, start, end=None):
-        """
-        Returns a list of nodes in some backward BFS order.
-
-        Starting from the start node the breadth first search proceeds along
-        incoming edges.
-        """
-        return [node for node, step in self._iterbfs(start, end, forward=False)]
-
-    def forw_dfs(self, start, end=None):
-        """
-        Returns a list of nodes in some forward DFS order.
-
-        Starting with the start node the depth first search proceeds along
-        outgoing edges.
-        """
-        return list(self.iterdfs(start, end, forward=True))
-
-    def back_dfs(self, start, end=None):
-        """
-        Returns a list of nodes in some backward DFS order.
-
-        Starting from the start node the depth first search proceeds along
-        incoming edges.
-        """
-        return list(self.iterdfs(start, end, forward=False))
-
-    def connected(self):
-        """
-        Returns :py:data:`True` if the graph's every node can be reached from every
-        other node.
-        """
-        node_list = self.node_list()
-        for node in node_list:
-            bfs_list = self.forw_bfs(node)
-            if len(bfs_list) != len(node_list):
-                return False
-        return True
-
-    def clust_coef(self, node):
-        """
-        Computes and returns the local clustering coefficient of node.  The
-        local cluster coefficient is proportion of the actual number of edges between
-        neighbours of node and the maximum number of edges between those neighbours.
-
-        See <http://en.wikipedia.org/wiki/Clustering_coefficient#Local_clustering_coefficient>
-        for a formal definition.
-        """
-        num = 0
-        nbr_set = set(self.out_nbrs(node))
-
-        if node in nbr_set:
-            nbr_set.remove(node) # loop defense
-
-        for nbr in nbr_set:
-            sec_set = set(self.out_nbrs(nbr))
-            if nbr in sec_set:
-                sec_set.remove(nbr) # loop defense
-            num += len(nbr_set & sec_set)
-
-        nbr_num = len(nbr_set)
-        if nbr_num:
-            clust_coef = float(num) / (nbr_num * (nbr_num - 1))
-        else:
-            clust_coef = 0.0
-        return clust_coef
-
-    def get_hops(self, start, end=None, forward=True):
-        """
-        Computes the hop distance to all nodes centered around a specified node.
-
-        First order neighbours are at hop 1, their neigbours are at hop 2 etc.
-        Uses :py:meth:`forw_bfs` or :py:meth:`back_bfs` depending on the value of the forward
-        parameter.  If the distance between all neighbouring nodes is 1 the hop
-        number corresponds to the shortest distance between the nodes.
-
-        :param start: the starting node
-        :param end: ending node (optional). When not specified will search the whole graph.
-        :param forward: directionality parameter (optional). If C{True} (default) it uses L{forw_bfs} otherwise L{back_bfs}.
-        :return: returns a list of tuples where each tuple contains the node and the hop.
-
-        Typical usage::
-
-            >>> print (graph.get_hops(1, 8))
-            >>> [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)]
-            # node 1 is at 0 hops
-            # node 2 is at 1 hop
-            # ...
-            # node 8 is at 5 hops
-        """
-        if forward:
-            return list(self._iterbfs(start=start, end=end, forward=True))
-        else:
-            return list(self._iterbfs(start=start, end=end, forward=False))
deleted file mode 100644
--- a/python/altgraph/altgraph/GraphAlgo.py
+++ /dev/null
@@ -1,147 +0,0 @@
-'''
-altgraph.GraphAlgo - Graph algorithms
-=====================================
-'''
-from altgraph import GraphError
-
-def dijkstra(graph, start, end=None):
-    """
-    Dijkstra's algorithm for shortest paths
-
-    `David Eppstein, UC Irvine, 4 April 2002 <http://www.ics.uci.edu/~eppstein/161/python/>`_
-
-    `Python Cookbook Recipe <http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/119466>`_
-
-    Find shortest paths from the  start node to all nodes nearer than or equal to the end node.
-
-    Dijkstra's algorithm is only guaranteed to work correctly when all edge lengths are positive.
-    This code does not verify this property for all edges (only the edges examined until the end
-    vertex is reached), but will correctly compute shortest paths even for some graphs with negative
-    edges, and will raise an exception if it discovers that a negative edge has caused it to make a mistake.
-
-    *Adapted to altgraph by Istvan Albert, Pennsylvania State University - June, 9 2004*
-
-    """
-    D = {}    # dictionary of final distances
-    P = {}    # dictionary of predecessors
-    Q = _priorityDictionary()    # estimated distances of non-final vertices
-    Q[start] = 0
-
-    for v in Q:
-        D[v] = Q[v]
-        if v == end: break
-
-        for w in graph.out_nbrs(v):
-            edge_id  = graph.edge_by_node(v,w)
-            vwLength = D[v] + graph.edge_data(edge_id)
-            if w in D:
-                if vwLength < D[w]:
-                    raise GraphError("Dijkstra: found better path to already-final vertex")
-            elif w not in Q or vwLength < Q[w]:
-                Q[w] = vwLength
-                P[w] = v
-
-    return (D,P)
-
-def shortest_path(graph, start, end):
-    """
-    Find a single shortest path from the given start node to the given end node.
-    The input has the same conventions as dijkstra(). The output is a list of the nodes
-    in order along the shortest path.
-
-    **Note that the distances must be stored in the edge data as numeric data**
-    """
-
-    D,P = dijkstra(graph, start, end)
-    Path = []
-    while 1:
-        Path.append(end)
-        if end == start: break
-        end = P[end]
-    Path.reverse()
-    return Path
-
-#
-# Utility classes and functions
-#
-class _priorityDictionary(dict):
-    '''
-    Priority dictionary using binary heaps (internal use only)
-
-    David Eppstein, UC Irvine, 8 Mar 2002
-
-    Implements a data structure that acts almost like a dictionary, with two modifications:
-        1. D.smallest() returns the value x minimizing D[x].  For this to work correctly,
-            all values D[x] stored in the dictionary must be comparable.
-        2. iterating "for x in D" finds and removes the items from D in sorted order.
-            Each item is not removed until the next item is requested, so D[x] will still
-            return a useful value until the next iteration of the for-loop.
-            Each operation takes logarithmic amortized time.
-    '''
-    def __init__(self):
-        '''
-        Initialize priorityDictionary by creating binary heap of pairs (value,key).
-        Note that changing or removing a dict entry will not remove the old pair from the heap
-        until it is found by smallest() or until the heap is rebuilt.
-        '''
-        self.__heap = []
-        dict.__init__(self)
-
-    def smallest(self):
-        '''
-        Find smallest item after removing deleted items from front of heap.
-        '''
-        if len(self) == 0:
-            raise IndexError("smallest of empty priorityDictionary")
-        heap = self.__heap
-        while heap[0][1] not in self or self[heap[0][1]] != heap[0][0]:
-            lastItem = heap.pop()
-            insertionPoint = 0
-            while 1:
-                smallChild = 2*insertionPoint+1
-                if smallChild+1 < len(heap) and heap[smallChild] > heap[smallChild+1] :
-                    smallChild += 1
-                if smallChild >= len(heap) or lastItem <= heap[smallChild]:
-                    heap[insertionPoint] = lastItem
-                    break
-                heap[insertionPoint] = heap[smallChild]
-                insertionPoint = smallChild
-        return heap[0][1]
-
-    def __iter__(self):
-        '''
-        Create destructive sorted iterator of priorityDictionary.
-        '''
-        def iterfn():
-            while len(self) > 0:
-                x = self.smallest()
-                yield x
-                del self[x]
-        return iterfn()
-
-    def __setitem__(self,key,val):
-        '''
-        Change value stored in dictionary and add corresponding pair to heap.
-        Rebuilds the heap if the number of deleted items gets large, to avoid memory leakage.
-        '''
-        dict.__setitem__(self,key,val)
-        heap = self.__heap
-        if len(heap) > 2 * len(self):
-            self.__heap = [(v,k) for k,v in self.iteritems()]
-            self.__heap.sort()  # builtin sort probably faster than O(n)-time heapify
-        else:
-            newPair = (val,key)
-            insertionPoint = len(heap)
-            heap.append(None)
-            while insertionPoint > 0 and newPair < heap[(insertionPoint-1)//2]:
-                heap[insertionPoint] = heap[(insertionPoint-1)//2]
-                insertionPoint = (insertionPoint-1)//2
-            heap[insertionPoint] = newPair
-
-    def setdefault(self,key,val):
-        '''
-        Reimplement setdefault to pass through our customized __setitem__.
-        '''
-        if key not in self:
-            self[key] = val
-        return self[key]
deleted file mode 100644
--- a/python/altgraph/altgraph/GraphStat.py
+++ /dev/null
@@ -1,73 +0,0 @@
-'''
-altgraph.GraphStat - Functions providing various graph statistics
-=================================================================
-'''
-import sys
-
-def degree_dist(graph, limits=(0,0), bin_num=10, mode='out'):
-    '''
-    Computes the degree distribution for a graph.
-
-    Returns a list of tuples where the first element of the tuple is the center of the bin
-    representing a range of degrees and the second element of the tuple are the number of nodes
-    with the degree falling in the range.
-
-    Example::
-
-        ....
-    '''
-
-    deg = []
-    if mode == 'inc':
-        get_deg = graph.inc_degree
-    else:
-        get_deg = graph.out_degree
-
-    for node in graph:
-        deg.append( get_deg(node) )
-
-    if not deg:
-        return []
-
-    results = _binning(values=deg, limits=limits, bin_num=bin_num)
-
-    return results
-
-_EPS = 1.0/(2.0**32)
-def _binning(values, limits=(0,0), bin_num=10):
-    '''
-    Bins data that falls between certain limits, if the limits are (0, 0) the
-    minimum and maximum values are used.
-
-    Returns a list of tuples where the first element of the tuple is the center of the bin
-    and the second element of the tuple are the counts.
-    '''
-    if limits == (0, 0):
-        min_val, max_val = min(values) - _EPS, max(values) + _EPS
-    else:
-        min_val, max_val = limits
-
-    # get bin size
-    bin_size = (max_val - min_val)/float(bin_num)
-    bins = [0] * (bin_num)
-
-    # will ignore these outliers for now
-    out_points = 0
-    for value in values:
-        try:
-            if (value - min_val) < 0:
-                out_points += 1
-            else:
-                index = int((value - min_val)/float(bin_size))
-                bins[index] += 1
-        except IndexError:
-            out_points += 1
-
-    # make it ready for an x,y plot
-    result = []
-    center = (bin_size/2) + min_val
-    for i, y in enumerate(bins):
-        x = center + bin_size * i
-        result.append( (x,y) )
-
-    return result
deleted file mode 100644
--- a/python/altgraph/altgraph/GraphUtil.py
+++ /dev/null
@@ -1,137 +0,0 @@
-'''
-altgraph.GraphUtil - Utility classes and functions
-==================================================
-'''
-
-import random
-from collections import deque
-from altgraph import Graph
-from altgraph import GraphError
-
-def generate_random_graph(node_num, edge_num, self_loops=False, multi_edges=False):
-    '''
-    Generates and returns a :py:class:`~altgraph.Graph.Graph` instance with *node_num* nodes
-    randomly connected by *edge_num* edges.
-    '''
-    g = Graph.Graph()
-
-    if not multi_edges:
-        if self_loops:
-            max_edges = node_num * node_num
-        else:
-            max_edges = node_num * (node_num-1)
-
-        if edge_num > max_edges:
-            raise GraphError("inconsistent arguments to 'generate_random_graph'")
-
-    nodes = range(node_num)
-
-    for node in nodes:
-        g.add_node(node)
-
-    while 1:
-        head = random.choice(nodes)
-        tail = random.choice(nodes)
-
-        # loop defense
-        if head == tail and not self_loops:
-            continue
-
-        # multiple edge defense
-        if g.edge_by_node(head,tail) is not None and not multi_edges:
-            continue
-
-        # add the edge
-        g.add_edge(head, tail)
-        if g.number_of_edges() >= edge_num:
-            break
-
-    return g
-
-def generate_scale_free_graph(steps, growth_num, self_loops=False, multi_edges=False):
-    '''
-    Generates and returns a :py:class:`~altgraph.Graph.Graph` instance that will have *steps* \* *growth_num* nodes
-    and a scale free (powerlaw) connectivity. Starting with a fully connected graph with *growth_num* nodes
-    at every step *growth_num* nodes are added to the graph and are connected to existing nodes with
-    a probability proportional to the degree of these existing nodes.
-    '''
-    # FIXME: The code doesn't seem to do what the documentation claims.
-    graph = Graph.Graph()
-
-    # initialize the graph
-    store = []
-    for i in range(growth_num):
-        #store   += [ i ] * (growth_num - 1)
-        for j in range(i + 1, growth_num):
-            store.append(i)
-            store.append(j)
-            graph.add_edge(i,j)
-
-    # generate
-    for node in range(growth_num, steps * growth_num):
-        graph.add_node(node)
-        while ( graph.out_degree(node) < growth_num ):
-            nbr = random.choice(store)
-
-            # loop defense
-            if node == nbr and not self_loops:
-                continue
-
-            # multi edge defense
-            if graph.edge_by_node(node, nbr) and not multi_edges:
-                continue
-
-            graph.add_edge(node, nbr)
-
-
-        for nbr in graph.out_nbrs(node):
-            store.append(node)
-            store.append(nbr)
-
-    return graph
-
-def filter_stack(graph, head, filters):
-    """
-    Perform a walk in a depth-first order starting
-    at *head*.
-
-    Returns (visited, removes, orphans).
-
-    * visited: the set of visited nodes
-    * removes: the list of nodes where the node
-      data does not all *filters*
-    * orphans: tuples of (last_good, node),
-      where node is not in removes, is directly
-      reachable from a node in *removes* and
-      *last_good* is the closest upstream node that is not
-      in *removes*.
-    """
-
-    visited, removes, orphans = set([head]), set(), set()
-    stack = deque([(head, head)])
-    get_data = graph.node_data
-    get_edges = graph.out_edges
-    get_tail = graph.tail
-
-    while stack:
-        last_good, node = stack.pop()
-        data = get_data(node)
-        if data is not None:
-            for filtfunc in filters:
-                if not filtfunc(data):
-                    removes.add(node)
-                    break
-            else:
-                last_good = node
-        for edge in get_edges(node):
-            tail = get_tail(edge)
-            if last_good is not node:
-                orphans.add((last_good, tail))
-            if tail not in visited:
-                visited.add(tail)
-                stack.append((last_good, tail))
-
-    orphans = [(last_good, tail) for (last_good, tail) in orphans if tail not in removes]
-    #orphans.sort()
-
-    return visited, removes, orphans
deleted file mode 100644
--- a/python/altgraph/altgraph/ObjectGraph.py
+++ /dev/null
@@ -1,202 +0,0 @@
-"""
-altgraph.ObjectGraph - Graph of objects with an identifier
-==========================================================
-
-A graph of objects that have a "graphident" attribute.
-graphident is the key for the object in the graph
-"""
-
-from altgraph import GraphError
-from altgraph.Graph import Graph
-from altgraph.GraphUtil import filter_stack
-
-class ObjectGraph(object):
-    """
-    A graph of objects that have a "graphident" attribute.
-    graphident is the key for the object in the graph
-    """
-    def __init__(self, graph=None, debug=0):
-        if graph is None:
-            graph = Graph()
-        self.graphident = self
-        self.graph = graph
-        self.debug = debug
-        self.indent = 0
-        graph.add_node(self, None)
-
-    def __repr__(self):
-        return '<%s>' % (type(self).__name__,)
-
-    def flatten(self, condition=None, start=None):
-        """
-        Iterate over the subgraph that is entirely reachable by condition
-        starting from the given start node or the ObjectGraph root
-        """
-        if start is None:
-            start = self
-        start = self.getRawIdent(start)
-        return self.graph.iterdata(start=start, condition=condition)
-
-    def nodes(self):
-        for ident in self.graph:
-            node = self.graph.node_data(ident)
-            if node is not None:
-                yield self.graph.node_data(ident)
-
-
-    def get_edges(self, node):
-        start = self.getRawIdent(node)
-        _, _, outraw, incraw = self.graph.describe_node(start)
-        def iter_edges(lst, n):
-            seen = set()
-            for tpl in (self.graph.describe_edge(e) for e in lst):
-                ident = tpl[n]
-                if ident not in seen:
-                    yield self.findNode(ident)
-                    seen.add(ident)
-        return iter_edges(outraw, 3), iter_edges(incraw, 2)
-
-    def edgeData(self, fromNode, toNode):
-        start = self.getRawIdent(fromNode)
-        stop = self.getRawIdent(toNode)
-        edge = self.graph.edge_by_node(start, stop)
-        return self.graph.edge_data(edge)
-
-    def updateEdgeData(self, fromNode, toNode, edgeData):
-        start = self.getRawIdent(fromNode)
-        stop = self.getRawIdent(toNode)
-        edge = self.graph.edge_by_node(start, stop)
-        self.graph.update_edge_data(edge, edgeData)
-
-    def filterStack(self, filters):
-        """
-        Filter the ObjectGraph in-place by removing all edges to nodes that
-        do not match every filter in the given filter list
-
-        Returns a tuple containing the number of: (nodes_visited, nodes_removed, nodes_orphaned)
-        """
-        visited, removes, orphans = filter_stack(self.graph, self, filters)
-
-        for last_good, tail in orphans:
-            self.graph.add_edge(last_good, tail, edge_data='orphan')
-
-        for node in removes:
-            self.graph.hide_node(node)
-
-        return len(visited)-1, len(removes), len(orphans)
-
-    def removeNode(self, node):
-        """
-        Remove the given node from the graph if it exists
-        """
-        ident = self.getIdent(node)
-        if ident is not None:
-            self.graph.hide_node(ident)
-
-    def removeReference(self, fromnode, tonode):
-        """
-        Remove all edges from fromnode to tonode
-        """
-        if fromnode is None:
-            fromnode = self
-        fromident = self.getIdent(fromnode)
-        toident = self.getIdent(tonode)
-        if fromident is not None and toident is not None:
-            while True:
-                edge = self.graph.edge_by_node(fromident, toident)
-                if edge is None:
-                    break
-                self.graph.hide_edge(edge)
-
-    def getIdent(self, node):
-        """
-        Get the graph identifier for a node
-        """
-        ident = self.getRawIdent(node)
-        if ident is not None:
-            return ident
-        node = self.findNode(node)
-        if node is None:
-            return None
-        return node.graphident
-
-    def getRawIdent(self, node):
-        """
-        Get the identifier for a node object
-        """
-        if node is self:
-            return node
-        ident = getattr(node, 'graphident', None)
-        return ident
-
-    def __contains__(self, node):
-        return self.findNode(node) is not None
-
-    def findNode(self, node):
-        """
-        Find the node on the graph
-        """
-        ident = self.getRawIdent(node)
-        if ident is None:
-            ident = node
-        try:
-            return self.graph.node_data(ident)
-        except KeyError:
-            return None
-
-    def addNode(self, node):
-        """
-        Add a node to the graph referenced by the root
-        """
-        self.msg(4, "addNode", node)
-
-        try:
-            self.graph.restore_node(node.graphident)
-        except GraphError:
-            self.graph.add_node(node.graphident, node)
-
-    def createReference(self, fromnode, tonode, edge_data=None):
-        """
-        Create a reference from fromnode to tonode
-        """
-        if fromnode is None:
-            fromnode = self
-        fromident, toident = self.getIdent(fromnode), self.getIdent(tonode)
-        if fromident is None or toident is None:
-            return
-        self.msg(4, "createReference", fromnode, tonode, edge_data)
-        self.graph.add_edge(fromident, toident, edge_data=edge_data)
-
-    def createNode(self, cls, name, *args, **kw):
-        """
-        Add a node of type cls to the graph if it does not already exist
-        by the given name
-        """
-        m = self.findNode(name)
-        if m is None:
-            m = cls(name, *args, **kw)
-            self.addNode(m)
-        return m
-
-    def msg(self, level, s, *args):
-        """
-        Print a debug message with the given level
-        """
-        if s and level <= self.debug:
-            print ("%s%s %s" % ("  " * self.indent, s, ' '.join(map(repr, args))))
-
-    def msgin(self, level, s, *args):
-        """
-        Print a debug message and indent
-        """
-        if level <= self.debug:
-            self.msg(level, s, *args)
-            self.indent = self.indent + 1
-
-    def msgout(self, level, s, *args):
-        """
-        Dedent and print a debug message
-        """
-        if level <= self.debug:
-            self.indent = self.indent - 1
-            self.msg(level, s, *args)
deleted file mode 100644
--- a/python/altgraph/altgraph/__init__.py
+++ /dev/null
@@ -1,135 +0,0 @@
-'''
-altgraph - a python graph library
-=================================
-
-altgraph is a fork of `graphlib <http://pygraphlib.sourceforge.net>`_ tailored
-to use newer Python 2.3+ features, including additional support used by the
-py2app suite (modulegraph and macholib, specifically).
-
-altgraph is a python based graph (network) representation and manipulation package.
-It has started out as an extension to the `graph_lib module <http://www.ece.arizona.edu/~denny/python_nest/graph_lib_1.0.1.html>`_
-written by Nathan Denny it has been significantly optimized and expanded.
-
-The :class:`altgraph.Graph.Graph` class is loosely modeled after the `LEDA <http://www.algorithmic-solutions.com/enleda.htm>`_
-(Library of Efficient Datatypes)  representation. The library
-includes methods for constructing graphs, BFS and DFS traversals,
-topological sort, finding connected components, shortest paths as well as a number
-graph statistics functions. The library can also visualize graphs
-via `graphviz <http://www.research.att.com/sw/tools/graphviz/>`_.
-
-The package contains the following modules:
-
-    -  the :py:mod:`altgraph.Graph` module contains the :class:`~altgraph.Graph.Graph` class that stores the graph data
-
-    -  the :py:mod:`altgraph.GraphAlgo` module implements graph algorithms operating on graphs (:py:class:`~altgraph.Graph.Graph`} instances)
-
-    -  the :py:mod:`altgraph.GraphStat` module contains functions for computing statistical measures on graphs
-
-    -  the :py:mod:`altgraph.GraphUtil` module contains functions for generating, reading and saving graphs
-
-    -  the :py:mod:`altgraph.Dot` module  contains functions for displaying graphs via `graphviz <http://www.research.att.com/sw/tools/graphviz/>`_
-
-    -  the :py:mod:`altgraph.ObjectGraph` module implements a graph of objects with a unique identifier
-
-Installation
-------------
-
-Download and unpack the archive then type::
-
-    python setup.py install
-
-This will install the library in the default location. For instructions on
-how to customize the install procedure read the output of::
-
-    python setup.py --help install
-
-To verify that the code works run the test suite::
-
-    python setup.py test
-
-Example usage
--------------
-
-Lets assume that we want to analyze the graph below (links to the full picture) GRAPH_IMG.
-Our script then might look the following way::
-
-    from altgraph import Graph, GraphAlgo, Dot
-
-    # these are the edges
-    edges = [ (1,2), (2,4), (1,3), (2,4), (3,4), (4,5), (6,5),
-        (6,14), (14,15), (6, 15),  (5,7), (7, 8), (7,13), (12,8),
-        (8,13), (11,12), (11,9), (13,11), (9,13), (13,10) ]
-
-    # creates the graph
-    graph = Graph.Graph()
-    for head, tail in edges:
-        graph.add_edge(head, tail)
-
-    # do a forward bfs from 1 at most to 20
-    print(graph.forw_bfs(1))
-
-This will print the nodes in some breadth first order::
-
-    [1, 2, 3, 4, 5, 7, 8, 13, 11, 10, 12, 9]
-
-If we wanted to get the hop-distance from node 1 to node 8
-we coud write::
-
-    print(graph.get_hops(1, 8))
-
-This will print the following::
-
-    [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)]
-
-Node 1 is at 0 hops since it is the starting node, nodes 2,3 are 1 hop away ...
-node 8 is 5 hops away. To find the shortest distance between two nodes you
-can use::
-
-    print(GraphAlgo.shortest_path(graph, 1, 12))
-
-It will print the nodes on one (if there are more) the shortest paths::
-
-    [1, 2, 4, 5, 7, 13, 11, 12]
-
-To display the graph we can use the GraphViz backend::
-
-    dot = Dot.Dot(graph)
-
-    # display the graph on the monitor
-    dot.display()
-
-    # save it in an image file
-    dot.save_img(file_name='graph', file_type='gif')
-
-
-
-..
-  @author: U{Istvan Albert<http://www.personal.psu.edu/staff/i/u/iua1/>}
-
-  @license:  MIT License
-
-  Copyright (c) 2004 Istvan Albert unless otherwise noted.
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-  and associated documentation files (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
-  and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do
-  so.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-  PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-  THE SOFTWARE.
-  @requires: Python 2.3 or higher
-
-  @newfield contributor: Contributors:
-  @contributor: U{Reka Albert <http://www.phys.psu.edu/~ralbert/>}
-
-'''
-import pkg_resources
-__version__ = pkg_resources.require('altgraph')[0].version
-
-class GraphError(ValueError):
-    pass
deleted file mode 100644
--- a/python/altgraph/altgraph_tests/__init__.py
+++ /dev/null
@@ -1,1 +0,0 @@
-""" altgraph tests """
deleted file mode 100644
--- a/python/altgraph/altgraph_tests/test_altgraph.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env py.test
-import os
-import sys
-
-from altgraph import Graph, GraphAlgo
-import unittest
-
-class BasicTests (unittest.TestCase):
-    def setUp(self):
-        self.edges = [
-            (1,2), (2,4), (1,3), (2,4), (3,4), (4,5), (6,5), (6,14), (14,15),
-            (6, 15), (5,7), (7, 8), (7,13), (12,8), (8,13), (11,12), (11,9),
-            (13,11), (9,13), (13,10)
-        ]
-
-        # these are the edges
-        self.store = {}
-        self.g = Graph.Graph()
-        for head, tail in self.edges:
-            self.store[head] = self.store[tail] = None
-            self.g.add_edge(head, tail)
-
-    def test_num_edges(self):
-        # check the parameters
-        self.assertEqual(self.g.number_of_nodes(), len(self.store))
-        self.assertEqual(self.g.number_of_edges(), len(self.edges))
-
-    def test_forw_bfs(self):
-        # do a forward bfs
-        self.assertEqual( self.g.forw_bfs(1),
-                [1, 2, 3, 4, 5, 7, 8, 13, 11, 10, 12, 9])
-
-
-    def test_get_hops(self):
-        # diplay the hops and hop numbers between nodes
-        self.assertEqual(self.g.get_hops(1, 8),
-                [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)])
-
-    def test_shortest_path(self):
-        self.assertEqual(GraphAlgo.shortest_path(self.g, 1, 12),
-                [1, 2, 4, 5, 7, 13, 11, 12])
-
-
-if __name__ == "__main__":  # pragma: no cover
-    unittest.main()
deleted file mode 100644
--- a/python/altgraph/altgraph_tests/test_dot.py
+++ /dev/null
@@ -1,370 +0,0 @@
-import unittest
-import os
-
-from altgraph import Dot
-from altgraph import Graph
-from altgraph import GraphError
-
-
-class TestDot (unittest.TestCase):
-
-    def test_constructor(self):
-        g = Graph.Graph([
-                (1,2),
-                (1,3),
-                (1,4),
-                (2,4),
-                (2,6),
-                (2,7),
-                (7,4),
-                (6,1),
-            ]
-        )
-
-        dot = Dot.Dot(g)
-
-        self.assertEqual(dot.name, 'G')
-        self.assertEqual(dot.attr, {})
-        self.assertEqual(dot.temp_dot, 'tmp_dot.dot')
-        self.assertEqual(dot.temp_neo, 'tmp_neo.dot')
-        self.assertEqual(dot.dot, 'dot')
-        self.assertEqual(dot.dotty, 'dotty')
-        self.assertEqual(dot.neato, 'neato')
-        self.assertEqual(dot.type, 'digraph')
-
-        self.assertEqual(dot.nodes, dict([(x, {}) for x in g]))
-
-        edges = {}
-        for head in g:
-            edges[head] = {}
-            for tail in g.out_nbrs(head):
-                edges[head][tail] = {}
-
-        self.assertEqual(dot.edges[1], edges[1])
-        self.assertEqual(dot.edges, edges)
-
-
-        dot = Dot.Dot(g, nodes=[1,2],
-                edgefn=lambda node: list(sorted(g.out_nbrs(node)))[:-1],
-                nodevisitor=lambda node: {'label': node},
-                edgevisitor=lambda head, tail: {'label': (head, tail) },
-                name="testgraph",
-                dot='/usr/local/bin/dot',
-                dotty='/usr/local/bin/dotty',
-                neato='/usr/local/bin/neato',
-                graphtype="graph")
-
-        self.assertEqual(dot.name, 'testgraph')
-        self.assertEqual(dot.attr, {})
-        self.assertEqual(dot.temp_dot, 'tmp_dot.dot')
-        self.assertEqual(dot.temp_neo, 'tmp_neo.dot')
-        self.assertEqual(dot.dot, '/usr/local/bin/dot')
-        self.assertEqual(dot.dotty, '/usr/local/bin/dotty')
-        self.assertEqual(dot.neato, '/usr/local/bin/neato')
-        self.assertEqual(dot.type, 'graph')
-
-        self.assertEqual(dot.nodes, dict([(x, {'label': x}) for x in [1,2]]))
-
-        edges = {}
-        for head in [1,2]:
-            edges[head] = {}
-            for tail in list(sorted(g.out_nbrs(head)))[:-1]:
-                if tail not in [1,2]: continue
-                edges[head][tail] = {'label': (head, tail) }
-
-        self.assertEqual(dot.edges[1], edges[1])
-        self.assertEqual(dot.edges, edges)
-
-        self.assertRaises(GraphError, Dot.Dot, g, nodes=[1,2, 9])
-
-    def test_style(self):
-        g = Graph.Graph([])
-
-        dot = Dot.Dot(g)
-
-        self.assertEqual(dot.attr, {})
-
-        dot.style(key='value')
-        self.assertEqual(dot.attr, {'key': 'value'})
-
-        dot.style(key2='value2')
-        self.assertEqual(dot.attr, {'key2': 'value2'})
-
-    def test_node_style(self):
-        g = Graph.Graph([
-                (1,2),
-                (1,3),
-                (1,4),
-                (2,4),
-                (2,6),
-                (2,7),
-                (7,4),
-                (6,1),
-            ]
-        )
-
-        dot = Dot.Dot(g)
-
-        self.assertEqual(dot.nodes[1], {})
-
-        dot.node_style(1, key='value')
-        self.assertEqual(dot.nodes[1], {'key': 'value'})
-
-        dot.node_style(1, key2='value2')
-        self.assertEqual(dot.nodes[1], {'key2': 'value2'})
-        self.assertEqual(dot.nodes[2], {})
-
-        dot.all_node_style(key3='value3')
-        for n in g:
-            self.assertEqual(dot.nodes[n], {'key3': 'value3'})
-
-        self.assertTrue(9 not in dot.nodes)
-        dot.node_style(9, key='value')
-        self.assertEqual(dot.nodes[9], {'key': 'value'})
-
-    def test_edge_style(self):
-        g = Graph.Graph([
-                (1,2),
-                (1,3),
-                (1,4),
-                (2,4),
-                (2,6),
-                (2,7),
-                (7,4),
-                (6,1),
-            ]
-        )
-
-        dot = Dot.Dot(g)
-
-        self.assertEqual(dot.edges[1][2], {})
-        dot.edge_style(1,2, foo='bar')
-        self.assertEqual(dot.edges[1][2], {'foo': 'bar'})
-
-        dot.edge_style(1,2, foo2='2bar')
-        self.assertEqual(dot.edges[1][2], {'foo2': '2bar'})
-
-        self.assertEqual(dot.edges[1][3], {})
-
-        self.assertFalse(6 in dot.edges[1])
-        dot.edge_style(1,6, foo2='2bar')
-        self.assertEqual(dot.edges[1][6], {'foo2': '2bar'})
-
-        self.assertRaises(GraphError, dot.edge_style, 1, 9, a=1)
-        self.assertRaises(GraphError, dot.edge_style, 9, 1, a=1)
-
-
-    def test_iter(self):
-        g = Graph.Graph([
-                (1,2),
-                (1,3),
-                (1,4),
-                (2,4),
-                (2,6),
-                (2,7),
-                (7,4),
-                (6,1),
-            ]
-        )
-
-        dot = Dot.Dot(g)
-        dot.style(graph="foobar")
-        dot.node_style(1, key='value')
-        dot.node_style(2, key='another', key2='world')
-        dot.edge_style(1,4, key1='value1', key2='value2')
-        dot.edge_style(2,4, key1='valueA')
-
-        self.assertEqual(list(iter(dot)), list(dot.iterdot()))
-
-        for item in dot.iterdot():
-            self.assertTrue(isinstance(item, str))
-
-        first = list(dot.iterdot())[0]
-        self.assertEqual(first, "digraph %s {\n"%(dot.name,))
-
-        dot.type = 'graph'
-        first = list(dot.iterdot())[0]
-        self.assertEqual(first, "graph %s {\n"%(dot.name,))
-
-        dot.type = 'foo'
-        self.assertRaises(GraphError, list, dot.iterdot())
-        dot.type = 'digraph'
-
-        self.assertEqual(list(dot), [
-            'digraph G {\n',
-              'graph="foobar";',
-              '\n',
-
-            '\t"1" [',
-              'key="value",',
-            '];\n',
-
-            '\t"2" [',
-              'key="another",',
-              'key2="world",',
-            '];\n',
-
-            '\t"3" [',
-            '];\n',
-
-            '\t"4" [',
-            '];\n',
-
-            '\t"6" [',
-            '];\n',
-
-            '\t"7" [',
-            '];\n',
-
-            '\t"1" -> "2" [',
-            '];\n',
-
-            '\t"1" -> "3" [',
-            '];\n',
-
-            '\t"1" -> "4" [',
-              'key1="value1",',
-              'key2="value2",',
-            '];\n',
-
-             '\t"2" -> "4" [',
-               'key1="valueA",',
-             '];\n',
-
-             '\t"2" -> "6" [',
-             '];\n',
-
-             '\t"2" -> "7" [',
-             '];\n',
-
-             '\t"6" -> "1" [',
-             '];\n',
-
-             '\t"7" -> "4" [',
-             '];\n',
-           '}\n'])
-
-
-    def test_save(self):
-        g = Graph.Graph([
-                (1,2),
-                (1,3),
-                (1,4),
-                (2,4),
-                (2,6),
-                (2,7),
-                (7,4),
-                (6,1),
-            ]
-        )
-
-        dot = Dot.Dot(g)
-        dot.style(graph="foobar")
-        dot.node_style(1, key='value')
-        dot.node_style(2, key='another', key2='world')
-        dot.edge_style(1,4, key1='value1', key2='value2')
-        dot.edge_style(2,4, key1='valueA')
-
-        fn = 'test_dot.dot'
-        self.assertTrue(not os.path.exists(fn))
-
-        try:
-            dot.save_dot(fn)
-
-            fp = open(fn, 'r')
-            data = fp.read()
-            fp.close()
-            self.assertEqual(data, ''.join(dot))
-
-        finally:
-            if os.path.exists(fn):
-                os.unlink(fn)
-
-
-    def test_img(self):
-        g = Graph.Graph([
-                (1,2),
-                (1,3),
-                (1,4),
-                (2,4),
-                (2,6),
-                (2,7),
-                (7,4),
-                (6,1),
-            ]
-        )
-
-        dot = Dot.Dot(g, dot='/usr/local/bin/!!dot', dotty='/usr/local/bin/!!dotty', neato='/usr/local/bin/!!neato')
-        dot.style(size='10,10', rankdir='RL', page='5, 5' , ranksep=0.75)
-        dot.node_style(1, label='BASE_NODE',shape='box', color='blue')
-        dot.node_style(2, style='filled', fillcolor='red')
-        dot.edge_style(1,4, style='dotted')
-        dot.edge_style(2,4, arrowhead='dot', label='binds', labelangle='90')
-
-        system_cmds = []
-        def fake_system(cmd):
-            system_cmds.append(cmd)
-            return None
-
-        try:
-            real_system = os.system
-            os.system = fake_system
-
-            system_cmds = []
-            dot.save_img('foo')
-            self.assertEqual(system_cmds, ['/usr/local/bin/!!dot -Tgif tmp_dot.dot -o foo.gif'])
-
-            system_cmds = []
-            dot.save_img('foo', file_type='jpg')
-            self.assertEqual(system_cmds, ['/usr/local/bin/!!dot -Tjpg tmp_dot.dot -o foo.jpg'])
-
-            system_cmds = []
-            dot.save_img('bar', file_type='jpg', mode='neato')
-            self.assertEqual(system_cmds, [
-                '/usr/local/bin/!!neato -o tmp_dot.dot tmp_neo.dot',
-                '/usr/local/bin/!!dot -Tjpg tmp_dot.dot -o bar.jpg',
-            ])
-
-            system_cmds = []
-            dot.display()
-            self.assertEqual(system_cmds, [
-                '/usr/local/bin/!!dotty tmp_dot.dot'
-            ])
-
-            system_cmds = []
-            dot.display(mode='neato')
-            self.assertEqual(system_cmds, [
-                '/usr/local/bin/!!neato -o tmp_dot.dot tmp_neo.dot',
-                '/usr/local/bin/!!dotty tmp_dot.dot'
-            ])
-
-        finally:
-            if os.path.exists(dot.temp_dot):
-                os.unlink(dot.temp_dot)
-            if os.path.exists(dot.temp_neo):
-                os.unlink(dot.temp_neo)
-            os.system = real_system
-
-        if os.path.exists('/usr/local/bin/dot') and os.path.exists('/usr/local/bin/neato'):
-            try:
-                dot.dot='/usr/local/bin/dot'
-                dot.neato='/usr/local/bin/neato'
-                self.assertFalse(os.path.exists('foo.gif'))
-                dot.save_img('foo')
-                self.assertTrue(os.path.exists('foo.gif'))
-                os.unlink('foo.gif')
-
-                self.assertFalse(os.path.exists('foo.gif'))
-                dot.save_img('foo', mode='neato')
-                self.assertTrue(os.path.exists('foo.gif'))
-                os.unlink('foo.gif')
-
-            finally:
-                if os.path.exists(dot.temp_dot):
-                    os.unlink(dot.temp_dot)
-                if os.path.exists(dot.temp_neo):
-                    os.unlink(dot.temp_neo)
-
-
-if __name__ == "__main__": # pragma: no cover
-    unittest.main()
deleted file mode 100644
--- a/python/altgraph/altgraph_tests/test_graph.py
+++ /dev/null
@@ -1,644 +0,0 @@
-import unittest
-
-from altgraph import GraphError
-from altgraph.Graph import Graph
-
-class TestGraph (unittest.TestCase):
-
-    def test_nodes(self):
-        graph = Graph()
-
-        self.assertEqual(graph.node_list(), [])
-
-        o1 = object()
-        o1b = object()
-        o2 = object()
-        graph.add_node(1, o1)
-        graph.add_node(1, o1b)
-        graph.add_node(2, o2)
-        graph.add_node(3)
-
-        self.assertRaises(TypeError, graph.add_node, [])
-
-        self.assertTrue(graph.node_data(1) is o1)
-        self.assertTrue(graph.node_data(2) is o2)
-        self.assertTrue(graph.node_data(3) is None)
-
-        self.assertTrue(1 in graph)
-        self.assertTrue(2 in graph)
-        self.assertTrue(3 in graph)
-
-        self.assertEqual(graph.number_of_nodes(), 3)
-        self.assertEqual(graph.number_of_hidden_nodes(), 0)
-        self.assertEqual(graph.hidden_node_list(), [])
-        self.assertEqual(list(sorted(graph)), [1, 2, 3])
-
-        graph.hide_node(1)
-        graph.hide_node(2)
-        graph.hide_node(3)
-
-
-        self.assertEqual(graph.number_of_nodes(), 0)
-        self.assertEqual(graph.number_of_hidden_nodes(), 3)
-        self.assertEqual(list(sorted(graph.hidden_node_list())), [1, 2, 3])
-
-        self.assertFalse(1 in graph)
-        self.assertFalse(2 in graph)
-        self.assertFalse(3 in graph)
-
-        graph.add_node(1)
-        self.assertFalse(1 in graph)
-
-        graph.restore_node(1)
-        self.assertTrue(1 in graph)
-        self.assertFalse(2 in graph)
-        self.assertFalse(3 in graph)
-
-        graph.restore_all_nodes()
-        self.assertTrue(1 in graph)
-        self.assertTrue(2 in graph)
-        self.assertTrue(3 in graph)
-
-        self.assertEqual(list(sorted(graph.node_list())), [1, 2, 3])
-
-        v = graph.describe_node(1)
-        self.assertEqual(v, (1, o1, [], []))
-
-    def test_edges(self):
-        graph = Graph()
-        graph.add_node(1)
-        graph.add_node(2)
-        graph.add_node(3)
-        graph.add_node(4)
-        graph.add_node(5)
-
-        self.assertTrue(isinstance(graph.edge_list(), list))
-
-        graph.add_edge(1, 2)
-        graph.add_edge(4, 5, 'a')
-
-        self.assertRaises(GraphError, graph.add_edge, 'a', 'b', create_nodes=False)
-
-        self.assertEqual(graph.number_of_hidden_edges(), 0)
-        self.assertEqual(graph.number_of_edges(), 2)
-        e = graph.edge_by_node(1, 2)
-        self.assertTrue(isinstance(e, int))
-        graph.hide_edge(e)
-        self.assertEqual(graph.number_of_hidden_edges(), 1)
-        self.assertEqual(graph.number_of_edges(), 1)
-        e2 = graph.edge_by_node(1, 2)
-        self.assertTrue(e2 is None)
-
-        graph.restore_edge(e)
-        e2 = graph.edge_by_node(1, 2)
-        self.assertEqual(e, e2)
-        self.assertEqual(graph.number_of_hidden_edges(), 0)
-
-        self.assertEqual(graph.number_of_edges(), 2)
-
-        e1 = graph.edge_by_node(1, 2)
-        e2 = graph.edge_by_node(4, 5)
-        graph.hide_edge(e1)
-        graph.hide_edge(e2)
-
-        self.assertEqual(graph.number_of_edges(), 0)
-        graph.restore_all_edges()
-        self.assertEqual(graph.number_of_edges(), 2)
-
-        self.assertEqual(graph.edge_by_id(e1), (1,2))
-        self.assertRaises(GraphError, graph.edge_by_id, (e1+1)*(e2+1)+1)
-
-        self.assertEqual(list(sorted(graph.edge_list())), [e1, e2])
-
-        self.assertEqual(graph.describe_edge(e1), (e1, 1, 1, 2))
-        self.assertEqual(graph.describe_edge(e2), (e2, 'a', 4, 5))
-
-        self.assertEqual(graph.edge_data(e1), 1)
-        self.assertEqual(graph.edge_data(e2), 'a')
-
-        self.assertEqual(graph.head(e2), 4)
-        self.assertEqual(graph.tail(e2), 5)
-
-        graph.add_edge(1, 3)
-        graph.add_edge(1, 5)
-        graph.add_edge(4, 1)
-
-        self.assertEqual(list(sorted(graph.out_nbrs(1))), [2, 3, 5])
-        self.assertEqual(list(sorted(graph.inc_nbrs(1))), [4])
-        self.assertEqual(list(sorted(graph.inc_nbrs(5))), [1, 4])
-        self.assertEqual(list(sorted(graph.all_nbrs(1))), [2, 3, 4, 5])
-
-        graph.add_edge(5, 1)
-        self.assertEqual(list(sorted(graph.all_nbrs(5))), [1, 4])
-
-        self.assertEqual(graph.out_degree(1), 3)
-        self.assertEqual(graph.inc_degree(2), 1)
-        self.assertEqual(graph.inc_degree(5), 2)
-        self.assertEqual(graph.all_degree(5), 3)
-
-        v = graph.out_edges(4)
-        self.assertTrue(isinstance(v, list))
-        self.assertEqual(graph.edge_by_id(v[0]), (4, 5))
-
-        v = graph.out_edges(1)
-        for e in v:
-            self.assertEqual(graph.edge_by_id(e)[0], 1)
-
-        v = graph.inc_edges(1)
-        self.assertTrue(isinstance(v, list))
-        self.assertEqual(graph.edge_by_id(v[0]), (4, 1))
-
-        v = graph.inc_edges(5)
-        for e in v:
-            self.assertEqual(graph.edge_by_id(e)[1], 5)
-
-        v = graph.all_edges(5)
-        for e in v:
-            self.assertTrue(graph.edge_by_id(e)[1] == 5 or graph.edge_by_id(e)[0] == 5)
-
-        e1 = graph.edge_by_node(1, 2)
-        self.assertTrue(isinstance(e1, int))
-        graph.hide_node(1)
-        self.assertRaises(GraphError, graph.edge_by_node, 1, 2)
-        graph.restore_node(1)
-        e2 = graph.edge_by_node(1, 2)
-        self.assertEqual(e1, e2)
-
-
-
-    def test_toposort(self):
-        graph = Graph()
-        graph.add_node(1)
-        graph.add_node(2)
-        graph.add_node(3)
-        graph.add_node(4)
-        graph.add_node(5)
-
-        graph.add_edge(1, 2)
-        graph.add_edge(1, 3)
-        graph.add_edge(2, 4)
-        graph.add_edge(3, 5)
-
-        ok, result = graph.forw_topo_sort()
-        self.assertTrue(ok)
-        for idx in range(1, 6):
-            self.assertTrue(idx in result)
-
-        self.assertTrue(result.index(1) < result.index(2))
-        self.assertTrue(result.index(1) < result.index(3))
-        self.assertTrue(result.index(2) < result.index(4))
-        self.assertTrue(result.index(3) < result.index(5))
-
-        ok, result = graph.back_topo_sort()
-        self.assertTrue(ok)
-        for idx in range(1, 6):
-            self.assertTrue(idx in result)
-        self.assertTrue(result.index(2) < result.index(1))
-        self.assertTrue(result.index(3) < result.index(1))
-        self.assertTrue(result.index(4) < result.index(2))
-        self.assertTrue(result.index(5) < result.index(3))
-
-
-        # Same graph as before, but with edges
-        # reversed, which means we should get
-        # the same results as before if using
-        # back_topo_sort rather than forw_topo_sort
-        # (and v.v.)
-
-        graph = Graph()
-        graph.add_node(1)
-        graph.add_node(2)
-        graph.add_node(3)
-        graph.add_node(4)
-        graph.add_node(5)
-
-        graph.add_edge(2, 1)
-        graph.add_edge(3, 1)
-        graph.add_edge(4, 2)
-        graph.add_edge(5, 3)
-
-        ok, result = graph.back_topo_sort()
-        self.assertTrue(ok)
-        for idx in range(1, 6):
-            self.assertTrue(idx in result)
-
-        self.assertTrue(result.index(1) < result.index(2))
-        self.assertTrue(result.index(1) < result.index(3))
-        self.assertTrue(result.index(2) < result.index(4))
-        self.assertTrue(result.index(3) < result.index(5))
-
-        ok, result = graph.forw_topo_sort()
-        self.assertTrue(ok)
-        for idx in range(1, 6):
-            self.assertTrue(idx in result)
-        self.assertTrue(result.index(2) < result.index(1))
-        self.assertTrue(result.index(3) < result.index(1))
-        self.assertTrue(result.index(4) < result.index(2))
-        self.assertTrue(result.index(5) < result.index(3))
-
-
-        # Create a cycle
-        graph.add_edge(1, 5)
-        ok, result = graph.forw_topo_sort()
-        self.assertFalse(ok)
-        ok, result = graph.back_topo_sort()
-        self.assertFalse(ok)
-
-    def test_bfs_subgraph(self):
-        graph = Graph()
-        graph.add_edge(1, 2)
-        graph.add_edge(1, 4)
-        graph.add_edge(2, 4)
-        graph.add_edge(4, 8)
-        graph.add_edge(4, 9)
-        graph.add_edge(4, 10)
-        graph.add_edge(8, 10)
-
-        subgraph = graph.forw_bfs_subgraph(10)
-        self.assertTrue(isinstance(subgraph, Graph))
-        self.assertEqual(subgraph.number_of_nodes(), 1)
-        self.assertTrue(10 in subgraph)
-        self.assertEqual(subgraph.number_of_edges(), 0)
-
-        subgraph = graph.forw_bfs_subgraph(4)
-        self.assertTrue(isinstance(subgraph, Graph))
-        self.assertEqual(subgraph.number_of_nodes(), 4)
-        self.assertTrue(4 in subgraph)
-        self.assertTrue(8 in subgraph)
-        self.assertTrue(9 in subgraph)
-        self.assertTrue(10 in subgraph)
-        self.assertEqual(subgraph.number_of_edges(), 4)
-        e = subgraph.edge_by_node(4, 8)
-        e = subgraph.edge_by_node(4, 9)
-        e = subgraph.edge_by_node(4, 10)
-        e = subgraph.edge_by_node(8, 10)
-
-        # same graph as before, but switch around
-        # edges. This results in the same test results
-        # but now for back_bfs_subgraph rather than
-        # forw_bfs_subgraph
-
-        graph = Graph()
-        graph.add_edge(2, 1)
-        graph.add_edge(4, 1)
-        graph.add_edge(4, 2)
-        graph.add_edge(8, 4)
-        graph.add_edge(9, 4)
-        graph.add_edge(10, 4)
-        graph.add_edge(10, 8)
-
-        subgraph = graph.back_bfs_subgraph(10)
-        self.assertTrue(isinstance(subgraph, Graph))
-        self.assertEqual(subgraph.number_of_nodes(), 1)
-        self.assertTrue(10 in subgraph)
-        self.assertEqual(subgraph.number_of_edges(), 0)
-
-        subgraph = graph.back_bfs_subgraph(4)
-        self.assertTrue(isinstance(subgraph, Graph))
-        self.assertEqual(subgraph.number_of_nodes(), 4)
-        self.assertTrue(4 in subgraph)
-        self.assertTrue(8 in subgraph)
-        self.assertTrue(9 in subgraph)
-        self.assertTrue(10 in subgraph)
-        self.assertEqual(subgraph.number_of_edges(), 4)
-        e = subgraph.edge_by_node(4, 8)
-        e = subgraph.edge_by_node(4, 9)
-        e = subgraph.edge_by_node(4, 10)
-        e = subgraph.edge_by_node(8, 10)
-
-    def test_iterdfs(self):
-        graph = Graph()
-        graph.add_edge("1", "1.1")
-        graph.add_edge("1", "1.2")
-        graph.add_edge("1", "1.3")
-        graph.add_edge("1.1", "1.1.1")
-        graph.add_edge("1.1", "1.1.2")
-        graph.add_edge("1.2", "1.2.1")
-        graph.add_edge("1.2", "1.2.2")
-        graph.add_edge("1.2.2", "1.2.2.1")
-        graph.add_edge("1.2.2", "1.2.2.2")
-        graph.add_edge("1.2.2", "1.2.2.3")
-
-        result = list(graph.iterdfs("1"))
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1', '1.1', '1.1.2', '1.1.1'
-        ])
-        result = list(graph.iterdfs("1", "1.2.1"))
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1'
-        ])
-
-        result = graph.forw_dfs("1")
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1', '1.1', '1.1.2', '1.1.1'
-        ])
-        result = graph.forw_dfs("1", "1.2.1")
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1'
-        ])
-
-        graph = Graph()
-        graph.add_edge("1.1", "1")
-        graph.add_edge("1.2", "1")
-        graph.add_edge("1.3", "1")
-        graph.add_edge("1.1.1", "1.1")
-        graph.add_edge("1.1.2", "1.1")
-        graph.add_edge("1.2.1", "1.2")
-        graph.add_edge("1.2.2", "1.2")
-        graph.add_edge("1.2.2.1", "1.2.2")
-        graph.add_edge("1.2.2.2", "1.2.2")
-        graph.add_edge("1.2.2.3", "1.2.2")
-
-        result = list(graph.iterdfs("1", forward=False))
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1', '1.1', '1.1.2', '1.1.1'
-        ])
-        result = list(graph.iterdfs("1", "1.2.1", forward=False))
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1'
-        ])
-        result = graph.back_dfs("1")
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1', '1.1', '1.1.2', '1.1.1'
-        ])
-        result = graph.back_dfs("1", "1.2.1")
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1'
-        ])
-
-
-        # Introduce cyle:
-        graph.add_edge("1", "1.2")
-        result = list(graph.iterdfs("1", forward=False))
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1', '1.1', '1.1.2', '1.1.1'
-        ])
-
-        result = graph.back_dfs("1")
-        self.assertEqual(result, [
-            '1', '1.3', '1.2', '1.2.2', '1.2.2.3', '1.2.2.2',
-            '1.2.2.1', '1.2.1', '1.1', '1.1.2', '1.1.1'
-        ])
-
-
-    def test_iterdata(self):
-        graph = Graph()
-        graph.add_node("1", "I")
-        graph.add_node("1.1", "I.I")
-        graph.add_node("1.2", "I.II")
-        graph.add_node("1.3", "I.III")
-        graph.add_node("1.1.1", "I.I.I")
-        graph.add_node("1.1.2", "I.I.II")
-        graph.add_node("1.2.1", "I.II.I")
-        graph.add_node("1.2.2", "I.II.II")
-        graph.add_node("1.2.2.1", "I.II.II.I")
-        graph.add_node("1.2.2.2", "I.II.II.II")
-        graph.add_node("1.2.2.3", "I.II.II.III")
-
-        graph.add_edge("1", "1.1")
-        graph.add_edge("1", "1.2")
-        graph.add_edge("1", "1.3")
-        graph.add_edge("1.1", "1.1.1")
-        graph.add_edge("1.1", "1.1.2")
-        graph.add_edge("1.2", "1.2.1")
-        graph.add_edge("1.2", "1.2.2")
-        graph.add_edge("1.2.2", "1.2.2.1")
-        graph.add_edge("1.2.2", "1.2.2.2")
-        graph.add_edge("1.2.2", "1.2.2.3")
-
-        result = list(graph.iterdata("1", forward=True))
-        self.assertEqual(result, [
-            'I', 'I.III', 'I.II', 'I.II.II', 'I.II.II.III', 'I.II.II.II',
-            'I.II.II.I', 'I.II.I', 'I.I', 'I.I.II', 'I.I.I'
-        ])
-
-        result = list(graph.iterdata("1", end="1.2.1", forward=True))
-        self.assertEqual(result, [
-            'I', 'I.III', 'I.II', 'I.II.II', 'I.II.II.III', 'I.II.II.II',
-            'I.II.II.I', 'I.II.I'
-        ])
-
-        result = list(graph.iterdata("1", condition=lambda n: len(n) < 6, forward=True))
-        self.assertEqual(result, [
-            'I', 'I.III', 'I.II',
-            'I.I', 'I.I.I'
-        ])
-
-
-        # And the revese option:
-        graph = Graph()
-        graph.add_node("1", "I")
-        graph.add_node("1.1", "I.I")
-        graph.add_node("1.2", "I.II")
-        graph.add_node("1.3", "I.III")
-        graph.add_node("1.1.1", "I.I.I")
-        graph.add_node("1.1.2", "I.I.II")
-        graph.add_node("1.2.1", "I.II.I")
-        graph.add_node("1.2.2", "I.II.II")
-        graph.add_node("1.2.2.1", "I.II.II.I")
-        graph.add_node("1.2.2.2", "I.II.II.II")
-        graph.add_node("1.2.2.3", "I.II.II.III")
-
-        graph.add_edge("1.1", "1")
-        graph.add_edge("1.2", "1")
-        graph.add_edge("1.3", "1")
-        graph.add_edge("1.1.1", "1.1")
-        graph.add_edge("1.1.2", "1.1")
-        graph.add_edge("1.2.1", "1.2")
-        graph.add_edge("1.2.2", "1.2")
-        graph.add_edge("1.2.2.1", "1.2.2")
-        graph.add_edge("1.2.2.2", "1.2.2")
-        graph.add_edge("1.2.2.3", "1.2.2")
-
-        result = list(graph.iterdata("1", forward=False))
-        self.assertEqual(result, [
-            'I', 'I.III', 'I.II', 'I.II.II', 'I.II.II.III', 'I.II.II.II',
-            'I.II.II.I', 'I.II.I', 'I.I', 'I.I.II', 'I.I.I'
-        ])
-
-        result = list(graph.iterdata("1", end="1.2.1", forward=False))
-        self.assertEqual(result, [
-            'I', 'I.III', 'I.II', 'I.II.II', 'I.II.II.III', 'I.II.II.II',
-            'I.II.II.I', 'I.II.I'
-        ])
-
-        result = list(graph.iterdata("1", condition=lambda n: len(n) < 6, forward=False))
-        self.assertEqual(result, [
-            'I', 'I.III', 'I.II',
-            'I.I', 'I.I.I'
-        ])
-
-    def test_bfs(self):
-        graph = Graph()
-        graph.add_edge("1", "1.1")
-        graph.add_edge("1.1", "1.1.1")
-        graph.add_edge("1.1", "1.1.2")
-        graph.add_edge("1.1.2", "1.1.2.1")
-        graph.add_edge("1.1.2", "1.1.2.2")
-        graph.add_edge("1", "1.2")
-        graph.add_edge("1", "1.3")
-        graph.add_edge("1.2", "1.2.1")
-
-        self.assertEqual(graph.forw_bfs("1"),
-                ['1', '1.1', '1.2', '1.3', '1.1.1', '1.1.2', '1.2.1', '1.1.2.1', '1.1.2.2'])
-        self.assertEqual(graph.forw_bfs("1", "1.1.1"),
-                ['1', '1.1', '1.2', '1.3', '1.1.1'])
-
-
-        # And the "reverse" graph
-        graph = Graph()
-        graph.add_edge("1.1", "1")
-        graph.add_edge("1.1.1", "1.1")
-        graph.add_edge("1.1.2", "1.1")
-        graph.add_edge("1.1.2.1", "1.1.2")
-        graph.add_edge("1.1.2.2", "1.1.2")
-        graph.add_edge("1.2", "1")
-        graph.add_edge("1.3", "1")
-        graph.add_edge("1.2.1", "1.2")
-
-        self.assertEqual(graph.back_bfs("1"),
-                ['1', '1.1', '1.2', '1.3', '1.1.1', '1.1.2', '1.2.1', '1.1.2.1', '1.1.2.2'])
-        self.assertEqual(graph.back_bfs("1", "1.1.1"),
-                ['1', '1.1', '1.2', '1.3', '1.1.1'])
-
-
-
-        # check cycle handling
-        graph.add_edge("1", "1.2.1")
-        self.assertEqual(graph.back_bfs("1"),
-                ['1', '1.1', '1.2', '1.3', '1.1.1', '1.1.2', '1.2.1', '1.1.2.1', '1.1.2.2'])
-
-
-    def test_connected(self):
-        graph = Graph()
-        graph.add_node(1)
-        graph.add_node(2)
-        graph.add_node(3)
-        graph.add_node(4)
-
-        self.assertFalse(graph.connected())
-
-        graph.add_edge(1, 2)
-        graph.add_edge(3, 4)
-        self.assertFalse(graph.connected())
-
-        graph.add_edge(2, 3)
-        graph.add_edge(4, 1)
-        self.assertTrue(graph.connected())
-
-    def test_edges_complex(self):
-        g = Graph()
-        g.add_edge(1, 2)
-        e = g.edge_by_node(1,2)
-        g.hide_edge(e)
-        g.hide_node(2)
-        self.assertRaises(GraphError, g.restore_edge, e)
-
-        g.restore_all_edges()
-        self.assertRaises(GraphError, g.edge_by_id, e)
-
-    def test_clust_coef(self):
-        g = Graph()
-        g.add_edge(1, 2)
-        g.add_edge(1, 3)
-        g.add_edge(1, 4)
-        self.assertEqual(g.clust_coef(1), 0)
-
-        g.add_edge(2, 5)
-        g.add_edge(3, 5)
-        g.add_edge(4, 5)
-        self.assertEqual(g.clust_coef(1), 0)
-
-        g.add_edge(2, 3)
-        self.assertEqual(g.clust_coef(1), 1./6)
-        g.add_edge(2, 4)
-        self.assertEqual(g.clust_coef(1), 2./6)
-        g.add_edge(4, 2)
-        self.assertEqual(g.clust_coef(1), 3./6)
-
-        g.add_edge(2, 3)
-        g.add_edge(2, 4)
-        g.add_edge(3, 4)
-        g.add_edge(3, 2)
-        g.add_edge(4, 2)
-        g.add_edge(4, 3)
-        self.assertEqual(g.clust_coef(1), 1)
-
-
-    def test_get_hops(self):
-        graph = Graph()
-        graph.add_edge(1, 2)
-        graph.add_edge(1, 3)
-        graph.add_edge(2, 4)
-        graph.add_edge(4, 5)
-        graph.add_edge(5, 7)
-        graph.add_edge(7, 8)
-
-        self.assertEqual(graph.get_hops(1),
-            [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)])
-
-        self.assertEqual(graph.get_hops(1, 5),
-            [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3)])
-
-        graph.add_edge(5, 1)
-        graph.add_edge(7, 1)
-        graph.add_edge(7, 4)
-
-        self.assertEqual(graph.get_hops(1),
-            [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)])
-
-        # And the reverse graph
-        graph = Graph()
-        graph.add_edge(2, 1)
-        graph.add_edge(3, 1)
-        graph.add_edge(4, 2)
-        graph.add_edge(5, 4)
-        graph.add_edge(7, 5)
-        graph.add_edge(8, 7)
-
-        self.assertEqual(graph.get_hops(1, forward=False),
-            [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)])
-
-        self.assertEqual(graph.get_hops(1, 5, forward=False),
-            [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3)])
-
-        graph.add_edge(1, 5)
-        graph.add_edge(1, 7)
-        graph.add_edge(4, 7)
-
-        self.assertEqual(graph.get_hops(1, forward=False),
-            [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)])
-
-
-    def test_constructor(self):
-        graph = Graph(iter([
-                (1, 2),
-                (2, 3, 'a'),
-                (1, 3),
-                (3, 4),
-            ]))
-        self.assertEqual(graph.number_of_nodes(), 4)
-        self.assertEqual(graph.number_of_edges(), 4)
-        try:
-            graph.edge_by_node(1,2)
-            graph.edge_by_node(2,3)
-            graph.edge_by_node(1,3)
-            graph.edge_by_node(3,4)
-        except GraphError:
-            self.fail("Incorrect graph")
-
-        self.assertEqual(graph.edge_data(graph.edge_by_node(2, 3)), 'a')
-
-        self.assertRaises(GraphError, Graph, [(1,2,3,4)])
-
-if __name__ == "__main__": # pragma: no cover
-    unittest.main()
deleted file mode 100644
--- a/python/altgraph/altgraph_tests/test_graphstat.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import unittest
-
-from altgraph import GraphStat
-from altgraph import Graph
-import sys
-
-class TestDegreesDist (unittest.TestCase):
-
-    def test_simple(self):
-        a = Graph.Graph()
-        self.assertEqual(GraphStat.degree_dist(a), [])
-
-        a.add_node(1)
-        a.add_node(2)
-        a.add_node(3)
-
-        self.assertEqual(GraphStat.degree_dist(a), GraphStat._binning([0, 0, 0]))
-
-        for x in range(100):
-            a.add_node(x)
-
-        for x in range(1, 100):
-            for y in range(1, 50):
-                if x % y == 0:
-                    a.add_edge(x, y)
-
-        counts_inc = []
-        counts_out = []
-        for n in a:
-            counts_inc.append(a.inc_degree(n))
-            counts_out.append(a.out_degree(n))
-
-        self.assertEqual(GraphStat.degree_dist(a), GraphStat._binning(counts_out))
-        self.assertEqual(GraphStat.degree_dist(a, mode='inc'), GraphStat._binning(counts_inc))
-
-class TestBinning (unittest.TestCase):
-    def test_simple(self):
-
-        # Binning [0, 100) into 10 bins
-        a = list(range(100))
-        out = GraphStat._binning(a, limits=(0, 100), bin_num=10)
-
-        self.assertEqual(out,
-                [ (x*1.0, 10) for x in range(5, 100, 10) ])
-
-
-        # Check that outliers are ignored.
-        a = list(range(100))
-        out = GraphStat._binning(a, limits=(0, 90), bin_num=9)
-
-        self.assertEqual(out,
-                [ (x*1.0, 10) for x in range(5, 90, 10) ])
-
-
-        out = GraphStat._binning(a, limits=(0, 100), bin_num=15)
-        binSize = 100 / 15.0
-        result = [0]*15
-        for i in range(100):
-            bin = int(i/binSize)
-            try:
-                result[bin] += 1
-            except IndexError:
-                pass
-
-        result = [ (i * binSize + binSize/2, result[i]) for i in range(len(result))]
-
-        self.assertEqual(result, out)
-
-if __name__ == "__main__": # pragma: no cover
-    unittest.main()
deleted file mode 100644
--- a/python/altgraph/altgraph_tests/test_graphutil.py
+++ /dev/null
@@ -1,140 +0,0 @@
-import unittest
-from altgraph import GraphUtil
-from altgraph import Graph, GraphError
-
-class TestGraphUtil (unittest.TestCase):
-
-    def test_generate_random(self):
-        g =  GraphUtil.generate_random_graph(10, 50)
-        self.assertEqual(g.number_of_nodes(), 10)
-        self.assertEqual(g.number_of_edges(), 50)
-
-        seen = set()
-
-        for e in g.edge_list():
-            h, t = g.edge_by_id(e)
-            self.assertFalse(h == t)
-            self.assertTrue((h, t) not in seen)
-            seen.add((h, t))
-
-        g =  GraphUtil.generate_random_graph(5, 30, multi_edges=True)
-        self.assertEqual(g.number_of_nodes(), 5)
-        self.assertEqual(g.number_of_edges(), 30)
-
-        seen = set()
-
-        for e in g.edge_list():
-            h, t = g.edge_by_id(e)
-            self.assertFalse(h == t)
-            if (h, t) in seen:
-                break
-            seen.add((h, t))
-
-        else:
-            self.fail("no duplicates?")
-
-        g =  GraphUtil.generate_random_graph(5, 21, self_loops=True)
-        self.assertEqual(g.number_of_nodes(), 5)
-        self.assertEqual(g.number_of_edges(), 21)
-
-        seen = set()
-
-        for e in g.edge_list():
-            h, t = g.edge_by_id(e)
-            self.assertFalse((h, t) in seen)
-            if h == t:
-                break
-            seen.add((h, t))
-
-        else:
-            self.fail("no self loops?")
-
-        self.assertRaises(GraphError, GraphUtil.generate_random_graph, 5, 21)
-        g = GraphUtil.generate_random_graph(5, 21, True)
-        self.assertRaises(GraphError, GraphUtil.generate_random_graph, 5, 26, True)
-
-    def test_generate_scale_free(self):
-        graph = GraphUtil.generate_scale_free_graph(50, 10)
-        self.assertEqual(graph.number_of_nodes(), 500)
-
-        counts = {}
-        for node in graph:
-            degree = graph.inc_degree(node)
-            try:
-                counts[degree] += 1
-            except KeyError:
-                counts[degree] = 1
-
-        total_counts = sum(counts.values())
-        P = {}
-        for degree, count in counts.items():
-            P[degree] = count * 1.0 / total_counts
-
-        # XXX: use algoritm <http://stackoverflow.com/questions/3433486/how-to-do-exponential-and-logarithmic-curve-fitting-in-python-i-found-only-polyn>
-        # to check if P[degree] ~ degree ** G (for some G)
-
-        #print sorted(P.items())
-
-        #print sorted([(count, degree) for degree, count in counts.items()])
-
-        #self.fail("missing tests for GraphUtil.generate_scale_free_graph")
-
-    def test_filter_stack(self):
-        g = Graph.Graph()
-        g.add_node("1", "N.1")
-        g.add_node("1.1", "N.1.1")
-        g.add_node("1.1.1", "N.1.1.1")
-        g.add_node("1.1.2", "N.1.1.2")
-        g.add_node("1.1.3", "N.1.1.3")
-        g.add_node("1.1.1.1", "N.1.1.1.1")
-        g.add_node("1.1.1.2", "N.1.1.1.2")
-        g.add_node("1.1.2.1", "N.1.1.2.1")
-        g.add_node("1.1.2.2", "N.1.1.2.2")
-        g.add_node("1.1.2.3", "N.1.1.2.3")
-        g.add_node("2", "N.2")
-
-        g.add_edge("1", "1.1")
-        g.add_edge("1.1", "1.1.1")
-        g.add_edge("1.1", "1.1.2")
-        g.add_edge("1.1", "1.1.3")
-        g.add_edge("1.1.1", "1.1.1.1")
-        g.add_edge("1.1.1", "1.1.1.2")
-        g.add_edge("1.1.2", "1.1.2.1")
-        g.add_edge("1.1.2", "1.1.2.2")
-        g.add_edge("1.1.2", "1.1.2.3")
-
-        v, r, o =  GraphUtil.filter_stack(g, "1", [
-            lambda n: n != "N.1.1.1", lambda n: n != "N.1.1.2.3" ])
-
-        self.assertEqual(v,
-            set(["1", "1.1", "1.1.1", "1.1.2", "1.1.3",
-                "1.1.1.1", "1.1.1.2", "1.1.2.1", "1.1.2.2",
-                "1.1.2.3"]))
-        self.assertEqual(r, set([
-                "1.1.1", "1.1.2.3"]))
-
-        o.sort()
-        self.assertEqual(o,
-            [
-                ("1.1", "1.1.1.1"),
-                ("1.1", "1.1.1.2")
-            ])
-
-        v, r, o =  GraphUtil.filter_stack(g, "1", [
-            lambda n: n != "N.1.1.1", lambda n: n != "N.1.1.1.2" ])
-
-        self.assertEqual(v,
-            set(["1", "1.1", "1.1.1", "1.1.2", "1.1.3",
-                "1.1.1.1", "1.1.1.2", "1.1.2.1", "1.1.2.2",
-                "1.1.2.3"]))
-        self.assertEqual(r, set([
-                "1.1.1", "1.1.1.2"]))
-
-        self.assertEqual(o,
-            [
-                ("1.1", "1.1.1.1"),
-            ])
-
-
-if __name__ == "__main__": # pragma: no cover
-    unittest.main()
deleted file mode 100644
--- a/python/altgraph/altgraph_tests/test_object_graph.py
+++ /dev/null
@@ -1,349 +0,0 @@
-import unittest
-import sys
-from altgraph.ObjectGraph import ObjectGraph
-from altgraph.Graph import Graph
-
-try:
-    from StringIO import StringIO
-except ImportError:
-    from io import StringIO
-
-
-class Node (object):
-    def __init__(self, graphident):
-        self.graphident = graphident
-
-class SubNode (Node):
-    pass
-
-class ArgNode (object):
-    def __init__(self, graphident, *args, **kwds):
-        self.graphident = graphident
-        self.args = args
-        self.kwds = kwds
-
-    def __repr__(self):
-        return '<ArgNode %s>'%(self.graphident,)
-
-class TestObjectGraph (unittest.TestCase):
-
-    def test_constructor(self):
-        graph = ObjectGraph()
-        self.assertTrue(isinstance(graph, ObjectGraph))
-
-        g = Graph()
-        graph = ObjectGraph(g)
-        self.assertTrue(graph.graph is g)
-        self.assertEqual(graph.debug, 0)
-        self.assertEqual(graph.indent, 0)
-
-        graph = ObjectGraph(debug=5)
-        self.assertEqual(graph.debug, 5)
-
-    def test_repr(self):
-        graph = ObjectGraph()
-        self.assertEqual(repr(graph), '<ObjectGraph>')
-
-
-    def testNodes(self):
-        graph = ObjectGraph()
-        n1 = Node("n1")
-        n2 = Node("n2")
-        n3 = Node("n3")
-        n4 = Node("n4")
-
-        n1b = Node("n1")
-
-        self.assertTrue(graph.getIdent(graph)  is graph)
-        self.assertTrue(graph.getRawIdent(graph)  is graph)
-
-        graph.addNode(n1)
-        graph.addNode(n2)
-        graph.addNode(n3)
-
-        self.assertTrue(n1 in graph)
-        self.assertFalse(n4 in graph)
-        self.assertTrue("n1" in graph)
-        self.assertFalse("n4" in graph)
-
-        self.assertTrue(graph.findNode(n1) is n1)
-        self.assertTrue(graph.findNode(n1b) is n1)
-        self.assertTrue(graph.findNode(n2) is n2)
-        self.assertTrue(graph.findNode(n4) is None)
-        self.assertTrue(graph.findNode("n1") is n1)
-        self.assertTrue(graph.findNode("n2") is n2)
-        self.assertTrue(graph.findNode("n4") is None)
-
-        self.assertEqual(graph.getRawIdent(n1), "n1")
-        self.assertEqual(graph.getRawIdent(n1b), "n1")
-        self.assertEqual(graph.getRawIdent(n4), "n4")
-        self.assertEqual(graph.getRawIdent("n1"), None)
-
-        self.assertEqual(graph.getIdent(n1), "n1")
-        self.assertEqual(graph.getIdent(n1b), "n1")
-        self.assertEqual(graph.getIdent(n4), "n4")
-        self.assertEqual(graph.getIdent("n1"), "n1")
-
-        self.assertTrue(n3 in graph)
-        graph.removeNode(n3)
-        self.assertTrue(n3 not in graph)
-        graph.addNode(n3)
-        self.assertTrue(n3 in graph)
-
-        n = graph.createNode(SubNode, "n1")
-        self.assertTrue(n is n1)
-
-        n = graph.createNode(SubNode, "n8")
-        self.assertTrue(isinstance(n, SubNode))
-        self.assertTrue(n in graph)
-        self.assertTrue(graph.findNode("n8") is n)
-
-        n = graph.createNode(ArgNode, "args", 1, 2, 3, a='a', b='b')
-        self.assertTrue(isinstance(n, ArgNode))
-        self.assertTrue(n in graph)
-        self.assertTrue(graph.findNode("args") is n)
-        self.assertEqual(n.args, (1, 2, 3))
-        self.assertEqual(n.kwds, {'a':'a', 'b':'b'})
-
-    def testEdges(self):
-        graph = ObjectGraph()
-        n1 = graph.createNode(ArgNode, "n1", 1)
-        n2 = graph.createNode(ArgNode, "n2", 1)
-        n3 = graph.createNode(ArgNode, "n3", 1)
-        n4 = graph.createNode(ArgNode, "n4", 1)
-
-        graph.createReference(n1, n2, "n1-n2")
-        graph.createReference("n1", "n3", "n1-n3")
-        graph.createReference("n2", n3)
-
-        g = graph.graph
-        e = g.edge_by_node("n1", "n2")
-        self.assertTrue(e is not None)
-        self.assertEqual(g.edge_data(e), "n1-n2")
-
-        e = g.edge_by_node("n1", "n3")
-        self.assertTrue(e is not None)
-        self.assertEqual(g.edge_data(e), "n1-n3")
-
-        e = g.edge_by_node("n2", "n3")
-        self.assertTrue(e is not None)
-        self.assertEqual(g.edge_data(e), None)
-
-        e = g.edge_by_node("n1", "n4")
-        self.assertTrue(e is None)
-
-        graph.removeReference(n1, n2)
-        e = g.edge_by_node("n1", "n2")
-        self.assertTrue(e is None)
-
-        graph.removeReference("n1", "n3")
-        e = g.edge_by_node("n1", "n3")
-        self.assertTrue(e is None)
-
-        graph.createReference(n1, n2, "foo")
-        e = g.edge_by_node("n1", "n2")
-        self.assertTrue(e is not None)
-        self.assertEqual(g.edge_data(e), "foo")
-
-
-    def test_flatten(self):
-        graph = ObjectGraph()
-        n1 = graph.createNode(ArgNode, "n1", 1)
-        n2 = graph.createNode(ArgNode, "n2", 2)
-        n3 = graph.createNode(ArgNode, "n3", 3)
-        n4 = graph.createNode(ArgNode, "n4", 4)
-        n5 = graph.createNode(ArgNode, "n5", 5)
-        n6 = graph.createNode(ArgNode, "n6", 6)
-        n7 = graph.createNode(ArgNode, "n7", 7)
-        n8 = graph.createNode(ArgNode, "n8", 8)
-
-        graph.createReference(graph, n1)
-        graph.createReference(graph, n7)
-        graph.createReference(n1, n2)
-        graph.createReference(n1, n4)
-        graph.createReference(n2, n3)
-        graph.createReference(n2, n5)
-        graph.createReference(n5, n6)
-        graph.createReference(n4, n6)
-        graph.createReference(n4, n2)
-
-        self.assertFalse(isinstance(graph.flatten(), list))
-
-        fl = list(graph.flatten())
-        self.assertTrue(n1 in fl)
-        self.assertTrue(n2 in fl)
-        self.assertTrue(n3 in fl)
-        self.assertTrue(n4 in fl)
-        self.assertTrue(n5 in fl)
-        self.assertTrue(n6 in fl)
-        self.assertTrue(n7 in fl)
-        self.assertFalse(n8 in fl)
-
-        fl = list(graph.flatten(start=n2))
-        self.assertFalse(n1 in fl)
-        self.assertTrue(n2 in fl)
-        self.assertTrue(n3 in fl)
-        self.assertFalse(n4 in fl)
-        self.assertTrue(n5 in fl)
-        self.assertTrue(n6 in fl)
-        self.assertFalse(n7 in fl)
-        self.assertFalse(n8 in fl)
-
-        graph.createReference(n1, n5)
-        fl = list(graph.flatten(lambda n: n.args[0] % 2 != 0))
-        self.assertTrue(n1 in fl)
-        self.assertFalse(n2 in fl)
-        self.assertFalse(n3 in fl)
-        self.assertFalse(n4 in fl)
-        self.assertTrue(n5 in fl)
-        self.assertFalse(n6 in fl)
-        self.assertTrue(n7 in fl)
-        self.assertFalse(n8 in fl)
-
-    def test_iter_nodes(self):
-        graph = ObjectGraph()
-        n1 = graph.createNode(ArgNode, "n1", 1)
-        n2 = graph.createNode(ArgNode, "n2", 2)
-        n3 = graph.createNode(ArgNode, "n3", 3)
-        n4 = graph.createNode(ArgNode, "n4", 4)
-        n5 = graph.createNode(ArgNode, "n5", 5)
-        n6 = graph.createNode(ArgNode, "n6", 5)
-
-        nodes = graph.nodes()
-        if sys.version[0] == '2':
-            self.assertTrue(hasattr(nodes, 'next'))
-        else:
-            self.assertTrue(hasattr(nodes, '__next__'))
-        self.assertTrue(hasattr(nodes, '__iter__'))
-
-        nodes = list(nodes)
-        self.assertEqual(len(nodes), 6)
-        self.assertTrue(n1 in nodes)
-        self.assertTrue(n2 in nodes)
-        self.assertTrue(n3 in nodes)
-        self.assertTrue(n4 in nodes)
-        self.assertTrue(n5 in nodes)
-        self.assertTrue(n6 in nodes)
-
-    def test_get_edges(self):
-        graph = ObjectGraph()
-        n1 = graph.createNode(ArgNode, "n1", 1)
-        n2 = graph.createNode(ArgNode, "n2", 2)
-        n3 = graph.createNode(ArgNode, "n3", 3)
-        n4 = graph.createNode(ArgNode, "n4", 4)
-        n5 = graph.createNode(ArgNode, "n5", 5)
-        n6 = graph.createNode(ArgNode, "n6", 5)
-
-        graph.createReference(n1, n2)
-        graph.createReference(n1, n3)
-        graph.createReference(n3, n1)
-        graph.createReference(n5, n1)
-        graph.createReference(n2, n4)
-        graph.createReference(n2, n5)
-        graph.createReference(n6, n2)
-
-        outs, ins = graph.get_edges(n1)
-
-        self.assertFalse(isinstance(outs, list))
-        self.assertFalse(isinstance(ins, list))
-
-        ins = list(ins)
-        outs = list(outs)
-
-
-        self.assertTrue(n1 not in outs)
-        self.assertTrue(n2 in outs)
-        self.assertTrue(n3 in outs)
-        self.assertTrue(n4 not in outs)
-        self.assertTrue(n5 not in outs)
-        self.assertTrue(n6 not in outs)
-
-        self.assertTrue(n1 not in ins)
-        self.assertTrue(n2 not in ins)
-        self.assertTrue(n3 in ins)
-        self.assertTrue(n4 not in ins)
-        self.assertTrue(n5 in ins)
-        self.assertTrue(n6 not in ins)
-
-    def test_filterStack(self):
-        graph = ObjectGraph()
-        n1 = graph.createNode(ArgNode, "n1", 0)
-        n11 = graph.createNode(ArgNode, "n1.1", 1)
-        n12 = graph.createNode(ArgNode, "n1.2", 0)
-        n111 = graph.createNode(ArgNode, "n1.1.1", 0)
-        n112 = graph.createNode(ArgNode, "n1.1.2",2)
-        n2 = graph.createNode(ArgNode, "n2", 0)
-        n3 = graph.createNode(ArgNode, "n2", 0)
-
-        graph.createReference(None, n1)
-        graph.createReference(None, n2)
-        graph.createReference(n1, n11)
-        graph.createReference(n1, n12)
-        graph.createReference(n11, n111)
-        graph.createReference(n11, n112)
-
-        self.assertTrue(n1 in graph)
-        self.assertTrue(n2 in graph)
-        self.assertTrue(n11 in graph)
-        self.assertTrue(n12 in graph)
-        self.assertTrue(n111 in graph)
-        self.assertTrue(n112 in graph)
-        self.assertTrue(n2 in graph)
-        self.assertTrue(n3 in graph)
-
-        visited, removes, orphans = graph.filterStack(
-                [lambda n: n.args[0] != 1, lambda n: n.args[0] != 2])
-
-        self.assertEqual(visited, 6)
-        self.assertEqual(removes, 2)
-        self.assertEqual(orphans, 1)
-
-        e = graph.graph.edge_by_node(n1.graphident, n111.graphident)
-        self.assertEqual(graph.graph.edge_data(e), "orphan")
-
-        self.assertTrue(n1 in graph)
-        self.assertTrue(n2 in graph)
-        self.assertTrue(n11 not in graph)
-        self.assertTrue(n12 in graph)
-        self.assertTrue(n111 in graph)
-        self.assertTrue(n112 not in graph)
-        self.assertTrue(n2 in graph)
-        self.assertTrue(n3 in graph)
-
-
-class TestObjectGraphIO (unittest.TestCase):
-    def setUp(self):
-        self._stdout = sys.stdout
-
-    def tearDown(self):
-        sys.stdout = self._stdout
-
-    def test_msg(self):
-        graph = ObjectGraph()
-
-        sys.stdout = fp = StringIO()
-        graph.msg(0, "foo")
-        self.assertEqual(fp.getvalue(), "foo \n")
-
-        sys.stdout = fp = StringIO()
-        graph.msg(5, "foo")
-        self.assertEqual(fp.getvalue(), "")
-
-        sys.stdout = fp = StringIO()
-        graph.debug = 10
-        graph.msg(5, "foo")
-        self.assertEqual(fp.getvalue(), "foo \n")
-
-        sys.stdout = fp = StringIO()
-        graph.msg(0, "foo", 1, "a")
-        self.assertEqual(fp.getvalue(), "foo 1 'a'\n")
-
-        sys.stdout = fp = StringIO()
-        graph.msgin(0, "hello", "world")
-        graph.msg(0, "test me")
-        graph.msgout(0, "bye bye")
-        self.assertEqual(fp.getvalue(), "hello 'world'\n  test me \nbye bye \n")
-
-
-if __name__ == "__main__": # pragma: no cover
-    unittest.main()
deleted file mode 100644
--- a/python/altgraph/doc/Makefile
+++ /dev/null
@@ -1,89 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest
-
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  html      to make standalone HTML files"
-	@echo "  dirhtml   to make HTML files named index.html in directories"
-	@echo "  pickle    to make pickle files"
-	@echo "  json      to make JSON files"
-	@echo "  htmlhelp  to make HTML files and a HTML help project"
-	@echo "  qthelp    to make HTML files and a qthelp project"
-	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  changes   to make an overview of all changed/added/deprecated items"
-	@echo "  linkcheck to check all external links for integrity"
-	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
-
-clean:
-	-rm -rf $(BUILDDIR)/*
-
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/altgraph.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/altgraph.qhc"
-
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
-	      "run these through (pdf)latex."
-
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
deleted file mode 100644
index b78e2f235a9d2e6f722f8b32ba666512e1bccae6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3674093133f608f585c29468e5c7c89dd82157d5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f2bd9ea8921fee73cc8ff49911d42c7cd71c5e73..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4e7b4ea03bc71c0c62ce9f9f0e6626bda65c562a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5c9aef42c76fa26d53d529ec54b498f1c8106cad..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e22ca572d132318f3a25b9201b8cbd0a6089d448..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2e0503615825a09a63f5ac507542fd7b49106048..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index eb9fa2c65e248b8da49f5cf3fc1d2c1cea8a91d9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f3241e5e3e315a38279e0a972e43775690dc1d36..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ba3ce378a66f7281cee3dd348cc7617cf11053fa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 802396b9cc9b1789476227fcf8d46eff0d9f57c8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/.buildinfo
+++ /dev/null
@@ -1,4 +0,0 @@
-# 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: 84aa655833f036f5ba0f6f2dbd1945fa
-tags: 645f666f9bcd5a90fca523b33c5a78b7
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/changelog.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-Release history
-===============
-
-0.11
-----
-
-- Stabilize the order of elements in dot file exports,
-  patch from bitbucket user 'pombredanne'.
-
-- Tweak setup.py file to remove dependency on distribute (but
-  keep the dependency on setuptools)
-
-
-0.10.2
-------
-
-- There where no classifiers in the package metadata due to a bug
-  in setup.py
-
-0.10.1
-------
-
-This is a bugfix release
-
-Bug fixes:
-
-- Issue #3: The source archive contains a README.txt
-  while the setup file refers to ReadMe.txt.
-
-  This is caused by a misfeature in distutils, as a
-  workaround I've renamed ReadMe.txt to README.txt
-  in the source tree and setup file.
-
-
-0.10
------
-
-This is a minor feature release
-
-Features:
-
-- Do not use "2to3" to support Python 3.
-
-  As a side effect of this altgraph now supports
-  Python 2.6 and later, and no longer supports
-  earlier releases of Python.
-
-- The order of attributes in the Dot output
-  is now always alphabetical.
-
-  With this change the output will be consistent
-  between runs and Python versions.
-
-0.9
----
-
-This is a minor bugfix release
-
-Features:
-
-- Added ``altgraph.ObjectGraph.ObjectGraph.nodes``, a method
-  yielding all nodes in an object graph.
-
-Bugfixes:
-
-- The 0.8 release didn't work with py2app when using
-  python 3.x.
-
-
-0.8
------
-
-This is a minor feature release. The major new feature
-is a extensive set of unittests, which explains almost
-all other changes in this release.
-
-Bugfixes:
-
-- Installing failed with Python 2.5 due to using a distutils
-  class that isn't available in that version of Python
-  (issue #1 on the issue tracker)
-
-- ``altgraph.GraphStat.degree_dist`` now actually works
-
-- ``altgraph.Graph.add_edge(a, b, create_nodes=False)`` will
-  no longer create the edge when one of the nodes doesn't
-  exist.
-
-- ``altgraph.Graph.forw_topo_sort`` failed for some sparse graphs.
-
-- ``altgraph.Graph.back_topo_sort`` was completely broken in
-  previous releases.
-
-- ``altgraph.Graph.forw_bfs_subgraph`` now actually works.
-
-- ``altgraph.Graph.back_bfs_subgraph`` now actually works.
-
-- ``altgraph.Graph.iterdfs`` now returns the correct result
-  when the ``forward`` argument is ``False``.
-
-- ``altgraph.Graph.iterdata`` now returns the correct result
-  when the ``forward`` argument is ``False``.
-
-
-Features:
-
-- The ``altgraph.Graph`` constructor now accepts an argument
-  that contains 2- and 3-tuples instead of requireing that
-  all items have the same size. The (optional) argument can now
-  also be any iterator.
-
-- ``altgraph.Graph.Graph.add_node`` has no effect when you
-  add a hidden node.
-
-- The private method ``altgraph.Graph._bfs`` is no longer
-  present.
-
-- The private method ``altgraph.Graph._dfs`` is no longer
-  present.
-
-- ``altgraph.ObjectGraph`` now has a ``__contains__`` methods,
-  which means you can use the ``in`` operator to check if a
-  node is part of a graph.
-
-- ``altgraph.GraphUtil.generate_random_graph`` will raise
-  ``GraphError`` instead of looping forever when it is
-  impossible to create the requested graph.
-
-- ``altgraph.Dot.edge_style`` raises ``GraphError`` when
-  one of the nodes is not present in the graph. The method
-  silently added the tail in the past, but without ensuring
-  a consistent graph state.
-
-- ``altgraph.Dot.save_img`` now works when the mode is
-  ``"neato"``.
-
-0.7.2
------
-
-This is a minor bugfix release
-
-Bugfixes:
-
-- distutils didn't include the documentation subtree
-
-0.7.1
------
-
-This is a minor feature release
-
-Features:
-
-- Documentation is now generated using `sphinx <http://pypi.python.org/pypi/sphinx>`_
-  and can be viewed at <http://packages.python.org/altgraph>.
-
-- The repository has moved to bitbucket
-
-- ``altgraph.GraphStat.avg_hops`` is no longer present, the function had no
-  implementation and no specified behaviour.
-
-- the module ``altgraph.compat`` is gone, which means altgraph will no
-  longer work with Python 2.3.
-
-
-0.7.0
------
-
-This is a minor feature release.
-
-Features:
-
-- Support for Python 3
-
-- It is now possible to run tests using 'python setup.py test'
-
-  (The actual testsuite is still very minimal though)
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/core.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-:mod:`altgraph` --- A Python Graph Library
-==================================================
-
-.. module:: altgraph
-   :synopsis: A directional graph for python
-
-altgraph is a fork of `graphlib <http://pygraphlib.sourceforge.net>`_ tailored
-to use newer Python 2.3+ features, including additional support used by the
-py2app suite (modulegraph and macholib, specifically).
-
-altgraph is a python based graph (network) representation and manipulation package.
-It has started out as an extension to the `graph_lib module <http://www.ece.arizona.edu/~denny/python_nest/graph_lib_1.0.1.html>`_
-written by Nathan Denny it has been significantly optimized and expanded.
-
-The :class:`altgraph.Graph.Graph` class is loosely modeled after the `LEDA <http://www.algorithmic-solutions.com/enleda.htm>`_ 
-(Library of Efficient Datatypes)  representation. The library
-includes methods for constructing graphs, BFS and DFS traversals,
-topological sort, finding connected components, shortest paths as well as a number
-graph statistics functions. The library can also visualize graphs
-via `graphviz <http://www.research.att.com/sw/tools/graphviz/>`_.
-
-
-.. exception:: GraphError
-
-   Exception raised when methods are called with bad values of
-   an inconsistent state.
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/dot.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-:mod:`altgraph.Dot` --- Interface to the dot language
-=====================================================
-
-.. module:: altgraph.Dot
-   :synopsis: Interface to the dot language as used by Graphviz..
-
-The :py:mod:`~altgraph.Dot` module provides a simple interface to the
-file format used in the `graphviz`_ program. The module is intended to 
-offload the most tedious part of the process (the **dot** file generation) 
-while transparently exposing most of its features.
-
-.. _`graphviz`: <http://www.research.att.com/sw/tools/graphviz/>`_
-
-To display the graphs or to generate image files the `graphviz`_
-package needs to be installed on the system, moreover the :command:`dot` and :command:`dotty` programs must
-be accesible in the program path so that they can be ran from processes spawned
-within the module. 
-
-Example usage
--------------
-
-Here is a typical usage::
-
-    from altgraph import Graph, Dot
-
-    # create a graph
-    edges = [ (1,2), (1,3), (3,4), (3,5), (4,5), (5,4) ]
-    graph = Graph.Graph(edges)
-    
-    # create a dot representation of the graph
-    dot = Dot.Dot(graph)
-
-    # display the graph
-    dot.display()
-
-    # save the dot representation into the mydot.dot file
-    dot.save_dot(file_name='mydot.dot')
-
-    # save dot file as gif image into the graph.gif file
-    dot.save_img(file_name='graph', file_type='gif')
-
-
-Directed graph and non-directed graph
--------------------------------------
-
-Dot class can use for both directed graph and non-directed graph
-by passing *graphtype* parameter.
-
-Example::
-
-    # create directed graph(default)
-    dot = Dot.Dot(graph, graphtype="digraph")
-
-    # create non-directed graph
-    dot = Dot.Dot(graph, graphtype="graph")
-
-
-Customizing the output
-----------------------
-
-The graph drawing process may be customized by passing
-valid :command:`dot` parameters for the nodes and edges. For a list of all
-parameters see the `graphviz`_ documentation.
-
-Example::
-
-    # customizing the way the overall graph is drawn
-    dot.style(size='10,10', rankdir='RL', page='5, 5' , ranksep=0.75)
-
-    # customizing node drawing
-    dot.node_style(1, label='BASE_NODE',shape='box', color='blue' )
-    dot.node_style(2, style='filled', fillcolor='red')
-
-    # customizing edge drawing
-    dot.edge_style(1, 2, style='dotted')
-    dot.edge_style(3, 5, arrowhead='dot', label='binds', labelangle='90')
-    dot.edge_style(4, 5, arrowsize=2, style='bold')
-
-
-    .. note:: 
-       
-       dotty (invoked via :py:func:`~altgraph.Dot.display`) may not be able to
-       display all graphics styles. To verify the output save it to an image 
-       file and look at it that way.
-
-Valid attributes
-----------------
-
-- dot styles, passed via the :py:meth:`Dot.style` method::
-
-    rankdir = 'LR'   (draws the graph horizontally, left to right)
-    ranksep = number (rank separation in inches)
-
-- node attributes, passed via the :py:meth:`Dot.node_style` method::
-
-     style = 'filled' | 'invisible' | 'diagonals' | 'rounded'
-     shape = 'box' | 'ellipse' | 'circle' | 'point' | 'triangle'
-
-- edge attributes, passed via the :py:meth:`Dot.edge_style` method::
-
-     style     = 'dashed' | 'dotted' | 'solid' | 'invis' | 'bold'
-     arrowhead = 'box' | 'crow' | 'diamond' | 'dot' | 'inv' | 'none' | 'tee' | 'vee'
-     weight    = number (the larger the number the closer the nodes will be)
-
-- valid `graphviz colors <http://www.research.att.com/~erg/graphviz/info/colors.html>`_
-
-- for more details on how to control the graph drawing process see the 
-  `graphviz reference <http://www.research.att.com/sw/tools/graphviz/refs.html>`_.
-
-
-Class interface
----------------
-
-.. class:: Dot(graph[, nodes[, edgefn[, nodevisitor[, edgevisitor[, name[, dot[, dotty[, neato[, graphtype]]]]]]]]])
-
-  Creates a new Dot generator based on the specified 
-  :class:`Graph <altgraph.Graph.Graph>`.  The Dot generator won't reference
-  the *graph* once it is constructed.
-
-  If the *nodes* argument is present it is the list of nodes to include
-  in the graph, otherwise all nodes in *graph* are included.
-  
-  If the *edgefn* argument is present it is a function that yields the
-  nodes connected to another node, this defaults to 
-  :meth:`graph.out_nbr <altgraph.Graph.Graph.out_nbr>`. The constructor won't
-  add edges to the dot file unless both the head and tail of the edge
-  are in *nodes*.
-
-  If the *name* is present it specifies the name of the graph in the resulting
-  dot file. The default is ``"G"``.
-
-  The functions *nodevisitor* and *edgevisitor* return the default style
-  for a given edge or node (both default to functions that return an empty
-  style).
-
-  The arguments *dot*, *dotty* and *neato* are used to pass the path to 
-  the corresponding `graphviz`_ command.
-
-
-Updating graph attributes
-.........................
-
-.. method:: Dot.style(\**attr)
-
-   Sets the overall style (graph attributes) to the given attributes.
-
-   See `Valid Attributes`_ for more information about the attributes.
-
-.. method:: Dot.node_style(node, \**attr)
-
-   Sets the style for *node* to the given attributes.
-
-   This method will add *node* to the graph when it isn't already 
-   present.
-
-   See `Valid Attributes`_ for more information about the attributes.
-
-.. method:: Dot.all_node_style(\**attr)
-
-   Replaces the current style for all nodes
-
-
-.. method:: edge_style(head, tail, \**attr)
-
-   Sets the style of an edge to the given attributes. The edge will
-   be added to the graph when it isn't already present, but *head*
-   and *tail* must both be valid nodes.
-
-   See `Valid Attributes`_ for more information about the attributes.
-
-
-
-Emitting output
-...............
-
-.. method:: Dot.display([mode])
-
-   Displays the current graph via dotty.
-
-   If the *mode* is ``"neato"`` the dot file is processed with
-   the neato command before displaying.
-
-   This method won't return until the dotty command exits.
-
-.. method:: save_dot(filename)
-
-   Saves the current graph representation into the given file.
-
-   .. note::
-
-       For backward compatibility reasons this method can also
-       be called without an argument, it will then write the graph
-       into a fixed filename (present in the attribute :data:`Graph.temp_dot`).
-
-       This feature is deprecated and should not be used.
-
-
-.. method:: save_image(file_name[, file_type[, mode]])
-
-   Saves the current graph representation as an image file. The output
-   is written into a file whose basename is *file_name* and whose suffix
-   is *file_type*.
-
-   The *file_type* specifies the type of file to write, the default
-   is ``"gif"``.
-
-   If the *mode* is ``"neato"`` the dot file is processed with
-   the neato command before displaying.
-
-   .. note::
-
-       For backward compatibility reasons this method can also
-       be called without an argument, it will then write the graph
-       with a fixed basename (``"out"``).
-
-       This feature is deprecated and should not be used.
-
-.. method:: iterdot()
-
-   Yields all lines of a `graphviz`_ input file (including line endings).
-
-.. method:: __iter__()
-
-   Alias for the :meth:`iterdot` method.
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/graph.txt
+++ /dev/null
@@ -1,299 +0,0 @@
-:mod:`altgraph.Graph` --- Basic directional graphs
-==================================================
-
-.. module:: altgraph.Graph
-   :synopsis: Basic directional graphs.
-
-The module :mod:`altgraph.Graph` provides a class :class:`Graph` that
-represents a directed graph with *N* nodes and *E* edges.
-
-.. class:: Graph([edges])
-
-  Constructs a new empty :class:`Graph` object. If the optional
-  *edges* parameter is supplied, updates the graph by adding the
-  specified edges. 
-  
-  All of the elements in *edges* should be tuples with two or three 
-  elements. The first two elements of the tuple are the source and
-  destination node of the edge, the optional third element is the
-  edge data.  The source and destination nodes are added to the graph
-  when the aren't already present.
-
-
-Node related methods
---------------------
-
-.. method:: Graph.add_node(node[, node_data])
-
-   Adds a new node to the graph if it is not already present. The new
-   node must be a hashable object.
-
-   Arbitrary data can be attached to the node via the optional *node_data*
-   argument.
-
-   .. note:: the node also won't be added to the graph when it is
-      present but currently hidden.
-
-
-.. method:: Graph.hide_node(node)
-
-   Hides a *node* from the graph. The incoming and outgoing edges of
-   the node will also be hidden. 
-
-   Raises :class:`altgraph.GraphError` when the node is not (visible)
-   node of the graph.
-
-
-.. method:: Graph.restore_node(node)
-
-   Restores a previously hidden *node*. The incoming and outgoing
-   edges of the node are also restored.
-
-   Raises :class:`altgraph.GraphError` when the node is not a hidden
-   node of the graph.
-
-.. method:: Graph.restore_all_nodes()
-
-   Restores all hidden nodes.
-
-.. method:: Graph.number_of_nodes()
-
-   Return the number of visible nodes in the graph.
-
-.. method:: Graph.number_of_hidden_nodes()
-
-   Return the number of hidden nodes in the graph.
-
-.. method:: Graph.node_list()
-
-   Return a list with all visible nodes in the graph.
-
-.. method:: Graph.hidden_node_list()
-
-   Return a list with all hidden nodes in the graph.
-
-.. method:: node_data(node)
-
-   Return the data associated with the *node* when it was
-   added.
-
-.. method:: Graph.describe_node(node)
-
-   Returns *node*, the node's data and the lists of outgoing
-   and incoming edges for the node.
-
-   .. note:: 
-   
-      the edge lists should not be modified, doing so
-      can result in unpredicatable behavior.
-
-.. method:: Graph.__contains__(node)
-
-   Returns True iff *node* is a node in the graph. This
-   method is accessed through the *in* operator.
-
-.. method:: Graph.__iter__()
-
-   Yield all nodes in the graph.
-
-.. method:: Graph.out_edges(node)
-
-   Return the list of outgoing edges for *node*
-
-.. method:: Graph.inc_edges(node)
-
-   Return the list of incoming edges for *node*
-
-.. method:: Graph.all_edges(node)
-
-   Return the list of incoming and outgoing edges for *node*
-
-.. method:: Graph.out_degree(node)
-
-   Return the number of outgoing edges for *node*.
-
-.. method:: Graph.inc_degree(node)
-
-   Return the number of incoming edges for *node*.
-
-.. method:: Graph.all_degree(node)
-
-   Return the number of edges (incoming or outgoing) for *node*.
-
-Edge related methods
---------------------
-
-.. method:: Graph.add_edge(head_id, tail_id [, edge data [, create_nodes]])
-
-   Adds a directed edge from *head_id* to *tail_id*. Arbitrary data can
-   be added via *edge_data*.  When *create_nodes* is *True* (the default),
-   *head_id* and *tail_id* will be added to the graph when the aren't 
-   already present.
-
-.. method:: Graph.hide_edge(edge)
-
-   Hides an edge from the graph. The edge may be unhidden at some later 
-   time.
-
-.. method:: Graph.restore_edge(edge)
-
-   Restores a previously hidden *edge*.
-
-.. method:: Graph.restore_all_edges()
-
-   Restore all edges that were hidden before, except for edges
-   referring to hidden nodes.
-
-.. method:: Graph.edge_by_node(head, tail)
-
-   Return the edge ID for an edge from *head* to *tail*,
-   or :data:`None` when no such edge exists.
-
-.. method:: Graph.edge_by_id(edge)
-
-   Return the head and tail of the *edge*
-
-.. method:: Graph.edge_data(edge)
-
-   Return the data associated with the *edge*.
-
-
-.. method:: Graph.head(edge)
-
-   Return the head of an *edge*
-
-.. method:: Graph.tail(edge)
-
-   Return the tail of an *edge*
-
-.. method:: Graph.describe_edge(edge)
-
-   Return the *edge*, the associated data, its head and tail.
-
-.. method:: Graph.number_of_edges()
-
-   Return the number of visible edges.
-
-.. method:: Graph.number_of_hidden_edges()
-
-   Return the number of hidden edges.
-
-.. method:: Graph.edge_list()
-
-   Returns a list with all visible edges in the graph.
-
-.. method:: Graph.hidden_edge_list()
-
-   Returns a list with all hidden edges in the graph.
-
-Graph traversal
----------------
-
-.. method:: Graph.out_nbrs(node)
-
-   Return a list of all nodes connected by outgoing edges.
-
-.. method:: Graph.inc_nbrs(node)
-
-   Return a list of all nodes connected by incoming edges.
-
-.. method:: Graph.all_nbrs(node)
-
-   Returns a list of nodes connected by an incoming or outgoing edge.
-
-.. method:: Graph.forw_topo_sort()
-
-   Return a list of nodes where the successors (based on outgoing
-   edges) of any given node apear in the sequence after that node.
-
-.. method:: Graph.back_topo_sort()
-
-   Return a list of nodes where the successors (based on incoming
-   edges) of any given node apear in the sequence after that node.
-
-.. method:: Graph.forw_bfs_subgraph(start_id)
-
-   Return a subgraph consisting of the breadth first
-   reachable nodes from *start_id* based on their outgoing edges.
-
-
-.. method:: Graph.back_bfs_subgraph(start_id)
-
-   Return a subgraph consisting of the breadth first
-   reachable nodes from *start_id* based on their incoming edges.
-
-.. method:: Graph.iterdfs(start[, end[, forward]])
-
-   Yield nodes in a depth first traversal starting at the *start*
-   node. 
-   
-   If *end* is specified traversal stops when reaching that node.
-
-   If forward is True (the default) edges are traversed in forward
-   direction, otherwise they are traversed in reverse direction.
-
-.. method:: Graph.iterdata(start[, end[, forward[, condition]]])
-
-   Yield the associated data for nodes in a depth first traversal
-   starting at the *start* node. This method will not yield values for nodes
-   without associated data.
-
-   If *end* is specified traversal stops when reaching that node.
-
-   If *condition* is specified and the condition callable returns
-   False for the associated data this method will not yield the
-   associated data and will not follow the edges for the node.
-
-   If forward is True (the default) edges are traversed in forward
-   direction, otherwise they are traversed in reverse direction.
-
-.. method:: Graph.forw_bfs(start[, end])
-
-   Returns a list of nodes starting at *start* in some bread first
-   search order (following outgoing edges).
-
-   When *end* is specified iteration stops at that node.
-
-.. method:: Graph.back_bfs(start[, end])
-
-   Returns a list of nodes starting at *start* in some bread first
-   search order (following incoming edges).
-
-   When *end* is specified iteration stops at that node.
-
-.. method:: Graph.get_hops(start[, end[, forward]])
-
-   Computes the hop distance to all nodes centered around a specified node.
-
-   First order neighbours are at hop 1, their neigbours are at hop 2 etc.
-   Uses :py:meth:`forw_bfs` or :py:meth:`back_bfs` depending on the value of 
-   the forward parameter.  
-   
-   If the distance between all neighbouring nodes is 1 the hop number 
-   corresponds to the shortest distance between the nodes.  
-
-   Typical usage::
-
-        >>> print graph.get_hops(1, 8)
-        >>> [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)]
-        # node 1 is at 0 hops
-        # node 2 is at 1 hop
-        # ...
-        # node 8 is at 5 hops
-
-
-Graph statistics
-----------------
-
-.. method:: Graph.connected()
-
-   Returns True iff every node in the graph can be reached from
-   every other node.
-
-.. method:: Graph.clust_coef(node)
-
-   Returns the local clustering coefficient of node. 
-
-   The local cluster coefficient is the proportion of the actual number
-   of edges between neighbours of node and the maximum number of
-   edges between those nodes.
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/graphalgo.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-:mod:`altgraph.GraphAlgo` --- Graph algorithms
-==================================================
-
-.. module:: altgraph.GraphAlgo
-   :synopsis: Basic graphs algoritms
-
-.. function:: dijkstra(graph, start[, end])
-
-   Dijkstra's algorithm for shortest paths.
-
-   Find shortest paths from the  start node to all nodes nearer 
-   than or equal to the *end* node. The edge data is assumed to be the edge length.
-
-   .. note::
-
-       Dijkstra's algorithm is only guaranteed to work correctly when all edge lengths are positive.
-       This code does not verify this property for all edges (only the edges examined until the end
-       vertex is reached), but will correctly compute shortest paths even for some graphs with negative
-       edges, and will raise an exception if it discovers that a negative edge has caused it to make a mistake.
-
-
-.. function:: shortest_path(graph, start, end)
-
-   Find a single shortest path from the given start node to the given end node.
-   The input has the same conventions as :func:`dijkstra`. The output is a list 
-   of the nodes in order along the shortest path.
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/graphstat.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-:mod:`altgraph.GraphStat` --- Functions providing various graph statistics
-==========================================================================
-
-.. module:: altgraph.GraphStat
-   :synopsis: Functions providing various graph statistics
-
-The module :mod:`altgraph.GraphStat` provides function that calculate
-graph statistics. Currently there is only one such function, more may
-be added later.
-
-.. function:: degree_dist(graph[, limits[, bin_num[, mode]]])
-
-   Groups the number of edges per node into *bin_num* bins
-   and returns the list of those bins. Every item in the result
-   is a tuple with the center of the bin and the number of items
-   in that bin.
-
-   When the *limits* argument is present it must be a tuple with
-   the mininum and maximum number of edges that get binned (that
-   is, when *limits* is ``(4, 10)`` only nodes with between 4
-   and 10 edges get counted.
-
-   The *mode* argument is used to count incoming (``'inc'``) or
-   outgoing (``'out'``) edges. The default is to count the outgoing
-   edges.
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/graphutil.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-:mod:`altgraph.GraphUtil` --- Utility functions
-================================================
-
-.. module:: altgraph.GraphUtil
-   :synopsis: Utility functions
-
-The module :mod:`altgraph.GraphUtil` performs a number of more
-or less useful utility functions.
-
-.. function:: generate_random_graph(node_num, edge_num[, self_loops[, multi_edges])
-
-   Generates and returns a :class:`Graph <altgraph.Graph.Graph>` instance
-   with *node_num* nodes randomly connected by *edge_num* edges.
-
-   When *self_loops* is present and True there can be edges that point from
-   a node to itself.
-
-   When *multi_edge* is present and True there can be duplicate edges.
-
-   This method raises :class:`GraphError <altgraph.GraphError` when
-   a graph with the requested configuration cannot be created.
-
-.. function:: generate_scale_free_graph(steps, growth_num[, self_loops[, multi_edges]])
-
-    Generates and returns a :py:class:`~altgraph.Graph.Graph` instance that 
-    will have *steps*growth_n um* nodes and a scale free (powerlaw) 
-    connectivity. 
-    
-    Starting with a fully connected graph with *growth_num* nodes
-    at every step *growth_num* nodes are added to the graph and are connected 
-    to existing nodes with a probability proportional to the degree of these 
-    existing nodes.
-
-    .. warning:: The current implementation is basically untested, although
-       code inspection seems to indicate an implementation that is consistent
-       with the description at 
-       `Wolfram MathWorld <http://mathworld.wolfram.com/Scale-FreeNetwork.html>`_
-
-.. function:: filter_stack(graph, head, filters)
-
-   Perform a depth-first oder walk of the graph starting at *head* and
-   apply all filter functions in *filters* on the node data of the nodes
-   found.
-
-   Returns (*visited*, *removes*, *orphans*), where
-
-   * *visited*: the set of visited nodes
-
-   * *removes*: the list of nodes where the node data doesn't match
-     all *filters*.
-
-   * *orphans*: list of tuples (*last_good*, *node*), where 
-     node is not in *removes* and one of the nodes that is connected
-     by an incoming edge is in *removes*. *Last_good* is the
-     closest upstream node that is not in *removes*.
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/index.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-.. altgraph documentation master file, created by
-   sphinx-quickstart on Tue Aug 31 11:04:49 2010.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
-Altgraph - A basic graph library
-================================
-
-altgraph is a fork of graphlib: a graph (network) package for constructing
-graphs, BFS and DFS traversals, topological sort, shortest paths, etc. with
-graphviz output.
-
-The primary users of this package are `macholib <http://pypi.python.org/pypi/macholib>`_ and `modulegraph <http://pypi.python.org/pypi/modulegraph>`_.
-
-.. toctree::
-   :maxdepth: 1
-
-   changelog
-   license
-   core
-   graph
-   objectgraph
-   graphalgo
-   graphstat
-   graphutil
-   dot
-
-Online Resources
-----------------
-
-* `Sourcecode repository on bitbucket <http://bitbucket.org/ronaldoussoren/altgraph/>`_
-
-* `The issue tracker <http://bitbucket.org/ronaldoussoren/altgraph/issues>`_
-
-Indices and tables
-------------------
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/license.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-License
-=======
-
-Copyright (c) 2004 Istvan Albert unless otherwise noted.
-
-Parts are copyright (c) Bob Ippolito
-
-Parts are copyright (c) 2010-2014 Ronald Oussoren
-
-MIT License
-...........
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-and associated documentation files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do
-so.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_sources/objectgraph.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-:mod:`altgraph.ObjectGraph` --- Graphs of objecs with an identifier
-===================================================================
-
-.. module:: altgraph.ObjectGraph
-   :synopsis: A graph of objects that have a "graphident" attribute.
-
-.. class:: ObjectGraph([graph[, debug]])
-
-   A graph of objects that have a "graphident" attribute. The
-   value of this attribute is the key for the object in the
-   graph.
-
-   The optional *graph* is a previously constructed 
-   :class:`Graph <altgraph.Graph.Graph>`.
-
-   The optional *debug* level controls the amount of debug output
-   (see :meth:`msg`, :meth:`msgin` and :meth:`msgout`).
-
-   .. note:: the altgraph library does not generate output, the
-      debug attribute and message methods are present for use
-      by subclasses.
-
-.. data:: ObjectGraph.graph
-
-   An :class:`Graph <altgraph.Graph.Graph>` object that contains
-   the graph data.
-
-
-.. method:: ObjectGraph.addNode(node)
-
-   Adds a *node* to the graph.  
-
-   .. note:: re-adding a node that was previously removed
-      using :meth:`removeNode` will reinstate the previously
-      removed node.
-
-.. method:: ObjectGraph.createNode(self, cls, name, \*args, \**kwds)
-
-   Creates a new node using ``cls(*args, **kwds)`` and adds that
-   node using :meth:`addNode`.
-
-   Returns the newly created node.
-
-.. method:: ObjectGraph.removeNode(node)
-
-   Removes a *node* from the graph when it exists. The *node* argument
-   is either a node object, or the graphident of a node.
-
-.. method:: ObjectGraph.createReferences(fromnode, tonode[, edge_data])
-
-   Creates a reference from *fromnode* to *tonode*. The optional
-   *edge_data* is associated with the edge.
-
-   *Fromnode* and *tonode* can either be node objects or the graphident
-   values for nodes.
-
-.. method:: removeReference(fromnode, tonode)
-
-   Removes the reference from *fromnode* to *tonode* if it exists.
-
-.. method:: ObjectGraph.getRawIdent(node)
-
-   Returns the *graphident* attribute of *node*, or the graph itself
-   when *node* is :data:`None`.
-
-.. method:: getIdent(node)
-
-   Same as :meth:`getRawIdent`, but only if the node is part
-   of the graph. 
-
-   *Node* can either be an actual node object or the graphident of
-   a node.
-
-.. method:: ObjectGraph.findNode(node)
-
-   Returns a given node in the graph, or :data:`Node` when it cannot
-   be found.
-
-   *Node* is either an object with a *graphident* attribute or
-   the *graphident* attribute itself.
-
-.. method:: ObjectGraph.__contains__(node)
-
-   Returns True if *node* is a member of the graph. *Node* is either an 
-   object with a *graphident* attribute or the *graphident* attribute itself.
-
-.. method:: ObjectGraph.flatten([condition[, start]])
-
-   Yield all nodes that are entirely reachable by *condition*
-   starting fromt he given *start* node or the graph root.
-
-   .. note:: objects are only reachable from the graph root
-      when there is a reference from the root to the node
-      (either directly or through another node)
-
-.. method:: ObjectGraph.nodes()
-
-   Yield all nodes in the graph.
-
-.. method:: ObjectGraph.get_edges(node)
-
-   Returns two iterators that yield the nodes reaching by
-   outgoing and incoming edges.
-
-.. method:: ObjectGraph.filterStack(filters)
-
-   Filter the ObjectGraph in-place by removing all edges to nodes that
-   do not match every filter in the given filter list
-
-   Returns a tuple containing the number of: 
-   (*nodes_visited*, *nodes_removed*, *nodes_orphaned*)
-
-
-Debug output
-------------
-
-.. data:: ObjectGraph.debug
-
-   The current debug level.
-
-.. method:: ObjectGraph.msg(level, text, \*args)
-
-   Print a debug message at the current indentation level when the current 
-   debug level is *level* or less.
-
-.. method:: ObjectGraph.msgin(level, text, \*args)
-
-   Print a debug message when the current debug level is *level* or less,
-   and increase the indentation level.
-
-.. method:: ObjectGraph.msgout(level, text, \*args)
-
-   Decrease the indentation level and print a debug message when the 
-   current debug level is *level* or less.
deleted file mode 100644
index 61faf8cab23993bd3e1560bff0668bd628642330..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/basic.css
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- * basic.css
- * ~~~~~~~~~
- *
- * Sphinx stylesheet -- basic theme.
- *
- * :copyright: Copyright 2007-2013 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;
-    max-width: 100%;
-}
-
-/* -- 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;
-}
-
-.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;
-    }
-}
\ No newline at end of file
deleted file mode 100644
index 551517b8c83b76f734ff791f847829a760ad1903..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 09b54be46da3f0d4a5061da289dc91d8a2cdbc9c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 92feb52b8824c6b0f59b658b1196c61de9162a95..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/doctools.js
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * doctools.js
- * ~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for all documentation.
- *
- * :copyright: Copyright 2007-2013 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;
-};
-
-/**
- * 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');
-      if (!body.length) {
-        body = $('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();
-});
deleted file mode 100644
index 6f7ad782782e4f8e39b0c6e15c7344700cdd2527..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3003a88770de3977d47a2ba69893436a2860f9e7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d18082e397e7e54f20721af768c4c2983258f1b4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/jquery.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jQuery v1.8.3 jquery.com | jquery.org/license */
-(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window);
\ No newline at end of file
deleted file mode 100644
index da1c5620d10c047525a467a425abe9ff5269cfc2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/nature.css
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * nature.css_t
- * ~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- nature theme.
- *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
- 
-@import url("basic.css");
- 
-/* -- page layout ----------------------------------------------------------- */
- 
-body {
-    font-family: Arial, sans-serif;
-    font-size: 100%;
-    background-color: #111;
-    color: #555;
-    margin: 0;
-    padding: 0;
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 230px;
-}
-
-hr {
-    border: 1px solid #B1B4B6;
-}
- 
-div.document {
-    background-color: #eee;
-}
- 
-div.body {
-    background-color: #ffffff;
-    color: #3E4349;
-    padding: 0 30px 30px 30px;
-    font-size: 0.9em;
-}
- 
-div.footer {
-    color: #555;
-    width: 100%;
-    padding: 13px 0;
-    text-align: center;
-    font-size: 75%;
-}
- 
-div.footer a {
-    color: #444;
-    text-decoration: underline;
-}
- 
-div.related {
-    background-color: #6BA81E;
-    line-height: 32px;
-    color: #fff;
-    text-shadow: 0px 1px 0 #444;
-    font-size: 0.9em;
-}
- 
-div.related a {
-    color: #E2F3CC;
-}
- 
-div.sphinxsidebar {
-    font-size: 0.75em;
-    line-height: 1.5em;
-}
-
-div.sphinxsidebarwrapper{
-    padding: 20px 0;
-}
- 
-div.sphinxsidebar h3,
-div.sphinxsidebar h4 {
-    font-family: Arial, sans-serif;
-    color: #222;
-    font-size: 1.2em;
-    font-weight: normal;
-    margin: 0;
-    padding: 5px 10px;
-    background-color: #ddd;
-    text-shadow: 1px 1px 0 white
-}
-
-div.sphinxsidebar h4{
-    font-size: 1.1em;
-}
- 
-div.sphinxsidebar h3 a {
-    color: #444;
-}
- 
- 
-div.sphinxsidebar p {
-    color: #888;
-    padding: 5px 20px;
-}
- 
-div.sphinxsidebar p.topless {
-}
- 
-div.sphinxsidebar ul {
-    margin: 10px 20px;
-    padding: 0;
-    color: #000;
-}
- 
-div.sphinxsidebar a {
-    color: #444;
-}
- 
-div.sphinxsidebar input {
-    border: 1px solid #ccc;
-    font-family: sans-serif;
-    font-size: 1em;
-}
-
-div.sphinxsidebar input[type=text]{
-    margin-left: 20px;
-}
- 
-/* -- body styles ----------------------------------------------------------- */
- 
-a {
-    color: #005B81;
-    text-decoration: none;
-}
- 
-a:hover {
-    color: #E32E00;
-    text-decoration: underline;
-}
- 
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
-    font-family: Arial, sans-serif;
-    background-color: #BED4EB;
-    font-weight: normal;
-    color: #212224;
-    margin: 30px 0px 10px 0px;
-    padding: 5px 0 5px 10px;
-    text-shadow: 0px 1px 0 white
-}
- 
-div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
-div.body h2 { font-size: 150%; background-color: #C8D5E3; }
-div.body h3 { font-size: 120%; background-color: #D8DEE3; }
-div.body h4 { font-size: 110%; background-color: #D8DEE3; }
-div.body h5 { font-size: 100%; background-color: #D8DEE3; }
-div.body h6 { font-size: 100%; background-color: #D8DEE3; }
- 
-a.headerlink {
-    color: #c60f0f;
-    font-size: 0.8em;
-    padding: 0 4px 0 4px;
-    text-decoration: none;
-}
- 
-a.headerlink:hover {
-    background-color: #c60f0f;
-    color: white;
-}
- 
-div.body p, div.body dd, div.body li {
-    line-height: 1.5em;
-}
- 
-div.admonition p.admonition-title + p {
-    display: inline;
-}
-
-div.highlight{
-    background-color: white;
-}
-
-div.note {
-    background-color: #eee;
-    border: 1px solid #ccc;
-}
- 
-div.seealso {
-    background-color: #ffc;
-    border: 1px solid #ff6;
-}
- 
-div.topic {
-    background-color: #eee;
-}
- 
-div.warning {
-    background-color: #ffe4e4;
-    border: 1px solid #f66;
-}
- 
-p.admonition-title {
-    display: inline;
-}
- 
-p.admonition-title:after {
-    content: ":";
-}
- 
-pre {
-    padding: 10px;
-    background-color: White;
-    color: #222;
-    line-height: 1.2em;
-    border: 1px solid #C6C9CB;
-    font-size: 1.1em;
-    margin: 1.5em 0 1.5em 0;
-    -webkit-box-shadow: 1px 1px 1px #d8d8d8;
-    -moz-box-shadow: 1px 1px 1px #d8d8d8;
-}
- 
-tt {
-    background-color: #ecf0f3;
-    color: #222;
-    /* padding: 1px 2px; */
-    font-size: 1.1em;
-    font-family: monospace;
-}
-
-.viewcode-back {
-    font-family: Arial, sans-serif;
-}
-
-div.viewcode-block:target {
-    background-color: #f4debf;
-    border-top: 1px solid #ac9;
-    border-bottom: 1px solid #ac9;
-}
\ No newline at end of file
deleted file mode 100644
index b3cb37425ea68b39ffa7b2e5fb69161275a87541..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/pygments.css
+++ /dev/null
@@ -1,62 +0,0 @@
-.highlight .hll { background-color: #ffffcc }
-.highlight  { background: #eeffcc; }
-.highlight .c { color: #408090; font-style: italic } /* Comment */
-.highlight .err { border: 1px solid #FF0000 } /* Error */
-.highlight .k { color: #007020; font-weight: bold } /* Keyword */
-.highlight .o { color: #666666 } /* Operator */
-.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #007020 } /* Comment.Preproc */
-.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
-.highlight .gd { color: #A00000 } /* Generic.Deleted */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #FF0000 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #333333 } /* Generic.Output */
-.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #0044DD } /* Generic.Traceback */
-.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #007020 } /* Keyword.Pseudo */
-.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #902000 } /* Keyword.Type */
-.highlight .m { color: #208050 } /* Literal.Number */
-.highlight .s { color: #4070a0 } /* Literal.String */
-.highlight .na { color: #4070a0 } /* Name.Attribute */
-.highlight .nb { color: #007020 } /* Name.Builtin */
-.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
-.highlight .no { color: #60add5 } /* Name.Constant */
-.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #007020 } /* Name.Exception */
-.highlight .nf { color: #06287e } /* Name.Function */
-.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
-.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #bb60d5 } /* Name.Variable */
-.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mf { color: #208050 } /* Literal.Number.Float */
-.highlight .mh { color: #208050 } /* Literal.Number.Hex */
-.highlight .mi { color: #208050 } /* Literal.Number.Integer */
-.highlight .mo { color: #208050 } /* Literal.Number.Oct */
-.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
-.highlight .sc { color: #4070a0 } /* Literal.String.Char */
-.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
-.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
-.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
-.highlight .sx { color: #c65d09 } /* Literal.String.Other */
-.highlight .sr { color: #235388 } /* Literal.String.Regex */
-.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
-.highlight .ss { color: #517918 } /* Literal.String.Symbol */
-.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
-.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
-.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
-.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/searchtools.js
+++ /dev/null
@@ -1,622 +0,0 @@
-/*
- * searchtools.js_t
- * ~~~~~~~~~~~~~~~~
- *
- * Sphinx JavaScript utilties for the full-text search.
- *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-
-/**
- * Porter Stemmer
- */
-var Stemmer = function() {
-
-  var step2list = {
-    ational: 'ate',
-    tional: 'tion',
-    enci: 'ence',
-    anci: 'ance',
-    izer: 'ize',
-    bli: 'ble',
-    alli: 'al',
-    entli: 'ent',
-    eli: 'e',
-    ousli: 'ous',
-    ization: 'ize',
-    ation: 'ate',
-    ator: 'ate',
-    alism: 'al',
-    iveness: 'ive',
-    fulness: 'ful',
-    ousness: 'ous',
-    aliti: 'al',
-    iviti: 'ive',
-    biliti: 'ble',
-    logi: 'log'
-  };
-
-  var step3list = {
-    icate: 'ic',
-    ative: '',
-    alize: 'al',
-    iciti: 'ic',
-    ical: 'ic',
-    ful: '',
-    ness: ''
-  };
-
-  var c = "[^aeiou]";          // consonant
-  var v = "[aeiouy]";          // vowel
-  var C = c + "[^aeiouy]*";    // consonant sequence
-  var V = v + "[aeiou]*";      // vowel sequence
-
-  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
-  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
-  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
-  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
-
-  this.stemWord = function (w) {
-    var stem;
-    var suffix;
-    var firstch;
-    var origword = w;
-
-    if (w.length < 3)
-      return w;
-
-    var re;
-    var re2;
-    var re3;
-    var re4;
-
-    firstch = w.substr(0,1);
-    if (firstch == "y")
-      w = firstch.toUpperCase() + w.substr(1);
-
-    // Step 1a
-    re = /^(.+?)(ss|i)es$/;
-    re2 = /^(.+?)([^s])s$/;
-
-    if (re.test(w))
-      w = w.replace(re,"$1$2");
-    else if (re2.test(w))
-      w = w.replace(re2,"$1$2");
-
-    // Step 1b
-    re = /^(.+?)eed$/;
-    re2 = /^(.+?)(ed|ing)$/;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      re = new RegExp(mgr0);
-      if (re.test(fp[1])) {
-        re = /.$/;
-        w = w.replace(re,"");
-      }
-    }
-    else if (re2.test(w)) {
-      var fp = re2.exec(w);
-      stem = fp[1];
-      re2 = new RegExp(s_v);
-      if (re2.test(stem)) {
-        w = stem;
-        re2 = /(at|bl|iz)$/;
-        re3 = new RegExp("([^aeiouylsz])\\1$");
-        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-        if (re2.test(w))
-          w = w + "e";
-        else if (re3.test(w)) {
-          re = /.$/;
-          w = w.replace(re,"");
-        }
-        else if (re4.test(w))
-          w = w + "e";
-      }
-    }
-
-    // Step 1c
-    re = /^(.+?)y$/;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      re = new RegExp(s_v);
-      if (re.test(stem))
-        w = stem + "i";
-    }
-
-    // Step 2
-    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      suffix = fp[2];
-      re = new RegExp(mgr0);
-      if (re.test(stem))
-        w = stem + step2list[suffix];
-    }
-
-    // Step 3
-    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      suffix = fp[2];
-      re = new RegExp(mgr0);
-      if (re.test(stem))
-        w = stem + step3list[suffix];
-    }
-
-    // Step 4
-    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
-    re2 = /^(.+?)(s|t)(ion)$/;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      re = new RegExp(mgr1);
-      if (re.test(stem))
-        w = stem;
-    }
-    else if (re2.test(w)) {
-      var fp = re2.exec(w);
-      stem = fp[1] + fp[2];
-      re2 = new RegExp(mgr1);
-      if (re2.test(stem))
-        w = stem;
-    }
-
-    // Step 5
-    re = /^(.+?)e$/;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      re = new RegExp(mgr1);
-      re2 = new RegExp(meq1);
-      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
-        w = stem;
-    }
-    re = /ll$/;
-    re2 = new RegExp(mgr1);
-    if (re.test(w) && re2.test(w)) {
-      re = /.$/;
-      w = w.replace(re,"");
-    }
-
-    // and turn initial Y back to y
-    if (firstch == "y")
-      w = firstch.toLowerCase() + w.substr(1);
-    return w;
-  }
-}
-
-
-
-/**
- * Simple result scoring code.
- */
-var Scorer = {
-  // Implement the following function to further tweak the score for each result
-  // The function takes a result array [filename, title, anchor, descr, score]
-  // and returns the new score.
-  /*
-  score: function(result) {
-    return result[4];
-  },
-  */
-
-  // query matches the full name of an object
-  objNameMatch: 11,
-  // or matches in the last dotted part of the object name
-  objPartialMatch: 6,
-  // Additive scores depending on the priority of the object
-  objPrio: {0:  15,   // used to be importantResults
-            1:  5,   // used to be objectResults
-            2: -5},  // used to be unimportantResults
-  //  Used when the priority is not in the mapping.
-  objPrioDefault: 0,
-
-  // query found in title
-  title: 15,
-  // query found in terms
-  term: 5
-};
-
-
-/**
- * Search Module
- */
-var Search = {
-
-  _index : null,
-  _queued_query : null,
-  _pulse_status : -1,
-
-  init : function() {
-      var params = $.getQueryParameters();
-      if (params.q) {
-          var query = params.q[0];
-          $('input[name="q"]')[0].value = query;
-          this.performSearch(query);
-      }
-  },
-
-  loadIndex : function(url) {
-    $.ajax({type: "GET", url: url, data: null,
-            dataType: "script", cache: true,
-            complete: function(jqxhr, textstatus) {
-              if (textstatus != "success") {
-                document.getElementById("searchindexloader").src = url;
-              }
-            }});
-  },
-
-  setIndex : function(index) {
-    var q;
-    this._index = index;
-    if ((q = this._queued_query) !== null) {
-      this._queued_query = null;
-      Search.query(q);
-    }
-  },
-
-  hasIndex : function() {
-      return this._index !== null;
-  },
-
-  deferQuery : function(query) {
-      this._queued_query = query;
-  },
-
-  stopPulse : function() {
-      this._pulse_status = 0;
-  },
-
-  startPulse : function() {
-    if (this._pulse_status >= 0)
-        return;
-    function pulse() {
-      var i;
-      Search._pulse_status = (Search._pulse_status + 1) % 4;
-      var dotString = '';
-      for (i = 0; i < Search._pulse_status; i++)
-        dotString += '.';
-      Search.dots.text(dotString);
-      if (Search._pulse_status > -1)
-        window.setTimeout(pulse, 500);
-    }
-    pulse();
-  },
-
-  /**
-   * perform a search for something (or wait until index is loaded)
-   */
-  performSearch : function(query) {
-    // create the required interface elements
-    this.out = $('#search-results');
-    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
-    this.dots = $('<span></span>').appendTo(this.title);
-    this.status = $('<p style="display: none"></p>').appendTo(this.out);
-    this.output = $('<ul class="search"/>').appendTo(this.out);
-
-    $('#search-progress').text(_('Preparing search...'));
-    this.startPulse();
-
-    // index already loaded, the browser was quick!
-    if (this.hasIndex())
-      this.query(query);
-    else
-      this.deferQuery(query);
-  },
-
-  /**
-   * execute search (requires search index to be loaded)
-   */
-  query : function(query) {
-    var i;
-    var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
-
-    // stem the searchterms and add them to the correct list
-    var stemmer = new Stemmer();
-    var searchterms = [];
-    var excluded = [];
-    var hlterms = [];
-    var tmp = query.split(/\s+/);
-    var objectterms = [];
-    for (i = 0; i < tmp.length; i++) {
-      if (tmp[i] !== "") {
-          objectterms.push(tmp[i].toLowerCase());
-      }
-
-      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
-          tmp[i] === "") {
-        // skip this "word"
-        continue;
-      }
-      // stem the word
-      var word = stemmer.stemWord(tmp[i].toLowerCase());
-      var toAppend;
-      // select the correct list
-      if (word[0] == '-') {
-        toAppend = excluded;
-        word = word.substr(1);
-      }
-      else {
-        toAppend = searchterms;
-        hlterms.push(tmp[i].toLowerCase());
-      }
-      // only add if not already in the list
-      if (!$u.contains(toAppend, word))
-        toAppend.push(word);
-    }
-    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
-
-    // console.debug('SEARCH: searching for:');
-    // console.info('required: ', searchterms);
-    // console.info('excluded: ', excluded);
-
-    // prepare search
-    var terms = this._index.terms;
-    var titleterms = this._index.titleterms;
-
-    // array of [filename, title, anchor, descr, score]
-    var results = [];
-    $('#search-progress').empty();
-
-    // lookup as object
-    for (i = 0; i < objectterms.length; i++) {
-      var others = [].concat(objectterms.slice(0, i),
-                             objectterms.slice(i+1, objectterms.length));
-      results = results.concat(this.performObjectSearch(objectterms[i], others));
-    }
-
-    // lookup as search terms in fulltext
-    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term))
-                     .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title));
-
-    // let the scorer override scores with a custom scoring function
-    if (Scorer.score) {
-      for (i = 0; i < results.length; i++)
-        results[i][4] = Scorer.score(results[i]);
-    }
-
-    // now sort the results by score (in opposite order of appearance, since the
-    // display function below uses pop() to retrieve items) and then
-    // alphabetically
-    results.sort(function(a, b) {
-      var left = a[4];
-      var right = b[4];
-      if (left > right) {
-        return 1;
-      } else if (left < right) {
-        return -1;
-      } else {
-        // same score: sort alphabetically
-        left = a[1].toLowerCase();
-        right = b[1].toLowerCase();
-        return (left > right) ? -1 : ((left < right) ? 1 : 0);
-      }
-    });
-
-    // for debugging
-    //Search.lastresults = results.slice();  // a copy
-    //console.info('search results:', Search.lastresults);
-
-    // print the results
-    var resultCount = results.length;
-    function displayNextItem() {
-      // results left, load the summary and display it
-      if (results.length) {
-        var item = results.pop();
-        var listItem = $('<li style="display:none"></li>');
-        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
-          // dirhtml builder
-          var dirname = item[0] + '/';
-          if (dirname.match(/\/index\/$/)) {
-            dirname = dirname.substring(0, dirname.length-6);
-          } else if (dirname == 'index/') {
-            dirname = '';
-          }
-          listItem.append($('<a/>').attr('href',
-            DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
-            highlightstring + item[2]).html(item[1]));
-        } else {
-          // normal html builders
-          listItem.append($('<a/>').attr('href',
-            item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
-            highlightstring + item[2]).html(item[1]));
-        }
-        if (item[3]) {
-          listItem.append($('<span> (' + item[3] + ')</span>'));
-          Search.output.append(listItem);
-          listItem.slideDown(5, function() {
-            displayNextItem();
-          });
-        } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
-          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
-                  dataType: "text",
-                  complete: function(jqxhr, textstatus) {
-                    var data = jqxhr.responseText;
-                    if (data !== '') {
-                      listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
-                    }
-                    Search.output.append(listItem);
-                    listItem.slideDown(5, function() {
-                      displayNextItem();
-                    });
-                  }});
-        } else {
-          // no source available, just display title
-          Search.output.append(listItem);
-          listItem.slideDown(5, function() {
-            displayNextItem();
-          });
-        }
-      }
-      // search finished, update title and status message
-      else {
-        Search.stopPulse();
-        Search.title.text(_('Search Results'));
-        if (!resultCount)
-          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
-        else
-            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
-        Search.status.fadeIn(500);
-      }
-    }
-    displayNextItem();
-  },
-
-  /**
-   * search for object names
-   */
-  performObjectSearch : function(object, otherterms) {
-    var filenames = this._index.filenames;
-    var objects = this._index.objects;
-    var objnames = this._index.objnames;
-    var titles = this._index.titles;
-
-    var i;
-    var results = [];
-
-    for (var prefix in objects) {
-      for (var name in objects[prefix]) {
-        var fullname = (prefix ? prefix + '.' : '') + name;
-        if (fullname.toLowerCase().indexOf(object) > -1) {
-          var score = 0;
-          var parts = fullname.split('.');
-          // check for different match types: exact matches of full name or
-          // "last name" (i.e. last dotted part)
-          if (fullname == object || parts[parts.length - 1] == object) {
-            score += Scorer.objNameMatch;
-          // matches in last name
-          } else if (parts[parts.length - 1].indexOf(object) > -1) {
-            score += Scorer.objPartialMatch;
-          }
-          var match = objects[prefix][name];
-          var objname = objnames[match[1]][2];
-          var title = titles[match[0]];
-          // If more than one term searched for, we require other words to be
-          // found in the name/title/description
-          if (otherterms.length > 0) {
-            var haystack = (prefix + ' ' + name + ' ' +
-                            objname + ' ' + title).toLowerCase();
-            var allfound = true;
-            for (i = 0; i < otherterms.length; i++) {
-              if (haystack.indexOf(otherterms[i]) == -1) {
-                allfound = false;
-                break;
-              }
-            }
-            if (!allfound) {
-              continue;
-            }
-          }
-          var descr = objname + _(', in ') + title;
-
-          var anchor = match[3];
-          if (anchor === '')
-            anchor = fullname;
-          else if (anchor == '-')
-            anchor = objnames[match[1]][1] + '-' + fullname;
-          // add custom score for some objects according to scorer
-          if (Scorer.objPrio.hasOwnProperty(match[2])) {
-            score += Scorer.objPrio[match[2]];
-          } else {
-            score += Scorer.objPrioDefault;
-          }
-          results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
-        }
-      }
-    }
-
-    return results;
-  },
-
-  /**
-   * search for full-text terms in the index
-   */
-  performTermsSearch : function(searchterms, excluded, terms, score) {
-    var filenames = this._index.filenames;
-    var titles = this._index.titles;
-
-    var i, j, file, files;
-    var fileMap = {};
-    var results = [];
-
-    // perform the search on the required terms
-    for (i = 0; i < searchterms.length; i++) {
-      var word = searchterms[i];
-      // no match but word was a required one
-      if ((files = terms[word]) === undefined)
-        break;
-      if (files.length === undefined) {
-        files = [files];
-      }
-      // create the mapping
-      for (j = 0; j < files.length; j++) {
-        file = files[j];
-        if (file in fileMap)
-          fileMap[file].push(word);
-        else
-          fileMap[file] = [word];
-      }
-    }
-
-    // now check if the files don't contain excluded terms
-    for (file in fileMap) {
-      var valid = true;
-
-      // check if all requirements are matched
-      if (fileMap[file].length != searchterms.length)
-          continue;
-
-      // ensure that none of the excluded terms is in the search result
-      for (i = 0; i < excluded.length; i++) {
-        if (terms[excluded[i]] == file ||
-          $u.contains(terms[excluded[i]] || [], file)) {
-          valid = false;
-          break;
-        }
-      }
-
-      // if we have still a valid result we can add it to the result list
-      if (valid) {
-        results.push([filenames[file], titles[file], '', null, score]);
-      }
-    }
-    return results;
-  },
-
-  /**
-   * helper function to return a node containing the
-   * search summary for a given text. keywords is a list
-   * of stemmed words, hlwords is the list of normal, unstemmed
-   * words. the first one is used to find the occurance, the
-   * latter for highlighting it.
-   */
-  makeSearchSummary : function(text, keywords, hlwords) {
-    var textLower = text.toLowerCase();
-    var start = 0;
-    $.each(keywords, function() {
-      var i = textLower.indexOf(this.toLowerCase());
-      if (i > -1)
-        start = i;
-    });
-    start = Math.max(start - 120, 0);
-    var excerpt = ((start > 0) ? '...' : '') +
-      $.trim(text.substr(start, 240)) +
-      ((start + 240 - text.length) ? '...' : '');
-    var rv = $('<div class="context"></div>').text(excerpt);
-    $.each(hlwords, function() {
-      rv = rv.highlightText(this, 'highlighted');
-    });
-    return rv;
-  }
-};
-
-$(document).ready(function() {
-  Search.init();
-});
\ No newline at end of file
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/underscore.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Underscore.js 1.3.1
-// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
-b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
-null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
-function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
-e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
-function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
-return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
-c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
-b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);
-return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,
-d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
-b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
-b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
-b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
-function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
-u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
-function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
-true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
deleted file mode 100644
index 8bd587afee2fe38989383ff82010147ea56b93dd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b94625680b4a4b9647c3a6f3f283776930696aa9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/python/altgraph/doc/_build/html/_static/websupport.js
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
- * websupport.js
- * ~~~~~~~~~~~~~
- *
- * sphinx.websupport utilties for all documentation.
- *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-(function($) {
-  $.fn.autogrow = function() {
-    return this.each(function() {
-    var textarea = this;
-
-    $.fn.autogrow.resize(textarea);
-
-    $(textarea)
-      .focus(function() {
-        textarea.interval = setInterval(function() {
-          $.fn.autogrow.resize(textarea);
-        }, 500);
-      })
-      .blur(function() {
-        clearInterval(textarea.interval);
-      });
-    });
-  };
-
-  $.fn.autogrow.resize = function(textarea) {
-    var lineHeight = parseInt($(textarea).css('line-height'), 10);
-    var lines = textarea.value.split('\n');
-    var columns = textarea.cols;
-    var lineCount = 0;
-    $.each(lines, function() {
-      lineCount += Math.ceil(this.length / columns) || 1;
-    });
-    var height = lineHeight * (lineCount + 1);
-    $(textarea).css('height', height);
-  };
-})(jQuery);
-
-(function($) {
-  var comp, by;
-
-  function init() {
-    initEvents();
-    initComparator();
-  }
-
-  function initEvents() {
-    $('a.comment-close').live("click", function(event) {
-      event.preventDefault();
-      hide($(this).attr('id').substring(2));
-    });
-    $('a.vote').live("click", function(event) {
-      event.preventDefault();
-      handleVote($(this));
-    });
-    $('a.reply').live("click", function(event) {
-      event.preventDefault();
-      openReply($(this).attr('id').substring(2));
-    });
-    $('a.close-reply').live("click", function(event) {
-      event.preventDefault();
-      closeReply($(this).attr('id').substring(2));
-    });
-    $('a.sort-option').live("click", function(event) {
-      event.preventDefault();
-      handleReSort($(this));
-    });
-    $('a.show-proposal').live("click", function(event) {
-      event.preventDefault();
-      showProposal($(this).attr('id').substring(2));
-    });
-    $('a.hide-proposal').live("click", function(event) {
-      event.preventDefault();
-      hideProposal($(this).attr('id').substring(2));
-    });
-    $('a.show-propose-change').live("click", function(event) {
-      event.preventDefault();
-      showProposeChange($(this).attr('id').substring(2));
-    });
-    $('a.hide-propose-change').live("click", function(event) {
-      event.preventDefault();
-      hideProposeChange($(this).attr('id').substring(2));
-    });
-    $('a.accept-comment').live("click", function(event) {
-      event.preventDefault();
-      acceptComment($(this).attr('id').substring(2));
-    });
-    $('a.delete-comment').live("click", function(event) {
-      event.preventDefault();
-      deleteComment($(this).attr('id').substring(2));
-    });
-    $('a.comment-markup').live("click", function(event) {
-      event.preventDefault();
-      toggleCommentMarkupBox($(this).attr('id').substring(2));
-    });
-  }
-
-  /**
-   * Set comp, which is a comparator function used for sorting and
-   * inserting comments into the list.
-   */
-  function setComparator() {
-    // If the first three letters are "asc", sort in ascending order
-    // and remove the prefix.
-    if (by.substring(0,3) == 'asc') {
-      var i = by.substring(3);
-      comp = function(a, b) { return a[i] - b[i]; };
-    } else {
-      // Otherwise sort in descending order.
-      comp = function(a, b) { return b[by] - a[by]; };
-    }
-
-    // Reset link styles and format the selected sort option.
-    $('a.sel').attr('href', '#').removeClass('sel');
-    $('a.by' + by).removeAttr('href').addClass('sel');
-  }
-
-  /**
-   * Create a comp function. If the user has preferences stored in
-   * the sortBy cookie, use those, otherwise use the default.
-   */
-  function initComparator() {
-    by = 'rating'; // Default to sort by rating.
-    // If the sortBy cookie is set, use that instead.
-    if (document.cookie.length > 0) {
-      var start = document.cookie.indexOf('sortBy=');
-      if (start != -1) {
-        start = start + 7;
-        var end = document.cookie.indexOf(";", start);
-        if (end == -1) {
-          end = document.cookie.length;
-          by = unescape(document.cookie.substring(start, end));
-        }
-      }
-    }
-    setComparator();
-  }
-
-  /**
-   * Show a comment div.
-   */
-  function show(id) {
-    $('#ao' + id).hide();
-    $('#ah' + id).show();
-    var context = $.extend({id: id}, opts);
-    var popup = $(renderTemplate(popupTemplate, context)).hide();
-    popup.find('textarea[name="proposal"]').hide();
-    popup.find('a.by' + by).addClass('sel');
-    var form = popup.find('#cf' + id);
-    form.submit(function(event) {
-      event.preventDefault();
-      addComment(form);
-    });
-    $('#s' + id).after(popup);
-    popup.slideDown('fast', function() {
-      getComments(id);
-    });
-  }
-
-  /**
-   * Hide a comment div.
-   */
-  function hide(id) {
-    $('#ah' + id).hide();
-    $('#ao' + id).show();
-    var div = $('#sc' + id);
-    div.slideUp('fast', function() {
-      div.remove();
-    });
-  }
-
-  /**
-   * Perform an ajax request to get comments for a node
-   * and insert the comments into the comments tree.
-   */
-  function getComments(id) {
-    $.ajax({
-     type: 'GET',
-     url: opts.getCommentsURL,
-     data: {node: id},
-     success: function(data, textStatus, request) {
-       var ul = $('#cl' + id);
-       var speed = 100;
-       $('#cf' + id)
-         .find('textarea[name="proposal"]')
-         .data('source', data.source);
-
-       if (data.comments.length === 0) {
-         ul.html('<li>No comments yet.</li>');
-         ul.data('empty', true);
-       } else {
-         // If there are comments, sort them and put them in the list.
-         var comments = sortComments(data.comments);
-         speed = data.comments.length * 100;
-         appendComments(comments, ul);
-         ul.data('empty', false);
-       }
-       $('#cn' + id).slideUp(speed + 200);
-       ul.slideDown(speed);
-     },
-     error: function(request, textStatus, error) {
-       showError('Oops, there was a problem retrieving the comments.');
-     },
-     dataType: 'json'
-    });
-  }
-
-  /**
-   * Add a comment via ajax and insert the comment into the comment tree.
-   */
-  function addComment(form) {
-    var node_id = form.find('input[name="node"]').val();
-    var parent_id = form.find('input[name="parent"]').val();
-    var text = form.find('textarea[name="comment"]').val();
-    var proposal = form.find('textarea[name="proposal"]').val();
-
-    if (text == '') {
-      showError('Please enter a comment.');
-      return;
-    }
-
-    // Disable the form that is being submitted.
-    form.find('textarea,input').attr('disabled', 'disabled');
-
-    // Send the comment to the server.
-    $.ajax({
-      type: "POST",
-      url: opts.addCommentURL,
-      dataType: 'json',
-      data: {
-        node: node_id,
-        parent: parent_id,
-        text: text,
-        proposal: proposal
-      },
-      success: function(data, textStatus, error) {
-        // Reset the form.
-        if (node_id) {
-          hideProposeChange(node_id);
-        }
-        form.find('textarea')
-          .val('')
-          .add(form.find('input'))
-          .removeAttr('disabled');
-	var ul = $('#cl' + (node_id || parent_id));
-        if (ul.data('empty')) {
-          $(ul).empty();
-          ul.data('empty', false);
-        }
-        insertComment(data.comment);
-        var ao = $('#ao' + node_id);
-        ao.find('img').attr({'src': opts.commentBrightImage});
-        if (node_id) {
-          // if this was a "root" comment, remove the commenting box
-          // (the user can get it back by reopening the comment popup)
-          $('#ca' + node_id).slideUp();
-        }
-      },
-      error: function(request, textStatus, error) {
-        form.find('textarea,input').removeAttr('disabled');
-        showError('Oops, there was a problem adding the comment.');
-      }
-    });
-  }
-
-  /**
-   * Recursively append comments to the main comment list and children
-   * lists, creating the comment tree.
-   */
-  function appendComments(comments, ul) {
-    $.each(comments, function() {
-      var div = createCommentDiv(this);
-      ul.append($(document.createElement('li')).html(div));
-      appendComments(this.children, div.find('ul.comment-children'));
-      // To avoid stagnating data, don't store the comments children in data.
-      this.children = null;
-      div.data('comment', this);
-    });
-  }
-
-  /**
-   * After adding a new comment, it must be inserted in the correct
-   * location in the comment tree.
-   */
-  function insertComment(comment) {
-    var div = createCommentDiv(comment);
-
-    // To avoid stagnating data, don't store the comments children in data.
-    comment.children = null;
-    div.data('comment', comment);
-
-    var ul = $('#cl' + (comment.node || comment.parent));
-    var siblings = getChildren(ul);
-
-    var li = $(document.createElement('li'));
-    li.hide();
-
-    // Determine where in the parents children list to insert this comment.
-    for(i=0; i < siblings.length; i++) {
-      if (comp(comment, siblings[i]) <= 0) {
-        $('#cd' + siblings[i].id)
-          .parent()
-          .before(li.html(div));
-        li.slideDown('fast');
-        return;
-      }
-    }
-
-    // If we get here, this comment rates lower than all the others,
-    // or it is the only comment in the list.
-    ul.append(li.html(div));
-    li.slideDown('fast');
-  }
-
-  function acceptComment(id) {
-    $.ajax({
-      type: 'POST',
-      url: opts.acceptCommentURL,
-      data: {id: id},
-      success: function(data, textStatus, request) {
-        $('#cm' + id).fadeOut('fast');
-        $('#cd' + id).removeClass('moderate');
-      },
-      error: function(request, textStatus, error) {
-        showError('Oops, there was a problem accepting the comment.');
-      }
-    });
-  }
-
-  function deleteComment(id) {
-    $.ajax({
-      type: 'POST',
-      url: opts.deleteCommentURL,
-      data: {id: id},
-      success: function(data, textStatus, request) {
-        var div = $('#cd' + id);
-        if (data == 'delete') {
-          // Moderator mode: remove the comment and all children immediately
-          div.slideUp('fast', function() {
-            div.remove();
-          });
-          return;
-        }
-        // User mode: only mark the comment as deleted
-        div
-          .find('span.user-id:first')
-          .text('[deleted]').end()
-          .find('div.comment-text:first')
-          .text('[deleted]').end()
-          .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
-                ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
-          .remove();
-        var comment = div.data('comment');
-        comment.username = '[deleted]';
-        comment.text = '[deleted]';
-        div.data('comment', comment);
-      },
-      error: function(request, textStatus, error) {
-        showError('Oops, there was a problem deleting the comment.');
-      }
-    });
-  }
-
-  function showProposal(id) {
-    $('#sp' + id).hide();
-    $('#hp' + id).show();
-    $('#pr' + id).slideDown('fast');
-  }
-
-  function hideProposal(id) {
-    $('#hp' + id).hide();
-    $('#sp' + id).show();
-    $('#pr' + id).slideUp('fast');
-  }
-
-  function showProposeChange(id) {
-    $('#pc' + id).hide();
-    $('#hc' + id).show();
-    var textarea = $('#pt' + id);
-    textarea.val(textarea.data('source'));
-    $.fn.autogrow.resize(textarea[0]);
-    textarea.slideDown('fast');
-  }
-
-  function hideProposeChange(id) {
-    $('#hc' + id).hide();
-    $('#pc' + id).show();
-    var textarea = $('#pt' + id);
-    textarea.val('').removeAttr('disabled');
-    textarea.slideUp('fast');
-  }
-
-  function toggleCommentMarkupBox(id) {
-    $('#mb' + id).toggle();
-  }
-
-  /** Handle when the user clicks on a sort by link. */
-  function handleReSort(link) {
-    var classes = link.attr('class').split(/\s+/);
-    for (var i=0; i<classes.length; i++) {
-      if (classes[i] != 'sort-option') {
-	by = classes[i].substring(2);
-      }
-    }
-    setComparator();
-    // Save/update the sortBy cookie.
-    var expiration = new Date();
-    expiration.setDate(expiration.getDate() + 365);
-    document.cookie= 'sortBy=' + escape(by) +