Browse Source

rename library.

v0.1
jajupmochi 5 years ago
parent
commit
d6b252a83e
100 changed files with 21 additions and 25552 deletions
  1. +8
    -4
      .gitignore
  2. +11
    -9
      README.md
  3. +2
    -2
      docs/Makefile
  4. BIN
      docs/_build/doctrees/environment.pickle
  5. BIN
      docs/_build/doctrees/index.doctree
  6. BIN
      docs/_build/doctrees/modules.doctree
  7. BIN
      docs/_build/doctrees/pygraph.doctree
  8. BIN
      docs/_build/doctrees/pygraph.utils.doctree
  9. +0
    -4
      docs/_build/html/.buildinfo
  10. +0
    -196
      docs/_build/html/_modules/index.html
  11. +0
    -502
      docs/_build/html/_modules/pygraph/utils/graphdataset.html
  12. +0
    -811
      docs/_build/html/_modules/pygraph/utils/graphfiles.html
  13. +0
    -205
      docs/_build/html/_modules/pygraph/utils/isNotebook.html
  14. +0
    -347
      docs/_build/html/_modules/pygraph/utils/kernels.html
  15. +0
    -216
      docs/_build/html/_modules/pygraph/utils/logger2file.html
  16. +0
    -1148
      docs/_build/html/_modules/pygraph/utils/model_selection_precomputed.html
  17. +0
    -252
      docs/_build/html/_modules/pygraph/utils/parallel.html
  18. +0
    -300
      docs/_build/html/_modules/pygraph/utils/trie.html
  19. +0
    -451
      docs/_build/html/_modules/pygraph/utils/utils.html
  20. +0
    -20
      docs/_build/html/_sources/index.rst.txt
  21. +0
    -7
      docs/_build/html/_sources/modules.rst.txt
  22. +0
    -17
      docs/_build/html/_sources/pygraph.rst.txt
  23. +0
    -94
      docs/_build/html/_sources/pygraph.utils.rst.txt
  24. BIN
      docs/_build/html/_static/ajax-loader.gif
  25. +0
    -688
      docs/_build/html/_static/alabaster.css
  26. +0
    -676
      docs/_build/html/_static/basic.css
  27. BIN
      docs/_build/html/_static/comment-bright.png
  28. BIN
      docs/_build/html/_static/comment-close.png
  29. BIN
      docs/_build/html/_static/comment.png
  30. +0
    -1
      docs/_build/html/_static/css/badge_only.css
  31. +0
    -6
      docs/_build/html/_static/css/theme.css
  32. +0
    -1
      docs/_build/html/_static/custom.css
  33. +0
    -315
      docs/_build/html/_static/doctools.js
  34. +0
    -296
      docs/_build/html/_static/documentation_options.js
  35. BIN
      docs/_build/html/_static/down-pressed.png
  36. BIN
      docs/_build/html/_static/down.png
  37. BIN
      docs/_build/html/_static/file.png
  38. BIN
      docs/_build/html/_static/fonts/Inconsolata-Bold.ttf
  39. BIN
      docs/_build/html/_static/fonts/Inconsolata-Regular.ttf
  40. BIN
      docs/_build/html/_static/fonts/Inconsolata.ttf
  41. BIN
      docs/_build/html/_static/fonts/Lato-Bold.ttf
  42. BIN
      docs/_build/html/_static/fonts/Lato-Regular.ttf
  43. BIN
      docs/_build/html/_static/fonts/Lato/lato-bold.eot
  44. BIN
      docs/_build/html/_static/fonts/Lato/lato-bold.ttf
  45. BIN
      docs/_build/html/_static/fonts/Lato/lato-bold.woff
  46. BIN
      docs/_build/html/_static/fonts/Lato/lato-bold.woff2
  47. BIN
      docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot
  48. BIN
      docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf
  49. BIN
      docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff
  50. BIN
      docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2
  51. BIN
      docs/_build/html/_static/fonts/Lato/lato-italic.eot
  52. BIN
      docs/_build/html/_static/fonts/Lato/lato-italic.ttf
  53. BIN
      docs/_build/html/_static/fonts/Lato/lato-italic.woff
  54. BIN
      docs/_build/html/_static/fonts/Lato/lato-italic.woff2
  55. BIN
      docs/_build/html/_static/fonts/Lato/lato-regular.eot
  56. BIN
      docs/_build/html/_static/fonts/Lato/lato-regular.ttf
  57. BIN
      docs/_build/html/_static/fonts/Lato/lato-regular.woff
  58. BIN
      docs/_build/html/_static/fonts/Lato/lato-regular.woff2
  59. BIN
      docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf
  60. BIN
      docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf
  61. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot
  62. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf
  63. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff
  64. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2
  65. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot
  66. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf
  67. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff
  68. BIN
      docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2
  69. BIN
      docs/_build/html/_static/fonts/fontawesome-webfont.eot
  70. +0
    -2671
      docs/_build/html/_static/fonts/fontawesome-webfont.svg
  71. BIN
      docs/_build/html/_static/fonts/fontawesome-webfont.ttf
  72. BIN
      docs/_build/html/_static/fonts/fontawesome-webfont.woff
  73. BIN
      docs/_build/html/_static/fonts/fontawesome-webfont.woff2
  74. +0
    -10253
      docs/_build/html/_static/jquery-3.2.1.js
  75. +0
    -4
      docs/_build/html/_static/jquery.js
  76. +0
    -4
      docs/_build/html/_static/js/modernizr.min.js
  77. +0
    -3
      docs/_build/html/_static/js/theme.js
  78. BIN
      docs/_build/html/_static/minus.png
  79. BIN
      docs/_build/html/_static/plus.png
  80. +0
    -69
      docs/_build/html/_static/pygments.css
  81. +0
    -482
      docs/_build/html/_static/searchtools.js
  82. +0
    -999
      docs/_build/html/_static/underscore-1.3.1.js
  83. +0
    -31
      docs/_build/html/_static/underscore.js
  84. BIN
      docs/_build/html/_static/up-pressed.png
  85. BIN
      docs/_build/html/_static/up.png
  86. +0
    -808
      docs/_build/html/_static/websupport.js
  87. +0
    -431
      docs/_build/html/genindex.html
  88. +0
    -207
      docs/_build/html/index.html
  89. +0
    -222
      docs/_build/html/modules.html
  90. BIN
      docs/_build/html/objects.inv
  91. +0
    -257
      docs/_build/html/py-modindex.html
  92. +0
    -237
      docs/_build/html/pygraph.html
  93. +0
    -816
      docs/_build/html/pygraph.utils.html
  94. +0
    -208
      docs/_build/html/search.html
  95. +0
    -1
      docs/_build/html/searchindex.js
  96. +0
    -101
      docs/_build/latex/LICRcyr2utf8.xdy
  97. +0
    -236
      docs/_build/latex/LICRlatin2utf8.xdy
  98. +0
    -607
      docs/_build/latex/LatinRules.xdy
  99. +0
    -68
      docs/_build/latex/Makefile
  100. +0
    -269
      docs/_build/latex/footnotehyper-sphinx.sty

+ 8
- 4
.gitignore View File

