From 7b54bbaa07623868233be6c5bfaba146f5393a99 Mon Sep 17 00:00:00 2001
From: Amir MOHAMMADI <amir.mohammadi@idiap.ch>
Date: Wed, 27 Apr 2016 16:39:19 +0200
Subject: [PATCH] Generate documentation

---
 bob/fusion/base/fusion.py                | 138 -----------------------
 bob/fusion/base/tools/command_line.py    |   4 +-
 doc/bob.fusion.base.algorithm.rst        |  62 ++++++++++
 doc/bob.fusion.base.config.algorithm.rst |  54 +++++++++
 doc/bob.fusion.base.config.rst           |  17 +++
 doc/bob.fusion.base.rst                  |  20 ++++
 doc/bob.fusion.base.script.rst           |  30 +++++
 doc/bob.fusion.base.tools.rst            |  30 +++++
 doc/bob.fusion.rst                       |  17 +++
 doc/bob.rst                              |  17 +++
 doc/{fusion.rst => guide.rst}            |  12 +-
 doc/index.rst                            |  15 +--
 doc/modules.rst                          |   7 ++
 doc/py_api.rst                           |  10 --
 14 files changed, 264 insertions(+), 169 deletions(-)
 delete mode 100644 bob/fusion/base/fusion.py
 create mode 100644 doc/bob.fusion.base.algorithm.rst
 create mode 100644 doc/bob.fusion.base.config.algorithm.rst
 create mode 100644 doc/bob.fusion.base.config.rst
 create mode 100644 doc/bob.fusion.base.rst
 create mode 100644 doc/bob.fusion.base.script.rst
 create mode 100644 doc/bob.fusion.base.tools.rst
 create mode 100644 doc/bob.fusion.rst
 create mode 100644 doc/bob.rst
 rename doc/{fusion.rst => guide.rst} (65%)
 create mode 100644 doc/modules.rst
 delete mode 100644 doc/py_api.rst

diff --git a/bob/fusion/base/fusion.py b/bob/fusion/base/fusion.py
deleted file mode 100644
index 62c9372..0000000
--- a/bob/fusion/base/fusion.py
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import numpy
-import matplotlib.pyplot as plt
-from bob.measure.load import load_score, get_all_scores,\
-    get_negatives_positives_all
-from bob.fusion.base.algorithm import LLR, Weighted_Sum, MLP
-from bob.fusion.base.normalizer import ZNorm
-
-
-def main():
-  '''
-/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/nonorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/nonorm/scores-eval
-/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/ztnorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/ztnorm/scores-eval
-
-/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/nonorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/nonorm/scores-eval
-/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/ztnorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/ztnorm/scores-eval
-
-
-/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/nonorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/nonorm/scores-eval
-/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/ztnorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/ztnorm/scores-eval
-
-/home/amir/idiap/remote/user/mobio-male/voice/isv/male/nonorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/voice/isv/male/nonorm/scores-eval
-/home/amir/idiap/remote/user/mobio-male/voice/isv/male/ztnorm/scores-dev
-/home/amir/idiap/remote/user/mobio-male/voice/isv/male/ztnorm/scores-eval
-   # = ['/home/amir/idiap/remote/scores-dev_gmm',
-   #               '/home/amir/idiap/remote/scores-dev_isv']
-  # s_eval_paths = ['/home/amir/idiap/remote/scores-eval_gmm',
-  #                 '/home/amir/idiap/remote/scores-eval_isv']
-
-
-
-  '''
-  score_path_mask = '/home/amir/idiap/remote/user/mobio-male/{}/male/{}/scores-{}'
-  fusion_lists = [
-    (('baselines/gmm', 'voice/isv'), 'face-voice/F-gmm-S-isv{}'),
-    (('baselines/gmm', 'baselines/gabor-graph'), 'baselines/gmm-gabor-graph{}'),
-    (('voice/gmm', 'voice/isv'), 'voice/gmm-isv{}'),
-    # (('baselines/gmm', 'baselines/gabor-graph', 'voice/gmm', 'voice/isv'), 'face-voice/F-gmm-gabor-graph-S-gmm-isv{}'),
-  ]
-  for norm in ['ztnorm']:
-    for scores_paths_param, save_path_param in fusion_lists:
-      save_path_dev = score_path_mask.format(save_path_param, norm, 'dev')
-      save_path_eval = score_path_mask.format(save_path_param, norm, 'eval')
-      # for path in [save_path_dev, save_path_eval]:
-      #   for tag in [
-      #      '_Weighted_Sum',
-      #      '_LLR',
-      #      '_MLP'
-      #      ]:
-      #     try:
-      #       os.makedirs(os.path.split(path.format(tag))[0])
-      #     except Exception:
-      #       pass
-      s_dev_paths = [
-        score_path_mask.format(a, norm, 'dev') for a in scores_paths_param]
-      s_eval_paths = [
-        score_path_mask.format(a, norm, 'eval') for a in scores_paths_param]
-
-      score_lines_list = [load_score(path) for path in s_dev_paths]
-      scores = get_all_scores(score_lines_list)
-      trainer_scores = get_negatives_positives_all(score_lines_list)
-      score_lines_list_eval = [load_score(path) for path in s_eval_paths]
-      scores_eval = get_all_scores(score_lines_list_eval)
-      plt.figure()
-      for i, (fuse, tag) in enumerate([
-              (Weighted_Sum(normalizer=ZNorm(), scores=numpy.array(scores), trainer_scores=trainer_scores), '_Weighted_Sum'),
-              (LLR(normalizer=ZNorm(), scores=numpy.array(scores), trainer_scores=trainer_scores), '_LLR'),
-              (MLP(normalizer=ZNorm(), scores=numpy.array(scores), trainer_scores=trainer_scores, verbose=True,
-                   mlp_shape=(2, 3, 1), batch_size=1, seed=0), '_MLP'),
-            ]):
-        plt.subplot(2,2,i+1)
-        fuse.train()
-        # import ipdb; ipdb.set_trace()
-        fused_scores_dev = fuse()
-        score_lines = numpy.array(score_lines_list[0])
-        score_lines['score'] = fused_scores_dev
-        # import ipdb
-        # ipdb.set_trace()
-        # numpy.savetxt(save_path_dev.format(tag), score_lines, fmt='%s %s %s %.6f')
-
-        fuse.scores = numpy.array(scores_eval)
-        fused_scores_eval = fuse()
-        fuse.scores = numpy.array(scores_eval)
-
-        score_lines = numpy.array(score_lines_list_eval[0])
-        score_lines['score'] = fused_scores_eval
-        # numpy.savetxt(save_path_eval.format(tag), score_lines, fmt='%s %s %s %.6f')
-
-        # plot the decision boundary
-        from bob.measure import eer_threshold, min_hter_threshold
-        from bob.measure.load import get_negatives_positives
-
-        score_labels = score_lines['claimed_id'] == score_lines['real_id']
-        threshold = eer_threshold(*get_negatives_positives(score_lines))
-        thres_system1 = min_hter_threshold(
-          *get_negatives_positives(score_lines_list[0]))
-        thres_system2 = min_hter_threshold(
-          *get_negatives_positives(score_lines_list[1]))
-        fuse.plot_boundary_decision(
-          score_labels, threshold,
-          scores_paths_param[0], scores_paths_param[1],
-          thres_system1, thres_system2,
-          True,
-          seed=0
-          )
-        plt.title(tag[1:])
-        # print(thres_system1, thres_system2)
-        # thres_system1, thres_system2 = (3.51670052, 3.19892205)
-        # plt.axvline(thres_system1, color='red')
-        # plt.axhline(thres_system2, color='red')
-        # plt.show()
-      plt.savefig('scatter_{}_{}.pdf'.format(norm, '_'.join([a.replace('/','-') for a in scores_paths_param])))
-      plt.close()
-        # return
-
-        # fuse = LLR(scores=scores, trainer_scores=trainer_scores)
-        # fuse.train()
-        # print('LLR', fuse()[:10])
-        # fuse = Weighted_Sum(scores=scores)
-        # print('Weighted_Sum', fuse()[:10])
-        # fuse = MEAN(scores=scores)
-        # print('MEAN', fuse()[:10])
-        # fuse = MLP(scores=scores, trainer_scores=trainer_scores,
-        #            verbose=True, max_iter=0, batch_size=1)
-        # fuse.train()
-        # print('MLP', fuse()[:10])
-
-if __name__ == '__main__':
-  main()
diff --git a/bob/fusion/base/tools/command_line.py b/bob/fusion/base/tools/command_line.py
index a72a12b..f9662df 100644
--- a/bob/fusion/base/tools/command_line.py
+++ b/bob/fusion/base/tools/command_line.py
@@ -119,7 +119,7 @@ def write_info(args, command_line_parameters):
   command_line_parameters : [str] or ``None``
     The command line parameters that have been interpreted.
     If ``None``, the parameters specified by the user on command line
-      are considered.
+    are considered.
 
   executable : str
     The name of the executable (such as ``'./bin/verify.py'``) that is used