@@ -18,15 +18,19 @@ notebooks/results/*
notebooks/check_gm/*
notebooks/test_parallel/*
requirements/*
pygraph/model.py
pygraph/kernels/*_sym.py
gklearn/model.py
gklearn/kernels/*_sym.py
*.npy
*.eps
*.dat
*.pyc

preimage/*
!preimage/*.py
gklearn/preimage/*
!gklearn/preimage/*.py

__pycache__
##*#

docs/build/*
!docs/build/latex/*.pdf
docs/log*

+ 11
- 9
README.md View File

@@ -1,7 +1,7 @@
# py-graph
[![Build Status](https://travis-ci.org/jajupmochi/py-graph.svg?branch=ljia)](https://travis-ci.org/jajupmochi/py-graph)
[![codecov](https://codecov.io/gh/jajupmochi/py-graph/branch/ljia/graph/badge.svg)](https://codecov.io/gh/jajupmochi/py-graph)
[![Documentation Status](https://readthedocs.org/projects/py-graph/badge/?version=ljia)](https://py-graph.readthedocs.io/en/ljia/?badge=ljia)
# graphkit-learn
[![Build Status](https://travis-ci.org/jajupmochi/graphkit-learn.svg?branch=ljia)](https://travis-ci.org/jajupmochi/graphkit-learn)
[![codecov](https://codecov.io/gh/jajupmochi/graphkit-learn/branch/ljia/graph/badge.svg)](https://codecov.io/gh/jajupmochi/graphkit-learn)
[![Documentation Status](https://readthedocs.org/projects/graphkit-learn/badge/?version=ljia)](https://graphkit-learn.readthedocs.io/en/ljia/?badge=ljia)

A python package for graph kernels.

@@ -20,11 +20,11 @@ A python package for graph kernels.

## How to use?

Simply clone this repository and voilà! Then check [`notebooks`](https://github.com/jajupmochi/py-graph/tree/ljia/notebooks) directory for demos:
* [`notebooks`](https://github.com/jajupmochi/py-graph/tree/ljia/notebooks) directory includes test codes of graph kernels based on linear patterns;
* [`notebooks/tests`](https://github.com/jajupmochi/py-graph/tree/ljia/notebooks/tests) directory includes codes that test some libraries and functions;
* [`notebooks/utils`](https://github.com/jajupmochi/py-graph/tree/ljia/notebooks/utils) directory includes some useful tools, such as a Gram matrix checker and a function to get properties of datasets;
* [`notebooks/else`](https://github.com/jajupmochi/py-graph/tree/ljia/notebooks/else) directory includes other codes that we used for experiments.
Simply clone this repository and voilà! Then check [`notebooks`](https://github.com/jajupmochi/graphkit-learn/tree/ljia/notebooks) directory for demos:
* [`notebooks`](https://github.com/jajupmochi/graphkit-learn/tree/ljia/notebooks) directory includes test codes of graph kernels based on linear patterns;
* [`notebooks/tests`](https://github.com/jajupmochi/graphkit-learn/tree/ljia/notebooks/tests) directory includes codes that test some libraries and functions;
* [`notebooks/utils`](https://github.com/jajupmochi/graphkit-learn/tree/ljia/notebooks/utils) directory includes some useful tools, such as a Gram matrix checker and a function to get properties of datasets;
* [`notebooks/else`](https://github.com/jajupmochi/graphkit-learn/tree/ljia/notebooks/else) directory includes other codes that we used for experiments.

## List of graph kernels

@@ -77,6 +77,8 @@ Check this paper for detailed description of graph kernels and experimental resu

Linlin Jia, Benoit Gaüzère, and Paul Honeine. Graph Kernels Based on Linear Patterns: Theoretical and Experimental Comparisons. working paper or preprint, March 2019. URL https://hal-normandie-univ.archives-ouvertes.fr/hal-02053946.

A comparison of performances of graph kernels on benchmark datasets can be found [here](https://graphkit-learn.readthedocs.io/en/ljia/index.html#experiments).

## References
[1] Thomas Gärtner, Peter Flach, and Stefan Wrobel. On graph kernels: Hardness results and efficient alternatives. Learning Theory and Kernel Machines, pages 129–143, 2003.



+ 2
- 2
docs/Makefile View File

@@ -4,8 +4,8 @@
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SOURCEDIR = .
BUILDDIR = _build
SOURCEDIR = source
BUILDDIR = build

# Put it first so that "make" without argument is like "make help".
help:


BIN
docs/_build/doctrees/environment.pickle View File


BIN
docs/_build/doctrees/index.doctree View File


BIN
docs/_build/doctrees/modules.doctree View File


BIN
docs/_build/doctrees/pygraph.doctree View File


BIN
docs/_build/doctrees/pygraph.utils.doctree View File


+ 0
- 4
docs/_build/html/.buildinfo View File

@@ -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: b72b368ba10131aed8c3edbb863096bd
tags: 645f666f9bcd5a90fca523b33c5a78b7

+ 0
- 196
docs/_build/html/_modules/index.html View File

@@ -1,196 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Overview: module code &mdash; py-graph documentation</title>


<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>


<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li>Overview: module code</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>All modules for which code is available</h1>
<ul><li><a href="pygraph/utils/graphdataset.html">pygraph.utils.graphdataset</a></li>
<li><a href="pygraph/utils/graphfiles.html">pygraph.utils.graphfiles</a></li>
<li><a href="pygraph/utils/isNotebook.html">pygraph.utils.isNotebook</a></li>
<li><a href="pygraph/utils/kernels.html">pygraph.utils.kernels</a></li>
<li><a href="pygraph/utils/logger2file.html">pygraph.utils.logger2file</a></li>
<li><a href="pygraph/utils/model_selection_precomputed.html">pygraph.utils.model_selection_precomputed</a></li>
<li><a href="pygraph/utils/parallel.html">pygraph.utils.parallel</a></li>
<li><a href="pygraph/utils/trie.html">pygraph.utils.trie</a></li>
<li><a href="pygraph/utils/utils.html">pygraph.utils.utils</a></li>
</ul>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 502
docs/_build/html/_modules/pygraph/utils/graphdataset.html View File

@@ -1,502 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.graphdataset &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.graphdataset</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.graphdataset</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot; Obtain all kinds of attributes of a graph dataset.</span>
<span class="sd">&quot;&quot;&quot;</span>


<div class="viewcode-block" id="get_dataset_attributes"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphdataset.get_dataset_attributes">[docs]</a><span class="k">def</span> <span class="nf">get_dataset_attributes</span><span class="p">(</span><span class="n">Gn</span><span class="p">,</span>
<span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attr_names</span><span class="o">=</span><span class="p">[],</span>
<span class="n">node_label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">edge_label</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns the structure and property information of the graph dataset Gn.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> Gn : List of NetworkX graph</span>
<span class="sd"> List of graphs whose information will be returned.</span>
<span class="sd"> target : list</span>
<span class="sd"> The list of classification targets corresponding to Gn. Only works for </span>
<span class="sd"> classification problems.</span>
<span class="sd"> attr_names : list</span>
<span class="sd"> List of strings which indicate which informations will be returned. The</span>
<span class="sd"> possible choices includes:</span>
<span class="sd"> &#39;substructures&#39;: sub-structures Gn contains, including &#39;linear&#39;, &#39;non </span>
<span class="sd"> linear&#39; and &#39;cyclic&#39;.</span>
<span class="sd"> &#39;node_labeled&#39;: whether vertices have symbolic labels.</span>
<span class="sd"> &#39;edge_labeled&#39;: whether egdes have symbolic labels.</span>
<span class="sd"> &#39;is_directed&#39;: whether graphs in Gn are directed.</span>
<span class="sd"> &#39;dataset_size&#39;: number of graphs in Gn.</span>
<span class="sd"> &#39;ave_node_num&#39;: average number of vertices of graphs in Gn.</span>
<span class="sd"> &#39;min_node_num&#39;: minimum number of vertices of graphs in Gn.</span>
<span class="sd"> &#39;max_node_num&#39;: maximum number of vertices of graphs in Gn.</span>
<span class="sd"> &#39;ave_edge_num&#39;: average number of edges of graphs in Gn.</span>
<span class="sd"> &#39;min_edge_num&#39;: minimum number of edges of graphs in Gn.</span>
<span class="sd"> &#39;max_edge_num&#39;: maximum number of edges of graphs in Gn.</span>
<span class="sd"> &#39;ave_node_degree&#39;: average vertex degree of graphs in Gn.</span>
<span class="sd"> &#39;min_node_degree&#39;: minimum vertex degree of graphs in Gn.</span>
<span class="sd"> &#39;max_node_degree&#39;: maximum vertex degree of graphs in Gn.</span>
<span class="sd"> &#39;ave_fill_factor&#39;: average fill factor (number_of_edges / </span>
<span class="sd"> (number_of_nodes ** 2)) of graphs in Gn.</span>
<span class="sd"> &#39;min_fill_factor&#39;: minimum fill factor of graphs in Gn.</span>
<span class="sd"> &#39;max_fill_factor&#39;: maximum fill factor of graphs in Gn.</span>
<span class="sd"> &#39;node_label_num&#39;: number of symbolic vertex labels.</span>
<span class="sd"> &#39;edge_label_num&#39;: number of symbolic edge labels.</span>
<span class="sd"> &#39;node_attr_dim&#39;: number of dimensions of non-symbolic vertex labels. </span>
<span class="sd"> Extracted from the &#39;attributes&#39; attribute of graph nodes.</span>
<span class="sd"> &#39;edge_attr_dim&#39;: number of dimensions of non-symbolic edge labels.</span>
<span class="sd"> Extracted from the &#39;attributes&#39; attribute of graph edges.</span>
<span class="sd"> &#39;class_number&#39;: number of classes. Only available for classification </span>
<span class="sd"> problems.</span>
<span class="sd"> node_label : string</span>
<span class="sd"> Node attribute used as label. The default node label is atom. Mandatory</span>
<span class="sd"> when &#39;node_labeled&#39; or &#39;node_label_num&#39; is required.</span>
<span class="sd"> edge_label : string</span>
<span class="sd"> Edge attribute used as label. The default edge label is bond_type. </span>
<span class="sd"> Mandatory when &#39;edge_labeled&#39; or &#39;edge_label_num&#39; is required.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> attrs : dict</span>
<span class="sd"> Value for each property.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>

<span class="n">attrs</span> <span class="o">=</span> <span class="p">{}</span>

<span class="k">def</span> <span class="nf">get_dataset_size</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">get_all_node_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(</span><span class="n">G</span><span class="p">)</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">]</span>

<span class="k">def</span> <span class="nf">get_ave_node_num</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">get_min_node_num</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amin</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">get_max_node_num</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amax</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">get_all_edge_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_edges</span><span class="p">(</span><span class="n">G</span><span class="p">)</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">]</span>

<span class="k">def</span> <span class="nf">get_ave_edge_num</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">get_min_edge_num</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amin</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">get_max_edge_num</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amax</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">is_node_labeled</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span> <span class="k">if</span> <span class="n">node_label</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">True</span>

<span class="k">def</span> <span class="nf">get_node_label_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="n">nl</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="n">nl</span> <span class="o">=</span> <span class="n">nl</span> <span class="o">|</span> <span class="nb">set</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">get_node_attributes</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">node_label</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">nl</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">is_edge_labeled</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span> <span class="k">if</span> <span class="n">edge_label</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">True</span>

<span class="k">def</span> <span class="nf">get_edge_label_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="n">el</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="n">el</span> <span class="o">=</span> <span class="n">el</span> <span class="o">|</span> <span class="nb">set</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">get_edge_attributes</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">edge_label</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">is_directed</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">nx</span><span class="o">.</span><span class="n">is_directed</span><span class="p">(</span><span class="n">Gn</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="k">def</span> <span class="nf">get_ave_node_degree</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">G</span><span class="o">.</span><span class="n">degree</span><span class="p">())</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">])</span>

<span class="k">def</span> <span class="nf">get_max_node_degree</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amax</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">G</span><span class="o">.</span><span class="n">degree</span><span class="p">())</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">])</span>

<span class="k">def</span> <span class="nf">get_min_node_degree</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amin</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">G</span><span class="o">.</span><span class="n">degree</span><span class="p">())</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">])</span>
<span class="c1"># get fill factor, the number of non-zero entries in the adjacency matrix.</span>
<span class="k">def</span> <span class="nf">get_ave_fill_factor</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">([</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_edges</span><span class="p">(</span><span class="n">G</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(</span><span class="n">G</span><span class="p">)</span>
<span class="o">*</span> <span class="n">nx</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(</span><span class="n">G</span><span class="p">))</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">])</span>

<span class="k">def</span> <span class="nf">get_max_fill_factor</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amax</span><span class="p">([</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_edges</span><span class="p">(</span><span class="n">G</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(</span><span class="n">G</span><span class="p">)</span>
<span class="o">*</span> <span class="n">nx</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(</span><span class="n">G</span><span class="p">))</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">])</span>

<span class="k">def</span> <span class="nf">get_min_fill_factor</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">amin</span><span class="p">([</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_edges</span><span class="p">(</span><span class="n">G</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(</span><span class="n">G</span><span class="p">)</span>
<span class="o">*</span> <span class="n">nx</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(</span><span class="n">G</span><span class="p">))</span> <span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">])</span>

<span class="k">def</span> <span class="nf">get_substructures</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="n">subs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="n">degrees</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">G</span><span class="o">.</span><span class="n">degree</span><span class="p">())</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">2</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">degrees</span><span class="p">):</span>
<span class="n">subs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s1">&#39;linear&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">amax</span><span class="p">(</span><span class="n">degrees</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">subs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s1">&#39;non linear&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;linear&#39;</span> <span class="ow">in</span> <span class="n">subs</span> <span class="ow">and</span> <span class="s1">&#39;non linear&#39;</span> <span class="ow">in</span> <span class="n">subs</span><span class="p">:</span>
<span class="k">break</span>

<span class="k">if</span> <span class="n">is_directed</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">find_cycle</span><span class="p">(</span><span class="n">G</span><span class="p">)))</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">subs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s1">&#39;cyclic&#39;</span><span class="p">)</span>
<span class="k">break</span>
<span class="c1"># else:</span>
<span class="c1"># # @todo: this method does not work for big graph with large amount of edges like D&amp;D, try a better way.</span>
<span class="c1"># upper = np.amin([nx.number_of_edges(G) for G in Gn]) * 2 + 10</span>
<span class="c1"># for G in Gn:</span>
<span class="c1"># if (nx.number_of_edges(G) &lt; upper):</span>
<span class="c1"># cyc = list(nx.simple_cycles(G.to_directed()))</span>
<span class="c1"># if any(len(i) &gt; 2 for i in cyc):</span>
<span class="c1"># subs.add(&#39;cyclic&#39;)</span>
<span class="c1"># break</span>
<span class="c1"># if &#39;cyclic&#39; not in subs:</span>
<span class="c1"># for G in Gn:</span>
<span class="c1"># cyc = list(nx.simple_cycles(G.to_directed()))</span>
<span class="c1"># if any(len(i) &gt; 2 for i in cyc):</span>
<span class="c1"># subs.add(&#39;cyclic&#39;)</span>
<span class="c1"># break</span>

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

<span class="k">def</span> <span class="nf">get_class_num</span><span class="p">(</span><span class="n">target</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>

<span class="k">def</span> <span class="nf">get_node_attr_dim</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="k">if</span> <span class="s1">&#39;attributes&#39;</span> <span class="ow">in</span> <span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s1">&#39;attributes&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="mi">0</span>

<span class="k">def</span> <span class="nf">get_edge_attr_dim</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="k">if</span> <span class="n">nx</span><span class="o">.</span><span class="n">number_of_edges</span><span class="p">(</span><span class="n">G</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="k">if</span> <span class="s1">&#39;attributes&#39;</span> <span class="ow">in</span> <span class="n">e</span><span class="p">[</span><span class="mi">2</span><span class="p">]:</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="s1">&#39;attributes&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="mi">0</span>

<span class="k">if</span> <span class="n">attr_names</span> <span class="o">==</span> <span class="p">[]:</span>
<span class="n">attr_names</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;substructures&#39;</span><span class="p">,</span>
<span class="s1">&#39;node_labeled&#39;</span><span class="p">,</span>
<span class="s1">&#39;edge_labeled&#39;</span><span class="p">,</span>
<span class="s1">&#39;is_directed&#39;</span><span class="p">,</span>
<span class="s1">&#39;dataset_size&#39;</span><span class="p">,</span>
<span class="s1">&#39;ave_node_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;min_node_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;max_node_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;ave_edge_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;min_edge_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;max_edge_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;ave_node_degree&#39;</span><span class="p">,</span>
<span class="s1">&#39;min_node_degree&#39;</span><span class="p">,</span>
<span class="s1">&#39;max_node_degree&#39;</span><span class="p">,</span>
<span class="s1">&#39;ave_fill_factor&#39;</span><span class="p">,</span>
<span class="s1">&#39;min_fill_factor&#39;</span><span class="p">,</span>
<span class="s1">&#39;max_fill_factor&#39;</span><span class="p">,</span>
<span class="s1">&#39;node_label_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;edge_label_num&#39;</span><span class="p">,</span>
<span class="s1">&#39;node_attr_dim&#39;</span><span class="p">,</span>
<span class="s1">&#39;edge_attr_dim&#39;</span><span class="p">,</span>
<span class="s1">&#39;class_number&#39;</span><span class="p">,</span>
<span class="p">]</span>

<span class="c1"># dataset size</span>
<span class="k">if</span> <span class="s1">&#39;dataset_size&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>

<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;dataset_size&#39;</span><span class="p">:</span> <span class="n">get_dataset_size</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="c1"># graph node number</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">i</span> <span class="ow">in</span> <span class="n">attr_names</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;ave_node_num&#39;</span><span class="p">,</span> <span class="s1">&#39;min_node_num&#39;</span><span class="p">,</span> <span class="s1">&#39;max_node_num&#39;</span><span class="p">]):</span>

<span class="n">all_node_num</span> <span class="o">=</span> <span class="n">get_all_node_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>

<span class="k">if</span> <span class="s1">&#39;ave_node_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>

<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;ave_node_num&#39;</span><span class="p">:</span> <span class="n">get_ave_node_num</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;min_node_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>

<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;min_node_num&#39;</span><span class="p">:</span> <span class="n">get_min_node_num</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;max_node_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>

<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;max_node_num&#39;</span><span class="p">:</span> <span class="n">get_max_node_num</span><span class="p">(</span><span class="n">all_node_num</span><span class="p">)})</span>

<span class="c1"># graph edge number</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">i</span> <span class="ow">in</span> <span class="n">attr_names</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span>
<span class="p">[</span><span class="s1">&#39;ave_edge_num&#39;</span><span class="p">,</span> <span class="s1">&#39;min_edge_num&#39;</span><span class="p">,</span> <span class="s1">&#39;max_edge_num&#39;</span><span class="p">]):</span>

<span class="n">all_edge_num</span> <span class="o">=</span> <span class="n">get_all_edge_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>

<span class="k">if</span> <span class="s1">&#39;ave_edge_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>

<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;ave_edge_num&#39;</span><span class="p">:</span> <span class="n">get_ave_edge_num</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;max_edge_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>

<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;max_edge_num&#39;</span><span class="p">:</span> <span class="n">get_max_edge_num</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;min_edge_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>

<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;min_edge_num&#39;</span><span class="p">:</span> <span class="n">get_min_edge_num</span><span class="p">(</span><span class="n">all_edge_num</span><span class="p">)})</span>

<span class="c1"># label number</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">i</span> <span class="ow">in</span> <span class="n">attr_names</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;node_labeled&#39;</span><span class="p">,</span> <span class="s1">&#39;node_label_num&#39;</span><span class="p">]):</span>
<span class="n">is_nl</span> <span class="o">=</span> <span class="n">is_node_labeled</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>
<span class="n">node_label_num</span> <span class="o">=</span> <span class="n">get_node_label_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>

<span class="k">if</span> <span class="s1">&#39;node_labeled&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="c1"># graphs are considered node unlabeled if all nodes have the same label.</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;node_labeled&#39;</span><span class="p">:</span> <span class="n">is_nl</span> <span class="k">if</span> <span class="n">node_label_num</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">False</span><span class="p">})</span>

<span class="k">if</span> <span class="s1">&#39;node_label_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;node_label_num&#39;</span><span class="p">:</span> <span class="n">node_label_num</span><span class="p">})</span>

<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">i</span> <span class="ow">in</span> <span class="n">attr_names</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;edge_labeled&#39;</span><span class="p">,</span> <span class="s1">&#39;edge_label_num&#39;</span><span class="p">]):</span>
<span class="n">is_el</span> <span class="o">=</span> <span class="n">is_edge_labeled</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>
<span class="n">edge_label_num</span> <span class="o">=</span> <span class="n">get_edge_label_num</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>

<span class="k">if</span> <span class="s1">&#39;edge_labeled&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="c1"># graphs are considered edge unlabeled if all edges have the same label.</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;edge_labeled&#39;</span><span class="p">:</span> <span class="n">is_el</span> <span class="k">if</span> <span class="n">edge_label_num</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">False</span><span class="p">})</span>

<span class="k">if</span> <span class="s1">&#39;edge_label_num&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;edge_label_num&#39;</span><span class="p">:</span> <span class="n">edge_label_num</span><span class="p">})</span>

<span class="k">if</span> <span class="s1">&#39;is_directed&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;is_directed&#39;</span><span class="p">:</span> <span class="n">is_directed</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;ave_node_degree&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;ave_node_degree&#39;</span><span class="p">:</span> <span class="n">get_ave_node_degree</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;max_node_degree&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;max_node_degree&#39;</span><span class="p">:</span> <span class="n">get_max_node_degree</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;min_node_degree&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;min_node_degree&#39;</span><span class="p">:</span> <span class="n">get_min_node_degree</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>
<span class="k">if</span> <span class="s1">&#39;ave_fill_factor&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;ave_fill_factor&#39;</span><span class="p">:</span> <span class="n">get_ave_fill_factor</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;max_fill_factor&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;max_fill_factor&#39;</span><span class="p">:</span> <span class="n">get_max_fill_factor</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;min_fill_factor&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;min_fill_factor&#39;</span><span class="p">:</span> <span class="n">get_min_fill_factor</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;substructures&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;substructures&#39;</span><span class="p">:</span> <span class="n">get_substructures</span><span class="p">(</span><span class="n">Gn</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;class_number&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;class_number&#39;</span><span class="p">:</span> <span class="n">get_class_num</span><span class="p">(</span><span class="n">target</span><span class="p">)})</span>

<span class="k">if</span> <span class="s1">&#39;node_attr_dim&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;node_attr_dim&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_node_attr_dim</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>

<span class="k">if</span> <span class="s1">&#39;edge_attr_dim&#39;</span> <span class="ow">in</span> <span class="n">attr_names</span><span class="p">:</span>
<span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;edge_attr_dim&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_edge_attr_dim</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span>

<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">OrderedDict</span>
<span class="k">return</span> <span class="n">OrderedDict</span><span class="p">(</span>
<span class="nb">sorted</span><span class="p">(</span><span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">attr_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">])))</span></div>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 811
docs/_build/html/_modules/pygraph/utils/graphfiles.html View File

@@ -1,811 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.graphfiles &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.graphfiles</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.graphfiles</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot; Utilities function to manage graph files</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">dirname</span><span class="p">,</span> <span class="n">splitext</span>

<div class="viewcode-block" id="loadCT"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadCT">[docs]</a><span class="k">def</span> <span class="nf">loadCT</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;load data from a Chemical Table (.ct) file.</span>

<span class="sd"> Notes</span>
<span class="sd"> ------</span>
<span class="sd"> a typical example of data in .ct is like this:</span>

<span class="sd"> 3 2 &lt;- number of nodes and edges</span>
<span class="sd"> 0.0000 0.0000 0.0000 C &lt;- each line describes a node (x,y,z + label)</span>
<span class="sd"> 0.0000 0.0000 0.0000 C</span>
<span class="sd"> 0.0000 0.0000 0.0000 O</span>
<span class="sd"> 1 3 1 1 &lt;- each line describes an edge : to, from, bond type, bond stereo</span>
<span class="sd"> 2 3 1 1</span>
<span class="sd"> </span>
<span class="sd"> Check https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=10&amp;ved=2ahUKEwivhaSdjsTlAhVhx4UKHczHA8gQFjAJegQIARAC&amp;url=https%3A%2F%2Fwww.daylight.com%2Fmeetings%2Fmug05%2FKappler%2Fctfile.pdf&amp;usg=AOvVaw1cDNrrmMClkFPqodlF2inS</span>
<span class="sd"> for detailed format discription.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">basename</span>
<span class="n">g</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="n">g</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span>
<span class="n">name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">content</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span>
<span class="n">filename</span> <span class="o">=</span> <span class="n">basename</span><span class="p">(</span><span class="n">filename</span><span class="p">))</span> <span class="c1"># set name of the graph</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
<span class="n">nb_nodes</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="c1"># number of the nodes</span>
<span class="n">nb_edges</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="c1"># number of the edges</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">nb_nodes</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">nb_edges</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="c1"># patch for compatibility : label will be removed later</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">nb_nodes</span><span class="p">):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">tmp</span> <span class="k">if</span> <span class="n">x</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">]</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">atom</span><span class="o">=</span><span class="n">tmp</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span>
<span class="n">label</span><span class="o">=</span><span class="p">[</span><span class="n">item</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">3</span><span class="p">:]],</span>
<span class="n">attributes</span><span class="o">=</span><span class="p">[</span><span class="n">item</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">nb_edges</span><span class="p">):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">g</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">tmp</span> <span class="k">if</span> <span class="n">x</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">]</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">bond_type</span><span class="o">=</span><span class="n">tmp</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span>
<span class="n">label</span><span class="o">=</span><span class="p">[</span><span class="n">item</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">2</span><span class="p">:]])</span>
<span class="k">return</span> <span class="n">g</span></div>


<div class="viewcode-block" id="loadGXL"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadGXL">[docs]</a><span class="k">def</span> <span class="nf">loadGXL</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">basename</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="k">as</span> <span class="nn">ET</span>

<span class="n">tree</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
<span class="n">index</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">g</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="n">filename</span><span class="o">=</span><span class="n">basename</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">name</span><span class="o">=</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">])</span>
<span class="n">dic</span> <span class="o">=</span> <span class="p">{}</span> <span class="c1"># used to retrieve incident nodes of edges</span>
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">&#39;node&#39;</span><span class="p">):</span>
<span class="n">dic</span><span class="p">[</span><span class="n">node</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">index</span>
<span class="n">labels</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">&#39;attr&#39;</span><span class="p">):</span>
<span class="n">labels</span><span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span>
<span class="k">if</span> <span class="s1">&#39;chem&#39;</span> <span class="ow">in</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">labels</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span><span class="p">[</span><span class="s1">&#39;chem&#39;</span><span class="p">]</span>
<span class="n">labels</span><span class="p">[</span><span class="s1">&#39;atom&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span><span class="p">[</span><span class="s1">&#39;chem&#39;</span><span class="p">]</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="o">**</span><span class="n">labels</span><span class="p">)</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>

<span class="k">for</span> <span class="n">edge</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">&#39;edge&#39;</span><span class="p">):</span>
<span class="n">labels</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">edge</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">&#39;attr&#39;</span><span class="p">):</span>
<span class="n">labels</span><span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span>
<span class="k">if</span> <span class="s1">&#39;valence&#39;</span> <span class="ow">in</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">labels</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span><span class="p">[</span><span class="s1">&#39;valence&#39;</span><span class="p">]</span>
<span class="n">labels</span><span class="p">[</span><span class="s1">&#39;bond_type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span><span class="p">[</span><span class="s1">&#39;valence&#39;</span><span class="p">]</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">dic</span><span class="p">[</span><span class="n">edge</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;from&#39;</span><span class="p">]],</span> <span class="n">dic</span><span class="p">[</span><span class="n">edge</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;to&#39;</span><span class="p">]],</span> <span class="o">**</span><span class="n">labels</span><span class="p">)</span>
<span class="k">return</span> <span class="n">g</span></div>


<div class="viewcode-block" id="saveGXL"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.saveGXL">[docs]</a><span class="k">def</span> <span class="nf">saveGXL</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;benoit&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;benoit&#39;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="k">as</span> <span class="nn">ET</span>
<span class="n">root_node</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s1">&#39;gxl&#39;</span><span class="p">)</span>
<span class="n">attr</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
<span class="n">attr</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">graph</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">])</span>
<span class="n">attr</span><span class="p">[</span><span class="s1">&#39;edgeids&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;true&#39;</span>
<span class="n">attr</span><span class="p">[</span><span class="s1">&#39;edgemode&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;undirected&#39;</span>
<span class="n">graph_node</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root_node</span><span class="p">,</span> <span class="s1">&#39;graph&#39;</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="n">attr</span><span class="p">)</span>
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">:</span>
<span class="n">current_node</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">graph_node</span><span class="p">,</span> <span class="s1">&#39;node&#39;</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;id&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)})</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">v</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">cur_attr</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span>
<span class="n">current_node</span><span class="p">,</span> <span class="s1">&#39;attr&#39;</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="n">attr</span><span class="p">})</span>
<span class="n">cur_value</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">cur_attr</span><span class="p">,</span>
<span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">v</span><span class="p">][</span><span class="n">attr</span><span class="p">]</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
<span class="n">cur_value</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">v</span><span class="p">][</span><span class="n">attr</span><span class="p">]</span>
<span class="k">for</span> <span class="n">v1</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">:</span>
<span class="k">for</span> <span class="n">v2</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">[</span><span class="n">v1</span><span class="p">]:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">v1</span> <span class="o">&lt;</span> <span class="n">v2</span><span class="p">):</span> <span class="c1"># Non oriented graphs</span>
<span class="n">cur_edge</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span>
<span class="n">graph_node</span><span class="p">,</span>
<span class="s1">&#39;edge&#39;</span><span class="p">,</span>
<span class="n">attrib</span><span class="o">=</span><span class="p">{</span>
<span class="s1">&#39;from&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">v1</span><span class="p">),</span>
<span class="s1">&#39;to&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span>
<span class="p">})</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">[</span><span class="n">v1</span><span class="p">][</span><span class="n">v2</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">cur_attr</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span>
<span class="n">cur_edge</span><span class="p">,</span> <span class="s1">&#39;attr&#39;</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="n">attr</span><span class="p">})</span>
<span class="n">cur_value</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span>
<span class="n">cur_attr</span><span class="p">,</span> <span class="n">graph</span><span class="p">[</span><span class="n">v1</span><span class="p">][</span><span class="n">v2</span><span class="p">][</span><span class="n">attr</span><span class="p">]</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
<span class="n">cur_value</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">graph</span><span class="p">[</span><span class="n">v1</span><span class="p">][</span><span class="n">v2</span><span class="p">][</span><span class="n">attr</span><span class="p">])</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">ElementTree</span><span class="p">(</span><span class="n">root_node</span><span class="p">)</span>
<span class="n">tree</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;gedlib&#39;</span><span class="p">:</span>
<span class="c1"># reference: https://github.com/dbblumenthal/gedlib/blob/master/data/generate_molecules.py#L22</span>
<span class="c1"># pass</span>
<span class="n">gxl_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;?xml version=</span><span class="se">\&quot;</span><span class="s2">1.0</span><span class="se">\&quot;</span><span class="s2"> encoding=</span><span class="se">\&quot;</span><span class="s2">UTF-8</span><span class="se">\&quot;</span><span class="s2">?&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;!DOCTYPE gxl SYSTEM </span><span class="se">\&quot;</span><span class="s2">http://www.gupro.de/GXL/gxl-1.0.dtd</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;gxl xmlns:xlink=</span><span class="se">\&quot;</span><span class="s2">http://www.w3.org/1999/xlink</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;graph id=</span><span class="se">\&quot;</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">graph</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2"> edgeids=</span><span class="se">\&quot;</span><span class="s2">true</span><span class="se">\&quot;</span><span class="s2"> edgemode=</span><span class="se">\&quot;</span><span class="s2">undirected</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">v</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;node id=</span><span class="se">\&quot;</span><span class="s2">_&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;attr name=</span><span class="se">\&quot;</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;chem&quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">&gt;&lt;int&gt;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;chem&#39;</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;&lt;/int&gt;&lt;/attr&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;/node&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;edge from=</span><span class="se">\&quot;</span><span class="s2">_&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2"> to=</span><span class="se">\&quot;</span><span class="s2">_&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;attr name=</span><span class="se">\&quot;</span><span class="s2">valence</span><span class="se">\&quot;</span><span class="s2">&gt;&lt;int&gt;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;valence&#39;</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;&lt;/int&gt;&lt;/attr&gt;&quot;</span><span class="p">)</span>
<span class="c1"># gxl_file.write(&quot;&lt;attr name=\&quot;valence\&quot;&gt;&lt;int&gt;&quot; + &quot;1&quot; + &quot;&lt;/int&gt;&lt;/attr&gt;&quot;)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;/edge&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;/graph&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;/gxl&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;gedlib-letter&#39;</span><span class="p">:</span>
<span class="c1"># reference: https://github.com/dbblumenthal/gedlib/blob/master/data/generate_molecules.py#L22</span>
<span class="c1"># and https://github.com/dbblumenthal/gedlib/blob/master/data/datasets/Letter/HIGH/AP1_0000.gxl</span>
<span class="n">gxl_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;?xml version=</span><span class="se">\&quot;</span><span class="s2">1.0</span><span class="se">\&quot;</span><span class="s2"> encoding=</span><span class="se">\&quot;</span><span class="s2">UTF-8</span><span class="se">\&quot;</span><span class="s2">?&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;!DOCTYPE gxl SYSTEM </span><span class="se">\&quot;</span><span class="s2">http://www.gupro.de/GXL/gxl-1.0.dtd</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;gxl xmlns:xlink=</span><span class="se">\&quot;</span><span class="s2">http://www.w3.org/1999/xlink</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;graph id=</span><span class="se">\&quot;</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">graph</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2"> edgeids=</span><span class="se">\&quot;</span><span class="s2">false</span><span class="se">\&quot;</span><span class="s2"> edgemode=</span><span class="se">\&quot;</span><span class="s2">undirected</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">v</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;node id=</span><span class="se">\&quot;</span><span class="s2">_&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;attr name=</span><span class="se">\&quot;</span><span class="s2">x</span><span class="se">\&quot;</span><span class="s2">&gt;&lt;float&gt;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;attributes&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;&lt;/float&gt;&lt;/attr&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;attr name=</span><span class="se">\&quot;</span><span class="s2">y</span><span class="se">\&quot;</span><span class="s2">&gt;&lt;float&gt;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;attributes&#39;</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;&lt;/float&gt;&lt;/attr&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;/node&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;edge from=</span><span class="se">\&quot;</span><span class="s2">_&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2"> to=</span><span class="se">\&quot;</span><span class="s2">_&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">/&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;/graph&gt;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;/gxl&gt;&quot;</span><span class="p">)</span>
<span class="n">gxl_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>


<div class="viewcode-block" id="loadSDF"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadSDF">[docs]</a><span class="k">def</span> <span class="nf">loadSDF</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;load data from structured data file (.sdf file).</span>

<span class="sd"> Notes</span>
<span class="sd"> ------</span>
<span class="sd"> A SDF file contains a group of molecules, represented in the similar way as in MOL format.</span>
<span class="sd"> Check http://www.nonlinear.com/progenesis/sdf-studio/v0.9/faq/sdf-file-format-guidance.aspx, 2018 for detailed structure.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">basename</span>
<span class="kn">from</span> <span class="nn">tqdm</span> <span class="k">import</span> <span class="n">tqdm</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="n">index</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">pbar</span> <span class="o">=</span> <span class="n">tqdm</span><span class="p">(</span><span class="n">total</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="s1">&#39;load SDF&#39;</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">)</span>
<span class="k">while</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="p">):</span>
<span class="n">index_old</span> <span class="o">=</span> <span class="n">index</span>

<span class="n">g</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">content</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="c1"># set name of the graph</span>

<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">index</span> <span class="o">+</span> <span class="mi">3</span><span class="p">]</span>
<span class="n">nb_nodes</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[:</span><span class="mi">3</span><span class="p">])</span> <span class="c1"># number of the nodes</span>
<span class="n">nb_edges</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">6</span><span class="p">])</span> <span class="c1"># number of the edges</span>

<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">nb_nodes</span><span class="p">):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">4</span><span class="p">]</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">atom</span><span class="o">=</span><span class="n">tmp</span><span class="p">[</span><span class="mi">31</span><span class="p">:</span><span class="mi">34</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>

<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">nb_edges</span><span class="p">):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">index</span> <span class="o">+</span> <span class="n">g</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span> <span class="o">+</span> <span class="mi">4</span><span class="p">]</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="p">[</span><span class="n">tmp</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="mi">3</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmp</span><span class="p">),</span> <span class="mi">3</span><span class="p">)]</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span>
<span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">bond_type</span><span class="o">=</span><span class="n">tmp</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>

<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>

<span class="n">index</span> <span class="o">+=</span> <span class="mi">4</span> <span class="o">+</span> <span class="n">g</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span> <span class="o">+</span> <span class="n">g</span><span class="o">.</span><span class="n">number_of_edges</span><span class="p">()</span>
<span class="k">while</span> <span class="n">content</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">&#39;$$$$&#39;</span><span class="p">:</span> <span class="c1"># seperator</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>

<span class="n">pbar</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="n">index_old</span><span class="p">)</span>
<span class="n">pbar</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">pbar</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

<span class="k">return</span> <span class="n">data</span></div>


<div class="viewcode-block" id="loadMAT"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadMAT">[docs]</a><span class="k">def</span> <span class="nf">loadMAT</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">extra_params</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Load graph data from a MATLAB (up to version 7.1) .mat file.</span>

<span class="sd"> Notes</span>
<span class="sd"> ------</span>
<span class="sd"> A MAT file contains a struct array containing graphs, and a column vector lx containing a class label for each graph.</span>
<span class="sd"> Check README in downloadable file in http://mlcb.is.tuebingen.mpg.de/Mitarbeiter/Nino/WL/, 2018 for detailed structure.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">scipy.io</span> <span class="k">import</span> <span class="n">loadmat</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">loadmat</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">order</span> <span class="o">=</span> <span class="n">extra_params</span><span class="p">[</span><span class="s1">&#39;am_sp_al_nl_el&#39;</span><span class="p">]</span>
<span class="c1"># print(content)</span>
<span class="c1"># print(&#39;----&#39;)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">content</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">key</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;l&#39;</span><span class="p">:</span> <span class="c1"># class label</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">value</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="c1"># print(y)</span>
<span class="k">elif</span> <span class="n">key</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">&#39;_&#39;</span><span class="p">:</span>
<span class="c1"># print(value[0][0][0])</span>
<span class="c1"># print()</span>
<span class="c1"># print(value[0][0][1])</span>
<span class="c1"># print()</span>
<span class="c1"># print(value[0][0][2])</span>
<span class="c1"># print()</span>
<span class="c1"># if len(value[0][0]) &gt; 3:</span>
<span class="c1"># print(value[0][0][3])</span>
<span class="c1"># print(&#39;----&#39;)</span>
<span class="c1"># if adjacency matrix is not compressed / edge label exists</span>
<span class="k">if</span> <span class="n">order</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="c1"># print(item)</span>
<span class="c1"># print(&#39;------&#39;)</span>
<span class="n">g</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">i</span><span class="p">)</span> <span class="c1"># set name of the graph</span>
<span class="n">nl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="n">order</span><span class="p">[</span><span class="mi">3</span><span class="p">]][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="c1"># node label</span>
<span class="c1"># print(item[order[3]])</span>
<span class="c1"># print()</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">label</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">nl</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">atom</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">label</span><span class="p">))</span>
<span class="n">el</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="n">order</span><span class="p">[</span><span class="mi">4</span><span class="p">]][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># edge label</span>
<span class="k">for</span> <span class="n">edge</span> <span class="ow">in</span> <span class="n">el</span><span class="p">:</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span>
<span class="n">edge</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">edge</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">bond_type</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">edge</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">scipy.sparse</span> <span class="k">import</span> <span class="n">csc_matrix</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="c1"># print(item)</span>
<span class="c1"># print(&#39;------&#39;)</span>
<span class="n">g</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">i</span><span class="p">)</span> <span class="c1"># set name of the graph</span>
<span class="n">nl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="n">order</span><span class="p">[</span><span class="mi">3</span><span class="p">]][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="c1"># node label</span>
<span class="c1"># print(nl)</span>
<span class="c1"># print()</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">label</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">nl</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">atom</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">label</span><span class="p">))</span>
<span class="n">sam</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="n">order</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="c1"># sparse adjacency matrix</span>
<span class="n">index_no0</span> <span class="o">=</span> <span class="n">sam</span><span class="o">.</span><span class="n">nonzero</span><span class="p">()</span>
<span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">index_no0</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">index_no0</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
<span class="c1"># print(col)</span>
<span class="c1"># print(row)</span>
<span class="n">g</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">row</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
<span class="c1"># print(g.edges(data=True))</span>
<span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">y</span></div>


<div class="viewcode-block" id="loadTXT"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadTXT">[docs]</a><span class="k">def</span> <span class="nf">loadTXT</span><span class="p">(</span><span class="n">dirname_dataset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Load graph data from a .txt file.</span>

<span class="sd"> Notes</span>
<span class="sd"> ------</span>
<span class="sd"> The graph data is loaded from separate files.</span>
<span class="sd"> Check README in downloadable file http://tiny.cc/PK_MLJ_data, 2018 for detailed structure.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="k">import</span> <span class="n">listdir</span>
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">dirname</span>

<span class="c1"># load data file names</span>
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">listdir</span><span class="p">(</span><span class="n">dirname_dataset</span><span class="p">):</span>
<span class="k">if</span> <span class="s1">&#39;_A&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fam</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="k">elif</span> <span class="s1">&#39;_graph_indicator&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fgi</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="k">elif</span> <span class="s1">&#39;_graph_labels&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fgl</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="k">elif</span> <span class="s1">&#39;_node_labels&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fnl</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="k">elif</span> <span class="s1">&#39;_edge_labels&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fel</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="k">elif</span> <span class="s1">&#39;_edge_attributes&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fea</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="k">elif</span> <span class="s1">&#39;_node_attributes&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fna</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="k">elif</span> <span class="s1">&#39;_graph_attributes&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fga</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>
<span class="c1"># this is supposed to be the node attrs, make sure to put this as the last &#39;elif&#39;</span>
<span class="k">elif</span> <span class="s1">&#39;_attributes&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">fna</span> <span class="o">=</span> <span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">name</span>

<span class="n">content_gi</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fgi</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="c1"># graph indicator</span>
<span class="n">content_am</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fam</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="c1"># adjacency matrix</span>
<span class="n">content_gl</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fgl</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="c1"># lass labels</span>

<span class="c1"># create graphs and add nodes</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[</span><span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">content_gl</span><span class="p">))]</span>
<span class="k">if</span> <span class="s1">&#39;fnl&#39;</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span>
<span class="n">content_nl</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fnl</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="c1"># node labels</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">content_gi</span><span class="p">):</span>
<span class="c1"># transfer to int first in case of unexpected blanks</span>
<span class="n">data</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">atom</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">content_nl</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">content_gi</span><span class="p">):</span>
<span class="n">data</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="c1"># add edges</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">content_am</span><span class="p">:</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
<span class="n">n1</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">n2</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="c1"># ignore edge weight here.</span>
<span class="n">g</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">content_gi</span><span class="p">[</span><span class="n">n1</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">data</span><span class="p">[</span><span class="n">g</span><span class="p">]</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">n1</span><span class="p">,</span> <span class="n">n2</span><span class="p">)</span>

<span class="c1"># add edge labels</span>
<span class="k">if</span> <span class="s1">&#39;fel&#39;</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span>
<span class="n">content_el</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fel</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">content_el</span><span class="p">):</span>
<span class="n">label</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">n</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">content_am</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)]</span>
<span class="n">g</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">content_gi</span><span class="p">[</span><span class="n">n</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">data</span><span class="p">[</span><span class="n">g</span><span class="p">]</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="n">n</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="s1">&#39;bond_type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">label</span>

<span class="c1"># add node attributes</span>
<span class="k">if</span> <span class="s1">&#39;fna&#39;</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span>
<span class="n">content_na</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fna</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">content_na</span><span class="p">):</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)]</span>
<span class="n">g</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">content_gi</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">data</span><span class="p">[</span><span class="n">g</span><span class="p">]</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="s1">&#39;attributes&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrs</span>

<span class="c1"># add edge attributes</span>
<span class="k">if</span> <span class="s1">&#39;fea&#39;</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span>
<span class="n">content_ea</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fea</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">content_ea</span><span class="p">):</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)]</span>
<span class="n">n</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">content_am</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)]</span>
<span class="n">g</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">content_gi</span><span class="p">[</span><span class="n">n</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">data</span><span class="p">[</span><span class="n">g</span><span class="p">]</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="n">n</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="s1">&#39;attributes&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrs</span>

<span class="c1"># load y</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">content_gl</span><span class="p">]</span>

<span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">y</span></div>


<div class="viewcode-block" id="loadDataset"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadDataset">[docs]</a><span class="k">def</span> <span class="nf">loadDataset</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">filename_y</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">extra_params</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Read graph data from filename and load them as NetworkX graphs.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> filename : string</span>
<span class="sd"> The name of the file from where the dataset is read.</span>
<span class="sd"> filename_y : string</span>
<span class="sd"> The name of file of the targets corresponding to graphs.</span>
<span class="sd"> extra_params : dict</span>
<span class="sd"> Extra parameters only designated to &#39;.mat&#39; format.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> data : List of NetworkX graph.</span>
<span class="sd"> y : List</span>
<span class="sd"> Targets corresponding to graphs.</span>
<span class="sd"> </span>
<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> This function supports following graph dataset formats:</span>
<span class="sd"> &#39;ds&#39;: load data from .ds file. See comments of function loadFromDS for a example.</span>
<span class="sd"> &#39;cxl&#39;: load data from Graph eXchange Language file (.cxl file). See </span>
<span class="sd"> http://www.gupro.de/GXL/Introduction/background.html, 2019 for detail.</span>
<span class="sd"> &#39;sdf&#39;: load data from structured data file (.sdf file). See </span>
<span class="sd"> http://www.nonlinear.com/progenesis/sdf-studio/v0.9/faq/sdf-file-format-guidance.aspx, </span>
<span class="sd"> 2018 for details.</span>
<span class="sd"> &#39;mat&#39;: Load graph data from a MATLAB (up to version 7.1) .mat file. See</span>
<span class="sd"> README in downloadable file in http://mlcb.is.tuebingen.mpg.de/Mitarbeiter/Nino/WL/, </span>
<span class="sd"> 2018 for details.</span>
<span class="sd"> &#39;txt&#39;: Load graph data from a special .txt file. See</span>
<span class="sd"> https://ls11-www.cs.tu-dortmund.de/staff/morris/graphkerneldatasets,</span>
<span class="sd"> 2019 for details. Note here filename is the name of either .txt file in</span>
<span class="sd"> the dataset directory.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">extension</span> <span class="o">=</span> <span class="n">splitext</span><span class="p">(</span><span class="n">filename</span><span class="p">)[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="n">extension</span> <span class="o">==</span> <span class="s2">&quot;ds&quot;</span><span class="p">:</span>
<span class="n">data</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">loadFromDS</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">filename_y</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">extension</span> <span class="o">==</span> <span class="s2">&quot;cxl&quot;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="k">as</span> <span class="nn">ET</span>
<span class="n">dirname_dataset</span> <span class="o">=</span> <span class="n">dirname</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">graph</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">&#39;graph&#39;</span><span class="p">):</span>
<span class="n">mol_filename</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;file&#39;</span><span class="p">]</span>
<span class="n">mol_class</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;class&#39;</span><span class="p">]</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">loadGXL</span><span class="p">(</span><span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">mol_filename</span><span class="p">))</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mol_class</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">extension</span> <span class="o">==</span> <span class="s1">&#39;xml&#39;</span><span class="p">:</span>
<span class="n">data</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">loadFromXML</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">extra_params</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">extension</span> <span class="o">==</span> <span class="s2">&quot;sdf&quot;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">tqdm</span> <span class="k">import</span> <span class="n">tqdm</span>
<span class="kn">import</span> <span class="nn">sys</span>

<span class="n">data</span> <span class="o">=</span> <span class="n">loadSDF</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>

<span class="n">y_raw</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename_y</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="n">y_raw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">tmp0</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">tmp1</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">y_raw</span><span class="p">)):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">y_raw</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
<span class="n">tmp0</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">tmp1</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>

<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">tqdm</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)),</span> <span class="n">desc</span><span class="o">=</span><span class="s1">&#39;ajust data&#39;</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tmp1</span><span class="p">[</span><span class="n">tmp0</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> <span class="c1"># if data[i].name not in tmp0</span>
<span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">data</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="n">a</span> <span class="o">!=</span> <span class="p">[],</span> <span class="n">data</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">extension</span> <span class="o">==</span> <span class="s2">&quot;mat&quot;</span><span class="p">:</span>
<span class="n">data</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">loadMAT</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">extra_params</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">extension</span> <span class="o">==</span> <span class="s1">&#39;txt&#39;</span><span class="p">:</span>
<span class="n">dirname_dataset</span> <span class="o">=</span> <span class="n">dirname</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">data</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">loadTXT</span><span class="p">(</span><span class="n">dirname_dataset</span><span class="p">)</span>
<span class="c1"># print(len(y))</span>
<span class="c1"># print(y)</span>
<span class="c1"># print(data[0].nodes(data=True))</span>
<span class="c1"># print(&#39;----&#39;)</span>
<span class="c1"># print(data[0].edges(data=True))</span>
<span class="c1"># for g in data:</span>
<span class="c1"># print(g.nodes(data=True))</span>
<span class="c1"># print(&#39;----&#39;)</span>
<span class="c1"># print(g.edges(data=True))</span>

<span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">y</span></div>


<div class="viewcode-block" id="loadFromXML"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadFromXML">[docs]</a><span class="k">def</span> <span class="nf">loadFromXML</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">extra_params</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="k">as</span> <span class="nn">ET</span>
<span class="k">if</span> <span class="n">extra_params</span><span class="p">:</span>
<span class="n">dirname_dataset</span> <span class="o">=</span> <span class="n">extra_params</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">dirname_dataset</span> <span class="o">=</span> <span class="n">dirname</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">graph</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">&#39;graph&#39;</span><span class="p">):</span>
<span class="n">mol_filename</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;file&#39;</span><span class="p">]</span>
<span class="n">mol_class</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;class&#39;</span><span class="p">]</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">loadGXL</span><span class="p">(</span><span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">mol_filename</span><span class="p">))</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mol_class</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">y</span></div>

<div class="viewcode-block" id="loadFromDS"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.loadFromDS">[docs]</a><span class="k">def</span> <span class="nf">loadFromDS</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">filename_y</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Load data from .ds file.</span>
<span class="sd"> Possible graph formats include:</span>
<span class="sd"> &#39;.ct&#39;: see function loadCT for detail.</span>
<span class="sd"> &#39;.gxl&#39;: see dunction loadGXL for detail.</span>
<span class="sd"> Note these graph formats are checked automatically by the extensions of </span>
<span class="sd"> graph files.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dirname_dataset</span> <span class="o">=</span> <span class="n">dirname</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">content</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="n">extension</span> <span class="o">=</span> <span class="n">splitext</span><span class="p">(</span><span class="n">content</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="n">filename_y</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">filename_y</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">extension</span> <span class="o">==</span> <span class="s1">&#39;ct&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="p">)):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="c1"># remove the &#39;#&#39;s in file names</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">loadCT</span><span class="p">(</span><span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)))</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">elif</span> <span class="n">extension</span> <span class="o">==</span> <span class="s1">&#39;gxl&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="p">)):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="c1"># remove the &#39;#&#39;s in file names</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">loadGXL</span><span class="p">(</span><span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)))</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># y in a seperate file</span>
<span class="k">if</span> <span class="n">extension</span> <span class="o">==</span> <span class="s1">&#39;ct&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="p">)):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="c1"># remove the &#39;#&#39;s in file names</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">loadCT</span><span class="p">(</span><span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">tmp</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)))</span>
<span class="k">elif</span> <span class="n">extension</span> <span class="o">==</span> <span class="s1">&#39;gxl&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="p">)):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="c1"># remove the &#39;#&#39;s in file names</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">loadGXL</span><span class="p">(</span><span class="n">dirname_dataset</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">tmp</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)))</span>
<span class="n">content_y</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename_y</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="c1"># assume entries in filename and filename_y have the same order.</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">content_y</span><span class="p">:</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="c1"># assume the 3rd entry in a line is y (for Alkane dataset)</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
<span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">y</span></div>

<div class="viewcode-block" id="saveDataset"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.graphfiles.saveDataset">[docs]</a><span class="k">def</span> <span class="nf">saveDataset</span><span class="p">(</span><span class="n">Gn</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">gformat</span><span class="o">=</span><span class="s1">&#39;gxl&#39;</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">&#39;gfile&#39;</span><span class="p">,</span> <span class="n">xparams</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Save list of graphs.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">dirname_ds</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dirname_ds</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
<span class="n">dirname_ds</span> <span class="o">+=</span> <span class="s1">&#39;/&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">dirname_ds</span><span class="p">)</span> <span class="p">:</span>
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">dirname_ds</span><span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;graph_dir&#39;</span> <span class="ow">in</span> <span class="n">xparams</span><span class="p">:</span>
<span class="n">graph_dir</span> <span class="o">=</span> <span class="n">xparams</span><span class="p">[</span><span class="s1">&#39;graph_dir&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">graph_dir</span><span class="p">):</span>
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">graph_dir</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">graph_dir</span> <span class="o">=</span> <span class="n">dirname_ds</span>
<span class="k">if</span> <span class="n">group</span> <span class="o">==</span> <span class="s1">&#39;xml&#39;</span> <span class="ow">and</span> <span class="n">gformat</span> <span class="o">==</span> <span class="s1">&#39;gxl&#39;</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span> <span class="o">+</span> <span class="s1">&#39;.xml&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fgroup</span><span class="p">:</span>
<span class="n">fgroup</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&lt;?xml version=</span><span class="se">\&quot;</span><span class="s2">1.0</span><span class="se">\&quot;</span><span class="s2">?&gt;&quot;</span><span class="p">)</span>
<span class="n">fgroup</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&lt;!DOCTYPE GraphCollection SYSTEM </span><span class="se">\&quot;</span><span class="s2">http://www.inf.unibz.it/~blumenthal/dtd/GraphCollection.dtd</span><span class="se">\&quot;</span><span class="s2">&gt;&quot;</span><span class="p">)</span>
<span class="n">fgroup</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&lt;GraphCollection&gt;&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">g</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">Gn</span><span class="p">):</span>
<span class="n">fname_tmp</span> <span class="o">=</span> <span class="s2">&quot;graph&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;.gxl&quot;</span>
<span class="n">saveGXL</span><span class="p">(</span><span class="n">g</span><span class="p">,</span> <span class="n">graph_dir</span> <span class="o">+</span> <span class="n">fname_tmp</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">xparams</span><span class="p">[</span><span class="s1">&#39;method&#39;</span><span class="p">])</span>
<span class="n">fgroup</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n\t</span><span class="s2">&lt;graph file=</span><span class="se">\&quot;</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">fname_tmp</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2"> class=</span><span class="se">\&quot;</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="n">idx</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">/&gt;&quot;</span><span class="p">)</span>
<span class="n">fgroup</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&lt;/GraphCollection&gt;&quot;</span><span class="p">)</span>
<span class="n">fgroup</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="c1"># ### Load dataset from .ds file.</span>
<span class="c1"># # .ct files.</span>
<span class="c1"># ds = {&#39;name&#39;: &#39;Alkane&#39;, &#39;dataset&#39;: &#39;../../datasets/Alkane/dataset.ds&#39;,</span>
<span class="c1"># &#39;dataset_y&#39;: &#39;../../datasets/Alkane/dataset_boiling_point_names.txt&#39;}</span>
<span class="c1"># Gn, y = loadDataset(ds[&#39;dataset&#39;], filename_y=ds[&#39;dataset_y&#39;])</span>
<span class="c1">## ds = {&#39;name&#39;: &#39;Acyclic&#39;, &#39;dataset&#39;: &#39;../../datasets/acyclic/dataset_bps.ds&#39;} # node symb</span>
<span class="c1">## Gn, y = loadDataset(ds[&#39;dataset&#39;])</span>
<span class="c1">## ds = {&#39;name&#39;: &#39;MAO&#39;, &#39;dataset&#39;: &#39;../../datasets/MAO/dataset.ds&#39;} # node/edge symb</span>
<span class="c1">## Gn, y = loadDataset(ds[&#39;dataset&#39;])</span>
<span class="c1">## ds = {&#39;name&#39;: &#39;PAH&#39;, &#39;dataset&#39;: &#39;../../datasets/PAH/dataset.ds&#39;} # unlabeled</span>
<span class="c1">## Gn, y = loadDataset(ds[&#39;dataset&#39;])</span>
<span class="c1"># print(Gn[1].nodes(data=True))</span>
<span class="c1"># print(Gn[1].edges(data=True))</span>
<span class="c1"># print(y[1])</span>
<span class="c1"># # .gxl file.</span>
<span class="c1"># ds = {&#39;name&#39;: &#39;monoterpenoides&#39;, </span>
<span class="c1"># &#39;dataset&#39;: &#39;../../datasets/monoterpenoides/dataset_10+.ds&#39;} # node/edge symb</span>
<span class="c1"># Gn, y = loadDataset(ds[&#39;dataset&#39;])</span>
<span class="c1"># print(Gn[1].nodes(data=True))</span>
<span class="c1"># print(Gn[1].edges(data=True))</span>
<span class="c1"># print(y[1])</span>
<span class="c1">### Convert graph from one format to another.</span>
<span class="c1"># .gxl file.</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="n">ds</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;monoterpenoides&#39;</span><span class="p">,</span>
<span class="s1">&#39;dataset&#39;</span><span class="p">:</span> <span class="s1">&#39;../../datasets/monoterpenoides/dataset_10+.ds&#39;</span><span class="p">}</span> <span class="c1"># node/edge symb</span>
<span class="n">Gn</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">loadDataset</span><span class="p">(</span><span class="n">ds</span><span class="p">[</span><span class="s1">&#39;dataset&#39;</span><span class="p">])</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">y</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">Gn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">Gn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="c1"># Convert a graph to the proper NetworkX format that can be recognized by library gedlib.</span>
<span class="n">Gn_new</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="n">G_new</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span>
<span class="k">for</span> <span class="n">nd</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">G_new</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">nd</span><span class="p">),</span> <span class="n">chem</span><span class="o">=</span><span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;atom&#39;</span><span class="p">])</span>
<span class="k">for</span> <span class="n">nd1</span><span class="p">,</span> <span class="n">nd2</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">G_new</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">nd1</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">nd2</span><span class="p">),</span> <span class="n">valence</span><span class="o">=</span><span class="n">attrs</span><span class="p">[</span><span class="s1">&#39;bond_type&#39;</span><span class="p">])</span>
<span class="c1"># G_new.add_edge(str(nd1), str(nd2))</span>
<span class="n">Gn_new</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">G_new</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">Gn_new</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">Gn_new</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">Gn_new</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">filename</span> <span class="o">=</span> <span class="s1">&#39;/media/ljia/DATA/research-repo/codes/others/gedlib/tests_linlin/generated_datsets/monoterpenoides/gxl/monoterpenoides&#39;</span>
<span class="n">xparams</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;method&#39;</span><span class="p">:</span> <span class="s1">&#39;gedlib&#39;</span><span class="p">}</span>
<span class="n">saveDataset</span><span class="p">(</span><span class="n">Gn</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">gformat</span><span class="o">=</span><span class="s1">&#39;gxl&#39;</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="s1">&#39;xml&#39;</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="n">filename</span><span class="p">,</span> <span class="n">xparams</span><span class="o">=</span><span class="n">xparams</span><span class="p">)</span>
<span class="c1"># ds = {&#39;name&#39;: &#39;MUTAG&#39;, &#39;dataset&#39;: &#39;../../datasets/MUTAG/MUTAG.mat&#39;,</span>
<span class="c1"># &#39;extra_params&#39;: {&#39;am_sp_al_nl_el&#39;: [0, 0, 3, 1, 2]}} # node/edge symb</span>
<span class="c1"># Gn, y = loadDataset(ds[&#39;dataset&#39;], extra_params=ds[&#39;extra_params&#39;])</span>
<span class="c1"># saveDataset(Gn, y, group=&#39;xml&#39;, filename=&#39;temp/temp&#39;)</span>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 205
docs/_build/html/_modules/pygraph/utils/isNotebook.html View File

@@ -1,205 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.isNotebook &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.isNotebook</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.isNotebook</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot; Functions for python system.</span>
<span class="sd">&quot;&quot;&quot;</span>

<div class="viewcode-block" id="isNotebook"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.isNotebook.isNotebook">[docs]</a><span class="k">def</span> <span class="nf">isNotebook</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;check if code is executed in the IPython notebook.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">shell</span> <span class="o">=</span> <span class="n">get_ipython</span><span class="p">()</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
<span class="k">if</span> <span class="n">shell</span> <span class="o">==</span> <span class="s1">&#39;ZMQInteractiveShell&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span> <span class="c1"># Jupyter notebook or qtconsole</span>
<span class="k">elif</span> <span class="n">shell</span> <span class="o">==</span> <span class="s1">&#39;TerminalInteractiveShell&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span> <span class="c1"># Terminal running IPython</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span> <span class="c1"># Other type (?)</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span> <span class="c1"># Probably standard Python interpreter</span></div>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 347
docs/_build/html/_modules/pygraph/utils/kernels.html View File

@@ -1,347 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.kernels &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.kernels</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.kernels</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;Those who are not graph kernels. We can be kernels for nodes or edges!</span>
<span class="sd">These kernels are defined between pairs of vectors.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>

<div class="viewcode-block" id="deltakernel"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.kernels.deltakernel">[docs]</a><span class="k">def</span> <span class="nf">deltakernel</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Delta kernel. Return 1 if x == y, 0 otherwise.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> x, y : any</span>
<span class="sd"> Two parts to compare.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> kernel : integer</span>
<span class="sd"> Delta kernel.</span>

<span class="sd"> References</span>
<span class="sd"> ----------</span>
<span class="sd"> [1] H. Kashima, K. Tsuda, and A. Inokuchi. Marginalized kernels between </span>
<span class="sd"> labeled graphs. In Proceedings of the 20th International Conference on </span>
<span class="sd"> Machine Learning, Washington, DC, United States, 2003.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">x</span> <span class="o">==</span> <span class="n">y</span> <span class="c1">#(1 if condition else 0)</span></div>


<div class="viewcode-block" id="gaussiankernel"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.kernels.gaussiankernel">[docs]</a><span class="k">def</span> <span class="nf">gaussiankernel</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gaussian kernel.</span>
<span class="sd"> Compute the rbf (gaussian) kernel between x and y:</span>

<span class="sd"> K(x, y) = exp(-gamma ||x-y||^2).</span>

<span class="sd"> Read more in the :ref:`User Guide &lt;rbf_kernel&gt;`.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> x, y : array</span>

<span class="sd"> gamma : float, default None</span>
<span class="sd"> If None, defaults to 1.0 / n_features</span>

<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> kernel : float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">gamma</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">gamma</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>

<span class="n">xt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="nb">float</span><span class="p">(</span><span class="n">itm</span><span class="p">)</span> <span class="k">for</span> <span class="n">itm</span> <span class="ow">in</span> <span class="n">x</span><span class="p">])</span>
<span class="n">yt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="nb">float</span><span class="p">(</span><span class="n">itm</span><span class="p">)</span> <span class="k">for</span> <span class="n">itm</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">xt</span> <span class="o">-</span> <span class="n">yt</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">kernel</span> <span class="o">**</span> <span class="mi">2</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">kernel</span><span class="p">)</span>
<span class="n">kernel</span> <span class="o">*=</span> <span class="o">-</span><span class="n">gamma</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">kernel</span><span class="p">)</span>
<span class="k">return</span> <span class="n">kernel</span></div>


<div class="viewcode-block" id="polynomialkernel"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.kernels.polynomialkernel">[docs]</a><span class="k">def</span> <span class="nf">polynomialkernel</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">d</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Polynomial kernel.</span>
<span class="sd"> Compute the polynomial kernel between x and y:</span>

<span class="sd"> K(x, y) = &lt;x, y&gt; ^d + c.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> x, y : array</span>

<span class="sd"> d : integer, default 1</span>
<span class="sd"> </span>
<span class="sd"> c : float, default 0</span>

<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> kernel : float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="o">**</span> <span class="n">d</span> <span class="o">+</span> <span class="n">c</span></div>


<div class="viewcode-block" id="linearkernel"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.kernels.linearkernel">[docs]</a><span class="k">def</span> <span class="nf">linearkernel</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Polynomial kernel.</span>
<span class="sd"> Compute the polynomial kernel between x and y:</span>

<span class="sd"> K(x, y) = &lt;x, y&gt;.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> x, y : array</span>

<span class="sd"> d : integer, default 1</span>
<span class="sd"> </span>
<span class="sd"> c : float, default 0</span>

<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> kernel : float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span></div>


<div class="viewcode-block" id="kernelsum"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.kernels.kernelsum">[docs]</a><span class="k">def</span> <span class="nf">kernelsum</span><span class="p">(</span><span class="n">k1</span><span class="p">,</span> <span class="n">k2</span><span class="p">,</span> <span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">,</span> <span class="n">d21</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">d22</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lamda1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">lamda2</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Sum of a pair of kernels.</span>

<span class="sd"> k = lamda1 * k1(d11, d12) + lamda2 * k2(d21, d22)</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> k1, k2 : function</span>
<span class="sd"> A pair of kernel functions.</span>
<span class="sd"> d11, d12:</span>
<span class="sd"> Inputs of k1. If d21 or d22 is None, apply d11, d12 to both k1 and k2.</span>
<span class="sd"> d21, d22:</span>
<span class="sd"> Inputs of k2.</span>
<span class="sd"> lamda1, lamda2: float</span>
<span class="sd"> Coefficients of the product.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> kernel : integer</span>

<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">d21</span> <span class="o">==</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">d22</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">lamda1</span> <span class="o">*</span> <span class="n">k1</span><span class="p">(</span><span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">)</span> <span class="o">+</span> <span class="n">lamda2</span> <span class="o">*</span> <span class="n">k2</span><span class="p">(</span><span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">lamda1</span> <span class="o">*</span> <span class="n">k1</span><span class="p">(</span><span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">)</span> <span class="o">+</span> <span class="n">lamda2</span> <span class="o">*</span> <span class="n">k2</span><span class="p">(</span><span class="n">d21</span><span class="p">,</span> <span class="n">d22</span><span class="p">)</span>
<span class="k">return</span> <span class="n">kernel</span></div>


<div class="viewcode-block" id="kernelproduct"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.kernels.kernelproduct">[docs]</a><span class="k">def</span> <span class="nf">kernelproduct</span><span class="p">(</span><span class="n">k1</span><span class="p">,</span> <span class="n">k2</span><span class="p">,</span> <span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">,</span> <span class="n">d21</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">d22</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lamda</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Product of a pair of kernels.</span>

<span class="sd"> k = lamda * k1(d11, d12) * k2(d21, d22)</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> k1, k2 : function</span>
<span class="sd"> A pair of kernel functions.</span>
<span class="sd"> d11, d12:</span>
<span class="sd"> Inputs of k1. If d21 or d22 is None, apply d11, d12 to both k1 and k2.</span>
<span class="sd"> d21, d22:</span>
<span class="sd"> Inputs of k2.</span>
<span class="sd"> lamda: float</span>
<span class="sd"> Coefficient of the product.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> kernel : integer</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">d21</span> <span class="o">==</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">d22</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">lamda</span> <span class="o">*</span> <span class="n">k1</span><span class="p">(</span><span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">)</span> <span class="o">*</span> <span class="n">k2</span><span class="p">(</span><span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">kernel</span> <span class="o">=</span> <span class="n">lamda</span> <span class="o">*</span> <span class="n">k1</span><span class="p">(</span><span class="n">d11</span><span class="p">,</span> <span class="n">d12</span><span class="p">)</span> <span class="o">*</span> <span class="n">k2</span><span class="p">(</span><span class="n">d21</span><span class="p">,</span> <span class="n">d22</span><span class="p">)</span>
<span class="k">return</span> <span class="n">kernel</span></div>


<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">o</span> <span class="o">=</span> <span class="n">polynomialkernel</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 216
docs/_build/html/_modules/pygraph/utils/logger2file.html View File

@@ -1,216 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.logger2file &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.logger2file</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.logger2file</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Created on Fri Nov 8 14:21:25 2019</span>

<span class="sd">@author: ljia</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">time</span>

<div class="viewcode-block" id="Logger"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.logger2file.Logger">[docs]</a><span class="k">class</span> <span class="nc">Logger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">terminal</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;log.&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span> <span class="o">+</span> <span class="s2">&quot;.log&quot;</span><span class="p">,</span> <span class="s2">&quot;a&quot;</span><span class="p">)</span>

<div class="viewcode-block" id="Logger.write"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.logger2file.Logger.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">terminal</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">message</span><span class="p">)</span> </div>

<div class="viewcode-block" id="Logger.flush"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.logger2file.Logger.flush">[docs]</a> <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1">#this flush method is needed for python 3 compatibility.</span>
<span class="c1">#this handles the flush command by doing nothing.</span>
<span class="c1">#you might want to specify some extra behavior here.</span>
<span class="k">pass</span> </div></div>

<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">()</span>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 1148
docs/_build/html/_modules/pygraph/utils/model_selection_precomputed.html
File diff suppressed because it is too large
View File


+ 0
- 252
docs/_build/html/_modules/pygraph/utils/parallel.html View File

@@ -1,252 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.parallel &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.parallel</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.parallel</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Created on Tue Dec 11 11:39:46 2018</span>
<span class="sd">Parallel aid functions.</span>
<span class="sd">@author: ljia</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">multiprocessing</span>
<span class="kn">from</span> <span class="nn">multiprocessing</span> <span class="k">import</span> <span class="n">Pool</span>
<span class="kn">from</span> <span class="nn">tqdm</span> <span class="k">import</span> <span class="n">tqdm</span>
<span class="kn">import</span> <span class="nn">sys</span>

<div class="viewcode-block" id="parallel_me"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.parallel.parallel_me">[docs]</a><span class="k">def</span> <span class="nf">parallel_me</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">func_assign</span><span class="p">,</span> <span class="n">var_to_assign</span><span class="p">,</span> <span class="n">itr</span><span class="p">,</span> <span class="n">len_itr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">init_worker</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">glbv</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">n_jobs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">chunksize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">itr_desc</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span>
<span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;imap_unordered&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">glbv</span><span class="p">:</span> <span class="c1"># global varibles required.</span>
<span class="c1"># def init_worker(v_share):</span>
<span class="c1"># global G_var</span>
<span class="c1"># G_var = v_share</span>
<span class="k">if</span> <span class="n">n_jobs</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">n_jobs</span> <span class="o">=</span> <span class="n">multiprocessing</span><span class="o">.</span><span class="n">cpu_count</span><span class="p">()</span>
<span class="k">with</span> <span class="n">Pool</span><span class="p">(</span><span class="n">processes</span><span class="o">=</span><span class="n">n_jobs</span><span class="p">,</span> <span class="n">initializer</span><span class="o">=</span><span class="n">init_worker</span><span class="p">,</span>
<span class="n">initargs</span><span class="o">=</span><span class="n">glbv</span><span class="p">)</span> <span class="k">as</span> <span class="n">pool</span><span class="p">:</span>
<span class="k">if</span> <span class="n">chunksize</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">len_itr</span> <span class="o">&lt;</span> <span class="mi">100</span> <span class="o">*</span> <span class="n">n_jobs</span><span class="p">:</span>
<span class="n">chunksize</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">len_itr</span> <span class="o">/</span> <span class="n">n_jobs</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">chunksize</span> <span class="o">=</span> <span class="mi">100</span>
<span class="k">for</span> <span class="n">result</span> <span class="ow">in</span> <span class="p">(</span><span class="n">tqdm</span><span class="p">(</span><span class="n">pool</span><span class="o">.</span><span class="n">imap_unordered</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">itr</span><span class="p">,</span> <span class="n">chunksize</span><span class="p">),</span>
<span class="n">desc</span><span class="o">=</span><span class="n">itr_desc</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">)</span> <span class="k">if</span> <span class="n">verbose</span> <span class="k">else</span>
<span class="n">pool</span><span class="o">.</span><span class="n">imap_unordered</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">itr</span><span class="p">,</span> <span class="n">chunksize</span><span class="p">)):</span>
<span class="n">func_assign</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">var_to_assign</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">n_jobs</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">n_jobs</span> <span class="o">=</span> <span class="n">multiprocessing</span><span class="o">.</span><span class="n">cpu_count</span><span class="p">()</span>
<span class="k">with</span> <span class="n">Pool</span><span class="p">(</span><span class="n">processes</span><span class="o">=</span><span class="n">n_jobs</span><span class="p">)</span> <span class="k">as</span> <span class="n">pool</span><span class="p">:</span>
<span class="k">if</span> <span class="n">chunksize</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">len_itr</span> <span class="o">&lt;</span> <span class="mi">100</span> <span class="o">*</span> <span class="n">n_jobs</span><span class="p">:</span>
<span class="n">chunksize</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">len_itr</span> <span class="o">/</span> <span class="n">n_jobs</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">chunksize</span> <span class="o">=</span> <span class="mi">100</span>
<span class="k">for</span> <span class="n">result</span> <span class="ow">in</span> <span class="p">(</span><span class="n">tqdm</span><span class="p">(</span><span class="n">pool</span><span class="o">.</span><span class="n">imap_unordered</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">itr</span><span class="p">,</span> <span class="n">chunksize</span><span class="p">),</span>
<span class="n">desc</span><span class="o">=</span><span class="n">itr_desc</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">)</span> <span class="k">if</span> <span class="n">verbose</span> <span class="k">else</span>
<span class="n">pool</span><span class="o">.</span><span class="n">imap_unordered</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">itr</span><span class="p">,</span> <span class="n">chunksize</span><span class="p">)):</span>
<span class="n">func_assign</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">var_to_assign</span><span class="p">)</span></div>

<div class="viewcode-block" id="parallel_gm"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.parallel.parallel_gm">[docs]</a><span class="k">def</span> <span class="nf">parallel_gm</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">Kmatrix</span><span class="p">,</span> <span class="n">Gn</span><span class="p">,</span> <span class="n">init_worker</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">glbv</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">method</span><span class="o">=</span><span class="s1">&#39;imap_unordered&#39;</span><span class="p">,</span> <span class="n">n_jobs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">chunksize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="k">import</span> <span class="n">combinations_with_replacement</span>
<span class="k">def</span> <span class="nf">func_assign</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">var_to_assign</span><span class="p">):</span>
<span class="n">var_to_assign</span><span class="p">[</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">var_to_assign</span><span class="p">[</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">itr</span> <span class="o">=</span> <span class="n">combinations_with_replacement</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">Gn</span><span class="p">)),</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">len_itr</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Gn</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">parallel_me</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">func_assign</span><span class="p">,</span> <span class="n">Kmatrix</span><span class="p">,</span> <span class="n">itr</span><span class="p">,</span> <span class="n">len_itr</span><span class="o">=</span><span class="n">len_itr</span><span class="p">,</span>
<span class="n">init_worker</span><span class="o">=</span><span class="n">init_worker</span><span class="p">,</span> <span class="n">glbv</span><span class="o">=</span><span class="n">glbv</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span> <span class="n">n_jobs</span><span class="o">=</span><span class="n">n_jobs</span><span class="p">,</span>
<span class="n">chunksize</span><span class="o">=</span><span class="n">chunksize</span><span class="p">,</span> <span class="n">itr_desc</span><span class="o">=</span><span class="s1">&#39;calculating kernels&#39;</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="n">verbose</span><span class="p">)</span></div>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 300
docs/_build/html/_modules/pygraph/utils/trie.html View File

@@ -1,300 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.trie &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.trie</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.trie</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Created on Wed Jan 30 10:48:49 2019</span>

<span class="sd">Trie (prefix tree)</span>
<span class="sd">@author: ljia</span>
<span class="sd">@references:</span>
<span class="sd"> https://viblo.asia/p/nlp-build-a-trie-data-structure-from-scratch-with-python-3P0lPzroKox, 2019.1</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">import</span> <span class="nn">json</span>

<span class="sd">&quot;&quot;&quot; Trie class</span>
<span class="sd">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="Trie"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie">[docs]</a><span class="k">class</span> <span class="nc">Trie</span><span class="p">:</span>
<span class="c1"># init Trie class</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getNode</span><span class="p">()</span>

<div class="viewcode-block" id="Trie.getNode"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.getNode">[docs]</a> <span class="k">def</span> <span class="nf">getNode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{</span><span class="s2">&quot;isEndOfWord&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;children&quot;</span><span class="p">:</span> <span class="p">{}}</span></div>

<div class="viewcode-block" id="Trie.insertWord"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.insertWord">[docs]</a> <span class="k">def</span> <span class="nf">insertWord</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">):</span>
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span>
<span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>

<span class="k">if</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">]:</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">][</span><span class="n">ch</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getNode</span><span class="p">()</span>
<span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">][</span><span class="n">ch</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>

<span class="n">current</span> <span class="o">=</span> <span class="n">node</span>
<span class="n">current</span><span class="p">[</span><span class="s2">&quot;isEndOfWord&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="s1">&#39;count&#39;</span> <span class="ow">in</span> <span class="n">current</span><span class="p">:</span>
<span class="n">current</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">current</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span></div>

<div class="viewcode-block" id="Trie.searchWord"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.searchWord">[docs]</a> <span class="k">def</span> <span class="nf">searchWord</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">):</span>
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span>
<span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>
<span class="k">if</span> <span class="n">ch</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">]:</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">][</span><span class="n">ch</span><span class="p">]</span>

<span class="n">current</span> <span class="o">=</span> <span class="n">node</span>
<span class="k">if</span> <span class="s1">&#39;count&#39;</span> <span class="ow">in</span> <span class="n">current</span><span class="p">:</span>
<span class="k">return</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;count&quot;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">0</span></div>

<div class="viewcode-block" id="Trie.searchWordPrefix"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.searchWordPrefix">[docs]</a> <span class="k">def</span> <span class="nf">searchWordPrefix</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">):</span>
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span>
<span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">ch</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">][</span><span class="n">ch</span><span class="p">]</span>

<span class="n">current</span> <span class="o">=</span> <span class="n">node</span>
<span class="c1"># return True if children contain keys and values</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">])</span></div>

<div class="viewcode-block" id="Trie.deleteWord"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.deleteWord">[docs]</a> <span class="k">def</span> <span class="nf">deleteWord</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_delete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span></div>

<span class="k">def</span> <span class="nf">_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">current</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="k">if</span><span class="p">(</span><span class="n">index</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;isEndOfWord&quot;</span><span class="p">]:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">current</span><span class="p">[</span><span class="s2">&quot;isEndOfWord&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="o">==</span> <span class="mi">0</span>

<span class="n">ch</span> <span class="o">=</span> <span class="n">word</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">ch</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">][</span><span class="n">ch</span><span class="p">]</span>

<span class="n">should_delete_current_node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delete</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>

<span class="k">if</span> <span class="n">should_delete_current_node</span><span class="p">:</span>
<span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">current</span><span class="p">[</span><span class="s2">&quot;children&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="o">==</span> <span class="mi">0</span>

<span class="k">return</span> <span class="kc">False</span>

<div class="viewcode-block" id="Trie.save_to_pickle"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.save_to_pickle">[docs]</a> <span class="k">def</span> <span class="nf">save_to_pickle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span> <span class="o">+</span> <span class="s2">&quot;.pkl&quot;</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>

<div class="viewcode-block" id="Trie.load_from_pickle"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.load_from_pickle">[docs]</a> <span class="k">def</span> <span class="nf">load_from_pickle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span> <span class="o">+</span> <span class="s2">&quot;.pkl&quot;</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
<div class="viewcode-block" id="Trie.to_json"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.to_json">[docs]</a> <span class="k">def</span> <span class="nf">to_json</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">)</span></div>

<div class="viewcode-block" id="Trie.save_to_json"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.save_to_json">[docs]</a> <span class="k">def</span> <span class="nf">save_to_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
<span class="n">json_data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">)</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span> <span class="o">+</span> <span class="s2">&quot;.json&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">json_data</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>

<div class="viewcode-block" id="Trie.load_from_json"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.trie.Trie.load_from_json">[docs]</a> <span class="k">def</span> <span class="nf">load_from_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
<span class="n">json_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span> <span class="o">+</span> <span class="s2">&quot;.json&quot;</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">json_file</span><span class="p">)</span>
<span class="n">json_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div></div>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 451
docs/_build/html/_modules/pygraph/utils/utils.html View File

@@ -1,451 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils.utils &mdash; py-graph documentation</title>


<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>


<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="../../../index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>pygraph.utils.utils</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pygraph.utils.utils</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">copy</span> <span class="k">import</span> <span class="n">deepcopy</span>
<span class="c1">#from itertools import product</span>

<span class="c1"># from tqdm import tqdm</span>


<div class="viewcode-block" id="getSPLengths"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.getSPLengths">[docs]</a><span class="k">def</span> <span class="nf">getSPLengths</span><span class="p">(</span><span class="n">G1</span><span class="p">):</span>
<span class="n">sp</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">shortest_path</span><span class="p">(</span><span class="n">G1</span><span class="p">)</span>
<span class="n">distances</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">G1</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(),</span> <span class="n">G1</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()))</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sp</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">sp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">distances</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">sp</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">distances</span></div>


<div class="viewcode-block" id="getSPGraph"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.getSPGraph">[docs]</a><span class="k">def</span> <span class="nf">getSPGraph</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">edge_weight</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Transform graph G to its corresponding shortest-paths graph.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> G : NetworkX graph</span>
<span class="sd"> The graph to be tramsformed.</span>
<span class="sd"> edge_weight : string</span>
<span class="sd"> edge attribute corresponding to the edge weight.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> S : NetworkX graph</span>
<span class="sd"> The shortest-paths graph corresponding to G.</span>

<span class="sd"> Notes</span>
<span class="sd"> ------</span>
<span class="sd"> For an input graph G, its corresponding shortest-paths graph S contains the same set of nodes as G, while there exists an edge between all nodes in S which are connected by a walk in G. Every edge in S between two nodes is labeled by the shortest distance between these two nodes.</span>

<span class="sd"> References</span>
<span class="sd"> ----------</span>
<span class="sd"> [1] Borgwardt KM, Kriegel HP. Shortest-path kernels on graphs. InData Mining, Fifth IEEE International Conference on 2005 Nov 27 (pp. 8-pp). IEEE.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">floydTransformation</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">edge_weight</span><span class="o">=</span><span class="n">edge_weight</span><span class="p">)</span></div>


<div class="viewcode-block" id="floydTransformation"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.floydTransformation">[docs]</a><span class="k">def</span> <span class="nf">floydTransformation</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">edge_weight</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Transform graph G to its corresponding shortest-paths graph using Floyd-transformation.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> G : NetworkX graph</span>
<span class="sd"> The graph to be tramsformed.</span>
<span class="sd"> edge_weight : string</span>
<span class="sd"> edge attribute corresponding to the edge weight. The default edge weight is bond_type.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> S : NetworkX graph</span>
<span class="sd"> The shortest-paths graph corresponding to G.</span>

<span class="sd"> References</span>
<span class="sd"> ----------</span>
<span class="sd"> [1] Borgwardt KM, Kriegel HP. Shortest-path kernels on graphs. InData Mining, Fifth IEEE International Conference on 2005 Nov 27 (pp. 8-pp). IEEE.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">spMatrix</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">floyd_warshall_numpy</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="n">edge_weight</span><span class="p">)</span>
<span class="n">S</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span>
<span class="n">S</span><span class="o">.</span><span class="n">add_nodes_from</span><span class="p">(</span><span class="n">G</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="n">ns</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">G</span><span class="o">.</span><span class="n">nodes</span><span class="p">())</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">G</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">G</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()):</span>
<span class="k">if</span> <span class="n">spMatrix</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">!=</span> <span class="n">np</span><span class="o">.</span><span class="n">inf</span><span class="p">:</span>
<span class="n">S</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">ns</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">ns</span><span class="p">[</span><span class="n">j</span><span class="p">],</span> <span class="n">cost</span><span class="o">=</span><span class="n">spMatrix</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
<span class="k">return</span> <span class="n">S</span></div>


<div class="viewcode-block" id="untotterTransformation"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.untotterTransformation">[docs]</a><span class="k">def</span> <span class="nf">untotterTransformation</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">node_label</span><span class="p">,</span> <span class="n">edge_label</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Transform graph G according to Mahé et al.&#39;s work to filter out tottering patterns of marginalized kernel and tree pattern kernel.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> G : NetworkX graph</span>
<span class="sd"> The graph to be tramsformed.</span>
<span class="sd"> node_label : string</span>
<span class="sd"> node attribute used as label. The default node label is &#39;atom&#39;.</span>
<span class="sd"> edge_label : string</span>
<span class="sd"> edge attribute used as label. The default edge label is &#39;bond_type&#39;.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> gt : NetworkX graph</span>
<span class="sd"> The transformed graph corresponding to G.</span>

<span class="sd"> References</span>
<span class="sd"> ----------</span>
<span class="sd"> [1] Pierre Mahé, Nobuhisa Ueda, Tatsuya Akutsu, Jean-Luc Perret, and Jean-Philippe Vert. Extensions of marginalized graph kernels. In Proceedings of the twenty-first international conference on Machine learning, page 70. ACM, 2004.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># arrange all graphs in a list</span>
<span class="n">G</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">to_directed</span><span class="p">()</span>
<span class="n">gt</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span>
<span class="n">gt</span><span class="o">.</span><span class="n">graph</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">graph</span>
<span class="n">gt</span><span class="o">.</span><span class="n">add_nodes_from</span><span class="p">(</span><span class="n">G</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
<span class="k">for</span> <span class="n">edge</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">edges</span><span class="p">():</span>
<span class="n">gt</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">edge</span><span class="p">)</span>
<span class="n">gt</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">edge</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">node_label</span><span class="p">:</span> <span class="n">G</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">edge</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">node_label</span><span class="p">]})</span>
<span class="n">gt</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">edge</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">edge</span><span class="p">)</span>
<span class="n">gt</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="n">edge</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">edge</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
<span class="n">edge_label</span><span class="p">:</span>
<span class="n">G</span><span class="p">[</span><span class="n">edge</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="n">edge</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">edge_label</span><span class="p">]</span>
<span class="p">})</span>
<span class="k">for</span> <span class="n">neighbor</span> <span class="ow">in</span> <span class="n">G</span><span class="p">[</span><span class="n">edge</span><span class="p">[</span><span class="mi">1</span><span class="p">]]:</span>
<span class="k">if</span> <span class="n">neighbor</span> <span class="o">!=</span> <span class="n">edge</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">gt</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">edge</span><span class="p">,</span> <span class="p">(</span><span class="n">edge</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">neighbor</span><span class="p">))</span>
<span class="n">gt</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="n">edge</span><span class="p">,</span> <span class="p">(</span><span class="n">edge</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">neighbor</span><span class="p">)]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
<span class="n">edge_label</span><span class="p">:</span>
<span class="n">G</span><span class="p">[</span><span class="n">edge</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">neighbor</span><span class="p">][</span><span class="n">edge_label</span><span class="p">]</span>
<span class="p">})</span>
<span class="c1"># nx.draw_networkx(gt)</span>
<span class="c1"># plt.show()</span>

<span class="c1"># relabel nodes using consecutive integers for convenience of kernel calculation.</span>
<span class="n">gt</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">convert_node_labels_to_integers</span><span class="p">(</span>
<span class="n">gt</span><span class="p">,</span> <span class="n">first_label</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">label_attribute</span><span class="o">=</span><span class="s1">&#39;label_orignal&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">gt</span></div>


<div class="viewcode-block" id="direct_product"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.direct_product">[docs]</a><span class="k">def</span> <span class="nf">direct_product</span><span class="p">(</span><span class="n">G1</span><span class="p">,</span> <span class="n">G2</span><span class="p">,</span> <span class="n">node_label</span><span class="p">,</span> <span class="n">edge_label</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the direct/tensor product of directed graphs G1 and G2.</span>

<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> G1, G2 : NetworkX graph</span>
<span class="sd"> The original graphs.</span>
<span class="sd"> node_label : string</span>
<span class="sd"> node attribute used as label. The default node label is &#39;atom&#39;.</span>
<span class="sd"> edge_label : string</span>
<span class="sd"> edge attribute used as label. The default edge label is &#39;bond_type&#39;.</span>

<span class="sd"> Return</span>
<span class="sd"> ------</span>
<span class="sd"> gt : NetworkX graph</span>
<span class="sd"> The direct product graph of G1 and G2.</span>

<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> This method differs from networkx.tensor_product in that this method only adds nodes and edges in G1 and G2 that have the same labels to the direct product graph.</span>

<span class="sd"> References</span>
<span class="sd"> ----------</span>
<span class="sd"> [1] Thomas Gärtner, Peter Flach, and Stefan Wrobel. On graph kernels: Hardness results and efficient alternatives. Learning Theory and Kernel Machines, pages 129–143, 2003.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># arrange all graphs in a list</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="k">import</span> <span class="n">product</span>
<span class="c1"># G = G.to_directed()</span>
<span class="n">gt</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">DiGraph</span><span class="p">()</span>
<span class="c1"># add nodes</span>
<span class="k">for</span> <span class="n">u</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">product</span><span class="p">(</span><span class="n">G1</span><span class="p">,</span> <span class="n">G2</span><span class="p">):</span>
<span class="k">if</span> <span class="n">G1</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">u</span><span class="p">][</span><span class="n">node_label</span><span class="p">]</span> <span class="o">==</span> <span class="n">G2</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">v</span><span class="p">][</span><span class="n">node_label</span><span class="p">]:</span>
<span class="n">gt</span><span class="o">.</span><span class="n">add_node</span><span class="p">((</span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">))</span>
<span class="n">gt</span><span class="o">.</span><span class="n">nodes</span><span class="p">[(</span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">)]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">node_label</span><span class="p">:</span> <span class="n">G1</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">u</span><span class="p">][</span><span class="n">node_label</span><span class="p">]})</span>
<span class="c1"># add edges, faster for sparse graphs (no so many edges), which is the most case for now.</span>
<span class="k">for</span> <span class="p">(</span><span class="n">u1</span><span class="p">,</span> <span class="n">v1</span><span class="p">),</span> <span class="p">(</span><span class="n">u2</span><span class="p">,</span> <span class="n">v2</span><span class="p">)</span> <span class="ow">in</span> <span class="n">product</span><span class="p">(</span><span class="n">G1</span><span class="o">.</span><span class="n">edges</span><span class="p">,</span> <span class="n">G2</span><span class="o">.</span><span class="n">edges</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">u1</span><span class="p">,</span> <span class="n">u2</span><span class="p">)</span> <span class="ow">in</span> <span class="n">gt</span> <span class="ow">and</span> <span class="p">(</span>
<span class="n">v1</span><span class="p">,</span> <span class="n">v2</span>
<span class="p">)</span> <span class="ow">in</span> <span class="n">gt</span> <span class="ow">and</span> <span class="n">G1</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="n">u1</span><span class="p">,</span> <span class="n">v1</span><span class="p">][</span><span class="n">edge_label</span><span class="p">]</span> <span class="o">==</span> <span class="n">G2</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="n">u2</span><span class="p">,</span>
<span class="n">v2</span><span class="p">][</span><span class="n">edge_label</span><span class="p">]:</span>
<span class="n">gt</span><span class="o">.</span><span class="n">add_edge</span><span class="p">((</span><span class="n">u1</span><span class="p">,</span> <span class="n">u2</span><span class="p">),</span> <span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">))</span>
<span class="n">gt</span><span class="o">.</span><span class="n">edges</span><span class="p">[(</span><span class="n">u1</span><span class="p">,</span> <span class="n">u2</span><span class="p">),</span> <span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">)]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
<span class="n">edge_label</span><span class="p">:</span>
<span class="n">G1</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="n">u1</span><span class="p">,</span> <span class="n">v1</span><span class="p">][</span><span class="n">edge_label</span><span class="p">]</span>
<span class="p">})</span>

<span class="c1"># # add edges, faster for dense graphs (a lot of edges, complete graph would be super).</span>
<span class="c1"># for u, v in product(gt, gt):</span>
<span class="c1"># if (u[0], v[0]) in G1.edges and (</span>
<span class="c1"># u[1], v[1]</span>
<span class="c1"># ) in G2.edges and G1.edges[u[0],</span>
<span class="c1"># v[0]][edge_label] == G2.edges[u[1],</span>
<span class="c1"># v[1]][edge_label]:</span>
<span class="c1"># gt.add_edge((u[0], u[1]), (v[0], v[1]))</span>
<span class="c1"># gt.edges[(u[0], u[1]), (v[0], v[1])].update({</span>
<span class="c1"># edge_label:</span>
<span class="c1"># G1.edges[u[0], v[0]][edge_label]</span>
<span class="c1"># })</span>

<span class="c1"># relabel nodes using consecutive integers for convenience of kernel calculation.</span>
<span class="c1"># gt = nx.convert_node_labels_to_integers(</span>
<span class="c1"># gt, first_label=0, label_attribute=&#39;label_orignal&#39;)</span>
<span class="k">return</span> <span class="n">gt</span></div>


<div class="viewcode-block" id="graph_deepcopy"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.graph_deepcopy">[docs]</a><span class="k">def</span> <span class="nf">graph_deepcopy</span><span class="p">(</span><span class="n">G</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Deep copy a graph, including deep copy of all nodes, edges and </span>
<span class="sd"> attributes of the graph, nodes and edges.</span>
<span class="sd"> </span>
<span class="sd"> Note</span>
<span class="sd"> ----</span>
<span class="sd"> It is the same as the NetworkX function graph.copy(), as far as I know.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># add graph attributes.</span>
<span class="n">labels</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">labels</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="n">G</span><span class="o">.</span><span class="n">is_directed</span><span class="p">():</span>
<span class="n">G_copy</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">DiGraph</span><span class="p">(</span><span class="o">**</span><span class="n">labels</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">G_copy</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="o">**</span><span class="n">labels</span><span class="p">)</span>
<span class="c1"># add nodes </span>
<span class="k">for</span> <span class="n">nd</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">labels</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">labels</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="n">G_copy</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">nd</span><span class="p">,</span> <span class="o">**</span><span class="n">labels</span><span class="p">)</span>
<span class="c1"># add edges.</span>
<span class="k">for</span> <span class="n">nd1</span><span class="p">,</span> <span class="n">nd2</span><span class="p">,</span> <span class="n">attrs</span> <span class="ow">in</span> <span class="n">G</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">labels</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">labels</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="n">G_copy</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">nd1</span><span class="p">,</span> <span class="n">nd2</span><span class="p">,</span> <span class="o">**</span><span class="n">labels</span><span class="p">)</span>
<span class="k">return</span> <span class="n">G_copy</span></div>


<div class="viewcode-block" id="graph_isIdentical"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.graph_isIdentical">[docs]</a><span class="k">def</span> <span class="nf">graph_isIdentical</span><span class="p">(</span><span class="n">G1</span><span class="p">,</span> <span class="n">G2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Check if two graphs are identical, including: same nodes, edges, node</span>
<span class="sd"> labels/attributes, edge labels/attributes.</span>
<span class="sd"> </span>
<span class="sd"> Notes</span>
<span class="sd"> ----</span>
<span class="sd"> 1. The type of graphs has to be the same.</span>
<span class="sd"> 2. Global/Graph attributes are neglected as they may contain names for graphs.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># check nodes.</span>
<span class="n">nlist1</span> <span class="o">=</span> <span class="p">[</span><span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">G1</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="n">nlist2</span> <span class="o">=</span> <span class="p">[</span><span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">G2</span><span class="o">.</span><span class="n">nodes</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">nlist1</span> <span class="o">==</span> <span class="n">nlist2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="c1"># check edges.</span>
<span class="n">elist1</span> <span class="o">=</span> <span class="p">[</span><span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">G1</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="n">elist2</span> <span class="o">=</span> <span class="p">[</span><span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">G2</span><span class="o">.</span><span class="n">edges</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">elist1</span> <span class="o">==</span> <span class="n">elist2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="c1"># check graph attributes.</span>
<span class="k">return</span> <span class="kc">True</span></div>


<div class="viewcode-block" id="get_node_labels"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.get_node_labels">[docs]</a><span class="k">def</span> <span class="nf">get_node_labels</span><span class="p">(</span><span class="n">Gn</span><span class="p">,</span> <span class="n">node_label</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get node labels of dataset Gn.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">nl</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="n">nl</span> <span class="o">=</span> <span class="n">nl</span> <span class="o">|</span> <span class="nb">set</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">get_node_attributes</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">node_label</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="k">return</span> <span class="n">nl</span></div>


<div class="viewcode-block" id="get_edge_labels"><a class="viewcode-back" href="../../../pygraph.utils.html#pygraph.utils.utils.get_edge_labels">[docs]</a><span class="k">def</span> <span class="nf">get_edge_labels</span><span class="p">(</span><span class="n">Gn</span><span class="p">,</span> <span class="n">edge_label</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get edge labels of dataset Gn.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">el</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">G</span> <span class="ow">in</span> <span class="n">Gn</span><span class="p">:</span>
<span class="n">el</span> <span class="o">=</span> <span class="n">el</span> <span class="o">|</span> <span class="nb">set</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">get_edge_attributes</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">edge_label</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="k">return</span> <span class="n">el</span></div>
</pre></div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 20
docs/_build/html/_sources/index.rst.txt View File

@@ -1,20 +0,0 @@
.. py-graph documentation master file, created by
sphinx-quickstart on Tue Jan 28 17:13:42 2020.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.

Welcome to py-graph's documentation!
====================================

.. toctree::
:maxdepth: 2
:caption: Contents:



Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

+ 0
- 7
docs/_build/html/_sources/modules.rst.txt View File

@@ -1,7 +0,0 @@
py-graph
========

.. toctree::
:maxdepth: 4

pygraph

+ 0
- 17
docs/_build/html/_sources/pygraph.rst.txt View File

@@ -1,17 +0,0 @@
pygraph package
===============

Subpackages
-----------

.. toctree::

pygraph.utils

Module contents
---------------

.. automodule:: pygraph
:members:
:undoc-members:
:show-inheritance:

+ 0
- 94
docs/_build/html/_sources/pygraph.utils.rst.txt View File

@@ -1,94 +0,0 @@
pygraph.utils package
=====================

Submodules
----------

pygraph.utils.graphdataset module
---------------------------------

.. automodule:: pygraph.utils.graphdataset
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.graphfiles module
-------------------------------

.. automodule:: pygraph.utils.graphfiles
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.ipython\_log module
---------------------------------

.. automodule:: pygraph.utils.ipython_log
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.isNotebook module
-------------------------------

.. automodule:: pygraph.utils.isNotebook
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.kernels module
----------------------------

.. automodule:: pygraph.utils.kernels
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.logger2file module
--------------------------------

.. automodule:: pygraph.utils.logger2file
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.model\_selection\_precomputed module
--------------------------------------------------

.. automodule:: pygraph.utils.model_selection_precomputed
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.parallel module
-----------------------------

.. automodule:: pygraph.utils.parallel
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.trie module
-------------------------

.. automodule:: pygraph.utils.trie
:members:
:undoc-members:
:show-inheritance:

pygraph.utils.utils module
--------------------------

.. automodule:: pygraph.utils.utils
:members:
:undoc-members:
:show-inheritance:


Module contents
---------------

.. automodule:: pygraph.utils
:members:
:undoc-members:
:show-inheritance:

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

Before After
Width: 16  |  Height: 16  |  Size: 673 B

+ 0
- 688
docs/_build/html/_static/alabaster.css View File

@@ -1,688 +0,0 @@
@import url("basic.css");

/* -- page layout ----------------------------------------------------------- */

body {
font-family: Georgia, serif;
font-size: 17px;
background-color: #fff;
color: #000;
margin: 0;
padding: 0;
}


div.document {
width: 940px;
margin: 30px auto 0 auto;
}

div.documentwrapper {
float: left;
width: 100%;
}

div.bodywrapper {
margin: 0 0 0 220px;
}

div.sphinxsidebar {
width: 220px;
font-size: 14px;
line-height: 1.5;
}

hr {
border: 1px solid #B1B4B6;
}

div.body {
background-color: #fff;
color: #3E4349;
padding: 0 30px 0 30px;
}

div.body > .section {
text-align: left;
}

div.footer {
width: 940px;
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}

div.footer a {
color: #888;
}

p.caption {
font-family: inherit;
font-size: inherit;
}


div.relations {
display: none;
}


div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}

div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}

div.sphinxsidebarwrapper {
padding: 18px 10px;
}

div.sphinxsidebarwrapper p.logo {
padding: 0;
margin: -10px 0 0 0px;
text-align: center;
}

div.sphinxsidebarwrapper h1.logo {
margin-top: -10px;
text-align: center;
margin-bottom: 5px;
text-align: left;
}

div.sphinxsidebarwrapper h1.logo-name {
margin-top: 0px;
}

div.sphinxsidebarwrapper p.blurb {
margin-top: 0;
font-style: normal;
}