@@ -161,7 +161,7 @@ def load_resource(resource, keyword, imports=['bob.fusion.base'],
   1. a resource as defined in the setup.py
   2. a configuration file
   3. a string defining the construction of an object. If imports are required
-    for the construction of this object, they can be given as list of strings.
+     for the construction of this object, they can be given as list of strings.
 
   **Parameters:**
 
diff --git a/doc/bob.fusion.base.algorithm.rst b/doc/bob.fusion.base.algorithm.rst
new file mode 100644
index 0000000..bd1c60c
--- /dev/null
+++ b/doc/bob.fusion.base.algorithm.rst
@@ -0,0 +1,62 @@
+bob.fusion.base.algorithm package
+=================================
+
+Submodules
+----------
+
+bob.fusion.base.algorithm.Algorithm module
+------------------------------------------
+
+.. automodule:: bob.fusion.base.algorithm.Algorithm
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.algorithm.AlgorithmBob module
+---------------------------------------------
+
+.. automodule:: bob.fusion.base.algorithm.AlgorithmBob
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.algorithm.LLR module
+------------------------------------
+
+.. automodule:: bob.fusion.base.algorithm.LLR
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.algorithm.MLP module
+------------------------------------
+
+.. automodule:: bob.fusion.base.algorithm.MLP
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.algorithm.Weighted_Sum module
+---------------------------------------------
+
+.. automodule:: bob.fusion.base.algorithm.Weighted_Sum
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.algorithm.mlp_train_helper module
+-------------------------------------------------
+
+.. automodule:: bob.fusion.base.algorithm.mlp_train_helper
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: bob.fusion.base.algorithm
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/bob.fusion.base.config.algorithm.rst b/doc/bob.fusion.base.config.algorithm.rst
new file mode 100644
index 0000000..696ffe5
--- /dev/null
+++ b/doc/bob.fusion.base.config.algorithm.rst
@@ -0,0 +1,54 @@
+bob.fusion.base.config.algorithm package
+========================================
+
+Submodules
+----------
+
+bob.fusion.base.config.algorithm.llr module
+-------------------------------------------
+
+.. automodule:: bob.fusion.base.config.algorithm.llr
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.config.algorithm.llr_skl module
+-----------------------------------------------
+
+.. automodule:: bob.fusion.base.config.algorithm.llr_skl
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.config.algorithm.mean module
+--------------------------------------------
+
+.. automodule:: bob.fusion.base.config.algorithm.mean
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.config.algorithm.mlp module
+-------------------------------------------
+
+.. automodule:: bob.fusion.base.config.algorithm.mlp
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.config.algorithm.plr_2 module
+---------------------------------------------
+
+.. automodule:: bob.fusion.base.config.algorithm.plr_2
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: bob.fusion.base.config.algorithm
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/bob.fusion.base.config.rst b/doc/bob.fusion.base.config.rst
new file mode 100644
index 0000000..7a31f5d
--- /dev/null
+++ b/doc/bob.fusion.base.config.rst
@@ -0,0 +1,17 @@
+bob.fusion.base.config package
+==============================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    bob.fusion.base.config.algorithm
+
+Module contents
+---------------
+
+.. automodule:: bob.fusion.base.config
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/bob.fusion.base.rst b/doc/bob.fusion.base.rst
new file mode 100644
index 0000000..d0812d8
--- /dev/null
+++ b/doc/bob.fusion.base.rst
@@ -0,0 +1,20 @@
+bob.fusion.base package
+=======================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    bob.fusion.base.algorithm
+    bob.fusion.base.config
+    bob.fusion.base.script
+    bob.fusion.base.tools
+
+Module contents
+---------------
+
+.. automodule:: bob.fusion.base
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/bob.fusion.base.script.rst b/doc/bob.fusion.base.script.rst
new file mode 100644
index 0000000..638fb52
--- /dev/null
+++ b/doc/bob.fusion.base.script.rst
@@ -0,0 +1,30 @@
+bob.fusion.base.script package
+==============================
+
+Submodules
+----------
+
+bob.fusion.base.script.bob_fuse module
+--------------------------------------
+
+.. automodule:: bob.fusion.base.script.bob_fuse
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.script.plot_fusion_decision_boundary module
+-----------------------------------------------------------
+
+.. automodule:: bob.fusion.base.script.plot_fusion_decision_boundary
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: bob.fusion.base.script
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/bob.fusion.base.tools.rst b/doc/bob.fusion.base.tools.rst
new file mode 100644
index 0000000..31e5409
--- /dev/null
+++ b/doc/bob.fusion.base.tools.rst
@@ -0,0 +1,30 @@
+bob.fusion.base.tools package
+=============================
+
+Submodules
+----------
+
+bob.fusion.base.tools.command_line module
+-----------------------------------------
+
+.. automodule:: bob.fusion.base.tools.command_line
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+bob.fusion.base.tools.plotting module
+-------------------------------------
+
+.. automodule:: bob.fusion.base.tools.plotting
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: bob.fusion.base.tools
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/bob.fusion.rst b/doc/bob.fusion.rst
new file mode 100644
index 0000000..ad8d408
--- /dev/null
+++ b/doc/bob.fusion.rst
@@ -0,0 +1,17 @@
+bob.fusion package
+==================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    bob.fusion.base
+
+Module contents
+---------------
+
+.. automodule:: bob.fusion
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/bob.rst b/doc/bob.rst
new file mode 100644
index 0000000..86625e7
--- /dev/null
+++ b/doc/bob.rst
@@ -0,0 +1,17 @@
+bob package
+===========
+
+Subpackages
+-----------
+
+.. toctree::
+
+    bob.fusion
+
+Module contents
+---------------
+
+.. automodule:: bob
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/fusion.rst b/doc/guide.rst
similarity index 65%
rename from doc/fusion.rst
rename to doc/guide.rst
index a3c2b76..8074927 100644
--- a/doc/fusion.rst
+++ b/doc/guide.rst
@@ -8,18 +8,18 @@
 Running Score Fusion in Biometric Recognition Experiments
 ==========================================================
 
-There are two scripts available in the package as of now and they work for verification scenarios.
-Spoofing and Anti-spoofing scenarios are not considered yet in the scripts however the Python API allows for easy extension.
-
 Each score fusion experiment requires at least a classifier.
-The ``bob.fusion.base`` package itself implements two such classifiers: ``MLP`` and ``WeightedSum``.
+The ``bob.fusion.base`` package itself implements three such classifiers: ``MLP``, ``LLR`` and ``WeightedSum``.
 You can also use any class as a classifier that implements a ``fit(X[, y])`` and a ``decision_function(X)`` method.
 An example is `sklearn.linear_model.LogisticRegression <http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html>`_.
 
 You can also use pre-processors to pre-process your data. The pre-processor class should implement a ``fit_transform(X[, y])`` and a ``transform(X[, y, copy])`` methods. An example is `sklearn.preprocessing.StandardScaler <http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html>`_.
 
-Using ``sklearn`` classifiers and pre-processors you can different fusion algorithms. Please take a look at some examples in ``bob.fusion.base.config.algorithm`` to see how it is done.
+Using ``sklearn`` classifiers and pre-processors you can implement different fusion algorithms. Please take a look at some examples in ``bob.fusion.base.config.algorithm`` to see how it is done.
+
+There are two scripts available in the package as of now and they work for verification scenarios.
+Spoofing and Anti-spoofing scenarios are not considered yet **in the scripts** however the Python API allows for easy extension.
 
-Also take a look at the scripts ``fuse.py`` and ``plot_fusion_decision_boundary.py`` and use them for your actual fusion experiments.
+Also take a look at the scripts ``bob_fuse.py`` and ``plot_fusion_decision_boundary.py`` and use them for your actual fusion experiments.
 
 .. include:: links.rst
diff --git a/doc/index.rst b/doc/index.rst
index 2d22471..85f9bba 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -19,7 +19,7 @@ Users Guide
 .. toctree::
    :maxdepth: 2
 
-   fusion
+   guide
 
 ================
 Reference Manual
@@ -28,7 +28,7 @@ Reference Manual
 .. toctree::
    :maxdepth: 2
 
-   py_api
+* :ref:`modindex`
 
 
 ==========
@@ -36,22 +36,11 @@ References
 ==========
 
 
-=========
-ToDo-List
-=========
-
-This documentation is still under development.
-Here is a list of things that needs to be done:
-
-.. todolist::
-   testing
-
 ==================
 Indices and tables
 ==================
 
 * :ref:`genindex`
-* :ref:`modindex`
 * :ref:`search`
 
 .. include:: links.rst
diff --git a/doc/modules.rst b/doc/modules.rst
new file mode 100644
index 0000000..8dc34ff
--- /dev/null
+++ b/doc/modules.rst
@@ -0,0 +1,7 @@
+bob.fusion.base
+===============
+
+.. toctree::
+   :maxdepth: 4
+
+   bob
diff --git a/doc/py_api.rst b/doc/py_api.rst
deleted file mode 100644
index 951e069..0000000
--- a/doc/py_api.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-
-===========================
-Python API for bob.fusion.base
-===========================
-
-
-Details
--------
-
-.. include:: links.rst
-- 
GitLab