div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Georgia, serif;
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}

div.sphinxsidebar h4 {
font-size: 20px;
}

div.sphinxsidebar h3 a {
color: #444;
}

div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}

div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}

div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}

div.sphinxsidebar ul li.toctree-l1 > a {
font-size: 120%;
}

div.sphinxsidebar ul li.toctree-l2 > a {
font-size: 110%;
}

div.sphinxsidebar input {
border: 1px solid #CCC;
font-family: Georgia, serif;
font-size: 1em;
}

div.sphinxsidebar hr {
border: none;
height: 1px;
color: #AAA;
background: #AAA;

text-align: left;
margin-left: 0;
width: 50%;
}

/* -- body styles ----------------------------------------------------------- */

a {
color: #004B6B;
text-decoration: underline;
}

a:hover {
color: #6D4100;
text-decoration: underline;
}

div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: Georgia, serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}

div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }

a.headerlink {
color: #DDD;
padding: 0 4px;
text-decoration: none;
}

a.headerlink:hover {
color: #444;
background: #EAEAEA;
}

div.body p, div.body dd, div.body li {
line-height: 1.4em;
}

div.admonition {
margin: 20px 0px;
padding: 10px 30px;
background-color: #EEE;
border: 1px solid #CCC;
}

div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fafafa;
}

div.admonition p.admonition-title {
font-family: Georgia, serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}

div.admonition p.last {
margin-bottom: 0;
}

div.highlight {
background-color: #fff;
}

dt:target, .highlight {
background: #FAF3E8;
}

div.warning {
background-color: #FCC;
border: 1px solid #FAA;
}

div.danger {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}

div.error {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}

div.caution {
background-color: #FCC;
border: 1px solid #FAA;
}

div.attention {
background-color: #FCC;
border: 1px solid #FAA;
}

div.important {
background-color: #EEE;
border: 1px solid #CCC;
}

div.note {
background-color: #EEE;
border: 1px solid #CCC;
}

div.tip {
background-color: #EEE;
border: 1px solid #CCC;
}

div.hint {
background-color: #EEE;
border: 1px solid #CCC;
}

div.seealso {
background-color: #EEE;
border: 1px solid #CCC;
}

div.topic {
background-color: #EEE;
}

p.admonition-title {
display: inline;
}

p.admonition-title:after {
content: ":";
}

pre, tt, code {
font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}

.hll {
background-color: #FFC;
margin: 0 -12px;
padding: 0 12px;
display: block;
}

img.screenshot {
}

tt.descname, tt.descclassname, code.descname, code.descclassname {
font-size: 0.95em;
}

tt.descname, code.descname {
padding-right: 0.08em;
}

img.screenshot {
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}

table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}

table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}

table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}

table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #EEE;
background: #FDFDFD;
font-size: 0.9em;
}

table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}

table.field-list th {
padding: 0 0.8em 0 0;
}

table.field-list td {
padding: 0;
}

table.field-list p {
margin-bottom: 0.8em;
}

/* Cloned from
* https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
*/
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}

table.footnote td.label {
width: .1px;
padding: 0.3em 0 0.3em 0.5em;
}

table.footnote td {
padding: 0.3em 0.5em;
}

dl {
margin: 0;
padding: 0;
}

dl dd {
margin-left: 30px;
}

blockquote {
margin: 0 0 0 30px;
padding: 0;
}

ul, ol {
/* Matches the 30px from the narrow-screen "li > ul" selector below */
margin: 10px 0 10px 30px;
padding: 0;
}

pre {
background: #EEE;
padding: 7px 30px;
margin: 15px 0px;
line-height: 1.3em;
}

div.viewcode-block:target {
background: #ffd;
}

dl pre, blockquote pre, li pre {
margin-left: 0;
padding-left: 30px;
}

tt, code {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}

tt.xref, code.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fff;
}

a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}

/* Don't put an underline on images */
a.image-reference, a.image-reference:hover {
border-bottom: none;
}

a.reference:hover {
border-bottom: 1px solid #6D4100;
}

a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}

a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}

a:hover tt, a:hover code {
background: #EEE;
}


@media screen and (max-width: 870px) {

div.sphinxsidebar {
display: none;
}

div.document {
width: 100%;

}

div.documentwrapper {
margin-left: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
}

div.bodywrapper {
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
}

ul {
margin-left: 0;
}

li > ul {
/* Matches the 30px from the "ul, ol" selector above */
margin-left: 30px;
}

.document {
width: auto;
}

.footer {
width: auto;
}

.bodywrapper {
margin: 0;
}

.footer {
width: auto;
}

.github {
display: none;
}



}



@media screen and (max-width: 875px) {

body {
margin: 0;
padding: 20px 30px;
}

div.documentwrapper {
float: none;
background: #fff;
}

div.sphinxsidebar {
display: block;
float: none;
width: 102.5%;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: #FFF;
}

div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: #fff;
}

div.sphinxsidebar a {
color: #AAA;
}

div.sphinxsidebar p.logo {
display: none;
}

div.document {
width: 100%;
margin: 0;
}

div.footer {
display: none;
}

div.bodywrapper {
margin: 0;
}

div.body {
min-height: 0;
padding: 0;
}

.rtd_doc_footer {
display: none;
}

.document {
width: auto;
}

.footer {
width: auto;
}

.footer {
width: auto;
}

.github {
display: none;
}
}


/* misc. */

.revsys-inline {
display: none!important;
}

/* Make nested-list/multi-paragraph items look better in Releases changelog
* pages. Without this, docutils' magical list fuckery causes inconsistent
* formatting between different release sub-lists.
*/
div#changelog > div.section > ul > li > p:only-child {
margin-bottom: 0;
}

/* Hide fugly table cell borders in ..bibliography:: directive output */
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
border: none;
/* Below needed in some edge cases; if not applied, bottom shadows appear */
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}


/* relbar */

.related {
line-height: 30px;
width: 100%;
font-size: 0.9rem;
}

.related.top {
border-bottom: 1px solid #EEE;
margin-bottom: 20px;
}

.related.bottom {
border-top: 1px solid #EEE;
}

.related ul {
padding: 0;
margin: 0;
list-style: none;
}

.related li {
display: inline;
}

nav#rellinks {
float: right;
}

nav#rellinks li+li:before {
content: "|";
}

nav#breadcrumbs li+li:before {
content: "\00BB";
}

/* Hide certain items when printing */
@media print {
div.related {
display: none;
}
}

+ 0
- 676
docs/_build/html/_static/basic.css View File

@@ -1,676 +0,0 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2018 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%;
word-wrap: break-word;
overflow-wrap : break-word;
}

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 form.search {
overflow: hidden;
}

div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}

div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}


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%;
margin-left: auto;
margin-right: auto;
}

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 ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}

table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}

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;
}

/* -- domain module index --------------------------------------------------- */

table.modindextable td {
padding: 2px;
border-collapse: collapse;
}

/* -- general body styles --------------------------------------------------- */

div.body {
min-width: 450px;
max-width: 800px;
}

div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}

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,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}

div.body p.caption {
text-align: inherit;
}

div.body td {
text-align: left;
}

.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.align-center {
margin-left: auto;
margin-right: auto;
}

table caption span.caption-number {
font-style: italic;
}

table caption span.caption-text {
}

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.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;
}

/* -- figures --------------------------------------------------------------- */

div.figure {
margin: 0.5em;
padding: 0.5em;
}

div.figure p.caption {
padding: 0.3em;
}

div.figure p.caption span.caption-number {
font-style: italic;
}

div.figure p.caption span.caption-text {
}

/* -- field list styles ----------------------------------------------------- */

table.field-list td, table.field-list th {
border: 0 !important;
}

.field-list ul {
margin: 0;
padding-left: 1em;
}

.field-list p {
margin: 0;
}

.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}

/* -- hlist styles ---------------------------------------------------------- */

table.hlist td {
vertical-align: top;
}


/* -- 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, span.highlighted {
background-color: #fbe54e;
}

rect.highlighted {
fill: #fbe54e;
}

dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}

.optional {
font-size: 1.3em;
}

.sig-paren {
font-size: larger;
}

.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 */
}

span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
}

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;
}

div.code-block-caption {
padding: 2px 5px;
font-size: small;
}

div.code-block-caption code {
background-color: transparent;
}

div.code-block-caption + div > div.highlight > pre {
margin-top: 0;
}

div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}

div.code-block-caption span.caption-text {
}

div.literal-block-wrapper {
padding: 1em 1em 0;
}

div.literal-block-wrapper div.highlight {
margin: 0;
}

code.descname {
background-color: transparent;
font-weight: bold;
font-size: 1.2em;
}

code.descclassname {
background-color: transparent;
}

code.xref, a code {
background-color: transparent;
font-weight: bold;
}

h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
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;
}

span.eqno a.headerlink {
position: relative;
left: 0px;
z-index: 1;
}

div.math:hover a.headerlink {
visibility: visible;
}

/* -- 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;
}
}

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

Before After
Width: 16  |  Height: 16  |  Size: 756 B

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

Before After
Width: 16  |  Height: 16  |  Size: 829 B

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

Before After
Width: 16  |  Height: 16  |  Size: 641 B

+ 0
- 1
docs/_build/html/_static/css/badge_only.css View File

@@ -1 +0,0 @@
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}

+ 0
- 6
docs/_build/html/_static/css/theme.css
File diff suppressed because it is too large
View File


+ 0
- 1
docs/_build/html/_static/custom.css View File

@@ -1 +0,0 @@
/* This file intentionally left blank. */

+ 0
- 315
docs/_build/html/_static/doctools.js View File

@@ -1,315 +0,0 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2018 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, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
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);
if (isInSVG) {
var bbox = span.getBBox();
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
var parentOfText = node.parentNode.parentNode;
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};

/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();

var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];

return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

/**
* Small JavaScript module for the documentation.
*/
var Documentation = {

init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
this.initOnKeyListeners();
}
},

/**
* 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
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
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);
},

initOnKeyListeners: function() {
$(document).keyup(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box or textarea
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
}
}
});
}
};

// quick alias for translations
_ = Documentation.gettext;

$(document).ready(function() {
Documentation.init();
});

+ 0
- 296
docs/_build/html/_static/documentation_options.js View File

@@ -1,296 +0,0 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SEARCH_LANGUAGE_STOP_WORDS: ["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"]
};



/* Non-minified version JS is _stemmer.js if file is provided */
/**
* 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;
}
}





var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();

function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}



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

Before After
Width: 16  |  Height: 16  |  Size: 222 B

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

Before After
Width: 16  |  Height: 16  |  Size: 202 B

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

Before After
Width: 16  |  Height: 16  |  Size: 286 B

BIN
docs/_build/html/_static/fonts/Inconsolata-Bold.ttf View File


BIN
docs/_build/html/_static/fonts/Inconsolata-Regular.ttf View File


BIN
docs/_build/html/_static/fonts/Inconsolata.ttf View File


BIN
docs/_build/html/_static/fonts/Lato-Bold.ttf View File


BIN
docs/_build/html/_static/fonts/Lato-Regular.ttf View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bold.eot View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bold.ttf View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bold.woff View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bold.woff2 View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff View File


BIN
docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 View File


BIN
docs/_build/html/_static/fonts/Lato/lato-italic.eot View File


BIN
docs/_build/html/_static/fonts/Lato/lato-italic.ttf View File


BIN
docs/_build/html/_static/fonts/Lato/lato-italic.woff View File


BIN
docs/_build/html/_static/fonts/Lato/lato-italic.woff2 View File


BIN
docs/_build/html/_static/fonts/Lato/lato-regular.eot View File


BIN
docs/_build/html/_static/fonts/Lato/lato-regular.ttf View File


BIN
docs/_build/html/_static/fonts/Lato/lato-regular.woff View File


BIN
docs/_build/html/_static/fonts/Lato/lato-regular.woff2 View File


BIN
docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf View File


BIN
docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff View File


BIN
docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 View File


BIN
docs/_build/html/_static/fonts/fontawesome-webfont.eot View File


+ 0
- 2671
docs/_build/html/_static/fonts/fontawesome-webfont.svg
File diff suppressed because it is too large
View File


BIN
docs/_build/html/_static/fonts/fontawesome-webfont.ttf View File


BIN
docs/_build/html/_static/fonts/fontawesome-webfont.woff View File


BIN
docs/_build/html/_static/fonts/fontawesome-webfont.woff2 View File


+ 0
- 10253
docs/_build/html/_static/jquery-3.2.1.js
File diff suppressed because it is too large
View File


+ 0
- 4
docs/_build/html/_static/jquery.js
File diff suppressed because it is too large
View File


+ 0
- 4
docs/_build/html/_static/js/modernizr.min.js
File diff suppressed because it is too large
View File


+ 0
- 3
docs/_build/html/_static/js/theme.js View File

@@ -1,3 +0,0 @@
/* sphinx_rtd_theme version 0.4.3 | MIT license */
/* Built 20190212 16:02 */
require=function r(s,a,l){function c(e,n){if(!a[e]){if(!s[e]){var i="function"==typeof require&&require;if(!n&&i)return i(e,!0);if(u)return u(e,!0);var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}var o=a[e]={exports:{}};s[e][0].call(o.exports,function(n){return c(s[e][1][n]||n)},o,o.exports,r,s,a,l)}return a[e].exports}for(var u="function"==typeof require&&require,n=0;n<l.length;n++)c(l[n]);return c}({"sphinx-rtd-theme":[function(n,e,i){var jQuery="undefined"!=typeof window?window.jQuery:n("jquery");e.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(e){var i=this;void 0===e&&(e=!0),i.isRunning||(i.isRunning=!0,jQuery(function(n){i.init(n),i.reset(),i.win.on("hashchange",i.reset),e&&i.win.on("scroll",function(){i.linkScroll||i.winScroll||(i.winScroll=!0,requestAnimationFrame(function(){i.onScroll()}))}),i.win.on("resize",function(){i.winResize||(i.winResize=!0,requestAnimationFrame(function(){i.onResize()}))}),i.onResize()}))},enableSticky:function(){this.enable(!0)},init:function(i){i(document);var t=this;this.navBar=i("div.wy-side-scroll:first"),this.win=i(window),i(document).on("click","[data-toggle='wy-nav-top']",function(){i("[data-toggle='wy-nav-shift']").toggleClass("shift"),i("[data-toggle='rst-versions']").toggleClass("shift")}).on("click",".wy-menu-vertical .current ul li a",function(){var n=i(this);i("[data-toggle='wy-nav-shift']").removeClass("shift"),i("[data-toggle='rst-versions']").toggleClass("shift"),t.toggleCurrent(n),t.hashChange()}).on("click","[data-toggle='rst-current-version']",function(){i("[data-toggle='rst-versions']").toggleClass("shift-up")}),i("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),i("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),i("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),i(".wy-menu-vertical ul").not(".simple").siblings("a").each(function(){var e=i(this);expand=i('<span class="toctree-expand"></span>'),expand.on("click",function(n){return t.toggleCurrent(e),n.stopPropagation(),!1}),e.prepend(expand)})},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),i=e.find('[href="'+n+'"]');if(0===i.length){var t=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(i=e.find('[href="#'+t.attr("id")+'"]')).length&&(i=e.find('[href="#"]'))}0<i.length&&($(".wy-menu-vertical .current").removeClass("current"),i.addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l1").parent().addClass("current"),i.closest("li.toctree-l1").addClass("current"),i.closest("li.toctree-l2").addClass("current"),i.closest("li.toctree-l3").addClass("current"),i.closest("li.toctree-l4").addClass("current"),i[0].scrollIntoView())}catch(o){console.log("Error expanding nav for anchor",o)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,i=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(i),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",function(){this.linkScroll=!1})},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:e.exports.ThemeNav,StickyNav:e.exports.ThemeNav}),function(){for(var r=0,n=["ms","moz","webkit","o"],e=0;e<n.length&&!window.requestAnimationFrame;++e)window.requestAnimationFrame=window[n[e]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[n[e]+"CancelAnimationFrame"]||window[n[e]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(n,e){var i=(new Date).getTime(),t=Math.max(0,16-(i-r)),o=window.setTimeout(function(){n(i+t)},t);return r=i+t,o}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()},{jquery:"jquery"}]},{},["sphinx-rtd-theme"]);

BIN
docs/_build/html/_static/minus.png View File

Before After
Width: 11  |  Height: 11  |  Size: 90 B

BIN
docs/_build/html/_static/plus.png View File

Before After
Width: 11  |  Height: 11  |  Size: 90 B

+ 0
- 69
docs/_build/html/_static/pygments.css View File

@@ -1,69 +0,0 @@
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* 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: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; 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: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */

+ 0
- 482
docs/_build/html/_static/searchtools.js View File

@@ -1,482 +0,0 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/

if (!Scorer) {
/**
* 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
};
}

if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
}

/**
* 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 = DOCUMENTATION_OPTIONS.SEARCH_LANGUAGE_STOP_WORDS;

// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
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());
// prevent stemmer from cutting word smaller than two chars
if(word.length < 3 && tmp[i].length >= 3) {
word = tmp[i];
}
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, titleterms));

// 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) {
var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
if (suffix === undefined) {
suffix = '.txt';
}
$.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
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 docnames = this._index.docnames;
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([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}

return results;
},

/**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;

var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];

// perform the search on the required terms
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];

// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return

if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);

// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {}
scoreMap[file][word] = o.score;
}
});

// 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 ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}

// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
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 occurrence, 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();
});

+ 0
- 999
docs/_build/html/_static/underscore-1.3.1.js
File diff suppressed because it is too large
View File


+ 0
- 31
docs/_build/html/_static/underscore.js View File

@@ -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);

BIN
docs/_build/html/_static/up-pressed.png View File

Before After
Width: 16  |  Height: 16  |  Size: 214 B

BIN
docs/_build/html/_static/up.png View File

Before After
Width: 16  |  Height: 16  |  Size: 203 B

+ 0
- 808
docs/_build/html/_static/websupport.js View File

@@ -1,808 +0,0 @@
/*
* websupport.js
* ~~~~~~~~~~~~~
*
* sphinx.websupport utilities for all documentation.
*
* :copyright: Copyright 2007-2018 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() {
$(document).on("click", 'a.comment-close', function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
});
$(document).on("click", 'a.vote', function(event) {
event.preventDefault();
handleVote($(this));
});
$(document).on("click", 'a.reply', function(event) {
event.preventDefault();
openReply($(this).attr('id').substring(2));
});
$(document).on("click", 'a.close-reply', function(event) {
event.preventDefault();
closeReply($(this).attr('id').substring(2));
});
$(document).on("click", 'a.sort-option', function(event) {
event.preventDefault();
handleReSort($(this));
});
$(document).on("click", 'a.show-proposal', function(event) {
event.preventDefault();
showProposal($(this).attr('id').substring(2));
});
$(document).on("click", 'a.hide-proposal', function(event) {
event.preventDefault();
hideProposal($(this).attr('id').substring(2));
});
$(document).on("click", 'a.show-propose-change', function(event) {
event.preventDefault();
showProposeChange($(this).attr('id').substring(2));
});
$(document).on("click", 'a.hide-propose-change', function(event) {
event.preventDefault();
hideProposeChange($(this).attr('id').substring(2));
});
$(document).on("click", 'a.accept-comment', function(event) {
event.preventDefault();
acceptComment($(this).attr('id').substring(2));
});
$(document).on("click", 'a.delete-comment', function(event) {
event.preventDefault();
deleteComment($(this).attr('id').substring(2));
});
$(document).on("click", 'a.comment-markup', 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(var 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) +
';expires=' + expiration.toUTCString();
$('ul.comment-ul').each(function(index, ul) {
var comments = getChildren($(ul), true);
comments = sortComments(comments);
appendComments(comments, $(ul).empty());
});
}

/**
* Function to process a vote when a user clicks an arrow.
*/
function handleVote(link) {
if (!opts.voting) {
showError("You'll need to login to vote.");
return;
}

var id = link.attr('id');
if (!id) {
// Didn't click on one of the voting arrows.
return;
}
// If it is an unvote, the new vote value is 0,
// Otherwise it's 1 for an upvote, or -1 for a downvote.
var value = 0;
if (id.charAt(1) != 'u') {
value = id.charAt(0) == 'u' ? 1 : -1;
}
// The data to be sent to the server.
var d = {
comment_id: id.substring(2),
value: value
};

// Swap the vote and unvote links.
link.hide();
$('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
.show();

// The div the comment is displayed in.
var div = $('div#cd' + d.comment_id);
var data = div.data('comment');

// If this is not an unvote, and the other vote arrow has
// already been pressed, unpress it.
if ((d.value !== 0) && (data.vote === d.value * -1)) {
$('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
$('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
}

// Update the comments rating in the local data.
data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
data.vote = d.value;
div.data('comment', data);

// Change the rating text.
div.find('.rating:first')
.text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));

// Send the vote information to the server.
$.ajax({
type: "POST",
url: opts.processVoteURL,
data: d,
error: function(request, textStatus, error) {
showError('Oops, there was a problem casting that vote.');
}
});
}

/**
* Open a reply form used to reply to an existing comment.
*/
function openReply(id) {
// Swap out the reply link for the hide link
$('#rl' + id).hide();
$('#cr' + id).show();

// Add the reply li to the children ul.
var div = $(renderTemplate(replyTemplate, {id: id})).hide();
$('#cl' + id)
.prepend(div)
// Setup the submit handler for the reply form.
.find('#rf' + id)
.submit(function(event) {
event.preventDefault();
addComment($('#rf' + id));
closeReply(id);
})
.find('input[type=button]')
.click(function() {
closeReply(id);
});
div.slideDown('fast', function() {
$('#rf' + id).find('textarea').focus();
});
}

/**
* Close the reply form opened with openReply.
*/
function closeReply(id) {
// Remove the reply div from the DOM.
$('#rd' + id).slideUp('fast', function() {
$(this).remove();
});

// Swap out the hide link for the reply link
$('#cr' + id).hide();
$('#rl' + id).show();
}

/**
* Recursively sort a tree of comments using the comp comparator.
*/
function sortComments(comments) {
comments.sort(comp);
$.each(comments, function() {
this.children = sortComments(this.children);
});
return comments;
}

/**
* Get the children comments from a ul. If recursive is true,
* recursively include childrens' children.
*/
function getChildren(ul, recursive) {
var children = [];
ul.children().children("[id^='cd']")
.each(function() {
var comment = $(this).data('comment');
if (recursive)
comment.children = getChildren($(this).find('#cl' + comment.id), true);
children.push(comment);
});
return children;
}

/** Create a div to display a comment in. */
function createCommentDiv(comment) {
if (!comment.displayed && !opts.moderator) {
return $('<div class="moderate">Thank you! Your comment will show up '
+ 'once it is has been approved by a moderator.</div>');
}
// Prettify the comment rating.
comment.pretty_rating = comment.rating + ' point' +
(comment.rating == 1 ? '' : 's');
// Make a class (for displaying not yet moderated comments differently)
comment.css_class = comment.displayed ? '' : ' moderate';
// Create a div for this comment.
var context = $.extend({}, opts, comment);
var div = $(renderTemplate(commentTemplate, context));

// If the user has voted on this comment, highlight the correct arrow.
if (comment.vote) {
var direction = (comment.vote == 1) ? 'u' : 'd';
div.find('#' + direction + 'v' + comment.id).hide();
div.find('#' + direction + 'u' + comment.id).show();
}

if (opts.moderator || comment.text != '[deleted]') {
div.find('a.reply').show();
if (comment.proposal_diff)
div.find('#sp' + comment.id).show();
if (opts.moderator && !comment.displayed)
div.find('#cm' + comment.id).show();
if (opts.moderator || (opts.username == comment.username))
div.find('#dc' + comment.id).show();
}
return div;
}

/**
* A simple template renderer. Placeholders such as <%id%> are replaced
* by context['id'] with items being escaped. Placeholders such as <#id#>
* are not escaped.
*/
function renderTemplate(template, context) {
var esc = $(document.createElement('div'));

function handle(ph, escape) {
var cur = context;
$.each(ph.split('.'), function() {
cur = cur[this];
});
return escape ? esc.text(cur || "").html() : cur;
}

return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
return handle(arguments[2], arguments[1] == '%' ? true : false);
});
}

/** Flash an error message briefly. */
function showError(message) {
$(document.createElement('div')).attr({'class': 'popup-error'})
.append($(document.createElement('div'))
.attr({'class': 'error-message'}).text(message))
.appendTo('body')
.fadeIn("slow")
.delay(2000)
.fadeOut("slow");
}

/** Add a link the user uses to open the comments popup. */
$.fn.comment = function() {
return this.each(function() {
var id = $(this).attr('id').substring(1);
var count = COMMENT_METADATA[id];
var title = count + ' comment' + (count == 1 ? '' : 's');
var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
var addcls = count == 0 ? ' nocomment' : '';
$(this)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-open' + addcls,
id: 'ao' + id
})
.append($(document.createElement('img')).attr({
src: image,
alt: 'comment',
title: title
}))
.click(function(event) {
event.preventDefault();
show($(this).attr('id').substring(2));
})
)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-close hidden',
id: 'ah' + id
})
.append($(document.createElement('img')).attr({
src: opts.closeCommentImage,
alt: 'close',
title: 'close'
}))
.click(function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
})
);
});
};

var opts = {
processVoteURL: '/_process_vote',
addCommentURL: '/_add_comment',
getCommentsURL: '/_get_comments',
acceptCommentURL: '/_accept_comment',
deleteCommentURL: '/_delete_comment',
commentImage: '/static/_static/comment.png',
closeCommentImage: '/static/_static/comment-close.png',
loadingImage: '/static/_static/ajax-loader.gif',
commentBrightImage: '/static/_static/comment-bright.png',
upArrow: '/static/_static/up.png',
downArrow: '/static/_static/down.png',
upArrowPressed: '/static/_static/up-pressed.png',
downArrowPressed: '/static/_static/down-pressed.png',
voting: false,
moderator: false
};

if (typeof COMMENT_OPTIONS != "undefined") {
opts = jQuery.extend(opts, COMMENT_OPTIONS);
}

var popupTemplate = '\
<div class="sphinx-comments" id="sc<%id%>">\
<p class="sort-options">\
Sort by:\
<a href="#" class="sort-option byrating">best rated</a>\
<a href="#" class="sort-option byascage">newest</a>\
<a href="#" class="sort-option byage">oldest</a>\
</p>\
<div class="comment-header">Comments</div>\
<div class="comment-loading" id="cn<%id%>">\
loading comments... <img src="<%loadingImage%>" alt="" /></div>\
<ul id="cl<%id%>" class="comment-ul"></ul>\
<div id="ca<%id%>">\
<p class="add-a-comment">Add a comment\
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
<div class="comment-markup-box" id="mb<%id%>">\
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
<code>``code``</code>, \
code blocks: <code>::</code> and an indented block after blank line</div>\
<form method="post" id="cf<%id%>" class="comment-form" action="">\
<textarea name="comment" cols="80"></textarea>\
<p class="propose-button">\
<a href="#" id="pc<%id%>" class="show-propose-change">\
Propose a change &#9657;\
</a>\
<a href="#" id="hc<%id%>" class="hide-propose-change">\
Propose a change &#9663;\
</a>\
</p>\
<textarea name="proposal" id="pt<%id%>" cols="80"\
spellcheck="false"></textarea>\
<input type="submit" value="Add comment" />\
<input type="hidden" name="node" value="<%id%>" />\
<input type="hidden" name="parent" value="" />\
</form>\
</div>\
</div>';

var commentTemplate = '\
<div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
<div class="vote">\
<div class="arrow">\
<a href="#" id="uv<%id%>" class="vote" title="vote up">\
<img src="<%upArrow%>" />\
</a>\
<a href="#" id="uu<%id%>" class="un vote" title="vote up">\
<img src="<%upArrowPressed%>" />\
</a>\
</div>\
<div class="arrow">\
<a href="#" id="dv<%id%>" class="vote" title="vote down">\
<img src="<%downArrow%>" id="da<%id%>" />\
</a>\
<a href="#" id="du<%id%>" class="un vote" title="vote down">\
<img src="<%downArrowPressed%>" />\
</a>\
</div>\
</div>\
<div class="comment-content">\
<p class="tagline comment">\
<span class="user-id"><%username%></span>\
<span class="rating"><%pretty_rating%></span>\
<span class="delta"><%time.delta%></span>\
</p>\
<div class="comment-text comment"><#text#></div>\
<p class="comment-opts comment">\
<a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
<a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
<a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
<a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
<a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
<span id="cm<%id%>" class="moderation hidden">\
<a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
</span>\
</p>\
<pre class="proposal" id="pr<%id%>">\
<#proposal_diff#>\
</pre>\
<ul class="comment-children" id="cl<%id%>"></ul>\
</div>\
<div class="clearleft"></div>\
</div>\
</div>';

var replyTemplate = '\
<li>\
<div class="reply-div" id="rd<%id%>">\
<form id="rf<%id%>">\
<textarea name="comment" cols="80"></textarea>\
<input type="submit" value="Add reply" />\
<input type="button" value="Cancel" />\
<input type="hidden" name="parent" value="<%id%>" />\
<input type="hidden" name="node" value="" />\
</form>\
</div>\
</li>';

$(document).ready(function() {
init();
});
})(jQuery);

$(document).ready(function() {
// add comment anchors for all paragraphs that are commentable
$('.sphinx-has-comment').comment();

// highlight search words in search results
$("div.context").each(function() {
var params = $.getQueryParameters();
var terms = (params.q) ? params.q[0].split(/\s+/) : [];
var result = $(this);
$.each(terms, function() {
result.highlightText(this.toLowerCase(), 'highlighted');
});
});

// directly open comment window if requested
var anchor = document.location.hash;
if (anchor.substring(0, 9) == '#comment-') {
$('#ao' + anchor.substring(9)).click();
document.location.hash = '#s' + anchor.substring(9);
}
});

+ 0
- 431
docs/_build/html/genindex.html View File

@@ -1,431 +0,0 @@



<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index &mdash; py-graph documentation</title>


<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>


<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>Index</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">

<h1 id="index">Index</h1>

<div class="genindex-jumpbox">
<a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a>
| <a href="#F"><strong>F</strong></a>
| <a href="#G"><strong>G</strong></a>
| <a href="#I"><strong>I</strong></a>
| <a href="#K"><strong>K</strong></a>
| <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a>
| <a href="#T"><strong>T</strong></a>
| <a href="#U"><strong>U</strong></a>
| <a href="#W"><strong>W</strong></a>
</div>
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.model_selection_precomputed.compute_gram_matrices">compute_gram_matrices() (in module pygraph.utils.model_selection_precomputed)</a>
</li>
</ul></td>
</tr></table>

<h2 id="D">D</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.deleteWord">deleteWord() (pygraph.utils.trie.Trie method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.kernels.deltakernel">deltakernel() (in module pygraph.utils.kernels)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.utils.direct_product">direct_product() (in module pygraph.utils.utils)</a>
</li>
</ul></td>
</tr></table>

<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.utils.floydTransformation">floydTransformation() (in module pygraph.utils.utils)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.logger2file.Logger.flush">flush() (pygraph.utils.logger2file.Logger method)</a>
</li>
</ul></td>
</tr></table>

<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.kernels.gaussiankernel">gaussiankernel() (in module pygraph.utils.kernels)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphdataset.get_dataset_attributes">get_dataset_attributes() (in module pygraph.utils.graphdataset)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.utils.get_edge_labels">get_edge_labels() (in module pygraph.utils.utils)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.utils.get_node_labels">get_node_labels() (in module pygraph.utils.utils)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.getNode">getNode() (pygraph.utils.trie.Trie method)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.utils.getSPGraph">getSPGraph() (in module pygraph.utils.utils)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.utils.getSPLengths">getSPLengths() (in module pygraph.utils.utils)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.utils.graph_deepcopy">graph_deepcopy() (in module pygraph.utils.utils)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.utils.graph_isIdentical">graph_isIdentical() (in module pygraph.utils.utils)</a>
</li>
</ul></td>
</tr></table>

<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.insertWord">insertWord() (pygraph.utils.trie.Trie method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.isNotebook.isNotebook">isNotebook() (in module pygraph.utils.isNotebook)</a>
</li>
</ul></td>
</tr></table>

<h2 id="K">K</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.kernels.kernelproduct">kernelproduct() (in module pygraph.utils.kernels)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.kernels.kernelsum">kernelsum() (in module pygraph.utils.kernels)</a>
</li>
</ul></td>
</tr></table>

<h2 id="L">L</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.kernels.linearkernel">linearkernel() (in module pygraph.utils.kernels)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.load_from_json">load_from_json() (pygraph.utils.trie.Trie method)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.load_from_pickle">load_from_pickle() (pygraph.utils.trie.Trie method)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadCT">loadCT() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadDataset">loadDataset() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadFromDS">loadFromDS() (in module pygraph.utils.graphfiles)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadFromXML">loadFromXML() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadGXL">loadGXL() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadMAT">loadMAT() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadSDF">loadSDF() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.loadTXT">loadTXT() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.logger2file.Logger">Logger (class in pygraph.utils.logger2file)</a>
</li>
</ul></td>
</tr></table>

<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.model_selection_precomputed.model_selection_for_precomputed_kernel">model_selection_for_precomputed_kernel() (in module pygraph.utils.model_selection_precomputed)</a>
</li>
</ul></td>
</tr></table>

<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.parallel.parallel_gm">parallel_gm() (in module pygraph.utils.parallel)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.parallel.parallel_me">parallel_me() (in module pygraph.utils.parallel)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.model_selection_precomputed.parallel_trial_do">parallel_trial_do() (in module pygraph.utils.model_selection_precomputed)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.kernels.polynomialkernel">polynomialkernel() (in module pygraph.utils.kernels)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.model_selection_precomputed.printResultsInTable">printResultsInTable() (in module pygraph.utils.model_selection_precomputed)</a>
</li>
<li><a href="pygraph.html#module-pygraph">pygraph (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils">pygraph.utils (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.graphdataset">pygraph.utils.graphdataset (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#module-pygraph.utils.graphfiles">pygraph.utils.graphfiles (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.isNotebook">pygraph.utils.isNotebook (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.kernels">pygraph.utils.kernels (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.logger2file">pygraph.utils.logger2file (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.model_selection_precomputed">pygraph.utils.model_selection_precomputed (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.parallel">pygraph.utils.parallel (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.trie">pygraph.utils.trie (module)</a>
</li>
<li><a href="pygraph.utils.html#module-pygraph.utils.utils">pygraph.utils.utils (module)</a>
</li>
</ul></td>
</tr></table>

<h2 id="R">R</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.model_selection_precomputed.read_gram_matrices_from_file">read_gram_matrices_from_file() (in module pygraph.utils.model_selection_precomputed)</a>
</li>
</ul></td>
</tr></table>

<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.save_to_json">save_to_json() (pygraph.utils.trie.Trie method)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.save_to_pickle">save_to_pickle() (pygraph.utils.trie.Trie method)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.saveDataset">saveDataset() (in module pygraph.utils.graphfiles)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.graphfiles.saveGXL">saveGXL() (in module pygraph.utils.graphfiles)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.searchWord">searchWord() (pygraph.utils.trie.Trie method)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.searchWordPrefix">searchWordPrefix() (pygraph.utils.trie.Trie method)</a>
</li>
</ul></td>
</tr></table>

<h2 id="T">T</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie.to_json">to_json() (pygraph.utils.trie.Trie method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.model_selection_precomputed.trial_do">trial_do() (in module pygraph.utils.model_selection_precomputed)</a>
</li>
<li><a href="pygraph.utils.html#pygraph.utils.trie.Trie">Trie (class in pygraph.utils.trie)</a>
</li>
</ul></td>
</tr></table>

<h2 id="U">U</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.utils.untotterTransformation">untotterTransformation() (in module pygraph.utils.utils)</a>
</li>
</ul></td>
</tr></table>

<h2 id="W">W</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pygraph.utils.html#pygraph.utils.logger2file.Logger.write">write() (pygraph.utils.logger2file.Logger method)</a>
</li>
</ul></td>
</tr></table>



</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 207
docs/_build/html/index.html View File

@@ -1,207 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to py-graph’s documentation! &mdash; py-graph documentation</title>


<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>


<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="#" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">Welcome to py-graph’s documentation!</a></li>
<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
</ul>
</div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="#">Docs</a> &raquo;</li>
<li>Welcome to py-graph’s documentation!</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="welcome-to-py-graph-s-documentation">
<h1>Welcome to py-graph’s documentation!<a class="headerlink" href="#welcome-to-py-graph-s-documentation" title="Permalink to this headline">¶</a></h1>
<div class="toctree-wrapper compound">
</div>
</div>
<div class="section" id="indices-and-tables">
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
<ul class="simple">
<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
</ul>
</div>


</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 222
docs/_build/html/modules.html View File

@@ -1,222 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>py-graph &mdash; py-graph documentation</title>


<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>


<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">py-graph</a></li>
</ul>
</div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>py-graph</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/modules.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="py-graph">
<h1>py-graph<a class="headerlink" href="#py-graph" title="Permalink to this headline">¶</a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pygraph.html">pygraph package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pygraph.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pygraph.utils.html">pygraph.utils package</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#submodules">Submodules</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.graphdataset">pygraph.utils.graphdataset module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.graphfiles">pygraph.utils.graphfiles module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#pygraph-utils-ipython-log-module">pygraph.utils.ipython_log module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.isNotebook">pygraph.utils.isNotebook module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.kernels">pygraph.utils.kernels module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.logger2file">pygraph.utils.logger2file module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.model_selection_precomputed">pygraph.utils.model_selection_precomputed module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.parallel">pygraph.utils.parallel module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.trie">pygraph.utils.trie module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.utils">pygraph.utils.utils module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.html#module-pygraph">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>


</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

BIN
docs/_build/html/objects.inv View File


+ 0
- 257
docs/_build/html/py-modindex.html View File

@@ -1,257 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Python Module Index &mdash; py-graph documentation</title>


<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>


<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />


</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>Python Module Index</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">

<h1>Python Module Index</h1>

<div class="modindex-jumpbox">
<a href="#cap-p"><strong>p</strong></a>
</div>

<table class="indextable modindextable">
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-p"><td></td><td>
<strong>p</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<a href="pygraph.html#module-pygraph"><code class="xref">pygraph</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils"><code class="xref">pygraph.utils</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.graphdataset"><code class="xref">pygraph.utils.graphdataset</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.graphfiles"><code class="xref">pygraph.utils.graphfiles</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.isNotebook"><code class="xref">pygraph.utils.isNotebook</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.kernels"><code class="xref">pygraph.utils.kernels</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.logger2file"><code class="xref">pygraph.utils.logger2file</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.model_selection_precomputed"><code class="xref">pygraph.utils.model_selection_precomputed</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.parallel"><code class="xref">pygraph.utils.parallel</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.trie"><code class="xref">pygraph.utils.trie</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pygraph.utils.html#module-pygraph.utils.utils"><code class="xref">pygraph.utils.utils</code></a></td><td>
<em></em></td></tr>
</table>


</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 237
docs/_build/html/pygraph.html View File

@@ -1,237 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph package &mdash; py-graph documentation</title>


<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>


<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">pygraph package</a><ul>
<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
<li><a class="reference internal" href="#module-pygraph">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>pygraph package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/pygraph.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="pygraph-package">
<h1>pygraph package<a class="headerlink" href="#pygraph-package" title="Permalink to this headline">¶</a></h1>
<div class="section" id="subpackages">
<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pygraph.utils.html">pygraph.utils package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.graphdataset">pygraph.utils.graphdataset module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.graphfiles">pygraph.utils.graphfiles module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#pygraph-utils-ipython-log-module">pygraph.utils.ipython_log module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.isNotebook">pygraph.utils.isNotebook module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.kernels">pygraph.utils.kernels module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.logger2file">pygraph.utils.logger2file module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.model_selection_precomputed">pygraph.utils.model_selection_precomputed module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.parallel">pygraph.utils.parallel module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.trie">pygraph.utils.trie module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils.utils">pygraph.utils.utils module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pygraph.utils.html#module-pygraph.utils">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="section" id="module-pygraph">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-pygraph" title="Permalink to this headline">¶</a></h2>
<p>Pygraph</p>
<dl class="docutils">
<dt>This package contains 4 sub packages :</dt>
<dd><ul class="first last simple">
<li>c_ext : binders to C++ code</li>
<li>ged : allows to compute graph edit distance between networkX graphs</li>
<li>kernels : computation of graph kernels, ie graph similarity measure compatible with SVM</li>
<li>notebooks : examples of code using this library</li>
<li>utils : Diverse computation on graphs</li>
</ul>
</dd>
</dl>
</div>
</div>


</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 816
docs/_build/html/pygraph.utils.html View File

@@ -1,816 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pygraph.utils package &mdash; py-graph documentation</title>


<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>


<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">pygraph.utils package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.graphdataset">pygraph.utils.graphdataset module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.graphfiles">pygraph.utils.graphfiles module</a></li>
<li><a class="reference internal" href="#pygraph-utils-ipython-log-module">pygraph.utils.ipython_log module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.isNotebook">pygraph.utils.isNotebook module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.kernels">pygraph.utils.kernels module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.logger2file">pygraph.utils.logger2file module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.model_selection_precomputed">pygraph.utils.model_selection_precomputed module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.parallel">pygraph.utils.parallel module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.trie">pygraph.utils.trie module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils.utils">pygraph.utils.utils module</a></li>
<li><a class="reference internal" href="#module-pygraph.utils">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>pygraph.utils package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/pygraph.utils.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="pygraph-utils-package">
<h1>pygraph.utils package<a class="headerlink" href="#pygraph-utils-package" title="Permalink to this headline">¶</a></h1>
<div class="section" id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
</div>
<div class="section" id="module-pygraph.utils.graphdataset">
<span id="pygraph-utils-graphdataset-module"></span><h2>pygraph.utils.graphdataset module<a class="headerlink" href="#module-pygraph.utils.graphdataset" title="Permalink to this headline">¶</a></h2>
<p>Obtain all kinds of attributes of a graph dataset.</p>
<dl class="function">
<dt id="pygraph.utils.graphdataset.get_dataset_attributes">
<code class="descclassname">pygraph.utils.graphdataset.</code><code class="descname">get_dataset_attributes</code><span class="sig-paren">(</span><em>Gn</em>, <em>target=None</em>, <em>attr_names=[]</em>, <em>node_label=None</em>, <em>edge_label=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphdataset.html#get_dataset_attributes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphdataset.get_dataset_attributes" title="Permalink to this definition">¶</a></dt>
<dd><p>Returns the structure and property information of the graph dataset Gn.</p>
<dl class="docutils">
<dt>Gn <span class="classifier-delimiter">:</span> <span class="classifier">List of NetworkX graph</span></dt>
<dd>List of graphs whose information will be returned.</dd>
<dt>target <span class="classifier-delimiter">:</span> <span class="classifier">list</span></dt>
<dd>The list of classification targets corresponding to Gn. Only works for
classification problems.</dd>
<dt>attr_names <span class="classifier-delimiter">:</span> <span class="classifier">list</span></dt>
<dd><p class="first">List of strings which indicate which informations will be returned. The
possible choices includes:
‘substructures’: sub-structures Gn contains, including ‘linear’, ‘non</p>
<blockquote>
<div>linear’ and ‘cyclic’.</div></blockquote>
<p>‘node_labeled’: whether vertices have symbolic labels.
‘edge_labeled’: whether egdes have symbolic labels.
‘is_directed’: whether graphs in Gn are directed.
‘dataset_size’: number of graphs in Gn.
‘ave_node_num’: average number of vertices of graphs in Gn.
‘min_node_num’: minimum number of vertices of graphs in Gn.
‘max_node_num’: maximum number of vertices of graphs in Gn.
‘ave_edge_num’: average number of edges of graphs in Gn.
‘min_edge_num’: minimum number of edges of graphs in Gn.
‘max_edge_num’: maximum number of edges of graphs in Gn.
‘ave_node_degree’: average vertex degree of graphs in Gn.
‘min_node_degree’: minimum vertex degree of graphs in Gn.
‘max_node_degree’: maximum vertex degree of graphs in Gn.
‘ave_fill_factor’: average fill factor (number_of_edges /</p>
<blockquote>
<div>(number_of_nodes ** 2)) of graphs in Gn.</div></blockquote>
<p>‘min_fill_factor’: minimum fill factor of graphs in Gn.
‘max_fill_factor’: maximum fill factor of graphs in Gn.
‘node_label_num’: number of symbolic vertex labels.
‘edge_label_num’: number of symbolic edge labels.
‘node_attr_dim’: number of dimensions of non-symbolic vertex labels.</p>
<blockquote>
<div>Extracted from the ‘attributes’ attribute of graph nodes.</div></blockquote>
<dl class="last docutils">
<dt>‘edge_attr_dim’: number of dimensions of non-symbolic edge labels.</dt>
<dd>Extracted from the ‘attributes’ attribute of graph edges.</dd>
<dt>‘class_number’: number of classes. Only available for classification </dt>
<dd>problems.</dd>
</dl>
</dd>
<dt>node_label <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>Node attribute used as label. The default node label is atom. Mandatory
when ‘node_labeled’ or ‘node_label_num’ is required.</dd>
<dt>edge_label <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>Edge attribute used as label. The default edge label is bond_type.
Mandatory when ‘edge_labeled’ or ‘edge_label_num’ is required.</dd>
</dl>
<dl class="docutils">
<dt>attrs <span class="classifier-delimiter">:</span> <span class="classifier">dict</span></dt>
<dd>Value for each property.</dd>
</dl>
</dd></dl>

</div>
<div class="section" id="module-pygraph.utils.graphfiles">
<span id="pygraph-utils-graphfiles-module"></span><h2>pygraph.utils.graphfiles module<a class="headerlink" href="#module-pygraph.utils.graphfiles" title="Permalink to this headline">¶</a></h2>
<p>Utilities function to manage graph files</p>
<dl class="function">
<dt id="pygraph.utils.graphfiles.loadCT">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadCT</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadCT"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadCT" title="Permalink to this definition">¶</a></dt>
<dd><p>load data from a Chemical Table (.ct) file.</p>
<p>a typical example of data in .ct is like this:</p>
<blockquote>
<div><dl class="docutils">
<dt>3 2 &lt;- number of nodes and edges</dt>
<dd><blockquote class="first">
<div>0.0000 0.0000 0.0000 C &lt;- each line describes a node (x,y,z + label)
0.0000 0.0000 0.0000 C
0.0000 0.0000 0.0000 O</div></blockquote>
<p class="last">1 3 1 1 &lt;- each line describes an edge : to, from, bond type, bond stereo
2 3 1 1</p>
</dd>
</dl>
</div></blockquote>
<p>Check <a class="reference external" href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=10&amp;ved=2ahUKEwivhaSdjsTlAhVhx4UKHczHA8gQFjAJegQIARAC&amp;url=https%3A%2F%2Fwww.daylight.com%2Fmeetings%2Fmug05%2FKappler%2Fctfile.pdf&amp;usg=AOvVaw1cDNrrmMClkFPqodlF2inS">https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=10&amp;ved=2ahUKEwivhaSdjsTlAhVhx4UKHczHA8gQFjAJegQIARAC&amp;url=https%3A%2F%2Fwww.daylight.com%2Fmeetings%2Fmug05%2FKappler%2Fctfile.pdf&amp;usg=AOvVaw1cDNrrmMClkFPqodlF2inS</a>
for detailed format discription.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.loadDataset">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadDataset</code><span class="sig-paren">(</span><em>filename</em>, <em>filename_y=None</em>, <em>extra_params=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadDataset" title="Permalink to this definition">¶</a></dt>
<dd><p>Read graph data from filename and load them as NetworkX graphs.</p>
<dl class="docutils">
<dt>filename <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>The name of the file from where the dataset is read.</dd>
<dt>filename_y <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>The name of file of the targets corresponding to graphs.</dd>
<dt>extra_params <span class="classifier-delimiter">:</span> <span class="classifier">dict</span></dt>
<dd>Extra parameters only designated to ‘.mat’ format.</dd>
</dl>
<p>data : List of NetworkX graph.
y : List</p>
<blockquote>
<div>Targets corresponding to graphs.</div></blockquote>
<p>This function supports following graph dataset formats:
‘ds’: load data from .ds file. See comments of function loadFromDS for a example.
‘cxl’: load data from Graph eXchange Language file (.cxl file). See</p>
<blockquote>
<div><a class="reference external" href="http://www.gupro.de/GXL/Introduction/background.html">http://www.gupro.de/GXL/Introduction/background.html</a>, 2019 for detail.</div></blockquote>
<dl class="docutils">
<dt>‘sdf’: load data from structured data file (.sdf file). See </dt>
<dd><a class="reference external" href="http://www.nonlinear.com/progenesis/sdf-studio/v0.9/faq/sdf-file-format-guidance.aspx">http://www.nonlinear.com/progenesis/sdf-studio/v0.9/faq/sdf-file-format-guidance.aspx</a>,
2018 for details.</dd>
<dt>‘mat’: Load graph data from a MATLAB (up to version 7.1) .mat file. See</dt>
<dd>README in downloadable file in <a class="reference external" href="http://mlcb.is.tuebingen.mpg.de/Mitarbeiter/Nino/WL/">http://mlcb.is.tuebingen.mpg.de/Mitarbeiter/Nino/WL/</a>,
2018 for details.</dd>
<dt>‘txt’: Load graph data from a special .txt file. See</dt>
<dd><a class="reference external" href="https://ls11-www.cs.tu-dortmund.de/staff/morris/graphkerneldatasets">https://ls11-www.cs.tu-dortmund.de/staff/morris/graphkerneldatasets</a>,
2019 for details. Note here filename is the name of either .txt file in
the dataset directory.</dd>
</dl>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.loadFromDS">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadFromDS</code><span class="sig-paren">(</span><em>filename</em>, <em>filename_y</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadFromDS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadFromDS" title="Permalink to this definition">¶</a></dt>
<dd><p>Load data from .ds file.
Possible graph formats include:</p>
<blockquote>
<div>‘.ct’: see function loadCT for detail.
‘.gxl’: see dunction loadGXL for detail.</div></blockquote>
<p>Note these graph formats are checked automatically by the extensions of
graph files.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.loadFromXML">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadFromXML</code><span class="sig-paren">(</span><em>filename</em>, <em>extra_params</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadFromXML"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadFromXML" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.loadGXL">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadGXL</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadGXL"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadGXL" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.loadMAT">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadMAT</code><span class="sig-paren">(</span><em>filename</em>, <em>extra_params</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadMAT"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadMAT" title="Permalink to this definition">¶</a></dt>
<dd><p>Load graph data from a MATLAB (up to version 7.1) .mat file.</p>
<p>A MAT file contains a struct array containing graphs, and a column vector lx containing a class label for each graph.
Check README in downloadable file in <a class="reference external" href="http://mlcb.is.tuebingen.mpg.de/Mitarbeiter/Nino/WL/">http://mlcb.is.tuebingen.mpg.de/Mitarbeiter/Nino/WL/</a>, 2018 for detailed structure.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.loadSDF">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadSDF</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadSDF"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadSDF" title="Permalink to this definition">¶</a></dt>
<dd><p>load data from structured data file (.sdf file).</p>
<p>A SDF file contains a group of molecules, represented in the similar way as in MOL format.
Check <a class="reference external" href="http://www.nonlinear.com/progenesis/sdf-studio/v0.9/faq/sdf-file-format-guidance.aspx">http://www.nonlinear.com/progenesis/sdf-studio/v0.9/faq/sdf-file-format-guidance.aspx</a>, 2018 for detailed structure.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.loadTXT">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">loadTXT</code><span class="sig-paren">(</span><em>dirname_dataset</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#loadTXT"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.loadTXT" title="Permalink to this definition">¶</a></dt>
<dd><p>Load graph data from a .txt file.</p>
<p>The graph data is loaded from separate files.
Check README in downloadable file <a class="reference external" href="http://tiny.cc/PK_MLJ_data">http://tiny.cc/PK_MLJ_data</a>, 2018 for detailed structure.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.saveDataset">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">saveDataset</code><span class="sig-paren">(</span><em>Gn</em>, <em>y</em>, <em>gformat='gxl'</em>, <em>group=None</em>, <em>filename='gfile'</em>, <em>xparams=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#saveDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.saveDataset" title="Permalink to this definition">¶</a></dt>
<dd><p>Save list of graphs.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.graphfiles.saveGXL">
<code class="descclassname">pygraph.utils.graphfiles.</code><code class="descname">saveGXL</code><span class="sig-paren">(</span><em>graph</em>, <em>filename</em>, <em>method='benoit'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/graphfiles.html#saveGXL"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.graphfiles.saveGXL" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

</div>
<div class="section" id="pygraph-utils-ipython-log-module">
<h2>pygraph.utils.ipython_log module<a class="headerlink" href="#pygraph-utils-ipython-log-module" title="Permalink to this headline">¶</a></h2>
</div>
<div class="section" id="module-pygraph.utils.isNotebook">
<span id="pygraph-utils-isnotebook-module"></span><h2>pygraph.utils.isNotebook module<a class="headerlink" href="#module-pygraph.utils.isNotebook" title="Permalink to this headline">¶</a></h2>
<p>Functions for python system.</p>
<dl class="function">
<dt id="pygraph.utils.isNotebook.isNotebook">
<code class="descclassname">pygraph.utils.isNotebook.</code><code class="descname">isNotebook</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/isNotebook.html#isNotebook"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.isNotebook.isNotebook" title="Permalink to this definition">¶</a></dt>
<dd><p>check if code is executed in the IPython notebook.</p>
</dd></dl>

</div>
<div class="section" id="module-pygraph.utils.kernels">
<span id="pygraph-utils-kernels-module"></span><h2>pygraph.utils.kernels module<a class="headerlink" href="#module-pygraph.utils.kernels" title="Permalink to this headline">¶</a></h2>
<p>Those who are not graph kernels. We can be kernels for nodes or edges!
These kernels are defined between pairs of vectors.</p>
<dl class="function">
<dt id="pygraph.utils.kernels.deltakernel">
<code class="descclassname">pygraph.utils.kernels.</code><code class="descname">deltakernel</code><span class="sig-paren">(</span><em>x</em>, <em>y</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/kernels.html#deltakernel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.kernels.deltakernel" title="Permalink to this definition">¶</a></dt>
<dd><p>Delta kernel. Return 1 if x == y, 0 otherwise.</p>
<dl class="docutils">
<dt>x, y <span class="classifier-delimiter">:</span> <span class="classifier">any</span></dt>
<dd>Two parts to compare.</dd>
</dl>
<dl class="docutils">
<dt>kernel <span class="classifier-delimiter">:</span> <span class="classifier">integer</span></dt>
<dd>Delta kernel.</dd>
</dl>
<p>[1] H. Kashima, K. Tsuda, and A. Inokuchi. Marginalized kernels between
labeled graphs. In Proceedings of the 20th International Conference on
Machine Learning, Washington, DC, United States, 2003.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.kernels.gaussiankernel">
<code class="descclassname">pygraph.utils.kernels.</code><code class="descname">gaussiankernel</code><span class="sig-paren">(</span><em>x</em>, <em>y</em>, <em>gamma=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/kernels.html#gaussiankernel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.kernels.gaussiankernel" title="Permalink to this definition">¶</a></dt>
<dd><p>Gaussian kernel.
Compute the rbf (gaussian) kernel between x and y:</p>
<blockquote>
<div>K(x, y) = exp(-gamma ||x-y||^2).</div></blockquote>
<p>Read more in the <span class="xref std std-ref">User Guide</span>.</p>
<p>x, y : array</p>
<dl class="docutils">
<dt>gamma <span class="classifier-delimiter">:</span> <span class="classifier">float, default None</span></dt>
<dd>If None, defaults to 1.0 / n_features</dd>
</dl>
<p>kernel : float</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.kernels.kernelproduct">
<code class="descclassname">pygraph.utils.kernels.</code><code class="descname">kernelproduct</code><span class="sig-paren">(</span><em>k1</em>, <em>k2</em>, <em>d11</em>, <em>d12</em>, <em>d21=None</em>, <em>d22=None</em>, <em>lamda=1</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/kernels.html#kernelproduct"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.kernels.kernelproduct" title="Permalink to this definition">¶</a></dt>
<dd><p>Product of a pair of kernels.</p>
<p>k = lamda * k1(d11, d12) * k2(d21, d22)</p>
<dl class="docutils">
<dt>k1, k2 <span class="classifier-delimiter">:</span> <span class="classifier">function</span></dt>
<dd>A pair of kernel functions.</dd>
<dt>d11, d12:</dt>
<dd>Inputs of k1. If d21 or d22 is None, apply d11, d12 to both k1 and k2.</dd>
<dt>d21, d22:</dt>
<dd>Inputs of k2.</dd>
<dt>lamda: float</dt>
<dd>Coefficient of the product.</dd>
</dl>
<p>kernel : integer</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.kernels.kernelsum">
<code class="descclassname">pygraph.utils.kernels.</code><code class="descname">kernelsum</code><span class="sig-paren">(</span><em>k1</em>, <em>k2</em>, <em>d11</em>, <em>d12</em>, <em>d21=None</em>, <em>d22=None</em>, <em>lamda1=1</em>, <em>lamda2=1</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/kernels.html#kernelsum"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.kernels.kernelsum" title="Permalink to this definition">¶</a></dt>
<dd><p>Sum of a pair of kernels.</p>
<p>k = lamda1 * k1(d11, d12) + lamda2 * k2(d21, d22)</p>
<dl class="docutils">
<dt>k1, k2 <span class="classifier-delimiter">:</span> <span class="classifier">function</span></dt>
<dd>A pair of kernel functions.</dd>
<dt>d11, d12:</dt>
<dd>Inputs of k1. If d21 or d22 is None, apply d11, d12 to both k1 and k2.</dd>
<dt>d21, d22:</dt>
<dd>Inputs of k2.</dd>
<dt>lamda1, lamda2: float</dt>
<dd>Coefficients of the product.</dd>
</dl>
<p>kernel : integer</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.kernels.linearkernel">
<code class="descclassname">pygraph.utils.kernels.</code><code class="descname">linearkernel</code><span class="sig-paren">(</span><em>x</em>, <em>y</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/kernels.html#linearkernel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.kernels.linearkernel" title="Permalink to this definition">¶</a></dt>
<dd><p>Polynomial kernel.
Compute the polynomial kernel between x and y:</p>
<blockquote>
<div>K(x, y) = &lt;x, y&gt;.</div></blockquote>
<p>x, y : array</p>
<p>d : integer, default 1</p>
<p>c : float, default 0</p>
<p>kernel : float</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.kernels.polynomialkernel">
<code class="descclassname">pygraph.utils.kernels.</code><code class="descname">polynomialkernel</code><span class="sig-paren">(</span><em>x</em>, <em>y</em>, <em>d=1</em>, <em>c=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/kernels.html#polynomialkernel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.kernels.polynomialkernel" title="Permalink to this definition">¶</a></dt>
<dd><p>Polynomial kernel.
Compute the polynomial kernel between x and y:</p>
<blockquote>
<div>K(x, y) = &lt;x, y&gt; ^d + c.</div></blockquote>
<p>x, y : array</p>
<p>d : integer, default 1</p>
<p>c : float, default 0</p>
<p>kernel : float</p>
</dd></dl>

</div>
<div class="section" id="module-pygraph.utils.logger2file">
<span id="pygraph-utils-logger2file-module"></span><h2>pygraph.utils.logger2file module<a class="headerlink" href="#module-pygraph.utils.logger2file" title="Permalink to this headline">¶</a></h2>
<p>Created on Fri Nov 8 14:21:25 2019</p>
<p>&#64;author: ljia</p>
<dl class="class">
<dt id="pygraph.utils.logger2file.Logger">
<em class="property">class </em><code class="descclassname">pygraph.utils.logger2file.</code><code class="descname">Logger</code><a class="reference internal" href="_modules/pygraph/utils/logger2file.html#Logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.logger2file.Logger" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="method">
<dt id="pygraph.utils.logger2file.Logger.flush">
<code class="descname">flush</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/logger2file.html#Logger.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.logger2file.Logger.flush" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.logger2file.Logger.write">
<code class="descname">write</code><span class="sig-paren">(</span><em>message</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/logger2file.html#Logger.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.logger2file.Logger.write" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

</dd></dl>

</div>
<div class="section" id="module-pygraph.utils.model_selection_precomputed">
<span id="pygraph-utils-model-selection-precomputed-module"></span><h2>pygraph.utils.model_selection_precomputed module<a class="headerlink" href="#module-pygraph.utils.model_selection_precomputed" title="Permalink to this headline">¶</a></h2>
<dl class="function">
<dt id="pygraph.utils.model_selection_precomputed.compute_gram_matrices">
<code class="descclassname">pygraph.utils.model_selection_precomputed.</code><code class="descname">compute_gram_matrices</code><span class="sig-paren">(</span><em>dataset</em>, <em>y</em>, <em>estimator</em>, <em>param_list_precomputed</em>, <em>results_dir</em>, <em>ds_name</em>, <em>n_jobs=1</em>, <em>str_fw=''</em>, <em>verbose=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/model_selection_precomputed.html#compute_gram_matrices"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.model_selection_precomputed.compute_gram_matrices" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.model_selection_precomputed.model_selection_for_precomputed_kernel">
<code class="descclassname">pygraph.utils.model_selection_precomputed.</code><code class="descname">model_selection_for_precomputed_kernel</code><span class="sig-paren">(</span><em>datafile</em>, <em>estimator</em>, <em>param_grid_precomputed</em>, <em>param_grid</em>, <em>model_type</em>, <em>NUM_TRIALS=30</em>, <em>datafile_y=None</em>, <em>extra_params=None</em>, <em>ds_name='ds-unknown'</em>, <em>n_jobs=1</em>, <em>read_gm_from_file=False</em>, <em>verbose=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/model_selection_precomputed.html#model_selection_for_precomputed_kernel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.model_selection_precomputed.model_selection_for_precomputed_kernel" title="Permalink to this definition">¶</a></dt>
<dd><p>Perform model selection, fitting and testing for precomputed kernels
using nested CV. Print out neccessary data during the process then finally
the results.</p>
<dl class="docutils">
<dt>datafile <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>Path of dataset file.</dd>
<dt>estimator <span class="classifier-delimiter">:</span> <span class="classifier">function</span></dt>
<dd>kernel function used to estimate. This function needs to return a gram matrix.</dd>
<dt>param_grid_precomputed <span class="classifier-delimiter">:</span> <span class="classifier">dictionary</span></dt>
<dd>Dictionary with names (string) of parameters used to calculate gram
matrices as keys and lists of parameter settings to try as values. This
enables searching over any sequence of parameter settings. Params with
length 1 will be omitted.</dd>
<dt>param_grid <span class="classifier-delimiter">:</span> <span class="classifier">dictionary</span></dt>
<dd>Dictionary with names (string) of parameters used as penelties as keys
and lists of parameter settings to try as values. This enables
searching over any sequence of parameter settings. Params with length 1
will be omitted.</dd>
<dt>model_type <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>Type of the problem, can be ‘regression’ or ‘classification’.</dd>
<dt>NUM_TRIALS <span class="classifier-delimiter">:</span> <span class="classifier">integer</span></dt>
<dd>Number of random trials of outer cv loop. The default is 30.</dd>
<dt>datafile_y <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>Path of file storing y data. This parameter is optional depending on
the given dataset file.</dd>
<dt>extra_params <span class="classifier-delimiter">:</span> <span class="classifier">dict</span></dt>
<dd>Extra parameters for loading dataset. See function pygraph.utils.
graphfiles.loadDataset for detail.</dd>
<dt>ds_name <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>Name of the dataset.</dd>
<dt>n_jobs <span class="classifier-delimiter">:</span> <span class="classifier">int</span></dt>
<dd>Number of jobs for parallelization.</dd>
<dt>read_gm_from_file <span class="classifier-delimiter">:</span> <span class="classifier">boolean</span></dt>
<dd>Whether gram matrices are loaded from a file.</dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>&gt;&gt;&gt; import numpy as np
&gt;&gt;&gt; import sys
&gt;&gt;&gt; sys.path.insert(0, &quot;../&quot;)
&gt;&gt;&gt; from pygraph.utils.model_selection_precomputed import model_selection_for_precomputed_kernel
&gt;&gt;&gt; from pygraph.kernels.untilHPathKernel import untilhpathkernel
&gt;&gt;&gt;
&gt;&gt;&gt; datafile = &#39;../datasets/MUTAG/MUTAG_A.txt&#39;
&gt;&gt;&gt; estimator = untilhpathkernel
&gt;&gt;&gt; param_grid_precomputed = {’depth’: np.linspace(1, 10, 10), ’k_func’:
[’MinMax’, ’tanimoto’], ’compute_method’: [’trie’]}
&gt;&gt;&gt; # ’C’ for classification problems and ’alpha’ for regression problems.
&gt;&gt;&gt; param_grid = [{’C’: np.logspace(-10, 10, num=41, base=10)}, {’alpha’:
np.logspace(-10, 10, num=41, base=10)}]
&gt;&gt;&gt;
&gt;&gt;&gt; model_selection_for_precomputed_kernel(datafile, estimator,
param_grid_precomputed, param_grid[0], &#39;classification&#39;, ds_name=’MUTAG’)
</pre></div>
</div>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.model_selection_precomputed.parallel_trial_do">
<code class="descclassname">pygraph.utils.model_selection_precomputed.</code><code class="descname">parallel_trial_do</code><span class="sig-paren">(</span><em>param_list_pre_revised</em>, <em>param_list</em>, <em>y</em>, <em>model_type</em>, <em>trial</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/model_selection_precomputed.html#parallel_trial_do"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.model_selection_precomputed.parallel_trial_do" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.model_selection_precomputed.printResultsInTable">
<code class="descclassname">pygraph.utils.model_selection_precomputed.</code><code class="descname">printResultsInTable</code><span class="sig-paren">(</span><em>param_list</em>, <em>param_list_pre_revised</em>, <em>average_val_scores</em>, <em>std_val_scores</em>, <em>average_perf_scores</em>, <em>std_perf_scores</em>, <em>average_train_scores</em>, <em>std_train_scores</em>, <em>gram_matrix_time</em>, <em>model_type</em>, <em>verbose</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/model_selection_precomputed.html#printResultsInTable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.model_selection_precomputed.printResultsInTable" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.model_selection_precomputed.read_gram_matrices_from_file">
<code class="descclassname">pygraph.utils.model_selection_precomputed.</code><code class="descname">read_gram_matrices_from_file</code><span class="sig-paren">(</span><em>results_dir</em>, <em>ds_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/model_selection_precomputed.html#read_gram_matrices_from_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.model_selection_precomputed.read_gram_matrices_from_file" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.model_selection_precomputed.trial_do">
<code class="descclassname">pygraph.utils.model_selection_precomputed.</code><code class="descname">trial_do</code><span class="sig-paren">(</span><em>param_list_pre_revised</em>, <em>param_list</em>, <em>gram_matrices</em>, <em>y</em>, <em>model_type</em>, <em>trial</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/model_selection_precomputed.html#trial_do"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.model_selection_precomputed.trial_do" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

</div>
<div class="section" id="module-pygraph.utils.parallel">
<span id="pygraph-utils-parallel-module"></span><h2>pygraph.utils.parallel module<a class="headerlink" href="#module-pygraph.utils.parallel" title="Permalink to this headline">¶</a></h2>
<p>Created on Tue Dec 11 11:39:46 2018
Parallel aid functions.
&#64;author: ljia</p>
<dl class="function">
<dt id="pygraph.utils.parallel.parallel_gm">
<code class="descclassname">pygraph.utils.parallel.</code><code class="descname">parallel_gm</code><span class="sig-paren">(</span><em>func</em>, <em>Kmatrix</em>, <em>Gn</em>, <em>init_worker=None</em>, <em>glbv=None</em>, <em>method='imap_unordered'</em>, <em>n_jobs=None</em>, <em>chunksize=None</em>, <em>verbose=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/parallel.html#parallel_gm"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.parallel.parallel_gm" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.parallel.parallel_me">
<code class="descclassname">pygraph.utils.parallel.</code><code class="descname">parallel_me</code><span class="sig-paren">(</span><em>func</em>, <em>func_assign</em>, <em>var_to_assign</em>, <em>itr</em>, <em>len_itr=None</em>, <em>init_worker=None</em>, <em>glbv=None</em>, <em>method=None</em>, <em>n_jobs=None</em>, <em>chunksize=None</em>, <em>itr_desc=''</em>, <em>verbose=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/parallel.html#parallel_me"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.parallel.parallel_me" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

</div>
<div class="section" id="module-pygraph.utils.trie">
<span id="pygraph-utils-trie-module"></span><h2>pygraph.utils.trie module<a class="headerlink" href="#module-pygraph.utils.trie" title="Permalink to this headline">¶</a></h2>
<p>Created on Wed Jan 30 10:48:49 2019</p>
<p>Trie (prefix tree)
&#64;author: ljia
&#64;references:</p>
<blockquote>
<div><a class="reference external" href="https://viblo.asia/p/nlp-build-a-trie-data-structure-from-scratch-with-python-3P0lPzroKox">https://viblo.asia/p/nlp-build-a-trie-data-structure-from-scratch-with-python-3P0lPzroKox</a>, 2019.1</div></blockquote>
<dl class="class">
<dt id="pygraph.utils.trie.Trie">
<em class="property">class </em><code class="descclassname">pygraph.utils.trie.</code><code class="descname">Trie</code><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="method">
<dt id="pygraph.utils.trie.Trie.deleteWord">
<code class="descname">deleteWord</code><span class="sig-paren">(</span><em>word</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.deleteWord"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.deleteWord" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.getNode">
<code class="descname">getNode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.getNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.getNode" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.insertWord">
<code class="descname">insertWord</code><span class="sig-paren">(</span><em>word</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.insertWord"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.insertWord" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.load_from_json">
<code class="descname">load_from_json</code><span class="sig-paren">(</span><em>file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.load_from_json"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.load_from_json" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.load_from_pickle">
<code class="descname">load_from_pickle</code><span class="sig-paren">(</span><em>file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.load_from_pickle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.load_from_pickle" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.save_to_json">
<code class="descname">save_to_json</code><span class="sig-paren">(</span><em>file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.save_to_json"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.save_to_json" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.save_to_pickle">
<code class="descname">save_to_pickle</code><span class="sig-paren">(</span><em>file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.save_to_pickle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.save_to_pickle" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.searchWord">
<code class="descname">searchWord</code><span class="sig-paren">(</span><em>word</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.searchWord"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.searchWord" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.searchWordPrefix">
<code class="descname">searchWordPrefix</code><span class="sig-paren">(</span><em>word</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.searchWordPrefix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.searchWordPrefix" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="method">
<dt id="pygraph.utils.trie.Trie.to_json">
<code class="descname">to_json</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/trie.html#Trie.to_json"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.trie.Trie.to_json" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

</dd></dl>

</div>
<div class="section" id="module-pygraph.utils.utils">
<span id="pygraph-utils-utils-module"></span><h2>pygraph.utils.utils module<a class="headerlink" href="#module-pygraph.utils.utils" title="Permalink to this headline">¶</a></h2>
<dl class="function">
<dt id="pygraph.utils.utils.direct_product">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">direct_product</code><span class="sig-paren">(</span><em>G1</em>, <em>G2</em>, <em>node_label</em>, <em>edge_label</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#direct_product"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.direct_product" title="Permalink to this definition">¶</a></dt>
<dd><p>Return the direct/tensor product of directed graphs G1 and G2.</p>
<dl class="docutils">
<dt>G1, G2 <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The original graphs.</dd>
<dt>node_label <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>node attribute used as label. The default node label is ‘atom’.</dd>
<dt>edge_label <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>edge attribute used as label. The default edge label is ‘bond_type’.</dd>
</dl>
<dl class="docutils">
<dt>gt <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The direct product graph of G1 and G2.</dd>
</dl>
<p>This method differs from networkx.tensor_product in that this method only adds nodes and edges in G1 and G2 that have the same labels to the direct product graph.</p>
<p>[1] Thomas Gärtner, Peter Flach, and Stefan Wrobel. On graph kernels: Hardness results and efficient alternatives. Learning Theory and Kernel Machines, pages 129–143, 2003.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.floydTransformation">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">floydTransformation</code><span class="sig-paren">(</span><em>G</em>, <em>edge_weight=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#floydTransformation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.floydTransformation" title="Permalink to this definition">¶</a></dt>
<dd><p>Transform graph G to its corresponding shortest-paths graph using Floyd-transformation.</p>
<dl class="docutils">
<dt>G <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The graph to be tramsformed.</dd>
<dt>edge_weight <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>edge attribute corresponding to the edge weight. The default edge weight is bond_type.</dd>
</dl>
<dl class="docutils">
<dt>S <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The shortest-paths graph corresponding to G.</dd>
</dl>
<p>[1] Borgwardt KM, Kriegel HP. Shortest-path kernels on graphs. InData Mining, Fifth IEEE International Conference on 2005 Nov 27 (pp. 8-pp). IEEE.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.getSPGraph">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">getSPGraph</code><span class="sig-paren">(</span><em>G</em>, <em>edge_weight=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#getSPGraph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.getSPGraph" title="Permalink to this definition">¶</a></dt>
<dd><p>Transform graph G to its corresponding shortest-paths graph.</p>
<dl class="docutils">
<dt>G <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The graph to be tramsformed.</dd>
<dt>edge_weight <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>edge attribute corresponding to the edge weight.</dd>
</dl>
<dl class="docutils">
<dt>S <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The shortest-paths graph corresponding to G.</dd>
</dl>
<p>For an input graph G, its corresponding shortest-paths graph S contains the same set of nodes as G, while there exists an edge between all nodes in S which are connected by a walk in G. Every edge in S between two nodes is labeled by the shortest distance between these two nodes.</p>
<p>[1] Borgwardt KM, Kriegel HP. Shortest-path kernels on graphs. InData Mining, Fifth IEEE International Conference on 2005 Nov 27 (pp. 8-pp). IEEE.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.getSPLengths">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">getSPLengths</code><span class="sig-paren">(</span><em>G1</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#getSPLengths"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.getSPLengths" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.get_edge_labels">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">get_edge_labels</code><span class="sig-paren">(</span><em>Gn</em>, <em>edge_label</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#get_edge_labels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.get_edge_labels" title="Permalink to this definition">¶</a></dt>
<dd><p>Get edge labels of dataset Gn.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.get_node_labels">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">get_node_labels</code><span class="sig-paren">(</span><em>Gn</em>, <em>node_label</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#get_node_labels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.get_node_labels" title="Permalink to this definition">¶</a></dt>
<dd><p>Get node labels of dataset Gn.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.graph_deepcopy">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">graph_deepcopy</code><span class="sig-paren">(</span><em>G</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#graph_deepcopy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.graph_deepcopy" title="Permalink to this definition">¶</a></dt>
<dd><p>Deep copy a graph, including deep copy of all nodes, edges and
attributes of the graph, nodes and edges.</p>
<p>It is the same as the NetworkX function graph.copy(), as far as I know.</p>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.graph_isIdentical">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">graph_isIdentical</code><span class="sig-paren">(</span><em>G1</em>, <em>G2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#graph_isIdentical"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.graph_isIdentical" title="Permalink to this definition">¶</a></dt>
<dd><p>Check if two graphs are identical, including: same nodes, edges, node
labels/attributes, edge labels/attributes.</p>
<ol class="arabic simple">
<li>The type of graphs has to be the same.</li>
<li>Global/Graph attributes are neglected as they may contain names for graphs.</li>
</ol>
</dd></dl>

<dl class="function">
<dt id="pygraph.utils.utils.untotterTransformation">
<code class="descclassname">pygraph.utils.utils.</code><code class="descname">untotterTransformation</code><span class="sig-paren">(</span><em>G</em>, <em>node_label</em>, <em>edge_label</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pygraph/utils/utils.html#untotterTransformation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pygraph.utils.utils.untotterTransformation" title="Permalink to this definition">¶</a></dt>
<dd><p>Transform graph G according to Mahé et al.’s work to filter out tottering patterns of marginalized kernel and tree pattern kernel.</p>
<dl class="docutils">
<dt>G <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The graph to be tramsformed.</dd>
<dt>node_label <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>node attribute used as label. The default node label is ‘atom’.</dd>
<dt>edge_label <span class="classifier-delimiter">:</span> <span class="classifier">string</span></dt>
<dd>edge attribute used as label. The default edge label is ‘bond_type’.</dd>
</dl>
<dl class="docutils">
<dt>gt <span class="classifier-delimiter">:</span> <span class="classifier">NetworkX graph</span></dt>
<dd>The transformed graph corresponding to G.</dd>
</dl>
<p>[1] Pierre Mahé, Nobuhisa Ueda, Tatsuya Akutsu, Jean-Luc Perret, and Jean-Philippe Vert. Extensions of marginalized graph kernels. In Proceedings of the twenty-first international conference on Machine learning, page 70. ACM, 2004.</p>
</dd></dl>

</div>
<div class="section" id="module-pygraph.utils">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-pygraph.utils" title="Permalink to this headline">¶</a></h2>
<p>Pygraph - utils module</p>
<dl class="docutils">
<dt>Implement some methods to manage graphs</dt>
<dd>graphfiles.py : load .gxl and .ct files
utils.py : compute some properties on networkX graphs</dd>
</dl>
</div>
</div>


</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>


</body>
</html>

+ 0
- 208
docs/_build/html/search.html View File

@@ -1,208 +0,0 @@


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Search &mdash; py-graph documentation</title>


<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>


<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
</head>

<body class="wy-body-for-nav">

<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >

<a href="index.html" class="icon icon-home"> py-graph

</a>

<div class="version">
1.0
</div>

<div role="search">
<form id="rtd-search-form" class="wy-form" action="#" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>

</div>

<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">py-graph</a>
</nav>


<div class="wy-nav-content">
<div class="rst-content">















<div role="navigation" aria-label="breadcrumbs navigation">

<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>Search</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>

<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<noscript>
<div id="fallback" class="admonition warning">
<p class="last">
Please activate JavaScript to enable the search
functionality.
</p>
</div>
</noscript>

<div id="search-results">
</div>

</div>
</div>
<footer>

<hr/>

<div role="contentinfo">
<p>
&copy; Copyright 2020, Linlin Jia

</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>

</div>
</div>

</section>

</div>


<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>

<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script type="text/javascript" id="searchindexloader"></script>


</body>
</html>

+ 0
- 1
docs/_build/html/searchindex.js
File diff suppressed because it is too large
View File


+ 0
- 101
docs/_build/latex/LICRcyr2utf8.xdy View File

@@ -1,101 +0,0 @@
;; -*- coding: utf-8; mode: Lisp; -*-
;; style file for xindy
;; filename: LICRcyr2utf8.xdy
;; description: style file for xindy which maps back LaTeX Internal
;; Character Representation of Cyrillic to utf-8
;; usage: for use with pdflatex produced .idx files.
;; Contributed by the Sphinx team, July 2018.
(merge-rule "\IeC {\'\CYRG }" "Ѓ" :string)
(merge-rule "\IeC {\'\CYRK }" "Ќ" :string)
(merge-rule "\IeC {\'\cyrg }" "ѓ" :string)
(merge-rule "\IeC {\'\cyrk }" "ќ" :string)
(merge-rule "\IeC {\CYRA }" "А" :string)
(merge-rule "\IeC {\CYRB }" "Б" :string)
(merge-rule "\IeC {\CYRC }" "Ц" :string)
(merge-rule "\IeC {\CYRCH }" "Ч" :string)
(merge-rule "\IeC {\CYRD }" "Д" :string)
(merge-rule "\IeC {\CYRDJE }" "Ђ" :string)
(merge-rule "\IeC {\CYRDZE }" "Ѕ" :string)
(merge-rule "\IeC {\CYRDZHE }" "Џ" :string)
(merge-rule "\IeC {\CYRE }" "Е" :string)
(merge-rule "\IeC {\CYREREV }" "Э" :string)
(merge-rule "\IeC {\CYRERY }" "Ы" :string)
(merge-rule "\IeC {\CYRF }" "Ф" :string)
(merge-rule "\IeC {\CYRG }" "Г" :string)
(merge-rule "\IeC {\CYRGUP }" "Ґ" :string)
(merge-rule "\IeC {\CYRH }" "Х" :string)
(merge-rule "\IeC {\CYRHRDSN }" "Ъ" :string)
(merge-rule "\IeC {\CYRI }" "И" :string)
(merge-rule "\IeC {\CYRIE }" "Є" :string)
(merge-rule "\IeC {\CYRII }" "І" :string)
(merge-rule "\IeC {\CYRISHRT }" "Й" :string)
(merge-rule "\IeC {\CYRJE }" "Ј" :string)
(merge-rule "\IeC {\CYRK }" "К" :string)
(merge-rule "\IeC {\CYRL }" "Л" :string)
(merge-rule "\IeC {\CYRLJE }" "Љ" :string)
(merge-rule "\IeC {\CYRM }" "М" :string)
(merge-rule "\IeC {\CYRN }" "Н" :string)
(merge-rule "\IeC {\CYRNJE }" "Њ" :string)
(merge-rule "\IeC {\CYRO }" "О" :string)
(merge-rule "\IeC {\CYRP }" "П" :string)
(merge-rule "\IeC {\CYRR }" "Р" :string)
(merge-rule "\IeC {\CYRS }" "С" :string)
(merge-rule "\IeC {\CYRSFTSN }" "Ь" :string)
(merge-rule "\IeC {\CYRSH }" "Ш" :string)
(merge-rule "\IeC {\CYRSHCH }" "Щ" :string)
(merge-rule "\IeC {\CYRT }" "Т" :string)
(merge-rule "\IeC {\CYRTSHE }" "Ћ" :string)
(merge-rule "\IeC {\CYRU }" "У" :string)
(merge-rule "\IeC {\CYRUSHRT }" "Ў" :string)
(merge-rule "\IeC {\CYRV }" "В" :string)
(merge-rule "\IeC {\CYRYA }" "Я" :string)
(merge-rule "\IeC {\CYRYI }" "Ї" :string)
(merge-rule "\IeC {\CYRYO }" "Ё" :string)
(merge-rule "\IeC {\CYRYU }" "Ю" :string)
(merge-rule "\IeC {\CYRZ }" "З" :string)
(merge-rule "\IeC {\CYRZH }" "Ж" :string)
(merge-rule "\IeC {\cyra }" "а" :string)
(merge-rule "\IeC {\cyrb }" "б" :string)
(merge-rule "\IeC {\cyrc }" "ц" :string)
(merge-rule "\IeC {\cyrch }" "ч" :string)
(merge-rule "\IeC {\cyrd }" "д" :string)
(merge-rule "\IeC {\cyrdje }" "ђ" :string)
(merge-rule "\IeC {\cyrdze }" "ѕ" :string)
(merge-rule "\IeC {\cyrdzhe }" "џ" :string)
(merge-rule "\IeC {\cyre }" "е" :string)
(merge-rule "\IeC {\cyrerev }" "э" :string)
(merge-rule "\IeC {\cyrery }" "ы" :string)
(merge-rule "\IeC {\cyrf }" "ф" :string)
(merge-rule "\IeC {\cyrg }" "г" :string)
(merge-rule "\IeC {\cyrgup }" "ґ" :string)
(merge-rule "\IeC {\cyrh }" "х" :string)
(merge-rule "\IeC {\cyrhrdsn }" "ъ" :string)
(merge-rule "\IeC {\cyri }" "и" :string)
(merge-rule "\IeC {\cyrie }" "є" :string)
(merge-rule "\IeC {\cyrii }" "і" :string)
(merge-rule "\IeC {\cyrishrt }" "й" :string)
(merge-rule "\IeC {\cyrje }" "ј" :string)
(merge-rule "\IeC {\cyrk }" "к" :string)
(merge-rule "\IeC {\cyrl }" "л" :string)
(merge-rule "\IeC {\cyrlje }" "љ" :string)
(merge-rule "\IeC {\cyrm }" "м" :string)
(merge-rule "\IeC {\cyrn }" "н" :string)
(merge-rule "\IeC {\cyrnje }" "њ" :string)
(merge-rule "\IeC {\cyro }" "о" :string)
(merge-rule "\IeC {\cyrp }" "п" :string)
(merge-rule "\IeC {\cyrr }" "р" :string)
(merge-rule "\IeC {\cyrs }" "с" :string)
(merge-rule "\IeC {\cyrsftsn }" "ь" :string)
(merge-rule "\IeC {\cyrsh }" "ш" :string)
(merge-rule "\IeC {\cyrshch }" "щ" :string)
(merge-rule "\IeC {\cyrt }" "т" :string)
(merge-rule "\IeC {\cyrtshe }" "ћ" :string)
(merge-rule "\IeC {\cyru }" "у" :string)
(merge-rule "\IeC {\cyrushrt }" "ў" :string)
(merge-rule "\IeC {\cyrv }" "в" :string)
(merge-rule "\IeC {\cyrya }" "я" :string)
(merge-rule "\IeC {\cyryi }" "ї" :string)
(merge-rule "\IeC {\cyryo }" "ё" :string)
(merge-rule "\IeC {\cyryu }" "ю" :string)
(merge-rule "\IeC {\cyrz }" "з" :string)
(merge-rule "\IeC {\cyrzh }" "ж" :string)

+ 0
- 236
docs/_build/latex/LICRlatin2utf8.xdy View File

@@ -1,236 +0,0 @@
;; style file for xindy
;; filename: LICRlatin2utf8.xdy
;; description: style file for xindy which maps back LaTeX Internal
;; Character Representation of letters (as arising in .idx index
;; file) to UTF-8 encoding for correct sorting by xindy.
;; usage: for use with the pdflatex engine,
;; *not* for use with xelatex or lualatex.
;;
;; This is based upon xindy's distributed file tex/inputenc/utf8.xdy.
;; The modifications include:
;;
;; - Updates for compatibility with current LaTeX macro encoding.
;;
;; - Systematic usage of the \IeC {...} mark-up, because mark-up in
;; tex/inputenc/utf8.xdy was using it on seemingly random basis, and
;; Sphinx coercing of xindy usability for both Latin and Cyrillic scripts
;; with pdflatex requires its systematic presence here.
;;
;; - Support for some extra letters: Ÿ, Ŋ, ŋ, Œ, œ, IJ, ij, ȷ and ẞ.
;;
;; Indeed Sphinx needs to support for pdflatex engine all Unicode letters
;; available in TeX T1 font encoding. The above letters are found in
;; that encoding but not in the Latin1, 2, 3 charsets which are those
;; covered by original tex/inputenc/utf8.xdy.
;;
;; - There is a problem that ȷ is not supported out-of-the box by LaTeX
;; with inputenc, one must add explicitely
;; \DeclareUnicodeCharacter{0237}{\j}
;; to preamble of LaTeX document. However this character is not supported
;; by the TeX "times" font used by default by Sphinx for pdflatex engine.
;;
;; - ẞ needs \DeclareUnicodeCharacter{1E9E}{\SS} (but ß needs no extra set-up).
;;
;; - U+02DB (˛) and U+02D9 (˙) are also not supported by inputenc
;; out of the box and require
;; \DeclareUnicodeCharacter{02DB}{\k{}}
;; \DeclareUnicodeCharacter{02D9}{\.{}}
;; to be added to preamble.
;;
;; - U+0127 ħ and U+0126 Ħ are absent from TeX T1+TS1 font encodings.
;;
;; - Characters Ŋ and ŋ are not supported by TeX font "times" used by
;; default by Sphinx for pdflatex engine but they are supported by
;; some TeX fonts, in particular by the default LaTeX font for T1
;; encoding.
;;
;; - " and ~ must be escaped as ~" and resp. ~~ in xindy merge rules.
;;
;; Contributed by the Sphinx team, July 2018.
;;
;; See sphinx.xdy for superior figures, as they are escaped by LaTeX writer.
(merge-rule "\IeC {\textonesuperior }" "¹" :string)
(merge-rule "\IeC {\texttwosuperior }" "²" :string)
(merge-rule "\IeC {\textthreesuperior }" "³" :string)
(merge-rule "\IeC {\'a}" "á" :string)
(merge-rule "\IeC {\'A}" "Á" :string)
(merge-rule "\IeC {\`a}" "à" :string)
(merge-rule "\IeC {\`A}" "À" :string)
(merge-rule "\IeC {\^a}" "â" :string)
(merge-rule "\IeC {\^A}" "Â" :string)
(merge-rule "\IeC {\~"a}" "ä" :string)
(merge-rule "\IeC {\~"A}" "Ä" :string)
(merge-rule "\IeC {\~~a}" "ã" :string)
(merge-rule "\IeC {\~~A}" "Ã" :string)
(merge-rule "\IeC {\c c}" "ç" :string)
(merge-rule "\IeC {\c C}" "Ç" :string)
(merge-rule "\IeC {\'c}" "ć" :string)
(merge-rule "\IeC {\'C}" "Ć" :string)
(merge-rule "\IeC {\^c}" "ĉ" :string)
(merge-rule "\IeC {\^C}" "Ĉ" :string)
(merge-rule "\IeC {\.c}" "ċ" :string)
(merge-rule "\IeC {\.C}" "Ċ" :string)
(merge-rule "\IeC {\c s}" "ş" :string)
(merge-rule "\IeC {\c S}" "Ş" :string)
(merge-rule "\IeC {\c t}" "ţ" :string)
(merge-rule "\IeC {\c T}" "Ţ" :string)
(merge-rule "\IeC {\-}" "­" :string); soft hyphen
(merge-rule "\IeC {\textdiv }" "÷" :string)
(merge-rule "\IeC {\'e}" "é" :string)
(merge-rule "\IeC {\'E}" "É" :string)
(merge-rule "\IeC {\`e}" "è" :string)
(merge-rule "\IeC {\`E}" "È" :string)
(merge-rule "\IeC {\^e}" "ê" :string)
(merge-rule "\IeC {\^E}" "Ê" :string)
(merge-rule "\IeC {\~"e}" "ë" :string)
(merge-rule "\IeC {\~"E}" "Ë" :string)
(merge-rule "\IeC {\^g}" "ĝ" :string)
(merge-rule "\IeC {\^G}" "Ĝ" :string)
(merge-rule "\IeC {\.g}" "ġ" :string)
(merge-rule "\IeC {\.G}" "Ġ" :string)
(merge-rule "\IeC {\^h}" "ĥ" :string)
(merge-rule "\IeC {\^H}" "Ĥ" :string)
(merge-rule "\IeC {\H o}" "ő" :string)
(merge-rule "\IeC {\H O}" "Ő" :string)
(merge-rule "\IeC {\textacutedbl }" "˝" :string)
(merge-rule "\IeC {\H u}" "ű" :string)
(merge-rule "\IeC {\H U}" "Ű" :string)
(merge-rule "\IeC {\ae }" "æ" :string)
(merge-rule "\IeC {\AE }" "Æ" :string)
(merge-rule "\IeC {\textcopyright }" "©" :string)
(merge-rule "\IeC {\c \ }" "¸" :string)
(merge-rule "\IeC {\dh }" "ð" :string)
(merge-rule "\IeC {\DH }" "Ð" :string)
(merge-rule "\IeC {\dj }" "đ" :string)
(merge-rule "\IeC {\DJ }" "Đ" :string)
(merge-rule "\IeC {\guillemotleft }" "«" :string)
(merge-rule "\IeC {\guillemotright }" "»" :string)
(merge-rule "\IeC {\'\i }" "í" :string)
(merge-rule "\IeC {\`\i }" "ì" :string)
(merge-rule "\IeC {\^\i }" "î" :string)
(merge-rule "\IeC {\~"\i }" "ï" :string)
(merge-rule "\IeC {\i }" "ı" :string)
(merge-rule "\IeC {\^\j }" "ĵ" :string)
(merge-rule "\IeC {\k {}}" "˛" :string)
(merge-rule "\IeC {\l }" "ł" :string)
(merge-rule "\IeC {\L }" "Ł" :string)
(merge-rule "\IeC {\nobreakspace }" " " :string)
(merge-rule "\IeC {\o }" "ø" :string)
(merge-rule "\IeC {\O }" "Ø" :string)
(merge-rule "\IeC {\textsterling }" "£" :string)
(merge-rule "\IeC {\textparagraph }" "¶" :string)
(merge-rule "\IeC {\ss }" "ß" :string)
(merge-rule "\IeC {\textsection }" "§" :string)
(merge-rule "\IeC {\textbrokenbar }" "¦" :string)
(merge-rule "\IeC {\textcent }" "¢" :string)
(merge-rule "\IeC {\textcurrency }" "¤" :string)
(merge-rule "\IeC {\textdegree }" "°" :string)
(merge-rule "\IeC {\textexclamdown }" "¡" :string)
(merge-rule "\IeC {\texthbar }" "ħ" :string)
(merge-rule "\IeC {\textHbar }" "Ħ" :string)
(merge-rule "\IeC {\textonehalf }" "½" :string)
(merge-rule "\IeC {\textonequarter }" "¼" :string)
(merge-rule "\IeC {\textordfeminine }" "ª" :string)
(merge-rule "\IeC {\textordmasculine }" "º" :string)
(merge-rule "\IeC {\textperiodcentered }" "·" :string)
(merge-rule "\IeC {\textquestiondown }" "¿" :string)
(merge-rule "\IeC {\textregistered }" "®" :string)
(merge-rule "\IeC {\textthreequarters }" "¾" :string)
(merge-rule "\IeC {\textyen }" "¥" :string)
(merge-rule "\IeC {\th }" "þ" :string)
(merge-rule "\IeC {\TH }" "Þ" :string)
(merge-rule "\IeC {\'I}" "Í" :string)
(merge-rule "\IeC {\`I}" "Ì" :string)
(merge-rule "\IeC {\^I}" "Î" :string)
(merge-rule "\IeC {\~"I}" "Ï" :string)
(merge-rule "\IeC {\.I}" "İ" :string)
(merge-rule "\IeC {\^J}" "Ĵ" :string)
(merge-rule "\IeC {\k a}" "ą" :string)
(merge-rule "\IeC {\k A}" "Ą" :string)
(merge-rule "\IeC {\k e}" "ę" :string)
(merge-rule "\IeC {\k E}" "Ę" :string)
(merge-rule "\IeC {\'l}" "ĺ" :string)
(merge-rule "\IeC {\'L}" "Ĺ" :string)
(merge-rule "\IeC {\textlnot }" "¬" :string)
(merge-rule "\IeC {\textmu }" "µ" :string)
(merge-rule "\IeC {\'n}" "ń" :string)
(merge-rule "\IeC {\'N}" "Ń" :string)
(merge-rule "\IeC {\~~n}" "ñ" :string)
(merge-rule "\IeC {\~~N}" "Ñ" :string)
(merge-rule "\IeC {\'o}" "ó" :string)
(merge-rule "\IeC {\'O}" "Ó" :string)
(merge-rule "\IeC {\`o}" "ò" :string)
(merge-rule "\IeC {\`O}" "Ò" :string)
(merge-rule "\IeC {\^o}" "ô" :string)
(merge-rule "\IeC {\^O}" "Ô" :string)
(merge-rule "\IeC {\~"o}" "ö" :string)
(merge-rule "\IeC {\~"O}" "Ö" :string)
(merge-rule "\IeC {\~~o}" "õ" :string)
(merge-rule "\IeC {\~~O}" "Õ" :string)
(merge-rule "\IeC {\textpm }" "±" :string)
(merge-rule "\IeC {\r a}" "å" :string)
(merge-rule "\IeC {\r A}" "Å" :string)
(merge-rule "\IeC {\'r}" "ŕ" :string)
(merge-rule "\IeC {\'R}" "Ŕ" :string)
(merge-rule "\IeC {\r u}" "ů" :string)
(merge-rule "\IeC {\r U}" "Ů" :string)
(merge-rule "\IeC {\'s}" "ś" :string)
(merge-rule "\IeC {\'S}" "Ś" :string)
(merge-rule "\IeC {\^s}" "ŝ" :string)
(merge-rule "\IeC {\^S}" "Ŝ" :string)
(merge-rule "\IeC {\textasciidieresis }" "¨" :string)
(merge-rule "\IeC {\textasciimacron }" "¯" :string)
(merge-rule "\IeC {\.{}}" "˙" :string)
(merge-rule "\IeC {\textasciiacute }" "´" :string)
(merge-rule "\IeC {\texttimes }" "×" :string)
(merge-rule "\IeC {\u a}" "ă" :string)
(merge-rule "\IeC {\u A}" "Ă" :string)
(merge-rule "\IeC {\u g}" "ğ" :string)
(merge-rule "\IeC {\u G}" "Ğ" :string)
(merge-rule "\IeC {\textasciibreve }" "˘" :string)
(merge-rule "\IeC {\'u}" "ú" :string)
(merge-rule "\IeC {\'U}" "Ú" :string)
(merge-rule "\IeC {\`u}" "ù" :string)
(merge-rule "\IeC {\`U}" "Ù" :string)
(merge-rule "\IeC {\^u}" "û" :string)
(merge-rule "\IeC {\^U}" "Û" :string)
(merge-rule "\IeC {\~"u}" "ü" :string)
(merge-rule "\IeC {\~"U}" "Ü" :string)
(merge-rule "\IeC {\u u}" "ŭ" :string)
(merge-rule "\IeC {\u U}" "Ŭ" :string)
(merge-rule "\IeC {\v c}" "č" :string)
(merge-rule "\IeC {\v C}" "Č" :string)
(merge-rule "\IeC {\v d}" "ď" :string)
(merge-rule "\IeC {\v D}" "Ď" :string)
(merge-rule "\IeC {\v e}" "ě" :string)
(merge-rule "\IeC {\v E}" "Ě" :string)
(merge-rule "\IeC {\v l}" "ľ" :string)
(merge-rule "\IeC {\v L}" "Ľ" :string)
(merge-rule "\IeC {\v n}" "ň" :string)
(merge-rule "\IeC {\v N}" "Ň" :string)
(merge-rule "\IeC {\v r}" "ř" :string)
(merge-rule "\IeC {\v R}" "Ř" :string)
(merge-rule "\IeC {\v s}" "š" :string)
(merge-rule "\IeC {\v S}" "Š" :string)
(merge-rule "\IeC {\textasciicaron }" "ˇ" :string)
(merge-rule "\IeC {\v t}" "ť" :string)
(merge-rule "\IeC {\v T}" "Ť" :string)
(merge-rule "\IeC {\v z}" "ž" :string)
(merge-rule "\IeC {\v Z}" "Ž" :string)
(merge-rule "\IeC {\'y}" "ý" :string)
(merge-rule "\IeC {\'Y}" "Ý" :string)
(merge-rule "\IeC {\~"y}" "ÿ" :string)
(merge-rule "\IeC {\'z}" "ź" :string)
(merge-rule "\IeC {\'Z}" "Ź" :string)
(merge-rule "\IeC {\.z}" "ż" :string)
(merge-rule "\IeC {\.Z}" "Ż" :string)
;; letters not in Latin1, 2, 3 but available in TeX T1 font encoding
(merge-rule "\IeC {\~"Y}" "Ÿ" :string)
(merge-rule "\IeC {\NG }" "Ŋ" :string)
(merge-rule "\IeC {\ng }" "ŋ" :string)
(merge-rule "\IeC {\OE }" "Œ" :string)
(merge-rule "\IeC {\oe }" "œ" :string)
(merge-rule "\IeC {\IJ }" "IJ" :string)
(merge-rule "\IeC {\ij }" "ij" :string)
(merge-rule "\IeC {\j }" "ȷ" :string)
(merge-rule "\IeC {\SS }" "ẞ" :string)

+ 0
- 607
docs/_build/latex/LatinRules.xdy View File

@@ -1,607 +0,0 @@
;; style file for xindy
;; filename: LatinRules.xdy
;;
;; It is based upon xindy's files lang/general/utf8.xdy and
;; lang/general/utf8-lang.xdy which implement
;; "a general sorting order for Western European languages"
;;
;; The aim for Sphinx is to be able to index in a Cyrillic document
;; also terms using the Latin alphabets, inclusive of letters
;; with diacritics. To this effect the xindy rules from lang/general
;; got manually re-coded to avoid collisions with the encoding
;; done by xindy for sorting words in Cyrillic languages, which was
;; observed not to use bytes with octal encoding 0o266 or higher.
;;
;; So here we use only 0o266 or higher bytes.
;; (Ŋ, ŋ, IJ, and ij are absent from
;; lang/general/utf8.xdy and not included here)
;; Contributed by the Sphinx team, 2018.

(define-letter-group "A" :prefixes ("¶"))
(define-letter-group "B" :after "A" :prefixes ("·"))
(define-letter-group "C" :after "B" :prefixes ("¸"))
(define-letter-group "D" :after "C" :prefixes ("¹"))
(define-letter-group "E" :after "D" :prefixes ("º"))
(define-letter-group "F" :after "E" :prefixes ("»"))
(define-letter-group "G" :after "F" :prefixes ("¼"))
(define-letter-group "H" :after "G" :prefixes ("½"))
(define-letter-group "I" :after "H" :prefixes ("¾"))
(define-letter-group "J" :after "I" :prefixes ("¿"))
(define-letter-group "K" :after "J" :prefixes ("À"))
(define-letter-group "L" :after "K" :prefixes ("Á"))
(define-letter-group "M" :after "L" :prefixes ("Â"))
(define-letter-group "N" :after "M" :prefixes ("Ã"))
(define-letter-group "O" :after "N" :prefixes ("Ä"))
(define-letter-group "P" :after "O" :prefixes ("È"))
(define-letter-group "Q" :after "P" :prefixes ("Ê"))
(define-letter-group "R" :after "Q" :prefixes ("Ë"))
(define-letter-group "S" :after "R" :prefixes ("Ð"))
(define-letter-group "T" :after "S" :prefixes ("Ú"))
(define-letter-group "U" :after "T" :prefixes ("à"))
(define-letter-group "V" :after "U" :prefixes ("å"))
(define-letter-group "W" :after "V" :prefixes ("æ"))
(define-letter-group "X" :after "W" :prefixes ("ë"))
(define-letter-group "Y" :after "X" :prefixes ("í"))
(define-letter-group "Z" :after "Y" :prefixes ("ð"))

(define-rule-set "sphinx-xy-alphabetize"

:rules (("À" "¶" :string)
("Ä‚" "¶" :string)
("â" "¶" :string)
("Ä" "¶" :string)
("à" "¶" :string)
("Ã…" "¶" :string)
("Ã" "¶" :string)
("Ã�" "¶" :string)
("á" "¶" :string)
("ã" "¶" :string)
("Â" "¶" :string)
("ă" "¶" :string)
("Ã¥" "¶" :string)
("Ä…" "¶" :string)
("ä" "¶" :string)
("Ä„" "¶" :string)
("æ" "¶º" :string)
("Æ" "¶º" :string)
("ć" "¸" :string)
("ĉ" "¸" :string)
("ç" "¸" :string)
("ÄŒ" "¸" :string)
("Ä�" "¸" :string)
("Ĉ" "¸" :string)
("Ç" "¸" :string)
("Ć" "¸" :string)
("Ä�" "¹" :string)
("Ä�" "¹" :string)
("ÄŽ" "¹" :string)
("Ä‘" "¹" :string)
("ê" "º" :string)
("Ę" "º" :string)
("Äš" "º" :string)
("ë" "º" :string)
("Ä›" "º" :string)
("é" "º" :string)
("È" "º" :string)
("Ë" "º" :string)
("É" "º" :string)
("è" "º" :string)
("Ê" "º" :string)
("Ä™" "º" :string)
("Ä�" "¼" :string)
("ÄŸ" "¼" :string)
("Äž" "¼" :string)
("Äœ" "¼" :string)
("Ä¥" "½" :string)
("Ĥ" "½" :string)
("Ã�" "¾" :string)
("Ã�" "¾" :string)
("ï" "¾" :string)
("ÃŽ" "¾" :string)
("î" "¾" :string)
("ı" "¾" :string)
("İ" "¾" :string)
("í" "¾" :string)
("ÃŒ" "¾" :string)
("ì" "¾" :string)
("Ä´" "¿" :string)
("ĵ" "¿" :string)
("Å‚" "Á" :string)
("Å�" "Á" :string)
("ľ" "Á" :string)
("Ľ" "Á" :string)
("Å„" "Ã" :string)
("Ń" "Ã" :string)
("ñ" "Ã" :string)
("ň" "Ã" :string)
("Ñ" "Ã" :string)
("Ň" "Ã" :string)
("Õ" "Ä" :string)
("Å�" "Ä" :string)
("ó" "Ä" :string)
("ö" "Ä" :string)
("ô" "Ä" :string)
("Å‘" "Ä" :string)
("Ø" "Ä" :string)
("Ö" "Ä" :string)
("õ" "Ä" :string)
("Ô" "Ä" :string)
("ø" "Ä" :string)
("Ó" "Ä" :string)
("Ã’" "Ä" :string)
("ò" "Ä" :string)
("œ" "ĺ" :string)
("Œ" "ĺ" :string)
("Ř" "Ë" :string)
("Å™" "Ë" :string)
("Å”" "Ë" :string)
("Å•" "Ë" :string)
("Å�" "Ð" :string)
("Åš" "Ð" :string)
("È™" "Ð" :string)
("ÅŸ" "Ð" :string)
("Åœ" "Ð" :string)
("Å›" "Ð" :string)
("Ș" "Ð" :string)
("Å¡" "Ð" :string)
("Åž" "Ð" :string)
("Å " "Ð" :string)
("ß" "ÐÐ" :string)
("Èš" "Ú" :string)
("Ť" "Ú" :string)
("È›" "Ú" :string)
("Å¥" "Ú" :string)
("û" "à" :string)
("Å­" "à" :string)
("ů" "à" :string)
("ű" "à" :string)
("ù" "à" :string)
("Ŭ" "à" :string)
("Ù" "à" :string)
("Ű" "à" :string)
("Ü" "à" :string)
("Å®" "à" :string)
("ú" "à" :string)
("Ú" "à" :string)
("Û" "à" :string)
("ü" "à" :string)
("ÿ" "í" :string)
("Ã�" "í" :string)
("Ÿ" "í" :string)
("ý" "í" :string)
("Å»" "ð" :string)
("Ž" "ð" :string)
("Ź" "ð" :string)
("ž" "ð" :string)
("ż" "ð" :string)
("ź" "ð" :string)
("a" "¶" :string)
("A" "¶" :string)
("b" "·" :string)
("B" "·" :string)
("c" "¸" :string)
("C" "¸" :string)
("d" "¹" :string)
("D" "¹" :string)
("e" "º" :string)
("E" "º" :string)
("F" "»" :string)
("f" "»" :string)
("G" "¼" :string)
("g" "¼" :string)
("H" "½" :string)
("h" "½" :string)
("i" "¾" :string)
("I" "¾" :string)
("J" "¿" :string)
("j" "¿" :string)
("K" "À" :string)
("k" "À" :string)
("L" "Á" :string)
("l" "Á" :string)
("M" "Â" :string)
("m" "Â" :string)
("n" "Ã" :string)
("N" "Ã" :string)
("O" "Ä" :string)
("o" "Ä" :string)
("p" "È" :string)
("P" "È" :string)
("Q" "Ê" :string)
("q" "Ê" :string)
("r" "Ë" :string)
("R" "Ë" :string)
("S" "Ð" :string)
("s" "Ð" :string)
("t" "Ú" :string)
("T" "Ú" :string)
("u" "à" :string)
("U" "à" :string)
("v" "å" :string)
("V" "å" :string)
("W" "æ" :string)
("w" "æ" :string)
("x" "ë" :string)
("X" "ë" :string)
("Y" "í" :string)
("y" "í" :string)
("z" "ð" :string)
("Z" "ð" :string)
))

(define-rule-set "sphinx-xy-resolve-diacritics"

:rules (("Ĥ" "£" :string)
("ó" "£" :string)
("ľ" "£" :string)
("Ř" "£" :string)
("Ä�" "£" :string)
("Ä�" "£" :string)
("Äš" "£" :string)
("Ä¥" "£" :string)
("ÄŒ" "£" :string)
("Ä´" "£" :string)
("Ä›" "£" :string)
("ž" "£" :string)
("ÄŽ" "£" :string)
("Å™" "£" :string)
("Ž" "£" :string)
("ı" "£" :string)
("Ť" "£" :string)
("á" "£" :string)
("Ä�" "£" :string)
("Ã�" "£" :string)
("ň" "£" :string)
("Å " "£" :string)
("Ň" "£" :string)
("ĵ" "£" :string)
("Å¥" "£" :string)
("Ó" "£" :string)
("ý" "£" :string)
("Äœ" "£" :string)
("Ú" "£" :string)
("Ľ" "£" :string)
("Å¡" "£" :string)
("Ã�" "£" :string)
("ú" "£" :string)
("Åš" "¤" :string)
("ć" "¤" :string)
("Å�" "¤" :string)
("Å‚" "¤" :string)
("Å„" "¤" :string)
("À" "¤" :string)
("Ź" "¤" :string)
("à" "¤" :string)
("Ń" "¤" :string)
("Ä�" "¤" :string)
("ÿ" "¤" :string)
("Å›" "¤" :string)
("Äž" "¤" :string)
("ÄŸ" "¤" :string)
("Ù" "¤" :string)
("İ" "¤" :string)
("Ä‘" "¤" :string)
("ù" "¤" :string)
("Èš" "¤" :string)
("é" "¤" :string)
("Å•" "¤" :string)
("Ć" "¤" :string)
("È›" "¤" :string)
("ò" "¤" :string)
("ź" "¤" :string)
("Ã’" "¤" :string)
("Ÿ" "¤" :string)
("Å”" "¤" :string)
("É" "¤" :string)
("ĉ" "¥" :string)
("ô" "¥" :string)
("Ã�" "¥" :string)
("Å�" "¥" :string)
("Å»" "¥" :string)
("Ä‚" "¥" :string)
("Åœ" "¥" :string)
("ñ" "¥" :string)
("Å­" "¥" :string)
("í" "¥" :string)
("È" "¥" :string)
("Ô" "¥" :string)
("Ŭ" "¥" :string)
("ż" "¥" :string)
("Ñ" "¥" :string)
("è" "¥" :string)
("Ĉ" "¥" :string)
("ă" "¥" :string)
("â" "¦" :string)
("û" "¦" :string)
("ê" "¦" :string)
("Õ" "¦" :string)
("õ" "¦" :string)
("È™" "¦" :string)
("ç" "¦" :string)
("Â" "¦" :string)
("Ê" "¦" :string)
("Û" "¦" :string)
("Ç" "¦" :string)
("ì" "¦" :string)
("ÃŒ" "¦" :string)
("Ș" "¦" :string)
("ö" "§" :string)
("Ö" "§" :string)
("ÅŸ" "§" :string)
("ů" "§" :string)
("ë" "§" :string)
("ã" "§" :string)
("î" "§" :string)
("ÃŽ" "§" :string)
("Ã" "§" :string)
("Åž" "§" :string)
("Å®" "§" :string)
("Ë" "§" :string)
("ï" "¨" :string)
("Å�" "¨" :string)
("Ã�" "¨" :string)
("Ę" "¨" :string)
("Å‘" "¨" :string)
("Ü" "¨" :string)
("Ã…" "¨" :string)
("ü" "¨" :string)
("Ä™" "¨" :string)
("Ã¥" "¨" :string)
("Ä" "©" :string)
("ű" "©" :string)
("Ø" "©" :string)
("ø" "©" :string)
("Ű" "©" :string)
("ä" "©" :string)
("Ä„" "ª" :string)
("Ä…" "ª" :string)
("Å“" "ÿ" :string)
("ß" "ÿ" :string)
("Æ" "ÿ" :string)
("Å’" "ÿ" :string)
("æ" "ÿ" :string)
("e" "¢" :string)
("t" "¢" :string)
("L" "¢" :string)
("Y" "¢" :string)
("J" "¢" :string)
("a" "¢" :string)
("p" "¢" :string)
("u" "¢" :string)
("j" "¢" :string)
("b" "¢" :string)
("G" "¢" :string)
("U" "¢" :string)
("F" "¢" :string)
("H" "¢" :string)
("i" "¢" :string)
("z" "¢" :string)
("c" "¢" :string)
("l" "¢" :string)
("A" "¢" :string)
("Q" "¢" :string)
("w" "¢" :string)
("D" "¢" :string)
("R" "¢" :string)
("d" "¢" :string)
("s" "¢" :string)
("r" "¢" :string)
("k" "¢" :string)
("v" "¢" :string)
("m" "¢" :string)
("P" "¢" :string)
("y" "¢" :string)
("K" "¢" :string)
("q" "¢" :string)
("S" "¢" :string)
("I" "¢" :string)
("C" "¢" :string)
("M" "¢" :string)
("Z" "¢" :string)
("T" "¢" :string)
("W" "¢" :string)
("B" "¢" :string)
("h" "¢" :string)
("x" "¢" :string)
("X" "¢" :string)
("f" "¢" :string)
("E" "¢" :string)
("V" "¢" :string)
("N" "¢" :string)
("O" "¢" :string)
("o" "¢" :string)
("g" "¢" :string)
("n" "¢" :string)
))

(define-rule-set "sphinx-xy-resolve-case"

:rules (("Ú" "8" :string)
("Ÿ" "8" :string)
("Ç" "8" :string)
("Ĉ" "8" :string)
("Å”" "8" :string)
("Ľ" "8" :string)
("Å®" "8" :string)
("�" "8" :string)
("É" "8" :string)
("Ë" "8" :string)
("Ș" "8" :string)
("Ì" "8" :string)
("Ê" "8" :string)
("Ň" "8" :string)
("Ä„" "8" :string)
("Å " "8" :string)
("Û" "8" :string)
("Åž" "8" :string)
("Ć" "8" :string)
("Ã’" "8" :string)
("Ĝ" "8" :string)
("Ñ" "8" :string)
("Ó" "8" :string)
("ÃŽ" "8" :string)
("�" "8" :string)
("Ã" "8" :string)
("Èš" "8" :string)
("Ã…" "8" :string)
("Äž" "8" :string)
("Ü" "8" :string)
("È" "8" :string)
("Ô" "8" :string)
("İ" "8" :string)
("Ű" "8" :string)
("Ù" "8" :string)
("Ŭ" "8" :string)
("Â" "8" :string)
("Ť" "8" :string)
("Ń" "8" :string)
("ÄŽ" "8" :string)
("Ź" "8" :string)
("Ž" "8" :string)
("�" "8" :string)
("Ŝ" "8" :string)
("Č" "8" :string)
("Ä´" "8" :string)
("Ö" "8" :string)
("Ø" "8" :string)
("Å»" "8" :string)
("�" "8" :string)
("Ä‚" "8" :string)
("Äš" "8" :string)
("�" "8" :string)
("Õ" "8" :string)
("Ę" "8" :string)
("�" "8" :string)
("À" "8" :string)
("Ĥ" "8" :string)
("Ä" "8" :string)
("Åš" "8" :string)
("Ř" "8" :string)
("�" "8" :string)
("Å’" "89" :string)
("Æ" "89" :string)
("ì" "9" :string)
("è" "9" :string)
("Ä…" "9" :string)
("Å¡" "9" :string)
("ú" "9" :string)
("Ã¥" "9" :string)
("ă" "9" :string)
("Ä™" "9" :string)
("ü" "9" :string)
("ź" "9" :string)
("ò" "9" :string)
("Å¥" "9" :string)
("È›" "9" :string)
("ĵ" "9" :string)
("Å•" "9" :string)
("ż" "9" :string)
("ä" "9" :string)
("ý" "9" :string)
("ù" "9" :string)
("á" "9" :string)
("é" "9" :string)
("�" "9" :string)
("ň" "9" :string)
("Å›" "9" :string)
("ø" "9" :string)
("í" "9" :string)
("Ä‘" "9" :string)
("ı" "9" :string)
("ÄŸ" "9" :string)
("î" "9" :string)
("ã" "9" :string)
("à" "9" :string)
("Å™" "9" :string)
("Å‘" "9" :string)
("ů" "9" :string)
("È™" "9" :string)
("ÿ" "9" :string)
("ë" "9" :string)
("Å­" "9" :string)
("ç" "9" :string)
("ű" "9" :string)
("ñ" "9" :string)
("õ" "9" :string)
("Ä›" "9" :string)
("ÅŸ" "9" :string)
("ž" "9" :string)
("�" "9" :string)
("�" "9" :string)
("Å„" "9" :string)
("û" "9" :string)
("Å‚" "9" :string)
("�" "9" :string)
("Ä¥" "9" :string)
("ê" "9" :string)
("ô" "9" :string)
("ĉ" "9" :string)
("â" "9" :string)
("ć" "9" :string)
("ï" "9" :string)
("ö" "9" :string)
("ľ" "9" :string)
("ó" "9" :string)
("æ" "99" :string)
("ß" "99" :string)
("Å“" "99" :string)
("N" "8" :string)
("V" "8" :string)
("O" "8" :string)
("X" "8" :string)
("E" "8" :string)
("P" "8" :string)
("K" "8" :string)
("T" "8" :string)
("Z" "8" :string)
("M" "8" :string)
("C" "8" :string)
("I" "8" :string)
("S" "8" :string)
("B" "8" :string)
("W" "8" :string)
("D" "8" :string)
("R" "8" :string)
("H" "8" :string)
("F" "8" :string)
("Q" "8" :string)
("A" "8" :string)
("G" "8" :string)
("U" "8" :string)
("J" "8" :string)
("Y" "8" :string)
("L" "8" :string)
("o" "9" :string)
("n" "9" :string)
("g" "9" :string)
("x" "9" :string)
("f" "9" :string)
("y" "9" :string)
("q" "9" :string)
("h" "9" :string)
("w" "9" :string)
("s" "9" :string)
("d" "9" :string)
("v" "9" :string)
("k" "9" :string)
("r" "9" :string)
("m" "9" :string)
("z" "9" :string)
("c" "9" :string)
("i" "9" :string)
("l" "9" :string)
("b" "9" :string)
("j" "9" :string)
("a" "9" :string)
("p" "9" :string)
("u" "9" :string)
("t" "9" :string)
("e" "9" :string)
))

(use-rule-set :run 0
:rule-set ("sphinx-xy-alphabetize"))
(use-rule-set :run 1
:rule-set ("sphinx-xy-resolve-diacritics"))
(use-rule-set :run 2
:rule-set ("sphinx-xy-resolve-case"))

+ 0
- 68
docs/_build/latex/Makefile View File

@@ -1,68 +0,0 @@
# Makefile for Sphinx LaTeX output

ALLDOCS = $(basename $(wildcard *.tex))
ALLPDF = $(addsuffix .pdf,$(ALLDOCS))
ALLDVI = $(addsuffix .dvi,$(ALLDOCS))
ALLXDV =
ALLPS = $(addsuffix .ps,$(ALLDOCS))
ALLIMGS = $(wildcard *.png *.gif *.jpg *.jpeg)

# Prefix for archive names
ARCHIVEPREFIX =
# Additional LaTeX options (passed via variables in latexmkrc/latexmkjarc file)
export LATEXOPTS =
# Additional latexmk options
LATEXMKOPTS =
# format: pdf or dvi (used only by archive targets)
FMT = pdf

LATEX = latexmk -dvi
PDFLATEX = latexmk -pdf -dvi- -ps-


%.png %.gif %.jpg %.jpeg: FORCE_MAKE
extractbb '$@'

%.dvi: %.tex FORCE_MAKE
$(LATEX) $(LATEXMKOPTS) '$<'

%.ps: %.dvi
dvips '$<'

%.pdf: %.tex FORCE_MAKE
$(PDFLATEX) $(LATEXMKOPTS) '$<'

all: $(ALLPDF)

all-dvi: $(ALLDVI)

all-ps: $(ALLPS)

all-pdf: $(ALLPDF)

zip: all-$(FMT)
mkdir $(ARCHIVEPREFIX)docs-$(FMT)
cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
zip -q -r -9 $(ARCHIVEPREFIX)docs-$(FMT).zip $(ARCHIVEPREFIX)docs-$(FMT)
rm -r $(ARCHIVEPREFIX)docs-$(FMT)

tar: all-$(FMT)
mkdir $(ARCHIVEPREFIX)docs-$(FMT)
cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
tar cf $(ARCHIVEPREFIX)docs-$(FMT).tar $(ARCHIVEPREFIX)docs-$(FMT)
rm -r $(ARCHIVEPREFIX)docs-$(FMT)

gz: tar
gzip -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz

bz2: tar
bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar

xz: tar
xz -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar

clean:
rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz $(ALLPDF) $(ALLDVI) $(ALLXDV) *.fls *.fdb_latexmk

.PHONY: all all-pdf all-dvi all-ps clean zip tar gz bz2 xz
.PHONY: FORCE_MAKE

+ 0
- 269
docs/_build/latex/footnotehyper-sphinx.sty View File

@@ -1,269 +0,0 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{footnotehyper-sphinx}%
[2017/10/27 v1.7 hyperref aware footnote.sty for sphinx (JFB)]
%%
%% Package: footnotehyper-sphinx
%% Version: based on footnotehyper.sty 2017/03/07 v1.0
%% as available at https://www.ctan.org/pkg/footnotehyper
%% License: the one applying to Sphinx
%%
%% Refer to the PDF documentation at https://www.ctan.org/pkg/footnotehyper for
%% the code comments.
%%
%% Differences:
%% 1. a partial tabulary compatibility layer added (enough for Sphinx mark-up),
%% 2. use of \spx@opt@BeforeFootnote from sphinx.sty,
%% 3. use of \sphinxunactivateextrasandspace from sphinx.sty,
%% 4. macro definition \sphinxfootnotemark,
%% 5. macro definition \sphinxlongtablepatch
%% 6. replaced an \undefined by \@undefined
\DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}%
\ProcessOptions\relax
\newbox\FNH@notes
\newdimen\FNH@width
\let\FNH@colwidth\columnwidth
\newif\ifFNH@savingnotes
\AtBeginDocument {%
\let\FNH@latex@footnote \footnote
\let\FNH@latex@footnotetext\footnotetext
\let\FNH@H@@footnotetext \@footnotetext
\newenvironment{savenotes}
{\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}%
\let\spewnotes \FNH@spewnotes
\let\footnote \FNH@footnote
\let\footnotetext \FNH@footnotetext
\let\endfootnote \FNH@endfntext
\let\endfootnotetext\FNH@endfntext
\@ifpackageloaded{hyperref}
{\ifHy@hyperfootnotes
\let\FNH@H@@footnotetext\H@@footnotetext
\else
\let\FNH@hyper@fntext\FNH@nohyp@fntext
\fi}%
{\let\FNH@hyper@fntext\FNH@nohyp@fntext}%
}%
\def\FNH@hyper@fntext{\FNH@fntext\FNH@hyper@fntext@i}%
\def\FNH@nohyp@fntext{\FNH@fntext\FNH@nohyp@fntext@i}%
\def\FNH@fntext #1{%
\ifx\ifmeasuring@\@undefined
\expandafter\@secondoftwo\else\expandafter\@firstofone\fi
% these two lines modified for Sphinx (tabulary compatibility):
{\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\@firstofone\fi}%
{\ifx\equation$\expandafter\@gobbletwo\fi #1}%$
}%
\long\def\FNH@hyper@fntext@i#1{%
\global\setbox\FNH@notes\vbox
{\unvbox\FNH@notes
\FNH@startnote
\@makefntext
{\rule\z@\footnotesep\ignorespaces
\ifHy@nesting\expandafter\ltx@firstoftwo
\else\expandafter\ltx@secondoftwo
\fi
{\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}%
{\Hy@raisedlink
{\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}%
{\relax}}%
\let\@currentHref\Hy@footnote@currentHref
\let\@currentlabelname\@empty
#1}%
\@finalstrut\strutbox
}%
\FNH@endnote
}%
}%
\long\def\FNH@nohyp@fntext@i#1{%
\global\setbox\FNH@notes\vbox
{\unvbox\FNH@notes
\FNH@startnote
\@makefntext{\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\FNH@endnote
}%
}%
\def\FNH@startnote{%
\hsize\FNH@colwidth
\interlinepenalty\interfootnotelinepenalty
\reset@font\footnotesize
\floatingpenalty\@MM
\@parboxrestore
\protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
\color@begingroup
}%
\def\FNH@endnote{\color@endgroup}%
\def\FNH@savenotes{%
\begingroup
\ifFNH@savingnotes\else
\FNH@savingnotestrue
\let\@footnotetext \FNH@hyper@fntext
\let\@mpfootnotetext \FNH@hyper@fntext
\let\H@@mpfootnotetext\FNH@nohyp@fntext
\FNH@width\columnwidth
\let\FNH@colwidth\FNH@width
\global\setbox\FNH@notes\box\voidb@x
\let\FNH@thempfn\thempfn
\let\FNH@mpfn\@mpfn
\ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi
\expandafter\def\expandafter\@minipagerestore\expandafter{%
\@minipagerestore
\let\thempfn\FNH@thempfn
\let\@mpfn\FNH@mpfn
}%
\fi
}%
\def\FNH@spewnotes {%
\endgroup
\ifFNH@savingnotes\else
\ifvoid\FNH@notes\else
\begingroup
\let\@makefntext\@empty
\let\@finalstrut\@gobble
\let\rule\@gobbletwo
\FNH@H@@footnotetext{\unvbox\FNH@notes}%
\endgroup
\fi
\fi
}%
\def\FNH@footnote@envname {footnote}%
\def\FNH@footnotetext@envname{footnotetext}%
\def\FNH@footnote{%
% this line added for Sphinx:
\spx@opt@BeforeFootnote
\ifx\@currenvir\FNH@footnote@envname
\expandafter\FNH@footnoteenv
\else
\expandafter\FNH@latex@footnote
\fi
}%
\def\FNH@footnoteenv{%
% this line added for Sphinx (footnotes in parsed literal blocks):
\catcode13=5 \sphinxunactivateextrasandspace
\@ifnextchar[%
\FNH@footnoteenv@i %]
{\stepcounter\@mpfn
\protected@xdef\@thefnmark{\thempfn}%
\@footnotemark
\def\FNH@endfntext@fntext{\@footnotetext}%
\FNH@startfntext}%
}%
\def\FNH@footnoteenv@i[#1]{%
\begingroup
\csname c@\@mpfn\endcsname #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfn}%
\endgroup
\@footnotemark
\def\FNH@endfntext@fntext{\@footnotetext}%
\FNH@startfntext
}%
\def\FNH@footnotetext{%
\ifx\@currenvir\FNH@footnotetext@envname
\expandafter\FNH@footnotetextenv
\else
\expandafter\FNH@latex@footnotetext
\fi
}%
\def\FNH@footnotetextenv{%
\@ifnextchar[%
\FNH@footnotetextenv@i %]
{\protected@xdef\@thefnmark{\thempfn}%
\def\FNH@endfntext@fntext{\@footnotetext}%
\FNH@startfntext}%
}%
\def\FNH@footnotetextenv@i[#1]{%
\begingroup
\csname c@\@mpfn\endcsname #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfn}%
\endgroup
\ifFNH@savingnotes
\def\FNH@endfntext@fntext{\FNH@nohyp@fntext}%
\else
\def\FNH@endfntext@fntext{\FNH@H@@footnotetext}%
\fi
\FNH@startfntext
}%
\def\FNH@startfntext{%
\setbox\z@\vbox\bgroup
\FNH@startnote
\FNH@prefntext
\rule\z@\footnotesep\ignorespaces
}%
\def\FNH@endfntext {%
\@finalstrut\strutbox
\FNH@postfntext
\FNH@endnote
\egroup
\begingroup
\let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo
\FNH@endfntext@fntext {\unvbox\z@}%
\endgroup
}%
\AtBeginDocument{%
\let\FNH@@makefntext\@makefntext
\ifx\@makefntextFB\@undefined
\expandafter\@gobble\else\expandafter\@firstofone\fi
{\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else
\let\FNH@@makefntext\@makefntextORI\fi}%
\expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}%
\FNH@@@1.2!3?4,\FNH@@@\relax
}%
\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3{%
\ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
\FNH@bad@makefntext@alert
{\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}%
}%
\def\FNH@check@b #1\relax{%
\expandafter\expandafter\expandafter\FNH@check@c
\expandafter\meaning\expandafter\FNH@prefntext
\meaning\FNH@postfntext1.2!3?4,\FNH@check@c\relax
}%
\def\FNH@check@c #11.2!3?4,#2#3\relax{%
\ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@makefntext@alert
}%
% slight reformulation for Sphinx
\def\FNH@bad@makefntext@alert{%
\PackageWarningNoLine{footnotehyper-sphinx}%
{Footnotes will be sub-optimal, sorry. This is due to the document class or^^J
some package modifying macro \string\@makefntext.^^J
You can try to report this incompatibility at^^J
https://github.com/sphinx-doc/sphinx with this info:}%
\typeout{\meaning\@makefntext}%
\let\FNH@prefntext\@empty\let\FNH@postfntext\@empty
}%
% this macro from original footnote.sty is not used anymore by Sphinx
% but for simplicity sake let's just keep it as is
\def\makesavenoteenv{\@ifnextchar[\FNH@msne@ii\FNH@msne@i}%]
\def\FNH@msne@i #1{%
\expandafter\let\csname FNH$#1\expandafter\endcsname %$
\csname #1\endcsname
\expandafter\let\csname endFNH$#1\expandafter\endcsname %$
\csname end#1\endcsname
\FNH@msne@ii[#1]{FNH$#1}%$
}%
\def\FNH@msne@ii[#1]#2{%
\expandafter\edef\csname#1\endcsname{%
\noexpand\savenotes
\expandafter\noexpand\csname#2\endcsname
}%
\expandafter\edef\csname end#1\endcsname{%
\expandafter\noexpand\csname end#2\endcsname
\noexpand\expandafter
\noexpand\spewnotes
\noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi
}%
}%
% end of footnotehyper 2017/02/16 v0.99
% some extras for Sphinx :
% \sphinxfootnotemark: usable in section titles and silently removed from TOCs.
\def\sphinxfootnotemark [#1]%
{\ifx\thepage\relax\else\protect\spx@opt@BeforeFootnote
\protect\footnotemark[#1]\fi}%
\AtBeginDocument{%
% let hyperref less complain
\pdfstringdefDisableCommands{\def\sphinxfootnotemark [#1]{}}%
% to obtain hyperlinked footnotes in longtable environment we must replace
% hyperref's patch of longtable's patch of \@footnotetext by our own
\let\LT@p@ftntext\FNH@hyper@fntext
% this *requires* longtable to be used always wrapped in savenotes environment
}%
\endinput
%%
%% End of file `footnotehyper-sphinx.sty'.

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save