From 8897560adbbeeee6a738fd60df3a4bbc5774cb71 Mon Sep 17 00:00:00 2001 From: Tiago Freitas Pereira <tiagofrepereira@gmail.com> Date: Sat, 7 Feb 2015 23:18:56 +0100 Subject: [PATCH] Preparing first commit of bob.learn.em. Still some warnings and documentation issues to solve --- README.rst | 24 +- bob/learn/misc/MAP_gmm_trainer.cpp | 431 ------- bob/learn/misc/ML_gmm_trainer.cpp | 335 ----- bob/learn/misc/__MAP_gmm_trainer__.py | 99 -- bob/learn/misc/__ML_gmm_trainer__.py | 85 -- bob/learn/misc/__empca_trainer__.py | 77 -- bob/learn/misc/__init__.py | 58 - bob/learn/misc/__isv_trainer__.py | 49 - bob/learn/misc/__ivector_trainer__.py | 51 - bob/learn/misc/__jfa_trainer__.py | 71 -- bob/learn/misc/__kmeans_trainer__.py | 81 -- bob/learn/misc/__plda_trainer__.py | 50 - bob/learn/misc/cpp/BICMachine.cpp | 348 ------ bob/learn/misc/cpp/BICTrainer.cpp | 94 -- bob/learn/misc/cpp/EMPCATrainer.cpp | 418 ------- bob/learn/misc/cpp/FABase.cpp | 307 ----- bob/learn/misc/cpp/FABaseTrainer.cpp | 547 -------- bob/learn/misc/cpp/GMMBaseTrainer.cpp | 94 -- bob/learn/misc/cpp/GMMMachine.cpp | 436 ------- bob/learn/misc/cpp/GMMStats.cpp | 151 --- bob/learn/misc/cpp/Gaussian.cpp | 184 --- bob/learn/misc/cpp/ISVBase.cpp | 76 -- bob/learn/misc/cpp/ISVMachine.cpp | 182 --- bob/learn/misc/cpp/ISVTrainer.cpp | 130 -- bob/learn/misc/cpp/IVectorMachine.cpp | 249 ---- bob/learn/misc/cpp/IVectorTrainer.cpp | 228 ---- bob/learn/misc/cpp/JFABase.cpp | 75 -- bob/learn/misc/cpp/JFAMachine.cpp | 206 ---- bob/learn/misc/cpp/JFATrainer.cpp | 200 --- bob/learn/misc/cpp/KMeansMachine.cpp | 258 ---- bob/learn/misc/cpp/KMeansTrainer.cpp | 228 ---- bob/learn/misc/cpp/LinearScoring.cpp | 168 --- bob/learn/misc/cpp/MAP_GMMTrainer.cpp | 199 --- bob/learn/misc/cpp/ML_GMMTrainer.cpp | 112 -- bob/learn/misc/cpp/PLDAMachine.cpp | 960 --------------- bob/learn/misc/cpp/PLDATrainer.cpp | 800 ------------ bob/learn/misc/cpp/ZTNorm.cpp | 182 --- bob/learn/misc/data/data.hdf5 | Bin 2544 -> 0 bytes bob/learn/misc/data/dataNormalized.hdf5 | Bin 259592 -> 0 bytes bob/learn/misc/data/dataforMAP.hdf5 | Bin 259592 -> 0 bytes bob/learn/misc/data/faithful.torch3.hdf5 | Bin 21448 -> 0 bytes bob/learn/misc/data/faithful.torch3_f64.hdf5 | Bin 23240 -> 0 bytes bob/learn/misc/data/gmm.init_means.hdf5 | Bin 2176 -> 0 bytes bob/learn/misc/data/gmm.init_variances.hdf5 | Bin 2176 -> 0 bytes bob/learn/misc/data/gmm.init_weights.hdf5 | Bin 2160 -> 0 bytes bob/learn/misc/data/gmm_MAP.hdf5 | Bin 41136 -> 0 bytes bob/learn/misc/data/gmm_ML.hdf5 | Bin 41135 -> 0 bytes bob/learn/misc/data/gmm_ML_32bit_debug.hdf5 | Bin 41135 -> 0 bytes bob/learn/misc/data/gmm_ML_32bit_release.hdf5 | Bin 41135 -> 0 bytes bob/learn/misc/data/means.hdf5 | Bin 2944 -> 0 bytes bob/learn/misc/data/meansAfterKMeans.hdf5 | Bin 3044 -> 0 bytes bob/learn/misc/data/meansAfterMAP.hdf5 | Bin 6336 -> 0 bytes bob/learn/misc/data/meansAfterML.hdf5 | Bin 3944 -> 0 bytes bob/learn/misc/data/new_adapted_mean.hdf5 | Bin 2944 -> 0 bytes bob/learn/misc/data/samplesFrom2G_f64.hdf5 | Bin 18576 -> 0 bytes bob/learn/misc/data/stats.hdf5 | Bin 22635 -> 0 bytes bob/learn/misc/data/variances.hdf5 | Bin 2944 -> 0 bytes bob/learn/misc/data/variancesAfterKMeans.hdf5 | Bin 3044 -> 0 bytes bob/learn/misc/data/variancesAfterMAP.hdf5 | Bin 6336 -> 0 bytes bob/learn/misc/data/variancesAfterML.hdf5 | Bin 3944 -> 0 bytes bob/learn/misc/data/weights.hdf5 | Bin 2160 -> 0 bytes bob/learn/misc/data/weightsAfterKMeans.hdf5 | Bin 2164 -> 0 bytes bob/learn/misc/data/weightsAfterMAP.hdf5 | Bin 4056 -> 0 bytes bob/learn/misc/data/weightsAfterML.hdf5 | Bin 2184 -> 0 bytes bob/learn/misc/data/ztnorm_eval_eval.hdf5 | Bin 569984 -> 0 bytes bob/learn/misc/data/ztnorm_eval_tnorm.hdf5 | Bin 438944 -> 0 bytes bob/learn/misc/data/ztnorm_result.hdf5 | Bin 569984 -> 0 bytes bob/learn/misc/data/ztnorm_znorm_eval.hdf5 | Bin 22944 -> 0 bytes bob/learn/misc/data/ztnorm_znorm_tnorm.hdf5 | Bin 18144 -> 0 bytes bob/learn/misc/empca_trainer.cpp | 378 ------ bob/learn/misc/gaussian.cpp | 571 --------- bob/learn/misc/gmm_base_trainer.cpp | 437 ------- bob/learn/misc/gmm_machine.cpp | 834 ------------- bob/learn/misc/gmm_stats.cpp | 623 ---------- .../include/bob.learn.misc/EMPCATrainer.h | 200 --- .../misc/include/bob.learn.misc/FABase.h | 293 ----- .../include/bob.learn.misc/FABaseTrainer.h | 350 ------ .../include/bob.learn.misc/GMMBaseTrainer.h | 161 --- .../misc/include/bob.learn.misc/GMMMachine.h | 371 ------ .../misc/include/bob.learn.misc/GMMStats.h | 141 --- .../misc/include/bob.learn.misc/Gaussian.h | 247 ---- .../misc/include/bob.learn.misc/ISVBase.h | 228 ---- .../misc/include/bob.learn.misc/ISVMachine.h | 230 ---- .../misc/include/bob.learn.misc/ISVTrainer.h | 154 --- .../include/bob.learn.misc/IVectorMachine.h | 274 ---- .../include/bob.learn.misc/IVectorTrainer.h | 152 --- .../misc/include/bob.learn.misc/JFABase.h | 253 ---- .../misc/include/bob.learn.misc/JFAMachine.h | 254 ---- .../misc/include/bob.learn.misc/JFATrainer.h | 238 ---- .../include/bob.learn.misc/KMeansMachine.h | 244 ---- .../include/bob.learn.misc/KMeansTrainer.h | 187 --- .../include/bob.learn.misc/LinearScoring.h | 98 -- .../include/bob.learn.misc/MAP_GMMTrainer.h | 170 --- .../include/bob.learn.misc/ML_GMMTrainer.h | 119 -- .../misc/include/bob.learn.misc/PLDAMachine.h | 702 ----------- .../misc/include/bob.learn.misc/PLDATrainer.h | 310 ----- .../misc/include/bob.learn.misc/ZTNorm.h | 89 -- bob/learn/misc/include/bob.learn.misc/api.h | 127 -- .../misc/include/bob.learn.misc/config.h | 14 - bob/learn/misc/isv_base.cpp | 528 -------- bob/learn/misc/isv_machine.cpp | 604 --------- bob/learn/misc/isv_trainer.cpp | 566 --------- bob/learn/misc/ivector_machine.cpp | 676 ---------- bob/learn/misc/ivector_trainer.cpp | 453 ------- bob/learn/misc/jfa_base.cpp | 578 --------- bob/learn/misc/jfa_machine.cpp | 650 ---------- bob/learn/misc/jfa_trainer.cpp | 1013 --------------- bob/learn/misc/kmeans_machine.cpp | 768 ------------ bob/learn/misc/kmeans_trainer.cpp | 553 --------- bob/learn/misc/linear_scoring.cpp | 266 ---- bob/learn/misc/main.cpp | 145 --- bob/learn/misc/main.h | 312 ----- bob/learn/misc/old/blitz_numpy.cc | 235 ---- bob/learn/misc/old/empca_trainer.cc | 72 -- bob/learn/misc/old/exception.h | 91 -- bob/learn/misc/old/gaussian.cc | 111 -- bob/learn/misc/old/gmm.cc | 330 ----- bob/learn/misc/old/gmm_trainer.cc | 90 -- bob/learn/misc/old/ivector.cc | 136 -- bob/learn/misc/old/ivector_trainer.cc | 129 -- bob/learn/misc/old/jfa.cc | 321 ----- bob/learn/misc/old/jfa_trainer.cc | 392 ------ bob/learn/misc/old/kmeans.cc | 146 --- bob/learn/misc/old/kmeans_trainer.cc | 143 --- bob/learn/misc/old/linearscoring.cc | 146 --- bob/learn/misc/old/machine.cc | 35 - bob/learn/misc/old/main.cc | 93 -- bob/learn/misc/old/ndarray.cc | 1015 --------------- bob/learn/misc/old/ndarray.h | 640 ---------- bob/learn/misc/old/ndarray_numpy.cc | 162 --- bob/learn/misc/old/plda.cc | 216 ---- bob/learn/misc/old/plda_trainer.cc | 171 --- bob/learn/misc/old/tinyvector.cc | 290 ----- bob/learn/misc/old/ztnorm.cc | 152 --- bob/learn/misc/plda_base.cpp | 1097 ----------------- bob/learn/misc/plda_machine.cpp | 801 ------------ bob/learn/misc/plda_trainer.cpp | 704 ----------- bob/learn/misc/test_em.py | 252 ---- bob/learn/misc/test_gaussian.py | 112 -- bob/learn/misc/test_gmm.py | 240 ---- bob/learn/misc/test_ivector.py | 159 --- bob/learn/misc/test_ivector_trainer.py | 363 ------ bob/learn/misc/test_jfa.py | 396 ------ bob/learn/misc/test_jfa_trainer.py | 316 ----- bob/learn/misc/test_kmeans.py | 96 -- bob/learn/misc/test_kmeans_trainer.py | 181 --- bob/learn/misc/test_linearscoring.py | 128 -- bob/learn/misc/test_plda.py | 565 --------- bob/learn/misc/test_plda_trainer.py | 741 ----------- bob/learn/misc/test_ztnorm.py | 122 -- bob/learn/misc/version.cpp | 224 ---- bob/learn/misc/ztnorm.cpp | 146 --- buildout.cfg | 2 +- doc/conf.py | 12 +- doc/guide.rst | 196 +-- doc/index.rst | 2 +- doc/py_api.rst | 4 +- setup.py | 132 +- 158 files changed, 186 insertions(+), 35725 deletions(-) delete mode 100644 bob/learn/misc/MAP_gmm_trainer.cpp delete mode 100644 bob/learn/misc/ML_gmm_trainer.cpp delete mode 100644 bob/learn/misc/__MAP_gmm_trainer__.py delete mode 100644 bob/learn/misc/__ML_gmm_trainer__.py delete mode 100644 bob/learn/misc/__empca_trainer__.py delete mode 100644 bob/learn/misc/__init__.py delete mode 100644 bob/learn/misc/__isv_trainer__.py delete mode 100644 bob/learn/misc/__ivector_trainer__.py delete mode 100644 bob/learn/misc/__jfa_trainer__.py delete mode 100644 bob/learn/misc/__kmeans_trainer__.py delete mode 100644 bob/learn/misc/__plda_trainer__.py delete mode 100644 bob/learn/misc/cpp/BICMachine.cpp delete mode 100644 bob/learn/misc/cpp/BICTrainer.cpp delete mode 100644 bob/learn/misc/cpp/EMPCATrainer.cpp delete mode 100644 bob/learn/misc/cpp/FABase.cpp delete mode 100644 bob/learn/misc/cpp/FABaseTrainer.cpp delete mode 100644 bob/learn/misc/cpp/GMMBaseTrainer.cpp delete mode 100644 bob/learn/misc/cpp/GMMMachine.cpp delete mode 100644 bob/learn/misc/cpp/GMMStats.cpp delete mode 100644 bob/learn/misc/cpp/Gaussian.cpp delete mode 100644 bob/learn/misc/cpp/ISVBase.cpp delete mode 100644 bob/learn/misc/cpp/ISVMachine.cpp delete mode 100644 bob/learn/misc/cpp/ISVTrainer.cpp delete mode 100644 bob/learn/misc/cpp/IVectorMachine.cpp delete mode 100644 bob/learn/misc/cpp/IVectorTrainer.cpp delete mode 100644 bob/learn/misc/cpp/JFABase.cpp delete mode 100644 bob/learn/misc/cpp/JFAMachine.cpp delete mode 100644 bob/learn/misc/cpp/JFATrainer.cpp delete mode 100644 bob/learn/misc/cpp/KMeansMachine.cpp delete mode 100644 bob/learn/misc/cpp/KMeansTrainer.cpp delete mode 100644 bob/learn/misc/cpp/LinearScoring.cpp delete mode 100644 bob/learn/misc/cpp/MAP_GMMTrainer.cpp delete mode 100644 bob/learn/misc/cpp/ML_GMMTrainer.cpp delete mode 100644 bob/learn/misc/cpp/PLDAMachine.cpp delete mode 100644 bob/learn/misc/cpp/PLDATrainer.cpp delete mode 100644 bob/learn/misc/cpp/ZTNorm.cpp delete mode 100644 bob/learn/misc/data/data.hdf5 delete mode 100644 bob/learn/misc/data/dataNormalized.hdf5 delete mode 100644 bob/learn/misc/data/dataforMAP.hdf5 delete mode 100644 bob/learn/misc/data/faithful.torch3.hdf5 delete mode 100644 bob/learn/misc/data/faithful.torch3_f64.hdf5 delete mode 100644 bob/learn/misc/data/gmm.init_means.hdf5 delete mode 100644 bob/learn/misc/data/gmm.init_variances.hdf5 delete mode 100644 bob/learn/misc/data/gmm.init_weights.hdf5 delete mode 100644 bob/learn/misc/data/gmm_MAP.hdf5 delete mode 100644 bob/learn/misc/data/gmm_ML.hdf5 delete mode 100644 bob/learn/misc/data/gmm_ML_32bit_debug.hdf5 delete mode 100644 bob/learn/misc/data/gmm_ML_32bit_release.hdf5 delete mode 100644 bob/learn/misc/data/means.hdf5 delete mode 100644 bob/learn/misc/data/meansAfterKMeans.hdf5 delete mode 100644 bob/learn/misc/data/meansAfterMAP.hdf5 delete mode 100644 bob/learn/misc/data/meansAfterML.hdf5 delete mode 100644 bob/learn/misc/data/new_adapted_mean.hdf5 delete mode 100644 bob/learn/misc/data/samplesFrom2G_f64.hdf5 delete mode 100644 bob/learn/misc/data/stats.hdf5 delete mode 100644 bob/learn/misc/data/variances.hdf5 delete mode 100644 bob/learn/misc/data/variancesAfterKMeans.hdf5 delete mode 100644 bob/learn/misc/data/variancesAfterMAP.hdf5 delete mode 100644 bob/learn/misc/data/variancesAfterML.hdf5 delete mode 100644 bob/learn/misc/data/weights.hdf5 delete mode 100644 bob/learn/misc/data/weightsAfterKMeans.hdf5 delete mode 100644 bob/learn/misc/data/weightsAfterMAP.hdf5 delete mode 100644 bob/learn/misc/data/weightsAfterML.hdf5 delete mode 100644 bob/learn/misc/data/ztnorm_eval_eval.hdf5 delete mode 100644 bob/learn/misc/data/ztnorm_eval_tnorm.hdf5 delete mode 100644 bob/learn/misc/data/ztnorm_result.hdf5 delete mode 100644 bob/learn/misc/data/ztnorm_znorm_eval.hdf5 delete mode 100644 bob/learn/misc/data/ztnorm_znorm_tnorm.hdf5 delete mode 100644 bob/learn/misc/empca_trainer.cpp delete mode 100644 bob/learn/misc/gaussian.cpp delete mode 100644 bob/learn/misc/gmm_base_trainer.cpp delete mode 100644 bob/learn/misc/gmm_machine.cpp delete mode 100644 bob/learn/misc/gmm_stats.cpp delete mode 100644 bob/learn/misc/include/bob.learn.misc/EMPCATrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/FABase.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/FABaseTrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/GMMBaseTrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/GMMMachine.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/GMMStats.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/Gaussian.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/ISVBase.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/ISVMachine.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/ISVTrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/IVectorMachine.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/JFABase.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/JFAMachine.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/JFATrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/KMeansMachine.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/KMeansTrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/LinearScoring.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/MAP_GMMTrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/ML_GMMTrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/PLDAMachine.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/PLDATrainer.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/ZTNorm.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/api.h delete mode 100644 bob/learn/misc/include/bob.learn.misc/config.h delete mode 100644 bob/learn/misc/isv_base.cpp delete mode 100644 bob/learn/misc/isv_machine.cpp delete mode 100644 bob/learn/misc/isv_trainer.cpp delete mode 100644 bob/learn/misc/ivector_machine.cpp delete mode 100644 bob/learn/misc/ivector_trainer.cpp delete mode 100644 bob/learn/misc/jfa_base.cpp delete mode 100644 bob/learn/misc/jfa_machine.cpp delete mode 100644 bob/learn/misc/jfa_trainer.cpp delete mode 100644 bob/learn/misc/kmeans_machine.cpp delete mode 100644 bob/learn/misc/kmeans_trainer.cpp delete mode 100644 bob/learn/misc/linear_scoring.cpp delete mode 100644 bob/learn/misc/main.cpp delete mode 100644 bob/learn/misc/main.h delete mode 100644 bob/learn/misc/old/blitz_numpy.cc delete mode 100644 bob/learn/misc/old/empca_trainer.cc delete mode 100644 bob/learn/misc/old/exception.h delete mode 100644 bob/learn/misc/old/gaussian.cc delete mode 100644 bob/learn/misc/old/gmm.cc delete mode 100644 bob/learn/misc/old/gmm_trainer.cc delete mode 100644 bob/learn/misc/old/ivector.cc delete mode 100644 bob/learn/misc/old/ivector_trainer.cc delete mode 100644 bob/learn/misc/old/jfa.cc delete mode 100644 bob/learn/misc/old/jfa_trainer.cc delete mode 100644 bob/learn/misc/old/kmeans.cc delete mode 100644 bob/learn/misc/old/kmeans_trainer.cc delete mode 100644 bob/learn/misc/old/linearscoring.cc delete mode 100644 bob/learn/misc/old/machine.cc delete mode 100644 bob/learn/misc/old/main.cc delete mode 100644 bob/learn/misc/old/ndarray.cc delete mode 100644 bob/learn/misc/old/ndarray.h delete mode 100644 bob/learn/misc/old/ndarray_numpy.cc delete mode 100644 bob/learn/misc/old/plda.cc delete mode 100644 bob/learn/misc/old/plda_trainer.cc delete mode 100644 bob/learn/misc/old/tinyvector.cc delete mode 100644 bob/learn/misc/old/ztnorm.cc delete mode 100644 bob/learn/misc/plda_base.cpp delete mode 100644 bob/learn/misc/plda_machine.cpp delete mode 100644 bob/learn/misc/plda_trainer.cpp delete mode 100644 bob/learn/misc/test_em.py delete mode 100644 bob/learn/misc/test_gaussian.py delete mode 100644 bob/learn/misc/test_gmm.py delete mode 100644 bob/learn/misc/test_ivector.py delete mode 100644 bob/learn/misc/test_ivector_trainer.py delete mode 100644 bob/learn/misc/test_jfa.py delete mode 100644 bob/learn/misc/test_jfa_trainer.py delete mode 100644 bob/learn/misc/test_kmeans.py delete mode 100644 bob/learn/misc/test_kmeans_trainer.py delete mode 100644 bob/learn/misc/test_linearscoring.py delete mode 100644 bob/learn/misc/test_plda.py delete mode 100644 bob/learn/misc/test_plda_trainer.py delete mode 100644 bob/learn/misc/test_ztnorm.py delete mode 100644 bob/learn/misc/version.cpp delete mode 100644 bob/learn/misc/ztnorm.cpp diff --git a/README.rst b/README.rst index e04faa8..d8da9ec 100644 --- a/README.rst +++ b/README.rst @@ -3,19 +3,19 @@ .. Thu 22 May 2014 15:39:03 CEST .. image:: http://img.shields.io/badge/docs-stable-yellow.png - :target: http://pythonhosted.org/bob.learn.misc/index.html + :target: http://pythonhosted.org/bob.learn.em/index.html .. image:: http://img.shields.io/badge/docs-latest-orange.png - :target: https://www.idiap.ch/software/bob/docs/latest/bioidiap/bob.learn.misc/master/index.html -.. image:: https://travis-ci.org/bioidiap/bob.learn.misc.svg?branch=master - :target: https://travis-ci.org/bioidiap/bob.learn.misc -.. image:: https://coveralls.io/repos/bioidiap/bob.learn.misc/badge.png - :target: https://coveralls.io/r/bioidiap/bob.learn.misc + :target: https://www.idiap.ch/software/bob/docs/latest/bioidiap/bob.learn.em/master/index.html +.. image:: https://travis-ci.org/bioidiap/bob.learn.em.svg?branch=master + :target: https://travis-ci.org/bioidiap/bob.learn.em +.. image:: https://coveralls.io/repos/bioidiap/bob.learn.em/badge.png + :target: https://coveralls.io/r/bioidiap/bob.learn.em .. image:: https://img.shields.io/badge/github-master-0000c0.png - :target: https://github.com/bioidiap/bob.learn.misc/tree/master -.. image:: http://img.shields.io/pypi/v/bob.learn.misc.png - :target: https://pypi.python.org/pypi/bob.learn.misc -.. image:: http://img.shields.io/pypi/dm/bob.learn.misc.png - :target: https://pypi.python.org/pypi/bob.learn.misc + :target: https://github.com/bioidiap/bob.learn.em/tree/master +.. image:: http://img.shields.io/pypi/v/bob.learn.em.png + :target: https://pypi.python.org/pypi/bob.learn.em +.. image:: http://img.shields.io/pypi/dm/bob.learn.em.png + :target: https://pypi.python.org/pypi/bob.learn.em =========================================== Miscelaneous Machines and Trainers in Bob @@ -32,7 +32,7 @@ Please make sure that you have read the `Dependencies <https://github.com/idiap/ Documentation ------------- -For further documentation on this package, please read the `Stable Version <http://pythonhosted.org/bob.learn.misc/index.html>`_ or the `Latest Version <https://www.idiap.ch/software/bob/docs/latest/bioidiap/bob.learn.misc/master/index.html>`_ of the documentation. +For further documentation on this package, please read the `Stable Version <http://pythonhosted.org/bob.learn.em/index.html>`_ or the `Latest Version <https://www.idiap.ch/software/bob/docs/latest/bioidiap/bob.learn.em/master/index.html>`_ of the documentation. For a list of tutorials on this or the other packages ob Bob_, or information on submitting issues, asking questions and starting discussions, please visit its website. .. _bob: https://www.idiap.ch/software/bob diff --git a/bob/learn/misc/MAP_gmm_trainer.cpp b/bob/learn/misc/MAP_gmm_trainer.cpp deleted file mode 100644 index f3a3f4c..0000000 --- a/bob/learn/misc/MAP_gmm_trainer.cpp +++ /dev/null @@ -1,431 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Web 23 Jan 16:42:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static inline bool f(PyObject* o){return o != 0 && PyObject_IsTrue(o) > 0;} /* converts PyObject to bool and returns false if object is NULL */ - -static auto MAP_GMMTrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".MAP_GMMTrainer", - "This class implements the maximum a posteriori M-step of the expectation-maximisation algorithm for a GMM Machine. The prior parameters are encoded in the form of a GMM (e.g. a universal background model). The EM algorithm thus performs GMM adaptation." -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a MAP_GMMTrainer", - "", - true - ) - - .add_prototype("prior_gmm,relevance_factor, update_means, [update_variances], [update_weights], [mean_var_update_responsibilities_threshold]","") - .add_prototype("prior_gmm,alpha, update_means, [update_variances], [update_weights], [mean_var_update_responsibilities_threshold]","") - .add_prototype("other","") - .add_prototype("","") - - .add_parameter("prior_gmm", ":py:class:`bob.learn.misc.GMMMachine`", "The prior GMM to be adapted (Universal Backgroud Model UBM).") - .add_parameter("reynolds_adaptation", "bool", "Will use the Reynolds adaptation procedure? See Eq (14) from [Reynolds2000]_") - .add_parameter("relevance_factor", "double", "If set the reynolds_adaptation parameters, will apply the Reynolds Adaptation procedure. See Eq (14) from [Reynolds2000]_") - .add_parameter("alpha", "double", "Set directly the alpha parameter (Eq (14) from [Reynolds2000]_), ignoring zeroth order statistics as a weighting factor.") - - .add_parameter("update_means", "bool", "Update means on each iteration") - .add_parameter("update_variances", "bool", "Update variances on each iteration") - .add_parameter("update_weights", "bool", "Update weights on each iteration") - .add_parameter("mean_var_update_responsibilities_threshold", "float", "Threshold over the responsibilities of the Gaussians Equations 9.24, 9.25 of Bishop, `Pattern recognition and machine learning`, 2006 require a division by the responsibilities, which might be equal to zero because of numerical issue. This threshold is used to avoid such divisions.") - - .add_parameter("other", ":py:class:`bob.learn.misc.MAP_GMMTrainer`", "A MAP_GMMTrainer object to be copied.") -); - - -static int PyBobLearnMiscMAPGMMTrainer_init_copy(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = MAP_GMMTrainer_doc.kwlist(2); - PyBobLearnMiscMAPGMMTrainerObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscMAPGMMTrainer_Type, &o)){ - MAP_GMMTrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::MAP_GMMTrainer(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscMAPGMMTrainer_init_base_trainer(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist1 = MAP_GMMTrainer_doc.kwlist(0); - char** kwlist2 = MAP_GMMTrainer_doc.kwlist(1); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - bool reynolds_adaptation = false; - double alpha = 0.5; - double relevance_factor = 4.0; - double aux = 0; - - PyObject* update_means = 0; - PyObject* update_variances = 0; - PyObject* update_weights = 0; - double mean_var_update_responsibilities_threshold = std::numeric_limits<double>::epsilon(); - - PyObject* keyword_relevance_factor = Py_BuildValue("s", kwlist1[1]); - PyObject* keyword_alpha = Py_BuildValue("s", kwlist2[1]); - - //Here we have to select which keyword argument to read - if (kwargs && PyDict_Contains(kwargs, keyword_relevance_factor) && (PyArg_ParseTupleAndKeywords(args, kwargs, "O!dO!|O!O!d", kwlist1, - &PyBobLearnMiscGMMMachine_Type, &gmm_machine, - &aux, - &PyBool_Type, &update_means, - &PyBool_Type, &update_variances, - &PyBool_Type, &update_weights, - &mean_var_update_responsibilities_threshold))) - reynolds_adaptation = true; - else if (kwargs && PyDict_Contains(kwargs, keyword_alpha) && (PyArg_ParseTupleAndKeywords(args, kwargs, "O!dO!|O!O!d", kwlist2, - &PyBobLearnMiscGMMMachine_Type, &gmm_machine, - &aux, - &PyBool_Type, &update_means, - &PyBool_Type, &update_variances, - &PyBool_Type, &update_weights, - &mean_var_update_responsibilities_threshold))) - reynolds_adaptation = false; - else{ - PyErr_Format(PyExc_RuntimeError, "%s. The second argument must be a keyword argument.", Py_TYPE(self)->tp_name); - MAP_GMMTrainer_doc.print_usage(); - return -1; - } - - if (reynolds_adaptation) - relevance_factor = aux; - else - alpha = aux; - - - self->cxx.reset(new bob::learn::misc::MAP_GMMTrainer(f(update_means), f(update_variances), f(update_weights), - mean_var_update_responsibilities_threshold, - reynolds_adaptation,relevance_factor, alpha, gmm_machine->cxx)); - return 0; - -} - - - -static int PyBobLearnMiscMAPGMMTrainer_init(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // If the constructor input is GMMBaseTrainer object - if(PyBobLearnMiscMAPGMMTrainer_Check(args)) - return PyBobLearnMiscMAPGMMTrainer_init_copy(self, args, kwargs); - else{ - return PyBobLearnMiscMAPGMMTrainer_init_base_trainer(self, args, kwargs); - } - - BOB_CATCH_MEMBER("cannot create MAP_GMMTrainer", 0) - return 0; -} - - -static void PyBobLearnMiscMAPGMMTrainer_delete(PyBobLearnMiscMAPGMMTrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscMAPGMMTrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscMAPGMMTrainer_Type)); -} - - -static PyObject* PyBobLearnMiscMAPGMMTrainer_RichCompare(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscMAPGMMTrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscMAPGMMTrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare MAP_GMMTrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** relevance_factor *****/ -static auto relevance_factor = bob::extension::VariableDoc( - "relevance_factor", - "double", - "If set the reynolds_adaptation parameters, will apply the Reynolds Adaptation Factor. See Eq (14) from [Reynolds2000]_", - "" -); -PyObject* PyBobLearnMiscMAPGMMTrainer_getRelevanceFactor(PyBobLearnMiscMAPGMMTrainerObject* self, void*){ - BOB_TRY - return Py_BuildValue("d",self->cxx->getRelevanceFactor()); - BOB_CATCH_MEMBER("relevance_factor could not be read", 0) -} -int PyBobLearnMiscMAPGMMTrainer_setRelevanceFactor(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* value, void*){ - BOB_TRY - - if(!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a double", Py_TYPE(self)->tp_name, relevance_factor.name()); - return -1; - } - - self->cxx->setRelevanceFactor(PyFloat_AS_DOUBLE(value)); - return 0; - BOB_CATCH_MEMBER("relevance_factor could not be set", 0) -} - - -/***** alpha *****/ -static auto alpha = bob::extension::VariableDoc( - "alpha", - "double", - "Set directly the alpha parameter (Eq (14) from [Reynolds2000]_), ignoring zeroth order statistics as a weighting factor.", - "" -); -PyObject* PyBobLearnMiscMAPGMMTrainer_getAlpha(PyBobLearnMiscMAPGMMTrainerObject* self, void*){ - BOB_TRY - return Py_BuildValue("d",self->cxx->getAlpha()); - BOB_CATCH_MEMBER("alpha could not be read", 0) -} -int PyBobLearnMiscMAPGMMTrainer_setAlpha(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* value, void*){ - BOB_TRY - - if(!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a double", Py_TYPE(self)->tp_name, alpha.name()); - return -1; - } - - self->cxx->setAlpha(PyFloat_AS_DOUBLE(value)); - return 0; - BOB_CATCH_MEMBER("alpha could not be set", 0) -} - - - -static PyGetSetDef PyBobLearnMiscMAPGMMTrainer_getseters[] = { - { - alpha.name(), - (getter)PyBobLearnMiscMAPGMMTrainer_getAlpha, - (setter)PyBobLearnMiscMAPGMMTrainer_setAlpha, - alpha.doc(), - 0 - }, - { - relevance_factor.name(), - (getter)PyBobLearnMiscMAPGMMTrainer_getRelevanceFactor, - (setter)PyBobLearnMiscMAPGMMTrainer_setRelevanceFactor, - relevance_factor.doc(), - 0 - }, - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialization before the EM steps", - "", - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscMAPGMMTrainer_initialize(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)){ - PyErr_Format(PyExc_RuntimeError, "%s.%s. Was not possible to read :py:class:`bob.learn.misc.GMMMachine`", Py_TYPE(self)->tp_name, initialize.name()); - Py_RETURN_NONE; - } - self->cxx->initialize(*gmm_machine->cxx); - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** eStep ***/ -static auto eStep = bob::extension::FunctionDoc( - "eStep", - "Calculates and saves statistics across the dataset," - "and saves these as m_ss. ", - - "Calculates the average log likelihood of the observations given the GMM," - "and returns this in average_log_likelihood." - "The statistics, m_ss, will be used in the mStep() that follows.", - - true -) -.add_prototype("gmm_machine,data") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscMAPGMMTrainer_eStep(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = eStep.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - PyBlitzArrayObject* data = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->eStep(*gmm_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - BOB_CATCH_MEMBER("cannot perform the eStep method", 0) - - Py_RETURN_NONE; -} - - -/*** mStep ***/ -static auto mStep = bob::extension::FunctionDoc( - "mStep", - - "Performs a maximum a posteriori (MAP) update of the GMM:" - "* parameters using the accumulated statistics in :py:class:`bob.learn.misc.GMMBaseTrainer.m_ss` and the" - "* parameters of the prior model", - "", - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscMAPGMMTrainer_mStep(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = mStep.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)) Py_RETURN_NONE; - - self->cxx->mStep(*gmm_machine->cxx); - - BOB_CATCH_MEMBER("cannot perform the mStep method", 0) - - Py_RETURN_NONE; -} - - -/*** computeLikelihood ***/ -static auto compute_likelihood = bob::extension::FunctionDoc( - "compute_likelihood", - "This functions returns the average min (Square Euclidean) distance (average distance to the closest mean)", - 0, - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscMAPGMMTrainer_compute_likelihood(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = compute_likelihood.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)) Py_RETURN_NONE; - - double value = self->cxx->computeLikelihood(*gmm_machine->cxx); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot perform the computeLikelihood method", 0) -} - - - -static PyMethodDef PyBobLearnMiscMAPGMMTrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscMAPGMMTrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - eStep.name(), - (PyCFunction)PyBobLearnMiscMAPGMMTrainer_eStep, - METH_VARARGS|METH_KEYWORDS, - eStep.doc() - }, - { - mStep.name(), - (PyCFunction)PyBobLearnMiscMAPGMMTrainer_mStep, - METH_VARARGS|METH_KEYWORDS, - mStep.doc() - }, - { - compute_likelihood.name(), - (PyCFunction)PyBobLearnMiscMAPGMMTrainer_compute_likelihood, - METH_VARARGS|METH_KEYWORDS, - compute_likelihood.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscMAPGMMTrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscMAPGMMTrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscMAPGMMTrainer_Type.tp_name = MAP_GMMTrainer_doc.name(); - PyBobLearnMiscMAPGMMTrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscMAPGMMTrainerObject); - PyBobLearnMiscMAPGMMTrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance - PyBobLearnMiscMAPGMMTrainer_Type.tp_doc = MAP_GMMTrainer_doc.doc(); - - // set the functions - PyBobLearnMiscMAPGMMTrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscMAPGMMTrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscMAPGMMTrainer_init); - PyBobLearnMiscMAPGMMTrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscMAPGMMTrainer_delete); - PyBobLearnMiscMAPGMMTrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscMAPGMMTrainer_RichCompare); - PyBobLearnMiscMAPGMMTrainer_Type.tp_methods = PyBobLearnMiscMAPGMMTrainer_methods; - PyBobLearnMiscMAPGMMTrainer_Type.tp_getset = PyBobLearnMiscMAPGMMTrainer_getseters; - PyBobLearnMiscMAPGMMTrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscMAPGMMTrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscMAPGMMTrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscMAPGMMTrainer_Type); - return PyModule_AddObject(module, "_MAP_GMMTrainer", (PyObject*)&PyBobLearnMiscMAPGMMTrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/ML_gmm_trainer.cpp b/bob/learn/misc/ML_gmm_trainer.cpp deleted file mode 100644 index ff72609..0000000 --- a/bob/learn/misc/ML_gmm_trainer.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Web 22 Jan 16:45:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static inline bool f(PyObject* o){return o != 0 && PyObject_IsTrue(o) > 0;} /* converts PyObject to bool and returns false if object is NULL */ - -static auto ML_GMMTrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".ML_GMMTrainer", - "This class implements the maximum likelihood M-step of the expectation-maximisation algorithm for a GMM Machine." -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a ML_GMMTrainer", - "", - true - ) - .add_prototype("update_means, [update_variances], [update_weights], [mean_var_update_responsibilities_threshold]","") - .add_prototype("other","") - .add_prototype("","") - - .add_parameter("update_means", "bool", "Update means on each iteration") - .add_parameter("update_variances", "bool", "Update variances on each iteration") - .add_parameter("update_weights", "bool", "Update weights on each iteration") - .add_parameter("mean_var_update_responsibilities_threshold", "float", "Threshold over the responsibilities of the Gaussians Equations 9.24, 9.25 of Bishop, `Pattern recognition and machine learning`, 2006 require a division by the responsibilities, which might be equal to zero because of numerical issue. This threshold is used to avoid such divisions.") - - - .add_parameter("other", ":py:class:`bob.learn.misc.ML_GMMTrainer`", "A ML_GMMTrainer object to be copied.") -); - - -static int PyBobLearnMiscMLGMMTrainer_init_copy(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ML_GMMTrainer_doc.kwlist(1); - PyBobLearnMiscMLGMMTrainerObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscMLGMMTrainer_Type, &o)){ - ML_GMMTrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ML_GMMTrainer(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscMLGMMTrainer_init_base_trainer(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ML_GMMTrainer_doc.kwlist(0); - - PyObject* update_means = 0; - PyObject* update_variances = 0; - PyObject* update_weights = 0; - double mean_var_update_responsibilities_threshold = std::numeric_limits<double>::epsilon(); - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!|O!O!d", kwlist, - &PyBool_Type, &update_means, - &PyBool_Type, &update_variances, - &PyBool_Type, &update_weights, - &mean_var_update_responsibilities_threshold)){ - ML_GMMTrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ML_GMMTrainer(f(update_means), f(update_variances), f(update_weights), - mean_var_update_responsibilities_threshold)); - return 0; -} - - - -static int PyBobLearnMiscMLGMMTrainer_init(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is GMMBaseTrainer object - if (PyBobLearnMiscMLGMMTrainer_Check(arg)) - return PyBobLearnMiscMLGMMTrainer_init_copy(self, args, kwargs); - else - return PyBobLearnMiscMLGMMTrainer_init_base_trainer(self, args, kwargs); - - - - BOB_CATCH_MEMBER("cannot create GMMBaseTrainer_init_bool", 0) - return 0; -} - - -static void PyBobLearnMiscMLGMMTrainer_delete(PyBobLearnMiscMLGMMTrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscMLGMMTrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscMLGMMTrainer_Type)); -} - - -static PyObject* PyBobLearnMiscMLGMMTrainer_RichCompare(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscMLGMMTrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscMLGMMTrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare ML_GMMTrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -static PyGetSetDef PyBobLearnMiscMLGMMTrainer_getseters[] = { - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialization before the EM steps", - "", - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscMLGMMTrainer_initialize(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)){ - PyErr_Format(PyExc_RuntimeError, "%s.%s. Was not possible to read :py:class:`bob.learn.misc.GMMMachine`", Py_TYPE(self)->tp_name, initialize.name()); - Py_RETURN_NONE; - } - self->cxx->initialize(*gmm_machine->cxx); - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** eStep ***/ -static auto eStep = bob::extension::FunctionDoc( - "eStep", - "Calculates and saves statistics across the dataset," - "and saves these as m_ss. ", - - "Calculates the average log likelihood of the observations given the GMM," - "and returns this in average_log_likelihood." - "The statistics, m_ss, will be used in the mStep() that follows.", - - true -) -.add_prototype("gmm_machine,data") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscMLGMMTrainer_eStep(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = eStep.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - PyBlitzArrayObject* data = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->eStep(*gmm_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - BOB_CATCH_MEMBER("cannot perform the eStep method", 0) - - Py_RETURN_NONE; -} - - -/*** mStep ***/ -static auto mStep = bob::extension::FunctionDoc( - "mStep", - "Performs a maximum likelihood (ML) update of the GMM parameters " - "using the accumulated statistics in :py:class:`bob.learn.misc.GMMBaseTrainer.m_ss`", - - "See Section 9.2.2 of Bishop, \"Pattern recognition and machine learning\", 2006", - - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscMLGMMTrainer_mStep(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = mStep.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)) Py_RETURN_NONE; - - self->cxx->mStep(*gmm_machine->cxx); - - BOB_CATCH_MEMBER("cannot perform the mStep method", 0) - - Py_RETURN_NONE; -} - - -/*** computeLikelihood ***/ -static auto compute_likelihood = bob::extension::FunctionDoc( - "compute_likelihood", - "This functions returns the average min (Square Euclidean) distance (average distance to the closest mean)", - 0, - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscMLGMMTrainer_compute_likelihood(PyBobLearnMiscMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = compute_likelihood.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)) Py_RETURN_NONE; - - double value = self->cxx->computeLikelihood(*gmm_machine->cxx); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot perform the computeLikelihood method", 0) -} - - - -static PyMethodDef PyBobLearnMiscMLGMMTrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscMLGMMTrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - eStep.name(), - (PyCFunction)PyBobLearnMiscMLGMMTrainer_eStep, - METH_VARARGS|METH_KEYWORDS, - eStep.doc() - }, - { - mStep.name(), - (PyCFunction)PyBobLearnMiscMLGMMTrainer_mStep, - METH_VARARGS|METH_KEYWORDS, - mStep.doc() - }, - { - compute_likelihood.name(), - (PyCFunction)PyBobLearnMiscMLGMMTrainer_compute_likelihood, - METH_VARARGS|METH_KEYWORDS, - compute_likelihood.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscMLGMMTrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscMLGMMTrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscMLGMMTrainer_Type.tp_name = ML_GMMTrainer_doc.name(); - PyBobLearnMiscMLGMMTrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscMLGMMTrainerObject); - PyBobLearnMiscMLGMMTrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance - PyBobLearnMiscMLGMMTrainer_Type.tp_doc = ML_GMMTrainer_doc.doc(); - - // set the functions - PyBobLearnMiscMLGMMTrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscMLGMMTrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscMLGMMTrainer_init); - PyBobLearnMiscMLGMMTrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscMLGMMTrainer_delete); - PyBobLearnMiscMLGMMTrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscMLGMMTrainer_RichCompare); - PyBobLearnMiscMLGMMTrainer_Type.tp_methods = PyBobLearnMiscMLGMMTrainer_methods; - PyBobLearnMiscMLGMMTrainer_Type.tp_getset = PyBobLearnMiscMLGMMTrainer_getseters; - PyBobLearnMiscMLGMMTrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscMLGMMTrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscMLGMMTrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscMLGMMTrainer_Type); - return PyModule_AddObject(module, "_ML_GMMTrainer", (PyObject*)&PyBobLearnMiscMLGMMTrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/__MAP_gmm_trainer__.py b/bob/learn/misc/__MAP_gmm_trainer__.py deleted file mode 100644 index 4258b08..0000000 --- a/bob/learn/misc/__MAP_gmm_trainer__.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Mon Jan 23 18:31:10 2015 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _MAP_GMMTrainer -import numpy - -# define the class -class MAP_GMMTrainer(_MAP_GMMTrainer): - - def __init__(self, prior_gmm, update_means=True, update_variances=False, update_weights=False, convergence_threshold=0.001, max_iterations=10, converge_by_likelihood=True, **kwargs): - """ - :py:class:`bob.learn.misc.MAP_GMMTrainer` constructor - - Keyword Parameters: - update_means - - update_variances - - update_weights - - prior_gmm - A :py:class:`bob.learn.misc.GMMMachine` to be adapted - convergence_threshold - Convergence threshold - max_iterations - Number of maximum iterations - converge_by_likelihood - Tells whether we compute log_likelihood as a convergence criteria, or not - alpha - Set directly the alpha parameter (Eq (14) from [Reynolds2000]_), ignoring zeroth order statistics as a weighting factor. - relevance_factor - If set the :py:class:`bob.learn.misc.MAP_GMMTrainer.reynolds_adaptation` parameters, will apply the Reynolds Adaptation procedure. See Eq (14) from [Reynolds2000]_ - """ - - if kwargs.get('alpha')!=None: - alpha = kwargs.get('alpha') - _MAP_GMMTrainer.__init__(self, prior_gmm,alpha=alpha, update_means=update_means, update_variances=update_variances,update_weights=update_weights) - else: - relevance_factor = kwargs.get('relevance_factor') - _MAP_GMMTrainer.__init__(self, prior_gmm, relevance_factor=relevance_factor, update_means=update_means, update_variances=update_variances,update_weights=update_weights) - - self.convergence_threshold = convergence_threshold - self.max_iterations = max_iterations - self.converge_by_likelihood = converge_by_likelihood - - - - - - def train(self, gmm_machine, data): - """ - Train the :py:class:bob.learn.misc.GMMMachine using data - - Keyword Parameters: - gmm_machine - The :py:class:bob.learn.misc.GMMMachine class - data - The data to be trained - """ - - #Initialization - self.initialize(gmm_machine); - - #Do the Expectation-Maximization algorithm - average_output_previous = 0 - average_output = -numpy.inf; - - - #eStep - self.eStep(gmm_machine, data); - - if(self.converge_by_likelihood): - average_output = self.compute_likelihood(gmm_machine); - - for i in range(self.max_iterations): - #saves average output from last iteration - average_output_previous = average_output; - - #mStep - self.mStep(gmm_machine); - - #eStep - self.eStep(gmm_machine, data); - - #Computes log likelihood if required - if(self.converge_by_likelihood): - average_output = self.compute_likelihood(gmm_machine); - - #Terminates if converged (and likelihood computation is set) - if abs((average_output_previous - average_output)/average_output_previous) <= self.convergence_threshold: - break - - -# copy the documentation from the base class -__doc__ = _MAP_GMMTrainer.__doc__ diff --git a/bob/learn/misc/__ML_gmm_trainer__.py b/bob/learn/misc/__ML_gmm_trainer__.py deleted file mode 100644 index 93a3c6c..0000000 --- a/bob/learn/misc/__ML_gmm_trainer__.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Mon Jan 22 18:29:10 2015 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _ML_GMMTrainer -import numpy - -# define the class -class ML_GMMTrainer(_ML_GMMTrainer): - - def __init__(self, update_means=True, update_variances=False, update_weights=False, convergence_threshold=0.001, max_iterations=10, converge_by_likelihood=True): - """ - :py:class:bob.learn.misc.ML_GMMTrainer constructor - - Keyword Parameters: - update_means - - update_variances - - update_weights - - convergence_threshold - Convergence threshold - max_iterations - Number of maximum iterations - converge_by_likelihood - Tells whether we compute log_likelihood as a convergence criteria, or not - - """ - - _ML_GMMTrainer.__init__(self, update_means=update_means, update_variances=update_variances, update_weights=update_weights) - self.convergence_threshold = convergence_threshold - self.max_iterations = max_iterations - self.converge_by_likelihood = converge_by_likelihood - - - def train(self, gmm_machine, data): - """ - Train the :py:class:bob.learn.misc.GMMMachine using data - - Keyword Parameters: - gmm_machine - The :py:class:bob.learn.misc.GMMMachine class - data - The data to be trained - """ - - #Initialization - self.initialize(gmm_machine); - - #Do the Expectation-Maximization algorithm - average_output_previous = 0 - average_output = -numpy.inf; - - - #eStep - self.eStep(gmm_machine, data); - - if(self.converge_by_likelihood): - average_output = self.compute_likelihood(gmm_machine); - - for i in range(self.max_iterations): - #saves average output from last iteration - average_output_previous = average_output; - - #mStep - self.mStep(gmm_machine); - - #eStep - self.eStep(gmm_machine, data); - - #Computes log likelihood if required - if(self.converge_by_likelihood): - average_output = self.compute_likelihood(gmm_machine); - - #Terminates if converged (and likelihood computation is set) - if abs((average_output_previous - average_output)/average_output_previous) <= self.convergence_threshold: - break - - -# copy the documentation from the base class -__doc__ = _ML_GMMTrainer.__doc__ diff --git a/bob/learn/misc/__empca_trainer__.py b/bob/learn/misc/__empca_trainer__.py deleted file mode 100644 index 28f4c9d..0000000 --- a/bob/learn/misc/__empca_trainer__.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Wed Fev 04 13:35:10 2015 +0200 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _EMPCATrainer -import numpy - -# define the class -class EMPCATrainer (_EMPCATrainer): - - def __init__(self, convergence_threshold=0.001, max_iterations=10, compute_likelihood=True): - """ - :py:class:`bob.learn.misc.EMPCATrainer` constructor - - Keyword Parameters: - convergence_threshold - Convergence threshold - max_iterations - Number of maximum iterations - compute_likelihood - - """ - - _EMPCATrainer.__init__(self,convergence_threshold) - self._max_iterations = max_iterations - self._compute_likelihood = compute_likelihood - - - def train(self, linear_machine, data): - """ - Train the :py:class:bob.learn.misc.LinearMachine using data - - Keyword Parameters: - linear_machine - The :py:class:bob.learn.misc.LinearMachine class - data - The data to be trained - """ - - #Initialization - self.initialize(linear_machine, data); - - #Do the Expectation-Maximization algorithm - average_output_previous = 0 - average_output = -numpy.inf; - - #eStep - self.eStep(linear_machine, data); - - if(self._compute_likelihood): - average_output = self.compute_likelihood(linear_machine); - - for i in range(self._max_iterations): - - #saves average output from last iteration - average_output_previous = average_output; - - #mStep - self.mStep(linear_machine); - - #eStep - self.eStep(linear_machine, data); - - #Computes log likelihood if required - if(self._compute_likelihood): - average_output = self.compute_likelihood(linear_machine); - - #Terminates if converged (and likelihood computation is set) - if abs((average_output_previous - average_output)/average_output_previous) <= self._convergence_threshold: - break - - -# copy the documentation from the base class -__doc__ = _EMPCATrainer.__doc__ diff --git a/bob/learn/misc/__init__.py b/bob/learn/misc/__init__.py deleted file mode 100644 index 4f39609..0000000 --- a/bob/learn/misc/__init__.py +++ /dev/null @@ -1,58 +0,0 @@ -# import Libraries of other lib packages -import bob.io.base -import bob.math -import bob.learn.linear - -# import our own Library -import bob.extension -bob.extension.load_bob_library('bob.learn.misc', __file__) - -#from ._old_library import * -from ._library import * -from . import version -from .version import module as __version__ -from .__kmeans_trainer__ import * -from .__ML_gmm_trainer__ import * -from .__MAP_gmm_trainer__ import * -from .__jfa_trainer__ import * -from .__isv_trainer__ import * -from .__ivector_trainer__ import * -from .__plda_trainer__ import * - - -def ztnorm_same_value(vect_a, vect_b): - """Computes the matrix of boolean D for the ZT-norm, which indicates where - the client ids of the T-Norm models and Z-Norm samples match. - - vect_a An (ordered) list of client_id corresponding to the T-Norm models - vect_b An (ordered) list of client_id corresponding to the Z-Norm impostor samples - """ - import numpy - sameMatrix = numpy.ndarray((len(vect_a), len(vect_b)), 'bool') - for j in range(len(vect_a)): - for i in range(len(vect_b)): - sameMatrix[j, i] = (vect_a[j] == vect_b[i]) - return sameMatrix - - -def get_config(): - """Returns a string containing the configuration information. - """ - - import pkg_resources - from .version import externals - - packages = pkg_resources.require(__name__) - this = packages[0] - deps = packages[1:] - - retval = "%s: %s (%s)\n" % (this.key, this.version, this.location) - retval += " - c/c++ dependencies:\n" - for k in sorted(externals): retval += " - %s: %s\n" % (k, externals[k]) - retval += " - python dependencies:\n" - for d in deps: retval += " - %s: %s (%s)\n" % (d.key, d.version, d.location) - - return retval.strip() - -# gets sphinx autodoc done right - don't remove it -__all__ = [_ for _ in dir() if not _.startswith('_')] diff --git a/bob/learn/misc/__isv_trainer__.py b/bob/learn/misc/__isv_trainer__.py deleted file mode 100644 index 98a5457..0000000 --- a/bob/learn/misc/__isv_trainer__.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Mon Fev 02 21:40:10 2015 +0200 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _ISVTrainer -import numpy - -# define the class -class ISVTrainer (_ISVTrainer): - - def __init__(self, max_iterations=10, relevance_factor=4.): - """ - :py:class:`bob.learn.misc.ISVTrainer` constructor - - Keyword Parameters: - max_iterations - Number of maximum iterations - """ - _ISVTrainer.__init__(self, relevance_factor) - self._max_iterations = max_iterations - - - def train(self, isv_base, data): - """ - Train the :py:class:`bob.learn.misc.ISVBase` using data - - Keyword Parameters: - jfa_base - The `:py:class:bob.learn.misc.ISVBase` class - data - The data to be trained - """ - - #Initialization - self.initialize(isv_base, data); - - for i in range(self._max_iterations): - #eStep - self.eStep(isv_base, data); - #mStep - self.mStep(isv_base); - - - -# copy the documentation from the base class -__doc__ = _ISVTrainer.__doc__ diff --git a/bob/learn/misc/__ivector_trainer__.py b/bob/learn/misc/__ivector_trainer__.py deleted file mode 100644 index a53a2d4..0000000 --- a/bob/learn/misc/__ivector_trainer__.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Tue Fev 03 13:20:10 2015 +0200 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _IVectorTrainer -import numpy - -# define the class -class IVectorTrainer (_IVectorTrainer): - - def __init__(self, max_iterations=10, update_sigma=False): - """ - :py:class:`bob.learn.misc.IVectorTrainer` constructor - - Keyword Parameters: - max_iterations - Number of maximum iterations - update_sigma - - """ - _IVectorTrainer.__init__(self, update_sigma) - self._max_iterations = max_iterations - - - def train(self, ivector_machine, data): - """ - Train the :py:class:`bob.learn.misc.IVectorMachine` using data - - Keyword Parameters: - ivector_machine - The `:py:class:bob.learn.misc.IVectorMachine` class - data - The data to be trained - """ - - #Initialization - self.initialize(ivector_machine, data); - - for i in range(self._max_iterations): - #eStep - self.eStep(ivector_machine, data); - #mStep - self.mStep(ivector_machine); - - - -# copy the documentation from the base class -__doc__ = _IVectorTrainer.__doc__ diff --git a/bob/learn/misc/__jfa_trainer__.py b/bob/learn/misc/__jfa_trainer__.py deleted file mode 100644 index ad803ad..0000000 --- a/bob/learn/misc/__jfa_trainer__.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Sun Fev 01 21:10:10 2015 +0200 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _JFATrainer -import numpy - -# define the class -class JFATrainer (_JFATrainer): - - def __init__(self, max_iterations=10): - """ - :py:class:`bob.learn.misc.JFATrainer` constructor - - Keyword Parameters: - max_iterations - Number of maximum iterations - """ - - _JFATrainer.__init__(self) - self._max_iterations = max_iterations - - - def train_loop(self, jfa_base, data): - """ - Train the :py:class:`bob.learn.misc.JFABase` using data - - Keyword Parameters: - jfa_base - The `:py:class:bob.learn.misc.JFABase` class - data - The data to be trained - """ - #V Subspace - for i in range(self._max_iterations): - self.e_step1(jfa_base, data) - self.m_step1(jfa_base, data) - self.finalize1(jfa_base, data) - - #U subspace - for i in range(self._max_iterations): - self.e_step2(jfa_base, data) - self.m_step2(jfa_base, data) - self.finalize2(jfa_base, data) - - # d subspace - for i in range(self._max_iterations): - self.e_step3(jfa_base, data) - self.m_step3(jfa_base, data) - self.finalize3(jfa_base, data) - - - def train(self, jfa_base, data): - """ - Train the :py:class:`bob.learn.misc.JFABase` using data - - Keyword Parameters: - jfa_base - The `:py:class:bob.learn.misc.JFABase` class - data - The data to be trained - """ - self.initialize(jfa_base, data) - self.train_loop(jfa_base, data) - - -# copy the documentation from the base class -__doc__ = _JFATrainer.__doc__ diff --git a/bob/learn/misc/__kmeans_trainer__.py b/bob/learn/misc/__kmeans_trainer__.py deleted file mode 100644 index afe4949..0000000 --- a/bob/learn/misc/__kmeans_trainer__.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Mon Jan 19 11:35:10 2015 +0200 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _KMeansTrainer -import numpy - -# define the class -class KMeansTrainer (_KMeansTrainer): - - def __init__(self, initialization_method="RANDOM", convergence_threshold=0.001, max_iterations=10, converge_by_average_min_distance=True): - """ - :py:class:`bob.learn.misc.KMeansTrainer` constructor - - Keyword Parameters: - initialization_method - The initialization method to generate the initial means - convergence_threshold - Convergence threshold - max_iterations - Number of maximum iterations - converge_by_average_min_distance - Tells whether we compute the average min (square Euclidean) distance, as a convergence criteria, or not - - """ - - _KMeansTrainer.__init__(self, initialization_method="RANDOM", ) - self._convergence_threshold = convergence_threshold - self._max_iterations = max_iterations - self._converge_by_average_min_distance = converge_by_average_min_distance - - - def train(self, kmeans_machine, data): - """ - Train the :py:class:bob.learn.misc.KMeansMachine using data - - Keyword Parameters: - kmeans_machine - The :py:class:bob.learn.misc.KMeansMachine class - data - The data to be trained - """ - - #Initialization - self.initialize(kmeans_machine, data); - - #Do the Expectation-Maximization algorithm - average_output_previous = 0 - average_output = -numpy.inf; - - #eStep - self.eStep(kmeans_machine, data); - - if(self._converge_by_average_min_distance): - average_output = self.compute_likelihood(kmeans_machine); - - for i in range(self._max_iterations): - - #saves average output from last iteration - average_output_previous = average_output; - - #mStep - self.mStep(kmeans_machine); - - #eStep - self.eStep(kmeans_machine, data); - - #Computes log likelihood if required - if(self._converge_by_average_min_distance): - average_output = self.compute_likelihood(kmeans_machine); - - #Terminates if converged (and likelihood computation is set) - if abs((average_output_previous - average_output)/average_output_previous) <= self._convergence_threshold: - break - - -# copy the documentation from the base class -__doc__ = _KMeansTrainer.__doc__ diff --git a/bob/learn/misc/__plda_trainer__.py b/bob/learn/misc/__plda_trainer__.py deleted file mode 100644 index 0fc0ee3..0000000 --- a/bob/learn/misc/__plda_trainer__.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> -# Mon Fev 02 21:40:10 2015 +0200 -# -# Copyright (C) 2011-2015 Idiap Research Institute, Martigny, Switzerland - -from ._library import _PLDATrainer -import numpy - -# define the class -class PLDATrainer (_PLDATrainer): - - def __init__(self, max_iterations=10, use_sum_second_order=False): - """ - :py:class:`bob.learn.misc.PLDATrainer` constructor - - Keyword Parameters: - max_iterations - Number of maximum iterations - """ - _PLDATrainer.__init__(self, use_sum_second_order) - self._max_iterations = max_iterations - - - def train(self, plda_base, data): - """ - Train the :py:class:`bob.learn.misc.PLDABase` using data - - Keyword Parameters: - jfa_base - The `:py:class:bob.learn.misc.PLDABase` class - data - The data to be trained - """ - - #Initialization - self.initialize(plda_base, data); - - for i in range(self._max_iterations): - #eStep - self.e_step(plda_base, data); - #mStep - self.m_step(plda_base, data); - self.finalize(plda_base, data); - - - -# copy the documentation from the base class -__doc__ = _PLDATrainer.__doc__ diff --git a/bob/learn/misc/cpp/BICMachine.cpp b/bob/learn/misc/cpp/BICMachine.cpp deleted file mode 100644 index 4bf047f..0000000 --- a/bob/learn/misc/cpp/BICMachine.cpp +++ /dev/null @@ -1,348 +0,0 @@ -/** - * @date Tue Jun 5 16:54:27 CEST 2012 - * @author Manuel Guenther <Manuel.Guenther@idiap.ch> - * - * A machine that implements the liner projection of input to the output using - * weights, biases and sums: - * output = sum(inputs * weights) + bias - * It is possible to setup the machine to previously normalize the input taking - * into consideration some input bias and division factor. It is also possible - * to set it up to have an activation function. - * A linear classifier. See C. M. Bishop, "Pattern Recognition and Machine - * Learning", chapter 4 - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/BICMachine.h> -#include <bob.math/linear.h> -#include <bob.core/assert.h> -#include <bob.core/check.h> - -/** - * Initializes an empty BIC Machine - * - * @param use_DFFS Add the Distance From Feature Space during score computation? - */ -bob::learn::misc::BICMachine::BICMachine(bool use_DFFS) -: - m_project_data(use_DFFS), - m_use_DFFS(use_DFFS) -{} - -/** - * Assigns the other BICMachine to this, i.e., makes a deep copy of the given machine. - * - * @param other The other BICMachine to get a shallow copy of - * @return a reference to *this - */ -bob::learn::misc::BICMachine::BICMachine(const BICMachine& other) -: - m_project_data(other.m_project_data), - m_use_DFFS(other.m_use_DFFS) -{ - if (m_project_data){ - setBIC(false, other.m_mu_I, other.m_lambda_I, other.m_Phi_I, other.m_rho_I, true); - setBIC(true , other.m_mu_E, other.m_lambda_E, other.m_Phi_E, other.m_rho_E, true); - } else { - setIEC(false, other.m_mu_I, other.m_lambda_I, true); - setIEC(true , other.m_mu_E, other.m_lambda_E, true); - } -} - -/** - * Assigns the other BICMachine to this, i.e., makes a deep copy of the given BICMachine - * - * @param other The other BICMachine to get a deep copy of - * @return a reference to *this - */ -bob::learn::misc::BICMachine& bob::learn::misc::BICMachine::operator=(const BICMachine& other) -{ - if (this != &other) - { - if (other.m_project_data){ - m_use_DFFS = other.m_use_DFFS; - setBIC(false, other.m_mu_I, other.m_lambda_I, other.m_Phi_I, other.m_rho_I, true); - setBIC(true , other.m_mu_E, other.m_lambda_E, other.m_Phi_E, other.m_rho_E, true); - } else { - m_use_DFFS = false; - setIEC(false, other.m_mu_I, other.m_lambda_I, true); - setIEC(true , other.m_mu_E, other.m_lambda_E, true); - } - } - return *this; -} - -/** - * Compares if this machine and the given one are identical - * - * @param other The BICMachine to compare with - * @return true if both machines are identical, i.e., have exactly the same parameters, otherwise false - */ -bool bob::learn::misc::BICMachine::operator==(const BICMachine& other) const -{ - return (m_project_data == other.m_project_data && - (!m_project_data || m_use_DFFS == other.m_use_DFFS) && - bob::core::array::isEqual(m_mu_I, other.m_mu_I) && - bob::core::array::isEqual(m_mu_E, other.m_mu_E) && - bob::core::array::isEqual(m_lambda_I, other.m_lambda_I) && - bob::core::array::isEqual(m_lambda_E, other.m_lambda_E) && - (!m_project_data || - (bob::core::array::isEqual(m_Phi_I, other.m_Phi_I) && - bob::core::array::isEqual(m_Phi_E, other.m_Phi_E) && - (!m_use_DFFS || (m_rho_I == other.m_rho_I && m_rho_E == other.m_rho_E))))); -} - -/** - * Checks if this machine and the given one are different - * - * @param other The BICMachine to compare with - * @return false if both machines are identical, i.e., have exactly the same parameters, otherwise true - */ -bool bob::learn::misc::BICMachine::operator!=(const BICMachine& other) const -{ - return !(this->operator==(other)); -} - -/** - * Compares the given machine with this for similarity - * - * @param other The BICMachine to compare with - * @param r_epsilon The largest value any parameter might relatively differ between the two machines - * @param a_epsilon The largest value any parameter might absolutely differ between the two machines - - * @return true if both machines are approximately equal, otherwise false - */ -bool bob::learn::misc::BICMachine::is_similar_to(const BICMachine& other, - const double r_epsilon, const double a_epsilon) const -{ - if (m_project_data){ - // compare data - if (not bob::core::array::hasSameShape(m_Phi_I, other.m_Phi_I)) return false; - if (not bob::core::array::hasSameShape(m_Phi_E, other.m_Phi_E)) return false; - // check that the projection matrices are close, - // but allow that eigen vectors might have opposite directions - // (i.e., they are either identical -> difference is 0, or opposite -> sum is zero) - for (int i = m_Phi_I.extent(1); i--;){ - const blitz::Array<double,1>& sub1 = m_Phi_I(blitz::Range::all(), i); - const blitz::Array<double,1>& sub2 = other.m_Phi_I(blitz::Range::all(), i); - blitz::Array<double,1> sub2_negative(-sub2); - if (!bob::core::array::isClose(sub1, sub2, r_epsilon, a_epsilon) && !bob::core::array::isClose(sub1, sub2_negative, r_epsilon, a_epsilon)) return false; - } - for (int i = m_Phi_E.shape()[1]; i--;){ - const blitz::Array<double,1>& sub1 = m_Phi_E(blitz::Range::all(), i); - const blitz::Array<double,1>& sub2 = other.m_Phi_E(blitz::Range::all(), i); - blitz::Array<double,1> sub2_negative(-sub2); - if (!bob::core::array::isClose(sub1, sub2, r_epsilon, a_epsilon) && !bob::core::array::isClose(sub1, sub2_negative, r_epsilon, a_epsilon)) return false; - } - } - - return (m_project_data == other.m_project_data && - (!m_project_data || m_use_DFFS == other.m_use_DFFS) && - bob::core::array::isClose(m_mu_I, other.m_mu_I, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_mu_E, other.m_mu_E, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_lambda_I, other.m_lambda_I, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_lambda_E, other.m_lambda_E, r_epsilon, a_epsilon) && - (!m_project_data || - (!m_use_DFFS || (bob::core::isClose(m_rho_I, other.m_rho_I, r_epsilon, a_epsilon) && - bob::core::isClose(m_rho_E, other.m_rho_E, r_epsilon, a_epsilon))))); -} - - - -void bob::learn::misc::BICMachine::initialize(bool clazz, int input_length, int projected_length){ - blitz::Array<double,1>& diff = clazz ? m_diff_E : m_diff_I; - blitz::Array<double,1>& proj = clazz ? m_proj_E : m_proj_I; - diff.resize(input_length); - proj.resize(projected_length); -} - -/** - * Sets the parameters of the given class that are required for computing the IEC scores (Guenther, Wuertz) - * - * @param clazz false for the intrapersonal class, true for the extrapersonal one. - * @param mean The mean vector of the training data - * @param variances The variances of the training data - * @param copy_data If true, makes a deep copy of the matrices, otherwise it just references it (the default) - */ -void bob::learn::misc::BICMachine::setIEC( - bool clazz, - const blitz::Array<double,1>& mean, - const blitz::Array<double,1>& variances, - bool copy_data -){ - m_project_data = false; - // select the right matrices to write - blitz::Array<double,1>& mu = clazz ? m_mu_E : m_mu_I; - blitz::Array<double,1>& lambda = clazz ? m_lambda_E : m_lambda_I; - - // copy mean and variances - if (copy_data){ - mu.resize(mean.shape()); - mu = mean; - lambda.resize(variances.shape()); - lambda = variances; - } else { - mu.reference(mean); - lambda.reference(variances); - } -} - -/** - * Sets the parameters of the given class that are required for computing the BIC scores (Teixeira) - * - * @param clazz false for the intrapersonal class, true for the extrapersonal one. - * @param mean The mean vector of the training data - * @param variances The eigenvalues of the training data - * @param projection The PCA projection matrix - * @param rho The residual eigenvalues, used for DFFS calculation - * @param copy_data If true, makes a deep copy of the matrices, otherwise it just references it (the default) - */ -void bob::learn::misc::BICMachine::setBIC( - bool clazz, - const blitz::Array<double,1>& mean, - const blitz::Array<double,1>& variances, - const blitz::Array<double,2>& projection, - const double rho, - bool copy_data -){ - m_project_data = true; - // select the right matrices to write - blitz::Array<double,1>& mu = clazz ? m_mu_E : m_mu_I; - blitz::Array<double,1>& lambda = clazz ? m_lambda_E : m_lambda_I; - blitz::Array<double,2>& Phi = clazz ? m_Phi_E : m_Phi_I; - double& rho_ = clazz ? m_rho_E : m_rho_I; - - // copy information - if (copy_data){ - mu.resize(mean.shape()); - mu = mean; - lambda.resize(variances.shape()); - lambda = variances; - Phi.resize(projection.shape()); - Phi = projection; - } else { - mu.reference(mean); - lambda.reference(variances); - Phi.reference(projection); - } - rho_ = rho; - - // check that rho has a reasonable value (if it is used) - if (m_use_DFFS && rho_ < 1e-12) throw std::runtime_error("The given average eigenvalue (rho) is too close to zero"); - - // initialize temporaries - initialize(clazz, Phi.shape()[0], Phi.shape()[1]); -} - -/** - * Set or unset the usage of the Distance From Feature Space - * - * @param use_DFFS The new value of use_DFFS - */ -void bob::learn::misc::BICMachine::use_DFFS(bool use_DFFS){ - m_use_DFFS = use_DFFS; - if (m_project_data && m_use_DFFS && (m_rho_E < 1e-12 || m_rho_I < 1e-12)) std::runtime_error("The average eigenvalue (rho) is too close to zero, so using DFFS will not work"); -} - -/** - * Loads the BICMachine from the given hdf5 file. - * - * @param config The hdf5 file containing the required information. - */ -void bob::learn::misc::BICMachine::load(bob::io::base::HDF5File& config){ - //reads all data directly into the member variables - m_project_data = config.read<bool>("project_data"); - m_mu_I.reference(config.readArray<double,1>("intra_mean")); - m_lambda_I.reference(config.readArray<double,1>("intra_variance")); - if (m_project_data){ - m_use_DFFS = config.read<bool>("use_DFFS"); - m_Phi_I.reference(config.readArray<double,2>("intra_subspace")); - initialize(false, m_Phi_I.shape()[0], m_Phi_I.shape()[1]); - m_rho_I = config.read<double>("intra_rho"); - } - - m_mu_E.reference(config.readArray<double,1>("extra_mean")); - m_lambda_E.reference(config.readArray<double,1>("extra_variance")); - if (m_project_data){ - m_Phi_E.reference(config.readArray<double,2>("extra_subspace")); - initialize(true, m_Phi_E.shape()[0], m_Phi_E.shape()[1]); - m_rho_E = config.read<double>("extra_rho"); - } - // check that rho has reasonable values - if (m_project_data && m_use_DFFS && (m_rho_E < 1e-12 || m_rho_I < 1e-12)) throw std::runtime_error("The loaded average eigenvalue (rho) is too close to zero"); - -} - -/** - * Saves the parameters of the BICMachine to the given hdf5 file. - * - * @param config The hdf5 file to write the configuration into. - */ -void bob::learn::misc::BICMachine::save(bob::io::base::HDF5File& config) const{ - config.set("project_data", m_project_data); - config.setArray("intra_mean", m_mu_I); - config.setArray("intra_variance", m_lambda_I); - if (m_project_data){ - config.set("use_DFFS", m_use_DFFS); - config.setArray("intra_subspace", m_Phi_I); - config.set("intra_rho", m_rho_I); - } - - config.setArray("extra_mean", m_mu_E); - config.setArray("extra_variance", m_lambda_E); - if (m_project_data){ - config.setArray("extra_subspace", m_Phi_E); - config.set("extra_rho", m_rho_E); - } -} - -/** - * Computes the BIC or IEC score for the given input vector. - * The score itself is the log-likelihood score of the given input vector belonging to the intrapersonal class. - * No sanity checks of input and output are performed. - * - * @param input A vector (of difference values) to compute the BIC or IEC score for. - * @param output The one-element array that will contain the score afterwards. - */ -void bob::learn::misc::BICMachine::forward_(const blitz::Array<double,1>& input, double& output) const{ - if (m_project_data){ - // subtract mean - m_diff_I = input - m_mu_I; - m_diff_E = input - m_mu_E; - // project data to intrapersonal and extrapersonal subspace - bob::math::prod(m_diff_I, m_Phi_I, m_proj_I); - bob::math::prod(m_diff_E, m_Phi_E, m_proj_E); - - // compute Mahalanobis distance - output = blitz::sum(blitz::pow2(m_proj_E) / m_lambda_E) - blitz::sum(blitz::pow2(m_proj_I) / m_lambda_I); - - // add the DFFS? - if (m_use_DFFS){ - output += blitz::sum(blitz::pow2(m_diff_E) - blitz::pow2(m_proj_E)) / m_rho_E; - output -= blitz::sum(blitz::pow2(m_diff_I) - blitz::pow2(m_proj_I)) / m_rho_I; - } - output /= (m_proj_E.extent(0) + m_proj_I.extent(0)); - } else { - // forward without projection - output = blitz::mean( blitz::pow2(input - m_mu_E) / m_lambda_E - - blitz::pow2(input - m_mu_I) / m_lambda_I); - } -} - -/** - * Computes the BIC or IEC score for the given input vector. - * The score itself is the log-likelihood score of the given input vector belonging to the intrapersonal class. - * Sanity checks of input and output shape are performed. - * - * @param input A vector (of difference values) to compute the BIC or IEC score for. - * @param output The one-element array that will contain the score afterwards. - */ -void bob::learn::misc::BICMachine::forward(const blitz::Array<double,1>& input, double& output) const{ - // perform some checks - bob::core::array::assertSameShape(input, m_mu_E); - - // call the actual method - forward_(input, output); -} - diff --git a/bob/learn/misc/cpp/BICTrainer.cpp b/bob/learn/misc/cpp/BICTrainer.cpp deleted file mode 100644 index 475fad9..0000000 --- a/bob/learn/misc/cpp/BICTrainer.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/** - * @date Wed Jun 6 10:29:09 CEST 2012 - * @author Manuel Guenther <Manuel.Guenther@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/BICTrainer.h> -#include <bob.learn.linear/pca.h> -#include <bob.learn.linear/machine.h> - -static double sqr(const double& x){ - return x*x; -} - -/** - * This function trains one of the classes of the given machine with the given data. - * It computes either BIC projection matrices, or IEC mean and variance. - * - * @param clazz false for the intrapersonal class, true for the extrapersonal one. - * @param machine The machine to be trained. - * @param differences A set of (intra/extra)-personal difference vectors that should be trained. - */ -void bob::learn::misc::BICTrainer::train_single(bool clazz, bob::learn::misc::BICMachine& machine, const blitz::Array<double,2>& differences) const { - int subspace_dim = clazz ? m_M_E : m_M_I; - int input_dim = differences.extent(1); - int data_count = differences.extent(0); - blitz::Range a = blitz::Range::all(); - - if (subspace_dim){ - // train the class using BIC - - // Compute PCA on the given dataset - bob::learn::linear::PCATrainer trainer; - const int n_eigs = trainer.output_size(differences); - bob::learn::linear::Machine pca(input_dim, n_eigs); - blitz::Array<double,1> variances(n_eigs); - trainer.train(pca, variances, differences); - - // compute rho - double rho = 0.; - int non_zero_eigenvalues = std::min(input_dim, data_count-1); - // assert that the number of kept eigenvalues is not chosen to big - if (subspace_dim >= non_zero_eigenvalues) - throw std::runtime_error((boost::format("The chosen subspace dimension %d is larger than the theoretical number of nonzero eigenvalues %d")%subspace_dim%non_zero_eigenvalues).str()); - // compute the average of the reminding eigenvalues - for (int i = subspace_dim; i < non_zero_eigenvalues; ++i){ - rho += variances(i); - } - rho /= non_zero_eigenvalues - subspace_dim; - - // limit dimensionalities - pca.resize(input_dim, subspace_dim); - variances.resizeAndPreserve(subspace_dim); - - // check that all variances are meaningful - for (int i = 0; i < subspace_dim; ++i){ - if (variances(i) < 1e-12) - throw std::runtime_error((boost::format("The chosen subspace dimension is %d, but the %dth eigenvalue is already to small")%subspace_dim%i).str()); - } - - // initialize the machine - blitz::Array<double, 2> projection = pca.getWeights(); - blitz::Array<double, 1> mean = pca.getInputSubtraction(); - machine.setBIC(clazz, mean, variances, projection, rho); - } else { - // train the class using IEC - // => compute mean and variance only - blitz::Array<double,1> mean(input_dim), variance(input_dim); - - // compute mean and variance - mean = 0.; - variance = 0.; - for (int n = data_count; n--;){ - const blitz::Array<double,1>& diff = differences(n,a); - assert(diff.shape()[0] == input_dim); - for (int i = input_dim; i--;){ - mean(i) += diff(i); - variance(i) += sqr(diff(i)); - } - } - // normalize mean and variances - for (int i = 0; i < input_dim; ++i){ - // intrapersonal - variance(i) = (variance(i) - sqr(mean(i)) / data_count) / (data_count - 1.); - mean(i) /= data_count; - if (variance(i) < 1e-12) - throw std::runtime_error((boost::format("The variance of the %dth dimension is too small. Check your data!")%i).str()); - } - - // set the results to the machine - machine.setIEC(clazz, mean, variance); - } -} diff --git a/bob/learn/misc/cpp/EMPCATrainer.cpp b/bob/learn/misc/cpp/EMPCATrainer.cpp deleted file mode 100644 index 60dffc7..0000000 --- a/bob/learn/misc/cpp/EMPCATrainer.cpp +++ /dev/null @@ -1,418 +0,0 @@ -/** - * @date Tue Oct 11 12:18:23 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <vector> -#include <algorithm> -#include <boost/random.hpp> -#include <cmath> - -#include <bob.learn.misc/EMPCATrainer.h> -#include <bob.core/array_copy.h> -#include <bob.core/check.h> -#include <bob.math/linear.h> -#include <bob.math/det.h> -#include <bob.math/inv.h> -#include <bob.math/stats.h> - -bob::learn::misc::EMPCATrainer::EMPCATrainer(bool compute_likelihood): - m_compute_likelihood(compute_likelihood), - m_rng(new boost::mt19937()), - m_S(0,0), - m_z_first_order(0,0), m_z_second_order(0,0,0), - m_inW(0,0), m_invM(0,0), m_sigma2(0), m_f_log2pi(0), - m_tmp_dxf(0,0), m_tmp_d(0), m_tmp_f(0), - m_tmp_dxd_1(0,0), m_tmp_dxd_2(0,0), - m_tmp_fxd_1(0,0), m_tmp_fxd_2(0,0), - m_tmp_fxf_1(0,0), m_tmp_fxf_2(0,0) -{ -} - -bob::learn::misc::EMPCATrainer::EMPCATrainer(const bob::learn::misc::EMPCATrainer& other): - m_compute_likelihood(other.m_compute_likelihood), - m_rng(other.m_rng), - m_S(bob::core::array::ccopy(other.m_S)), - m_z_first_order(bob::core::array::ccopy(other.m_z_first_order)), - m_z_second_order(bob::core::array::ccopy(other.m_z_second_order)), - m_inW(bob::core::array::ccopy(other.m_inW)), - m_invM(bob::core::array::ccopy(other.m_invM)), - m_sigma2(other.m_sigma2), m_f_log2pi(other.m_f_log2pi), - m_tmp_dxf(bob::core::array::ccopy(other.m_tmp_dxf)), - m_tmp_d(bob::core::array::ccopy(other.m_tmp_d)), - m_tmp_f(bob::core::array::ccopy(other.m_tmp_f)), - m_tmp_dxd_1(bob::core::array::ccopy(other.m_tmp_dxd_1)), - m_tmp_dxd_2(bob::core::array::ccopy(other.m_tmp_dxd_2)), - m_tmp_fxd_1(bob::core::array::ccopy(other.m_tmp_fxd_1)), - m_tmp_fxd_2(bob::core::array::ccopy(other.m_tmp_fxd_2)), - m_tmp_fxf_1(bob::core::array::ccopy(other.m_tmp_fxf_1)), - m_tmp_fxf_2(bob::core::array::ccopy(other.m_tmp_fxf_2)) -{ -} - -bob::learn::misc::EMPCATrainer::~EMPCATrainer() -{ -} - -bob::learn::misc::EMPCATrainer& bob::learn::misc::EMPCATrainer::operator= - (const bob::learn::misc::EMPCATrainer& other) -{ - if (this != &other) - { - m_rng = other.m_rng; - m_compute_likelihood = other.m_compute_likelihood; - m_S = bob::core::array::ccopy(other.m_S); - m_z_first_order = bob::core::array::ccopy(other.m_z_first_order); - m_z_second_order = bob::core::array::ccopy(other.m_z_second_order); - m_inW = bob::core::array::ccopy(other.m_inW); - m_invM = bob::core::array::ccopy(other.m_invM); - m_sigma2 = other.m_sigma2; - m_f_log2pi = other.m_f_log2pi; - m_tmp_dxf = bob::core::array::ccopy(other.m_tmp_dxf); - m_tmp_d = bob::core::array::ccopy(other.m_tmp_d); - m_tmp_f = bob::core::array::ccopy(other.m_tmp_f); - m_tmp_dxd_1 = bob::core::array::ccopy(other.m_tmp_dxd_1); - m_tmp_dxd_2 = bob::core::array::ccopy(other.m_tmp_dxd_2); - m_tmp_fxd_1 = bob::core::array::ccopy(other.m_tmp_fxd_1); - m_tmp_fxd_2 = bob::core::array::ccopy(other.m_tmp_fxd_2); - m_tmp_fxf_1 = bob::core::array::ccopy(other.m_tmp_fxf_1); - m_tmp_fxf_2 = bob::core::array::ccopy(other.m_tmp_fxf_2); - } - return *this; -} - -bool bob::learn::misc::EMPCATrainer::operator== - (const bob::learn::misc::EMPCATrainer &other) const -{ - return m_compute_likelihood == other.m_compute_likelihood && - m_rng == other.m_rng && - bob::core::array::isEqual(m_S, other.m_S) && - bob::core::array::isEqual(m_z_first_order, other.m_z_first_order) && - bob::core::array::isEqual(m_z_second_order, other.m_z_second_order) && - bob::core::array::isEqual(m_inW, other.m_inW) && - bob::core::array::isEqual(m_invM, other.m_invM) && - m_sigma2 == other.m_sigma2 && - m_f_log2pi == other.m_f_log2pi; -} - -bool bob::learn::misc::EMPCATrainer::operator!= - (const bob::learn::misc::EMPCATrainer &other) const -{ - return !(this->operator==(other)); -} - -bool bob::learn::misc::EMPCATrainer::is_similar_to - (const bob::learn::misc::EMPCATrainer &other, const double r_epsilon, - const double a_epsilon) const -{ - return m_compute_likelihood == other.m_compute_likelihood && - m_rng == other.m_rng && - bob::core::array::isClose(m_S, other.m_S, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_z_first_order, other.m_z_first_order, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_z_second_order, other.m_z_second_order, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_inW, other.m_inW, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_invM, other.m_invM, r_epsilon, a_epsilon) && - bob::core::isClose(m_sigma2, other.m_sigma2, r_epsilon, a_epsilon) && - bob::core::isClose(m_f_log2pi, other.m_f_log2pi, r_epsilon, a_epsilon); -} - -void bob::learn::misc::EMPCATrainer::initialize(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar) -{ - // reinitializes array members and checks dimensionality - initMembers(machine, ar); - - // computes the mean and the covariance if required - computeMeanVariance(machine, ar); - - // Random initialization of W and sigma2 - initRandomWSigma2(machine); - - // Computes the product m_inW = W^T.W - computeWtW(machine); - // Computes inverse(M), where M = Wt * W + sigma2 * Id - computeInvM(); -} - - -void bob::learn::misc::EMPCATrainer::initMembers( - const bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar) -{ - // Gets dimensions - const size_t n_samples = ar.extent(0); - const size_t n_features = ar.extent(1); - - // Checks that the dimensions are matching - const size_t n_inputs = machine.inputSize(); - const size_t n_outputs = machine.outputSize(); - - // Checks that the dimensions are matching - if (n_inputs != n_features) { - boost::format m("number of inputs (%u) does not match the number of features (%u)"); - m % n_inputs % n_features; - throw std::runtime_error(m.str()); - } - - // Covariance matrix S is only required to compute the log likelihood - if (m_compute_likelihood) - m_S.resize(n_features,n_features); - else - m_S.resize(0,0); - m_z_first_order.resize(n_samples, n_outputs); - m_z_second_order.resize(n_samples, n_outputs, n_outputs); - m_inW.resize(n_outputs, n_outputs); - m_invM.resize(n_outputs, n_outputs); - m_sigma2 = 0.; - m_f_log2pi = n_features * log(2*M_PI); - - // Cache - m_tmp_dxf.resize(n_outputs, n_features); - m_tmp_d.resize(n_outputs); - m_tmp_f.resize(n_features); - m_tmp_dxd_1.resize(n_outputs, n_outputs); - m_tmp_dxd_2.resize(n_outputs, n_outputs); - m_tmp_fxd_1.resize(n_features, n_outputs); - m_tmp_fxd_2.resize(n_features, n_outputs); - // The following large cache matrices are only required to compute the - // log likelihood. - if (m_compute_likelihood) - { - m_tmp_fxf_1.resize(n_features, n_features); - m_tmp_fxf_2.resize(n_features, n_features); - } - else - { - m_tmp_fxf_1.resize(0,0); - m_tmp_fxf_2.resize(0,0); - } -} - -void bob::learn::misc::EMPCATrainer::computeMeanVariance(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar) -{ - size_t n_samples = ar.extent(0); - blitz::Array<double,1> mu = machine.updateInputSubtraction(); - blitz::Range all = blitz::Range::all(); - if (m_compute_likelihood) - { - // Mean and scatter computation - bob::math::scatter(ar, m_S, mu); - // divides scatter by N-1 - m_S /= static_cast<double>(n_samples-1); - } - else - { - // computes the mean and updates mu - mu = 0.; - for (size_t i=0; i<n_samples; ++i) - mu += ar(i,all); - mu /= static_cast<double>(n_samples); - } -} - -void bob::learn::misc::EMPCATrainer::initRandomWSigma2(bob::learn::linear::Machine& machine) -{ - // Initializes the random number generator - boost::uniform_01<> range01; - boost::variate_generator<boost::mt19937&, boost::uniform_01<> > die(*m_rng, range01); - - // W initialization (TODO: add method in core) - blitz::Array<double,2> W = machine.updateWeights(); - double ratio = 2.; /// Follows matlab implementation using a ratio of 2 - for (int i=0; i<W.extent(0); ++i) - for (int j=0; j<W.extent(1); ++j) - W(i,j) = die() * ratio; - // sigma2 initialization - m_sigma2 = die() * ratio; -} - -void bob::learn::misc::EMPCATrainer::computeWtW(bob::learn::linear::Machine& machine) -{ - const blitz::Array<double,2> W = machine.getWeights(); - const blitz::Array<double,2> Wt = W.transpose(1,0); - bob::math::prod(Wt, W, m_inW); -} - -void bob::learn::misc::EMPCATrainer::computeInvM() -{ - // Compute inverse(M), where M = W^T * W + sigma2 * Id - bob::math::eye(m_tmp_dxd_1); // m_tmp_dxd_1 = Id - m_tmp_dxd_1 *= m_sigma2; // m_tmp_dxd_1 = sigma2 * Id - m_tmp_dxd_1 += m_inW; // m_tmp_dxd_1 = M = W^T * W + sigma2 * Id - bob::math::inv(m_tmp_dxd_1, m_invM); // m_invM = inv(M) -} - - - -void bob::learn::misc::EMPCATrainer::eStep(bob::learn::linear::Machine& machine, const blitz::Array<double,2>& ar) -{ - // Gets mu and W from the machine - const blitz::Array<double,1>& mu = machine.getInputSubtraction(); - const blitz::Array<double,2>& W = machine.getWeights(); - const blitz::Array<double,2> Wt = W.transpose(1,0); // W^T - - // Computes the statistics - blitz::Range a = blitz::Range::all(); - for(int i=0; i<ar.extent(0); ++i) - { - /// 1/ First order statistics: \f$z_first_order_i = inv(M) W^T (t - \mu)\f$ - // m_tmp_f = t (sample) - mu (normalized sample) - m_tmp_f = ar(i,a) - mu; - // m_tmp_dxf = inv(M) * W^T - bob::math::prod(m_invM, Wt, m_tmp_dxf); - blitz::Array<double,1> z_first_order_i = m_z_first_order(i,blitz::Range::all()); - // z_first_order_i = inv(M) * W^T * (t - mu) - bob::math::prod(m_tmp_dxf, m_tmp_f, z_first_order_i); - - /// 2/ Second order statistics: - /// z_second_order_i = sigma2 * inv(M) + z_first_order_i * z_first_order_i^T - blitz::Array<double,2> z_second_order_i = m_z_second_order(i,blitz::Range::all(),blitz::Range::all()); - // m_tmp_dxd = z_first_order_i * z_first_order_i^T - bob::math::prod(z_first_order_i, z_first_order_i, m_tmp_dxd_1); // outer product - // z_second_order_i = sigma2 * inv(M) - z_second_order_i = m_invM; - z_second_order_i *= m_sigma2; - // z_second_order_i = sigma2 * inv(M) + z_first_order_i * z_first_order_i^T - z_second_order_i += m_tmp_dxd_1; - } -} - -void bob::learn::misc::EMPCATrainer::mStep(bob::learn::linear::Machine& machine, const blitz::Array<double,2>& ar) -{ - // 1/ New estimate of W - updateW(machine, ar); - - // 2/ New estimate of sigma2 - updateSigma2(machine, ar); - - // Computes the new value of inverse(M), where M = Wt * W + sigma2 * Id - computeInvM(); -} - -void bob::learn::misc::EMPCATrainer::updateW(bob::learn::linear::Machine& machine, const blitz::Array<double,2>& ar) { - // Get the mean mu and the projection matrix W - const blitz::Array<double,1>& mu = machine.getInputSubtraction(); - blitz::Array<double,2>& W = machine.updateWeights(); - const blitz::Array<double,2> Wt = W.transpose(1,0); // W^T - - // Compute W = sum{ (t_{i} - mu) z_first_order_i^T} * inv( sum{z_second_order_i} ) - m_tmp_fxd_1 = 0.; - m_tmp_dxd_1 = 0.; - blitz::Range a = blitz::Range::all(); - for(int i=0; i<ar.extent(0); ++i) - { - // m_tmp_f = t (sample) - mu (normalized sample) - m_tmp_f = ar(i,a) - mu; - // first order statistics of sample i - blitz::Array<double,1> z_first_order_i = m_z_first_order(i,blitz::Range::all()); - // m_tmp_fxd_2 = (t - mu)*z_first_order_i - bob::math::prod(m_tmp_f, z_first_order_i, m_tmp_fxd_2); - m_tmp_fxd_1 += m_tmp_fxd_2; - - // second order statistics of sample i - blitz::Array<double,2> z_second_order_i = m_z_second_order(i,blitz::Range::all(),blitz::Range::all()); - m_tmp_dxd_1 += z_second_order_i; - } - - // m_tmp_dxd_2 = inv( sum(E(x_i.x_i^T)) ) - bob::math::inv(m_tmp_dxd_1, m_tmp_dxd_2); - // New estimates of W - bob::math::prod(m_tmp_fxd_1, m_tmp_dxd_2, W); - // Updates W'*W as well - bob::math::prod(Wt, W, m_inW); -} - -void bob::learn::misc::EMPCATrainer::updateSigma2(bob::learn::linear::Machine& machine, const blitz::Array<double,2>& ar) { - // Get the mean mu and the projection matrix W - const blitz::Array<double,1>& mu = machine.getInputSubtraction(); - const blitz::Array<double,2>& W = machine.getWeights(); - const blitz::Array<double,2> Wt = W.transpose(1,0); // W^T - - m_sigma2 = 0.; - blitz::Range a = blitz::Range::all(); - for(int i=0; i<ar.extent(0); ++i) - { - // a. sigma2 += || t - mu ||^2 - // m_tmp_f = t (sample) - mu (normalized sample) - m_tmp_f = ar(i,a) - mu; - // sigma2 += || t - mu ||^2 - m_sigma2 += blitz::sum(blitz::pow2(m_tmp_f)); - - // b. sigma2 -= 2*E(x_i)^T*W^T*(t - mu) - // m_tmp_d = W^T*(t - mu) - bob::math::prod(Wt, m_tmp_f, m_tmp_d); - // first order of i - blitz::Array<double,1> z_first_order_i = m_z_first_order(i,blitz::Range::all()); - // sigma2 -= 2*E(x_i)^T*W^T*(t - mu) - m_sigma2 -= 2*bob::math::dot(z_first_order_i, m_tmp_d); - - // c. sigma2 += trace( E(x_i.x_i^T)*W^T*W ) - // second order of i - blitz::Array<double,2> z_second_order_i = m_z_second_order(i,blitz::Range::all(),blitz::Range::all()); - // m_tmp_dxd_1 = E(x_i.x_i^T)*W^T*W - bob::math::prod(z_second_order_i, m_inW, m_tmp_dxd_1); - // sigma2 += trace( E(x_i.x_i^T)*W^T*W ) - m_sigma2 += bob::math::trace(m_tmp_dxd_1); - } - // Normalization factor - m_sigma2 /= (static_cast<double>(ar.extent(0)) * mu.extent(0)); -} - -double bob::learn::misc::EMPCATrainer::computeLikelihood(bob::learn::linear::Machine& machine) -{ - // Get W projection matrix - const blitz::Array<double,2>& W = machine.getWeights(); - const blitz::Array<double,2> Wt = W.transpose(1,0); // W^T - const size_t n_features = m_S.extent(0); - - // 1/ Compute det(C), where C = sigma2.I + W.W^T - // det(C) = det(sigma2 * C / sigma2) = det(sigma2 * Id) * det(C / sigma2) - // We are using Sylvester's determinant theorem to compute a dxd - // determinant rather than a fxf one: det(I + A.B) = det(I + B.A) - // det(C) = sigma2^n_features * det(I + W.W^T/sigma2) - // = sigma2^n_features * det(I + W^T.W/sigma2) (cf. Bishop Appendix C) - // detC = det( eye(n_features) * sigma2 ) - - // detC = sigma2^n_features - double detC = pow(m_sigma2, n_features); - // m_tmp_dxd_1 = Id - bob::math::eye(m_tmp_dxd_1); - // m_tmp_dxd_2 = W^T.W - bob::math::prod(Wt, W, m_tmp_dxd_2); - // m_tmp_dxd_2 = W^T.W / sigma2 - m_tmp_dxd_2 /= m_sigma2; - // m_tmp_dxd_1 = Id + W^T.W / sigma2 - m_tmp_dxd_1 += m_tmp_dxd_2; - // detC = sigma2^n_features * det(I + W^T.W/sigma2) - detC *= bob::math::det(m_tmp_dxd_1); - - // 2/ Compute inv(C), where C = sigma2.I + W.W^T - // We are using the following identity (Property C.7 of Bishop's book) - // (A + B.D^-1.C)^-1 = A^-1 - A^-1.B(D+C.A^-1.B)^-1.C.A^-1 - // Hence, inv(C) = sigma2^-1 .(I - W.M^-1.W^T) - - // Compute inverse(M), where M = Wt * W + sigma2 * Id - computeInvM(); - // m_tmp_fxf_1 = I = eye(n_features) - bob::math::eye(m_tmp_fxf_1); - // m_tmp_fxd_1 = W * inv(M) - bob::math::prod(W, m_invM, m_tmp_fxd_1); - // m_tmp_fxf_2 = (W * inv(M) * Wt) - bob::math::prod(m_tmp_fxd_1, Wt, m_tmp_fxf_2); - // m_tmp_fxd_1 = inv(C) = (I - W.M^-1.W^T) / sigma2 - m_tmp_fxf_1 -= m_tmp_fxf_2; - m_tmp_fxf_1 /= m_sigma2; - - // 3/ Compute inv(C).S - bob::math::prod(m_tmp_fxf_1, m_S, m_tmp_fxf_2); - - // 4/ Use previous values to compute the log likelihood: - // Log likelihood = - N/2*{ d*ln(2*PI) + ln |detC| + tr(C^-1.S) } - double llh = - static_cast<double>(m_z_first_order.extent(0)) / 2. * - ( m_f_log2pi + log(fabs(detC)) + bob::math::trace(m_tmp_fxf_2) ); - - return llh; -} diff --git a/bob/learn/misc/cpp/FABase.cpp b/bob/learn/misc/cpp/FABase.cpp deleted file mode 100644 index dab2aeb..0000000 --- a/bob/learn/misc/cpp/FABase.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/** - * @date Tue Jan 27 15:51:15 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - - -#include <bob.learn.misc/FABase.h> -#include <bob.core/array_copy.h> -#include <bob.math/linear.h> -#include <bob.math/inv.h> -#include <limits> - - -//////////////////// FABase //////////////////// -bob::learn::misc::FABase::FABase(): - m_ubm(boost::shared_ptr<bob::learn::misc::GMMMachine>()), m_ru(1), m_rv(1), - m_U(0,1), m_V(0,1), m_d(0) -{} - -bob::learn::misc::FABase::FABase(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, - const size_t ru, const size_t rv): - m_ubm(ubm), m_ru(ru), m_rv(rv), - m_U(getSupervectorLength(),ru), m_V(getSupervectorLength(),rv), m_d(getSupervectorLength()) -{ - if (ru < 1) { - boost::format m("value for parameter `ru' (%lu) cannot be smaller than 1"); - m % ru; - throw std::runtime_error(m.str()); - } - if (rv < 1) { - boost::format m("value for parameter `rv' (%lu) cannot be smaller than 1"); - m % ru; - throw std::runtime_error(m.str()); - } - updateCache(); -} - -bob::learn::misc::FABase::FABase(const bob::learn::misc::FABase& other): - m_ubm(other.m_ubm), m_ru(other.m_ru), m_rv(other.m_rv), - m_U(bob::core::array::ccopy(other.m_U)), - m_V(bob::core::array::ccopy(other.m_V)), - m_d(bob::core::array::ccopy(other.m_d)) -{ - updateCache(); -} - -bob::learn::misc::FABase::~FABase() { -} - -bob::learn::misc::FABase& bob::learn::misc::FABase::operator= -(const bob::learn::misc::FABase& other) -{ - if (this != &other) - { - m_ubm = other.m_ubm; - m_ru = other.m_ru; - m_rv = other.m_rv; - m_U.reference(bob::core::array::ccopy(other.m_U)); - m_V.reference(bob::core::array::ccopy(other.m_V)); - m_d.reference(bob::core::array::ccopy(other.m_d)); - - updateCache(); - } - return *this; -} - -bool bob::learn::misc::FABase::operator==(const bob::learn::misc::FABase& b) const -{ - return ( (((m_ubm && b.m_ubm) && *m_ubm == *(b.m_ubm)) || (!m_ubm && !b.m_ubm)) && - m_ru == b.m_ru && m_rv == b.m_rv && - bob::core::array::isEqual(m_U, b.m_U) && - bob::core::array::isEqual(m_V, b.m_V) && - bob::core::array::isEqual(m_d, b.m_d)); -} - -bool bob::learn::misc::FABase::operator!=(const bob::learn::misc::FABase& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::FABase::is_similar_to(const bob::learn::misc::FABase& b, - const double r_epsilon, const double a_epsilon) const -{ - // TODO: update is_similar_to of the GMMMachine with the 2 epsilon's - return (( ((m_ubm && b.m_ubm) && m_ubm->is_similar_to(*(b.m_ubm), a_epsilon)) || - (!m_ubm && !b.m_ubm) ) && - m_ru == b.m_ru && m_rv == b.m_rv && - bob::core::array::isClose(m_U, b.m_U, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_V, b.m_V, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_d, b.m_d, r_epsilon, a_epsilon)); -} - -void bob::learn::misc::FABase::resize(const size_t ru, const size_t rv) -{ - if (ru < 1) { - boost::format m("value for parameter `ru' (%lu) cannot be smaller than 1"); - m % ru; - throw std::runtime_error(m.str()); - } - if (rv < 1) { - boost::format m("value for parameter `rv' (%lu) cannot be smaller than 1"); - m % ru; - throw std::runtime_error(m.str()); - } - - m_ru = ru; - m_rv = rv; - m_U.resizeAndPreserve(m_U.extent(0), ru); - m_V.resizeAndPreserve(m_V.extent(0), rv); - - updateCacheUbmUVD(); -} - -void bob::learn::misc::FABase::resize(const size_t ru, const size_t rv, const size_t cd) -{ - if (ru < 1) { - boost::format m("value for parameter `ru' (%lu) cannot be smaller than 1"); - m % ru; - throw std::runtime_error(m.str()); - } - if (rv < 1) { - boost::format m("value for parameter `rv' (%lu) cannot be smaller than 1"); - m % ru; - throw std::runtime_error(m.str()); - } - - if (!m_ubm || (m_ubm && getSupervectorLength() == cd)) - { - m_ru = ru; - m_rv = rv; - m_U.resizeAndPreserve(cd, ru); - m_V.resizeAndPreserve(cd, rv); - m_d.resizeAndPreserve(cd); - - updateCacheUbmUVD(); - } - else { - boost::format m("value for parameter `cd' (%lu) is not set to %lu"); - m % cd % getSupervectorLength(); - throw std::runtime_error(m.str()); - } -} - -void bob::learn::misc::FABase::setUbm(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm) -{ - m_ubm = ubm; - m_U.resizeAndPreserve(getSupervectorLength(), m_ru); - m_V.resizeAndPreserve(getSupervectorLength(), m_rv); - m_d.resizeAndPreserve(getSupervectorLength()); - - updateCache(); -} - -void bob::learn::misc::FABase::setU(const blitz::Array<double,2>& U) -{ - if(U.extent(0) != m_U.extent(0)) { //checks dimension - boost::format m("number of rows in parameter `U' (%d) does not match the expected size (%d)"); - m % U.extent(0) % m_U.extent(0); - throw std::runtime_error(m.str()); - } - if(U.extent(1) != m_U.extent(1)) { //checks dimension - boost::format m("number of columns in parameter `U' (%d) does not match the expected size (%d)"); - m % U.extent(1) % m_U.extent(1); - throw std::runtime_error(m.str()); - } - m_U.reference(bob::core::array::ccopy(U)); - - // update cache - updateCacheUbmUVD(); -} - -void bob::learn::misc::FABase::setV(const blitz::Array<double,2>& V) -{ - if(V.extent(0) != m_V.extent(0)) { //checks dimension - boost::format m("number of rows in parameter `V' (%d) does not match the expected size (%d)"); - m % V.extent(0) % m_V.extent(0); - throw std::runtime_error(m.str()); - } - if(V.extent(1) != m_V.extent(1)) { //checks dimension - boost::format m("number of columns in parameter `V' (%d) does not match the expected size (%d)"); - m % V.extent(1) % m_V.extent(1); - throw std::runtime_error(m.str()); - } - m_V.reference(bob::core::array::ccopy(V)); -} - -void bob::learn::misc::FABase::setD(const blitz::Array<double,1>& d) -{ - if(d.extent(0) != m_d.extent(0)) { //checks dimension - boost::format m("size of input vector `d' (%d) does not match the expected size (%d)"); - m % d.extent(0) % m_d.extent(0); - throw std::runtime_error(m.str()); - } - m_d.reference(bob::core::array::ccopy(d)); -} - - -void bob::learn::misc::FABase::updateCache() -{ - updateCacheUbm(); - updateCacheUbmUVD(); - resizeTmp(); -} - -void bob::learn::misc::FABase::resizeTmp() -{ - m_tmp_IdPlusUSProdInv.resize(getDimRu(),getDimRu()); - m_tmp_Fn_x.resize(getSupervectorLength()); - m_tmp_ru.resize(getDimRu()); - m_tmp_ruD.resize(getDimRu(), getNInputs()); - m_tmp_ruru.resize(getDimRu(), getDimRu()); -} - -void bob::learn::misc::FABase::updateCacheUbm() -{ - // Put supervectors in cache - if (m_ubm) - { - m_cache_mean.resize(getSupervectorLength()); - m_cache_sigma.resize(getSupervectorLength()); - m_cache_mean = m_ubm->getMeanSupervector(); - m_cache_sigma = m_ubm->getVarianceSupervector(); - } -} - -void bob::learn::misc::FABase::updateCacheUbmUVD() -{ - // Compute and put U^{T}.diag(sigma)^{-1} in cache - if (m_ubm) - { - blitz::firstIndex i; - blitz::secondIndex j; - m_cache_UtSigmaInv.resize(getDimRu(), getSupervectorLength()); - m_cache_UtSigmaInv = m_U(j,i) / m_cache_sigma(j); // Ut * diag(sigma)^-1 - } -} - -void bob::learn::misc::FABase::computeIdPlusUSProdInv(const bob::learn::misc::GMMStats& gmm_stats, - blitz::Array<double,2>& output) const -{ - // Computes (Id + U^T.Sigma^-1.U.N_{i,h}.U)^-1 = - // (Id + sum_{c=1..C} N_{i,h}.U_{c}^T.Sigma_{c}^-1.U_{c})^-1 - - // Blitz compatibility: ugly fix (const_cast, as old blitz version does not - // provide a non-const version of transpose()) - blitz::Array<double,2> Ut = const_cast<blitz::Array<double,2>&>(m_U).transpose(1,0); - - blitz::firstIndex i; - blitz::secondIndex j; - blitz::Range rall = blitz::Range::all(); - - bob::math::eye(m_tmp_ruru); // m_tmp_ruru = Id - // Loop and add N_{i,h}.U_{c}^T.Sigma_{c}^-1.U_{c} to m_tmp_ruru at each iteration - const size_t dim_c = getNGaussians(); - const size_t dim_d = getNInputs(); - for(size_t c=0; c<dim_c; ++c) { - blitz::Range rc(c*dim_d,(c+1)*dim_d-1); - blitz::Array<double,2> Ut_c = Ut(rall,rc); - blitz::Array<double,1> sigma_c = m_cache_sigma(rc); - m_tmp_ruD = Ut_c(i,j) / sigma_c(j); // U_{c}^T.Sigma_{c}^-1 - blitz::Array<double,2> U_c = m_U(rc,rall); - // Use m_cache_IdPlusUSProdInv as an intermediate array - bob::math::prod(m_tmp_ruD, U_c, output); // U_{c}^T.Sigma_{c}^-1.U_{c} - // Finally, add N_{i,h}.U_{c}^T.Sigma_{c}^-1.U_{c} to m_tmp_ruru - m_tmp_ruru += output * gmm_stats.n(c); - } - // Computes the inverse - bob::math::inv(m_tmp_ruru, output); -} - - -void bob::learn::misc::FABase::computeFn_x(const bob::learn::misc::GMMStats& gmm_stats, - blitz::Array<double,1>& output) const -{ - // Compute Fn_x = sum_{sessions h}(N*(o - m) (Normalised first order statistics) - blitz::Range rall = blitz::Range::all(); - const size_t dim_c = getNGaussians(); - const size_t dim_d = getNInputs(); - for(size_t c=0; c<dim_c; ++c) { - blitz::Range rc(c*dim_d,(c+1)*dim_d-1); - blitz::Array<double,1> Fn_x_c = output(rc); - blitz::Array<double,1> mean_c = m_cache_mean(rc); - Fn_x_c = gmm_stats.sumPx(c,rall) - mean_c*gmm_stats.n(c); - } -} - -void bob::learn::misc::FABase::estimateX(const blitz::Array<double,2>& IdPlusUSProdInv, - const blitz::Array<double,1>& Fn_x, blitz::Array<double,1>& x) const -{ - // m_tmp_ru = UtSigmaInv * Fn_x = Ut*diag(sigma)^-1 * N*(o - m) - bob::math::prod(m_cache_UtSigmaInv, Fn_x, m_tmp_ru); - // x = IdPlusUSProdInv * m_cache_UtSigmaInv * Fn_x - bob::math::prod(IdPlusUSProdInv, m_tmp_ru, x); -} - - -void bob::learn::misc::FABase::estimateX(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& x) const -{ - if (!m_ubm) throw std::runtime_error("No UBM was set in the JFA machine."); - computeIdPlusUSProdInv(gmm_stats, m_tmp_IdPlusUSProdInv); // Computes first term - computeFn_x(gmm_stats, m_tmp_Fn_x); // Computes last term - estimateX(m_tmp_IdPlusUSProdInv, m_tmp_Fn_x, x); // Estimates the value of x -} - diff --git a/bob/learn/misc/cpp/FABaseTrainer.cpp b/bob/learn/misc/cpp/FABaseTrainer.cpp deleted file mode 100644 index 5827859..0000000 --- a/bob/learn/misc/cpp/FABaseTrainer.cpp +++ /dev/null @@ -1,547 +0,0 @@ -/** - * @date Sat Jan 31 17:16:17 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief FABaseTrainer functions - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/FABaseTrainer.h> -#include <bob.core/check.h> -#include <bob.core/array_copy.h> -#include <bob.core/array_random.h> -#include <bob.math/inv.h> -#include <bob.math/linear.h> -#include <bob.core/check.h> -#include <bob.core/array_repmat.h> -#include <algorithm> - - -bob::learn::misc::FABaseTrainer::FABaseTrainer(): - m_Nid(0), m_dim_C(0), m_dim_D(0), m_dim_ru(0), m_dim_rv(0), - m_x(0), m_y(0), m_z(0), m_Nacc(0), m_Facc(0) -{ -} - -bob::learn::misc::FABaseTrainer::FABaseTrainer(const bob::learn::misc::FABaseTrainer& other) -{ -} - -bob::learn::misc::FABaseTrainer::~FABaseTrainer() -{ -} - -void bob::learn::misc::FABaseTrainer::checkStatistics( - const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - for (size_t id=0; id<stats.size(); ++id) { - for (size_t s=0; s<stats[id].size(); ++s) { - if (stats[id][s]->sumPx.extent(0) != (int)m_dim_C) { - boost::format m("GMMStats C dimension parameter = %d is different than the expected value of %d"); - m % stats[id][s]->sumPx.extent(0) % (int)m_dim_C; - throw std::runtime_error(m.str()); - } - if (stats[id][s]->sumPx.extent(1) != (int)m_dim_D) { - boost::format m("GMMStats D dimension parameter = %d is different than the expected value of %d"); - m % stats[id][s]->sumPx.extent(1) % (int)m_dim_D; - throw std::runtime_error(m.str()); - } - } - } -} - - -void bob::learn::misc::FABaseTrainer::initUbmNidSumStatistics( - const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - m_Nid = stats.size(); - boost::shared_ptr<bob::learn::misc::GMMMachine> ubm = m.getUbm(); - // Put UBM in cache - m_dim_C = ubm->getNGaussians(); - m_dim_D = ubm->getNInputs(); - m_dim_ru = m.getDimRu(); - m_dim_rv = m.getDimRv(); - // Check statistics dimensionality - checkStatistics(m, stats); - // Precomputes the sum of the statistics for each client/identity - precomputeSumStatisticsN(stats); - precomputeSumStatisticsF(stats); - // Cache and working arrays - initCache(); -} - -void bob::learn::misc::FABaseTrainer::precomputeSumStatisticsN( - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - m_Nacc.clear(); - blitz::Array<double,1> Nsum(m_dim_C); - for (size_t id=0; id<stats.size(); ++id) { - Nsum = 0.; - for (size_t s=0; s<stats[id].size(); ++s) { - Nsum += stats[id][s]->n; - } - m_Nacc.push_back(bob::core::array::ccopy(Nsum)); - } -} - -void bob::learn::misc::FABaseTrainer::precomputeSumStatisticsF( - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - m_Facc.clear(); - blitz::Array<double,1> Fsum(m_dim_C*m_dim_D); - for (size_t id=0; id<stats.size(); ++id) { - Fsum = 0.; - for (size_t s=0; s<stats[id].size(); ++s) { - for (size_t c=0; c<m_dim_C; ++c) { - blitz::Array<double,1> Fsum_c = Fsum(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1)); - Fsum_c += stats[id][s]->sumPx(c,blitz::Range::all()); - } - } - m_Facc.push_back(bob::core::array::ccopy(Fsum)); - } -} - -void bob::learn::misc::FABaseTrainer::initializeXYZ(const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& vec) -{ - m_x.clear(); - m_y.clear(); - m_z.clear(); - - blitz::Array<double,1> z0(m_dim_C*m_dim_D); - z0 = 0; - blitz::Array<double,1> y0(m_dim_rv); - y0 = 0; - blitz::Array<double,2> x0(m_dim_ru,0); - x0 = 0; - for (size_t i=0; i<vec.size(); ++i) - { - m_z.push_back(bob::core::array::ccopy(z0)); - m_y.push_back(bob::core::array::ccopy(y0)); - x0.resize(m_dim_ru, vec[i].size()); - x0 = 0; - m_x.push_back(bob::core::array::ccopy(x0)); - } -} - -void bob::learn::misc::FABaseTrainer::resetXYZ() -{ - for (size_t i=0; i<m_x.size(); ++i) - { - m_x[i] = 0.; - m_y[i] = 0.; - m_z[i] = 0.; - } -} - -void bob::learn::misc::FABaseTrainer::initCache() -{ - const size_t dim_CD = m_dim_C*m_dim_D; - // U - m_cache_UtSigmaInv.resize(m_dim_ru, dim_CD); - m_cache_UProd.resize(m_dim_C, m_dim_ru, m_dim_ru); - m_cache_IdPlusUProd_ih.resize(m_dim_ru, m_dim_ru); - m_cache_Fn_x_ih.resize(dim_CD); - m_acc_U_A1.resize(m_dim_C, m_dim_ru, m_dim_ru); - m_acc_U_A2.resize(dim_CD, m_dim_ru); - // V - m_cache_VtSigmaInv.resize(m_dim_rv, dim_CD); - m_cache_VProd.resize(m_dim_C, m_dim_rv, m_dim_rv); - m_cache_IdPlusVProd_i.resize(m_dim_rv, m_dim_rv); - m_cache_Fn_y_i.resize(dim_CD); - m_acc_V_A1.resize(m_dim_C, m_dim_rv, m_dim_rv); - m_acc_V_A2.resize(dim_CD, m_dim_rv); - // D - m_cache_DtSigmaInv.resize(dim_CD); - m_cache_DProd.resize(dim_CD); - m_cache_IdPlusDProd_i.resize(dim_CD); - m_cache_Fn_z_i.resize(dim_CD); - m_acc_D_A1.resize(dim_CD); - m_acc_D_A2.resize(dim_CD); - - // tmp - m_tmp_CD.resize(dim_CD); - m_tmp_CD_b.resize(dim_CD); - - m_tmp_ru.resize(m_dim_ru); - m_tmp_ruD.resize(m_dim_ru, m_dim_D); - m_tmp_ruru.resize(m_dim_ru, m_dim_ru); - - m_tmp_rv.resize(m_dim_rv); - m_tmp_rvD.resize(m_dim_rv, m_dim_D); - m_tmp_rvrv.resize(m_dim_rv, m_dim_rv); -} - - - -//////////////////////////// V /////////////////////////// -void bob::learn::misc::FABaseTrainer::computeVtSigmaInv(const bob::learn::misc::FABase& m) -{ - const blitz::Array<double,2>& V = m.getV(); - // Blitz compatibility: ugly fix (const_cast, as old blitz version does not - // provide a non-const version of transpose()) - const blitz::Array<double,2> Vt = const_cast<blitz::Array<double,2>&>(V).transpose(1,0); - const blitz::Array<double,1>& sigma = m.getUbmVariance(); - blitz::firstIndex i; - blitz::secondIndex j; - m_cache_VtSigmaInv = Vt(i,j) / sigma(j); // Vt * diag(sigma)^-1 -} - -void bob::learn::misc::FABaseTrainer::computeVProd(const bob::learn::misc::FABase& m) -{ - const blitz::Array<double,2>& V = m.getV(); - blitz::firstIndex i; - blitz::secondIndex j; - const blitz::Array<double,1>& sigma = m.getUbmVariance(); - blitz::Range rall = blitz::Range::all(); - for (size_t c=0; c<m_dim_C; ++c) - { - blitz::Array<double,2> VProd_c = m_cache_VProd(c, rall, rall); - blitz::Array<double,2> Vv_c = V(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1), rall); - blitz::Array<double,2> Vt_c = Vv_c.transpose(1,0); - blitz::Array<double,1> sigma_c = sigma(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1)); - m_tmp_rvD = Vt_c(i,j) / sigma_c(j); // Vt_c * diag(sigma)^-1 - bob::math::prod(m_tmp_rvD, Vv_c, VProd_c); - } -} - -void bob::learn::misc::FABaseTrainer::computeIdPlusVProd_i(const size_t id) -{ - const blitz::Array<double,1>& Ni = m_Nacc[id]; - bob::math::eye(m_tmp_rvrv); // m_tmp_rvrv = I - blitz::Range rall = blitz::Range::all(); - for (size_t c=0; c<m_dim_C; ++c) { - blitz::Array<double,2> VProd_c = m_cache_VProd(c, rall, rall); - m_tmp_rvrv += VProd_c * Ni(c); - } - bob::math::inv(m_tmp_rvrv, m_cache_IdPlusVProd_i); // m_cache_IdPlusVProd_i = ( I+Vt*diag(sigma)^-1*Ni*V)^-1 -} - -void bob::learn::misc::FABaseTrainer::computeFn_y_i(const bob::learn::misc::FABase& mb, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& stats, const size_t id) -{ - const blitz::Array<double,2>& U = mb.getU(); - const blitz::Array<double,1>& d = mb.getD(); - // Compute Fn_yi = sum_{sessions h}(N_{i,h}*(o_{i,h} - m - D*z_{i} - U*x_{i,h}) (Normalised first order statistics) - const blitz::Array<double,1>& Fi = m_Facc[id]; - const blitz::Array<double,1>& m = mb.getUbmMean(); - const blitz::Array<double,1>& z = m_z[id]; - bob::core::array::repelem(m_Nacc[id], m_tmp_CD); - m_cache_Fn_y_i = Fi - m_tmp_CD * (m + d * z); // Fn_yi = sum_{sessions h}(N_{i,h}*(o_{i,h} - m - D*z_{i}) - const blitz::Array<double,2>& X = m_x[id]; - blitz::Range rall = blitz::Range::all(); - for (int h=0; h<X.extent(1); ++h) // Loops over the sessions - { - blitz::Array<double,1> Xh = X(rall, h); // Xh = x_{i,h} (length: ru) - bob::math::prod(U, Xh, m_tmp_CD_b); // m_tmp_CD_b = U*x_{i,h} - const blitz::Array<double,1>& Nih = stats[h]->n; - bob::core::array::repelem(Nih, m_tmp_CD); - m_cache_Fn_y_i -= m_tmp_CD * m_tmp_CD_b; // N_{i,h} * U * x_{i,h} - } - // Fn_yi = sum_{sessions h}(N_{i,h}*(o_{i,h} - m - D*z_{i} - U*x_{i,h}) -} - -void bob::learn::misc::FABaseTrainer::updateY_i(const size_t id) -{ - // Computes yi = Ayi * Cvs * Fn_yi - blitz::Array<double,1>& y = m_y[id]; - // m_tmp_rv = m_cache_VtSigmaInv * m_cache_Fn_y_i = Vt*diag(sigma)^-1 * sum_{sessions h}(N_{i,h}*(o_{i,h} - m - D*z_{i} - U*x_{i,h}) - bob::math::prod(m_cache_VtSigmaInv, m_cache_Fn_y_i, m_tmp_rv); - bob::math::prod(m_cache_IdPlusVProd_i, m_tmp_rv, y); -} - -void bob::learn::misc::FABaseTrainer::updateY(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - // Precomputation - computeVtSigmaInv(m); - computeVProd(m); - // Loops over all people - for (size_t id=0; id<stats.size(); ++id) { - computeIdPlusVProd_i(id); - computeFn_y_i(m, stats[id], id); - updateY_i(id); - } -} - -void bob::learn::misc::FABaseTrainer::computeAccumulatorsV( - const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - // Initializes the cache accumulator - m_acc_V_A1 = 0.; - m_acc_V_A2 = 0.; - // Loops over all people - blitz::firstIndex i; - blitz::secondIndex j; - blitz::Range rall = blitz::Range::all(); - for (size_t id=0; id<stats.size(); ++id) { - computeIdPlusVProd_i(id); - computeFn_y_i(m, stats[id], id); - - // Needs to return values to be accumulated for estimating V - const blitz::Array<double,1>& y = m_y[id]; - m_tmp_rvrv = m_cache_IdPlusVProd_i; - m_tmp_rvrv += y(i) * y(j); - for (size_t c=0; c<m_dim_C; ++c) - { - blitz::Array<double,2> A1_y_c = m_acc_V_A1(c, rall, rall); - A1_y_c += m_tmp_rvrv * m_Nacc[id](c); - } - m_acc_V_A2 += m_cache_Fn_y_i(i) * y(j); - } -} - -void bob::learn::misc::FABaseTrainer::updateV(blitz::Array<double,2>& V) -{ - blitz::Range rall = blitz::Range::all(); - for (size_t c=0; c<m_dim_C; ++c) - { - const blitz::Array<double,2> A1 = m_acc_V_A1(c, rall, rall); - bob::math::inv(A1, m_tmp_rvrv); - const blitz::Array<double,2> A2 = m_acc_V_A2(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1), rall); - blitz::Array<double,2> V_c = V(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1), rall); - bob::math::prod(A2, m_tmp_rvrv, V_c); - } -} - - -//////////////////////////// U /////////////////////////// -void bob::learn::misc::FABaseTrainer::computeUtSigmaInv(const bob::learn::misc::FABase& m) -{ - const blitz::Array<double,2>& U = m.getU(); - // Blitz compatibility: ugly fix (const_cast, as old blitz version does not - // provide a non-const version of transpose()) - const blitz::Array<double,2> Ut = const_cast<blitz::Array<double,2>&>(U).transpose(1,0); - const blitz::Array<double,1>& sigma = m.getUbmVariance(); - blitz::firstIndex i; - blitz::secondIndex j; - m_cache_UtSigmaInv = Ut(i,j) / sigma(j); // Ut * diag(sigma)^-1 -} - -void bob::learn::misc::FABaseTrainer::computeUProd(const bob::learn::misc::FABase& m) -{ - const blitz::Array<double,2>& U = m.getU(); - blitz::firstIndex i; - blitz::secondIndex j; - const blitz::Array<double,1>& sigma = m.getUbmVariance(); - for (size_t c=0; c<m_dim_C; ++c) - { - blitz::Array<double,2> UProd_c = m_cache_UProd(c, blitz::Range::all(), blitz::Range::all()); - blitz::Array<double,2> Uu_c = U(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1), blitz::Range::all()); - blitz::Array<double,2> Ut_c = Uu_c.transpose(1,0); - blitz::Array<double,1> sigma_c = sigma(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1)); - m_tmp_ruD = Ut_c(i,j) / sigma_c(j); // Ut_c * diag(sigma)^-1 - bob::math::prod(m_tmp_ruD, Uu_c, UProd_c); - } -} - -void bob::learn::misc::FABaseTrainer::computeIdPlusUProd_ih( - const boost::shared_ptr<bob::learn::misc::GMMStats>& stats) -{ - const blitz::Array<double,1>& Nih = stats->n; - bob::math::eye(m_tmp_ruru); // m_tmp_ruru = I - for (size_t c=0; c<m_dim_C; ++c) { - blitz::Array<double,2> UProd_c = m_cache_UProd(c,blitz::Range::all(),blitz::Range::all()); - m_tmp_ruru += UProd_c * Nih(c); - } - bob::math::inv(m_tmp_ruru, m_cache_IdPlusUProd_ih); // m_cache_IdPlusUProd_ih = ( I+Ut*diag(sigma)^-1*Ni*U)^-1 -} - -void bob::learn::misc::FABaseTrainer::computeFn_x_ih(const bob::learn::misc::FABase& mb, - const boost::shared_ptr<bob::learn::misc::GMMStats>& stats, const size_t id) -{ - const blitz::Array<double,2>& V = mb.getV(); - const blitz::Array<double,1>& d = mb.getD(); - // Compute Fn_x_ih = sum_{sessions h}(N_{i,h}*(o_{i,h} - m - D*z_{i} - V*y_{i}) (Normalised first order statistics) - const blitz::Array<double,2>& Fih = stats->sumPx; - const blitz::Array<double,1>& m = mb.getUbmMean(); - const blitz::Array<double,1>& z = m_z[id]; - const blitz::Array<double,1>& Nih = stats->n; - bob::core::array::repelem(Nih, m_tmp_CD); - for (size_t c=0; c<m_dim_C; ++c) { - blitz::Array<double,1> Fn_x_ih_c = m_cache_Fn_x_ih(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1)); - Fn_x_ih_c = Fih(c,blitz::Range::all()); - } - m_cache_Fn_x_ih -= m_tmp_CD * (m + d * z); // Fn_x_ih = N_{i,h}*(o_{i,h} - m - D*z_{i}) - - const blitz::Array<double,1>& y = m_y[id]; - bob::math::prod(V, y, m_tmp_CD_b); - m_cache_Fn_x_ih -= m_tmp_CD * m_tmp_CD_b; - // Fn_x_ih = N_{i,h}*(o_{i,h} - m - D*z_{i} - V*y_{i}) -} - -void bob::learn::misc::FABaseTrainer::updateX_ih(const size_t id, const size_t h) -{ - // Computes xih = Axih * Cus * Fn_x_ih - blitz::Array<double,1> x = m_x[id](blitz::Range::all(), h); - // m_tmp_ru = m_cache_UtSigmaInv * m_cache_Fn_x_ih = Ut*diag(sigma)^-1 * N_{i,h}*(o_{i,h} - m - D*z_{i} - V*y_{i}) - bob::math::prod(m_cache_UtSigmaInv, m_cache_Fn_x_ih, m_tmp_ru); - bob::math::prod(m_cache_IdPlusUProd_ih, m_tmp_ru, x); -} - -void bob::learn::misc::FABaseTrainer::updateX(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - // Precomputation - computeUtSigmaInv(m); - computeUProd(m); - // Loops over all people - for (size_t id=0; id<stats.size(); ++id) { - int n_session_i = stats[id].size(); - for (int s=0; s<n_session_i; ++s) { - computeIdPlusUProd_ih(stats[id][s]); - computeFn_x_ih(m, stats[id][s], id); - updateX_ih(id, s); - } - } -} - -void bob::learn::misc::FABaseTrainer::computeAccumulatorsU( - const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - // Initializes the cache accumulator - m_acc_U_A1 = 0.; - m_acc_U_A2 = 0.; - // Loops over all people - blitz::firstIndex i; - blitz::secondIndex j; - blitz::Range rall = blitz::Range::all(); - for (size_t id=0; id<stats.size(); ++id) { - int n_session_i = stats[id].size(); - for (int h=0; h<n_session_i; ++h) { - computeIdPlusUProd_ih(stats[id][h]); - computeFn_x_ih(m, stats[id][h], id); - - // Needs to return values to be accumulated for estimating U - blitz::Array<double,1> x = m_x[id](rall, h); - m_tmp_ruru = m_cache_IdPlusUProd_ih; - m_tmp_ruru += x(i) * x(j); - for (int c=0; c<(int)m_dim_C; ++c) - { - blitz::Array<double,2> A1_x_c = m_acc_U_A1(c,rall,rall); - A1_x_c += m_tmp_ruru * stats[id][h]->n(c); - } - m_acc_U_A2 += m_cache_Fn_x_ih(i) * x(j); - } - } -} - -void bob::learn::misc::FABaseTrainer::updateU(blitz::Array<double,2>& U) -{ - for (size_t c=0; c<m_dim_C; ++c) - { - const blitz::Array<double,2> A1 = m_acc_U_A1(c,blitz::Range::all(),blitz::Range::all()); - bob::math::inv(A1, m_tmp_ruru); - const blitz::Array<double,2> A2 = m_acc_U_A2(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1),blitz::Range::all()); - blitz::Array<double,2> U_c = U(blitz::Range(c*m_dim_D,(c+1)*m_dim_D-1),blitz::Range::all()); - bob::math::prod(A2, m_tmp_ruru, U_c); - } -} - - -//////////////////////////// D /////////////////////////// -void bob::learn::misc::FABaseTrainer::computeDtSigmaInv(const bob::learn::misc::FABase& m) -{ - const blitz::Array<double,1>& d = m.getD(); - const blitz::Array<double,1>& sigma = m.getUbmVariance(); - m_cache_DtSigmaInv = d / sigma; // Dt * diag(sigma)^-1 -} - -void bob::learn::misc::FABaseTrainer::computeDProd(const bob::learn::misc::FABase& m) -{ - const blitz::Array<double,1>& d = m.getD(); - const blitz::Array<double,1>& sigma = m.getUbmVariance(); - m_cache_DProd = d / sigma * d; // Dt * diag(sigma)^-1 * D -} - -void bob::learn::misc::FABaseTrainer::computeIdPlusDProd_i(const size_t id) -{ - const blitz::Array<double,1>& Ni = m_Nacc[id]; - bob::core::array::repelem(Ni, m_tmp_CD); // m_tmp_CD = Ni 'repmat' - m_cache_IdPlusDProd_i = 1.; // m_cache_IdPlusDProd_i = Id - m_cache_IdPlusDProd_i += m_cache_DProd * m_tmp_CD; // m_cache_IdPlusDProd_i = I+Dt*diag(sigma)^-1*Ni*D - m_cache_IdPlusDProd_i = 1 / m_cache_IdPlusDProd_i; // m_cache_IdPlusVProd_i = (I+Dt*diag(sigma)^-1*Ni*D)^-1 -} - -void bob::learn::misc::FABaseTrainer::computeFn_z_i( - const bob::learn::misc::FABase& mb, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& stats, const size_t id) -{ - const blitz::Array<double,2>& U = mb.getU(); - const blitz::Array<double,2>& V = mb.getV(); - // Compute Fn_z_i = sum_{sessions h}(N_{i,h}*(o_{i,h} - m - V*y_{i} - U*x_{i,h}) (Normalised first order statistics) - const blitz::Array<double,1>& Fi = m_Facc[id]; - const blitz::Array<double,1>& m = mb.getUbmMean(); - const blitz::Array<double,1>& y = m_y[id]; - bob::core::array::repelem(m_Nacc[id], m_tmp_CD); - bob::math::prod(V, y, m_tmp_CD_b); // m_tmp_CD_b = V * y - m_cache_Fn_z_i = Fi - m_tmp_CD * (m + m_tmp_CD_b); // Fn_yi = sum_{sessions h}(N_{i,h}*(o_{i,h} - m - V*y_{i}) - - const blitz::Array<double,2>& X = m_x[id]; - blitz::Range rall = blitz::Range::all(); - for (int h=0; h<X.extent(1); ++h) // Loops over the sessions - { - const blitz::Array<double,1>& Nh = stats[h]->n; // Nh = N_{i,h} (length: C) - bob::core::array::repelem(Nh, m_tmp_CD); - blitz::Array<double,1> Xh = X(rall, h); // Xh = x_{i,h} (length: ru) - bob::math::prod(U, Xh, m_tmp_CD_b); - m_cache_Fn_z_i -= m_tmp_CD * m_tmp_CD_b; - } - // Fn_z_i = sum_{sessions h}(N_{i,h}*(o_{i,h} - m - V*y_{i} - U*x_{i,h}) -} - -void bob::learn::misc::FABaseTrainer::updateZ_i(const size_t id) -{ - // Computes zi = Azi * D^T.Sigma^-1 * Fn_zi - blitz::Array<double,1>& z = m_z[id]; - // m_tmp_CD = m_cache_DtSigmaInv * m_cache_Fn_z_i = Dt*diag(sigma)^-1 * sum_{sessions h}(N_{i,h}*(o_{i,h} - m - V*y_{i} - U*x_{i,h}) - z = m_cache_IdPlusDProd_i * m_cache_DtSigmaInv * m_cache_Fn_z_i; -} - -void bob::learn::misc::FABaseTrainer::updateZ(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - // Precomputation - computeDtSigmaInv(m); - computeDProd(m); - // Loops over all people - for (size_t id=0; id<m_Nid; ++id) { - computeIdPlusDProd_i(id); - computeFn_z_i(m, stats[id], id); - updateZ_i(id); - } -} - -void bob::learn::misc::FABaseTrainer::computeAccumulatorsD( - const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats) -{ - // Initializes the cache accumulator - m_acc_D_A1 = 0.; - m_acc_D_A2 = 0.; - // Loops over all people - blitz::firstIndex i; - blitz::secondIndex j; - for (size_t id=0; id<stats.size(); ++id) { - computeIdPlusDProd_i(id); - computeFn_z_i(m, stats[id], id); - - // Needs to return values to be accumulated for estimating D - blitz::Array<double,1> z = m_z[id]; - bob::core::array::repelem(m_Nacc[id], m_tmp_CD); - m_acc_D_A1 += (m_cache_IdPlusDProd_i + z * z) * m_tmp_CD; - m_acc_D_A2 += m_cache_Fn_z_i * z; - } -} - -void bob::learn::misc::FABaseTrainer::updateD(blitz::Array<double,1>& d) -{ - d = m_acc_D_A2 / m_acc_D_A1; -} - - diff --git a/bob/learn/misc/cpp/GMMBaseTrainer.cpp b/bob/learn/misc/cpp/GMMBaseTrainer.cpp deleted file mode 100644 index 8210f2b..0000000 --- a/bob/learn/misc/cpp/GMMBaseTrainer.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/GMMBaseTrainer.h> -#include <bob.core/assert.h> -#include <bob.core/check.h> - -bob::learn::misc::GMMBaseTrainer::GMMBaseTrainer(const bool update_means, - const bool update_variances, const bool update_weights, - const double mean_var_update_responsibilities_threshold): - m_update_means(update_means), m_update_variances(update_variances), - m_update_weights(update_weights), - m_mean_var_update_responsibilities_threshold(mean_var_update_responsibilities_threshold) -{} - -bob::learn::misc::GMMBaseTrainer::GMMBaseTrainer(const bob::learn::misc::GMMBaseTrainer& b): - m_update_means(b.m_update_means), m_update_variances(b.m_update_variances), - m_mean_var_update_responsibilities_threshold(b.m_mean_var_update_responsibilities_threshold) -{} - -bob::learn::misc::GMMBaseTrainer::~GMMBaseTrainer() -{} - -void bob::learn::misc::GMMBaseTrainer::initialize(bob::learn::misc::GMMMachine& gmm) -{ - // Allocate memory for the sufficient statistics and initialise - m_ss.resize(gmm.getNGaussians(),gmm.getNInputs()); -} - -void bob::learn::misc::GMMBaseTrainer::eStep(bob::learn::misc::GMMMachine& gmm, - const blitz::Array<double,2>& data) -{ - m_ss.init(); - // Calculate the sufficient statistics and save in m_ss - gmm.accStatistics(data, m_ss); -} - -double bob::learn::misc::GMMBaseTrainer::computeLikelihood(bob::learn::misc::GMMMachine& gmm) -{ - return m_ss.log_likelihood / m_ss.T; -} - - -bob::learn::misc::GMMBaseTrainer& bob::learn::misc::GMMBaseTrainer::operator= - (const bob::learn::misc::GMMBaseTrainer &other) -{ - if (this != &other) - { - m_ss = other.m_ss; - m_update_means = other.m_update_means; - m_update_variances = other.m_update_variances; - m_update_weights = other.m_update_weights; - m_mean_var_update_responsibilities_threshold = other.m_mean_var_update_responsibilities_threshold; - } - return *this; -} - -bool bob::learn::misc::GMMBaseTrainer::operator== - (const bob::learn::misc::GMMBaseTrainer &other) const -{ - return m_ss == other.m_ss && - m_update_means == other.m_update_means && - m_update_variances == other.m_update_variances && - m_update_weights == other.m_update_weights && - m_mean_var_update_responsibilities_threshold == other.m_mean_var_update_responsibilities_threshold; -} - -bool bob::learn::misc::GMMBaseTrainer::operator!= - (const bob::learn::misc::GMMBaseTrainer &other) const -{ - return !(this->operator==(other)); -} - -bool bob::learn::misc::GMMBaseTrainer::is_similar_to - (const bob::learn::misc::GMMBaseTrainer &other, const double r_epsilon, - const double a_epsilon) const -{ - return m_ss == other.m_ss && - m_update_means == other.m_update_means && - m_update_variances == other.m_update_variances && - m_update_weights == other.m_update_weights && - bob::core::isClose(m_mean_var_update_responsibilities_threshold, - other.m_mean_var_update_responsibilities_threshold, r_epsilon, a_epsilon); -} - -void bob::learn::misc::GMMBaseTrainer::setGMMStats(const bob::learn::misc::GMMStats& stats) -{ - bob::core::array::assertSameShape(m_ss.sumPx, stats.sumPx); - m_ss = stats; -} diff --git a/bob/learn/misc/cpp/GMMMachine.cpp b/bob/learn/misc/cpp/GMMMachine.cpp deleted file mode 100644 index 6261d42..0000000 --- a/bob/learn/misc/cpp/GMMMachine.cpp +++ /dev/null @@ -1,436 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/GMMMachine.h> -#include <bob.core/assert.h> -#include <bob.math/log.h> - -bob::learn::misc::GMMMachine::GMMMachine(): m_gaussians(0) { - resize(0,0); -} - -bob::learn::misc::GMMMachine::GMMMachine(const size_t n_gaussians, const size_t n_inputs): - m_gaussians(0) -{ - resize(n_gaussians,n_inputs); -} - -bob::learn::misc::GMMMachine::GMMMachine(bob::io::base::HDF5File& config): - m_gaussians(0) -{ - load(config); -} - -bob::learn::misc::GMMMachine::GMMMachine(const GMMMachine& other) -{ - copy(other); -} - -bob::learn::misc::GMMMachine& bob::learn::misc::GMMMachine::operator=(const bob::learn::misc::GMMMachine &other) { - // protect against invalid self-assignment - if (this != &other) - copy(other); - - // by convention, always return *this - return *this; -} - -bool bob::learn::misc::GMMMachine::operator==(const bob::learn::misc::GMMMachine& b) const -{ - if (m_n_gaussians != b.m_n_gaussians || m_n_inputs != b.m_n_inputs || - !bob::core::array::isEqual(m_weights, b.m_weights)) - return false; - - for(size_t i=0; i<m_n_gaussians; ++i) { - if(!(*(m_gaussians[i]) == *(b.m_gaussians[i]))) - return false; - } - - return true; -} - -bool bob::learn::misc::GMMMachine::operator!=(const bob::learn::misc::GMMMachine& b) const { - return !(this->operator==(b)); -} - -bool bob::learn::misc::GMMMachine::is_similar_to(const bob::learn::misc::GMMMachine& b, - const double r_epsilon, const double a_epsilon) const -{ - if (m_n_gaussians != b.m_n_gaussians || m_n_inputs != b.m_n_inputs || - !bob::core::array::isClose(m_weights, b.m_weights, r_epsilon, a_epsilon)) - return false; - - for (size_t i = 0; i < m_n_gaussians; ++i) - if (!m_gaussians[i]->is_similar_to(*b.m_gaussians[i], r_epsilon, a_epsilon)) - return false; - - return true; -} - -void bob::learn::misc::GMMMachine::copy(const GMMMachine& other) { - m_n_gaussians = other.m_n_gaussians; - m_n_inputs = other.m_n_inputs; - - // Initialise weights - m_weights.resize(m_n_gaussians); - m_weights = other.m_weights; - - // Initialise Gaussians - m_gaussians.clear(); - for(size_t i=0; i<m_n_gaussians; ++i) { - boost::shared_ptr<bob::learn::misc::Gaussian> g(new bob::learn::misc::Gaussian(*(other.m_gaussians[i]))); - m_gaussians.push_back(g); - } - - // Initialise cache - initCache(); -} - -bob::learn::misc::GMMMachine::~GMMMachine() { } - - -///////////////////// -// Setters -//////////////////// - -void bob::learn::misc::GMMMachine::setWeights(const blitz::Array<double,1> &weights) { - bob::core::array::assertSameShape(weights, m_weights); - m_weights = weights; - recomputeLogWeights(); -} - -void bob::learn::misc::GMMMachine::recomputeLogWeights() const -{ - m_cache_log_weights = blitz::log(m_weights); -} - -void bob::learn::misc::GMMMachine::setMeans(const blitz::Array<double,2> &means) { - bob::core::array::assertSameDimensionLength(means.extent(0), m_n_gaussians); - bob::core::array::assertSameDimensionLength(means.extent(1), m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) - m_gaussians[i]->updateMean() = means(i,blitz::Range::all()); - m_cache_supervector = false; -} - -void bob::learn::misc::GMMMachine::setMeanSupervector(const blitz::Array<double,1> &mean_supervector) { - bob::core::array::assertSameDimensionLength(mean_supervector.extent(0), m_n_gaussians*m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) - m_gaussians[i]->updateMean() = mean_supervector(blitz::Range(i*m_n_inputs, (i+1)*m_n_inputs-1)); - m_cache_supervector = false; -} - - -void bob::learn::misc::GMMMachine::setVariances(const blitz::Array<double, 2 >& variances) { - bob::core::array::assertSameDimensionLength(variances.extent(0), m_n_gaussians); - bob::core::array::assertSameDimensionLength(variances.extent(1), m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) { - m_gaussians[i]->updateVariance() = variances(i,blitz::Range::all()); - m_gaussians[i]->applyVarianceThresholds(); - } - m_cache_supervector = false; -} - -void bob::learn::misc::GMMMachine::setVarianceSupervector(const blitz::Array<double,1> &variance_supervector) { - bob::core::array::assertSameDimensionLength(variance_supervector.extent(0), m_n_gaussians*m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) { - m_gaussians[i]->updateVariance() = variance_supervector(blitz::Range(i*m_n_inputs, (i+1)*m_n_inputs-1)); - m_gaussians[i]->applyVarianceThresholds(); - } - m_cache_supervector = false; -} - -void bob::learn::misc::GMMMachine::setVarianceThresholds(const double value) { - for(size_t i=0; i<m_n_gaussians; ++i) - m_gaussians[i]->setVarianceThresholds(value); - m_cache_supervector = false; -} - -void bob::learn::misc::GMMMachine::setVarianceThresholds(blitz::Array<double, 1> variance_thresholds) { - bob::core::array::assertSameDimensionLength(variance_thresholds.extent(0), m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) - m_gaussians[i]->setVarianceThresholds(variance_thresholds); - m_cache_supervector = false; -} - -void bob::learn::misc::GMMMachine::setVarianceThresholds(const blitz::Array<double, 2>& variance_thresholds) { - bob::core::array::assertSameDimensionLength(variance_thresholds.extent(0), m_n_gaussians); - bob::core::array::assertSameDimensionLength(variance_thresholds.extent(1), m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) - m_gaussians[i]->setVarianceThresholds(variance_thresholds(i,blitz::Range::all())); - m_cache_supervector = false; -} - -///////////////////// -// Getters -//////////////////// - -const blitz::Array<double,2> bob::learn::misc::GMMMachine::getMeans() const { - - blitz::Array<double,2> means(m_n_gaussians,m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) - means(i,blitz::Range::all()) = m_gaussians[i]->getMean(); - - return means; -} - -const blitz::Array<double,2> bob::learn::misc::GMMMachine::getVariances() const{ - - blitz::Array<double,2> variances(m_n_gaussians,m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) - variances(i,blitz::Range::all()) = m_gaussians[i]->getVariance(); - - return variances; -} - - -const blitz::Array<double,2> bob::learn::misc::GMMMachine::getVarianceThresholds() const { - //bob::core::array::assertSameDimensionLength(variance_thresholds.extent(0), m_n_gaussians); - //bob::core::array::assertSameDimensionLength(variance_thresholds.extent(1), m_n_inputs); - blitz::Array<double, 2> variance_thresholds(m_n_gaussians, m_n_inputs); - for(size_t i=0; i<m_n_gaussians; ++i) - variance_thresholds(i,blitz::Range::all()) = m_gaussians[i]->getVarianceThresholds(); - - return variance_thresholds; -} - - -///////////////////// -// Methods -//////////////////// - - -void bob::learn::misc::GMMMachine::resize(const size_t n_gaussians, const size_t n_inputs) { - m_n_gaussians = n_gaussians; - m_n_inputs = n_inputs; - - // Initialise weights - m_weights.resize(m_n_gaussians); - m_weights = 1.0 / m_n_gaussians; - - // Initialise Gaussians - m_gaussians.clear(); - for(size_t i=0; i<m_n_gaussians; ++i) - m_gaussians.push_back(boost::shared_ptr<bob::learn::misc::Gaussian>(new bob::learn::misc::Gaussian(n_inputs))); - - // Initialise cache arrays - initCache(); -} - -double bob::learn::misc::GMMMachine::logLikelihood(const blitz::Array<double, 1> &x, - blitz::Array<double,1> &log_weighted_gaussian_likelihoods) const -{ - // Check dimension - bob::core::array::assertSameDimensionLength(log_weighted_gaussian_likelihoods.extent(0), m_n_gaussians); - bob::core::array::assertSameDimensionLength(x.extent(0), m_n_inputs); - return logLikelihood_(x,log_weighted_gaussian_likelihoods); -} - -double bob::learn::misc::GMMMachine::logLikelihood_(const blitz::Array<double, 1> &x, - blitz::Array<double,1> &log_weighted_gaussian_likelihoods) const -{ - // Initialise variables - double log_likelihood = bob::math::Log::LogZero; - - // Accumulate the weighted log likelihoods from each Gaussian - for(size_t i=0; i<m_n_gaussians; ++i) { - double l = m_cache_log_weights(i) + m_gaussians[i]->logLikelihood_(x); - log_weighted_gaussian_likelihoods(i) = l; - log_likelihood = bob::math::Log::logAdd(log_likelihood, l); - } - - // Return log(p(x|GMMMachine)) - return log_likelihood; -} - -double bob::learn::misc::GMMMachine::logLikelihood(const blitz::Array<double, 1> &x) const { - // Check dimension - bob::core::array::assertSameDimensionLength(x.extent(0), m_n_inputs); - // Call the other logLikelihood_ (overloaded) function - // (log_weighted_gaussian_likelihoods will be discarded) - return logLikelihood_(x,m_cache_log_weighted_gaussian_likelihoods); -} - -double bob::learn::misc::GMMMachine::logLikelihood_(const blitz::Array<double, 1> &x) const { - // Call the other logLikelihood (overloaded) function - // (log_weighted_gaussian_likelihoods will be discarded) - return logLikelihood_(x,m_cache_log_weighted_gaussian_likelihoods); -} - -void bob::learn::misc::GMMMachine::accStatistics(const blitz::Array<double,2>& input, - bob::learn::misc::GMMStats& stats) const { - // iterate over data - blitz::Range a = blitz::Range::all(); - for(int i=0; i<input.extent(0); ++i) { - // Get example - blitz::Array<double,1> x(input(i,a)); - // Accumulate statistics - accStatistics(x,stats); - } -} - -void bob::learn::misc::GMMMachine::accStatistics_(const blitz::Array<double,2>& input, bob::learn::misc::GMMStats& stats) const { - // iterate over data - blitz::Range a = blitz::Range::all(); - for(int i=0; i<input.extent(0); ++i) { - // Get example - blitz::Array<double,1> x(input(i, a)); - // Accumulate statistics - accStatistics_(x,stats); - } -} - -void bob::learn::misc::GMMMachine::accStatistics(const blitz::Array<double, 1>& x, bob::learn::misc::GMMStats& stats) const { - // check GMMStats size - bob::core::array::assertSameDimensionLength(stats.sumPx.extent(0), m_n_gaussians); - bob::core::array::assertSameDimensionLength(stats.sumPx.extent(1), m_n_inputs); - - // Calculate Gaussian and GMM likelihoods - // - m_cache_log_weighted_gaussian_likelihoods(i) = log(weight_i*p(x|gaussian_i)) - // - log_likelihood = log(sum_i(weight_i*p(x|gaussian_i))) - double log_likelihood = logLikelihood(x, m_cache_log_weighted_gaussian_likelihoods); - - accStatisticsInternal(x, stats, log_likelihood); -} - -void bob::learn::misc::GMMMachine::accStatistics_(const blitz::Array<double, 1>& x, bob::learn::misc::GMMStats& stats) const { - // Calculate Gaussian and GMM likelihoods - // - m_cache_log_weighted_gaussian_likelihoods(i) = log(weight_i*p(x|gaussian_i)) - // - log_likelihood = log(sum_i(weight_i*p(x|gaussian_i))) - double log_likelihood = logLikelihood_(x, m_cache_log_weighted_gaussian_likelihoods); - - accStatisticsInternal(x, stats, log_likelihood); -} - -void bob::learn::misc::GMMMachine::accStatisticsInternal(const blitz::Array<double, 1>& x, - bob::learn::misc::GMMStats& stats, const double log_likelihood) const -{ - // Calculate responsibilities - m_cache_P = blitz::exp(m_cache_log_weighted_gaussian_likelihoods - log_likelihood); - - // Accumulate statistics - // - total likelihood - stats.log_likelihood += log_likelihood; - - // - number of samples - stats.T++; - - // - responsibilities - stats.n += m_cache_P; - - // - first order stats - blitz::firstIndex i; - blitz::secondIndex j; - - m_cache_Px = m_cache_P(i) * x(j); - - stats.sumPx += m_cache_Px; - - // - second order stats - stats.sumPxx += (m_cache_Px(i,j) * x(j)); -} - -boost::shared_ptr<bob::learn::misc::Gaussian> bob::learn::misc::GMMMachine::getGaussian(const size_t i) { - if (i>=m_n_gaussians) { - throw std::runtime_error("getGaussian(): index out of bounds"); - } - return m_gaussians[i]; -} - -void bob::learn::misc::GMMMachine::save(bob::io::base::HDF5File& config) const { - int64_t v = static_cast<int64_t>(m_n_gaussians); - config.set("m_n_gaussians", v); - v = static_cast<int64_t>(m_n_inputs); - config.set("m_n_inputs", v); - - for(size_t i=0; i<m_n_gaussians; ++i) { - std::ostringstream oss; - oss << "m_gaussians" << i; - - if (!config.hasGroup(oss.str())) config.createGroup(oss.str()); - config.cd(oss.str()); - m_gaussians[i]->save(config); - config.cd(".."); - } - - config.setArray("m_weights", m_weights); -} - -void bob::learn::misc::GMMMachine::load(bob::io::base::HDF5File& config) { - int64_t v; - v = config.read<int64_t>("m_n_gaussians"); - m_n_gaussians = static_cast<size_t>(v); - v = config.read<int64_t>("m_n_inputs"); - m_n_inputs = static_cast<size_t>(v); - - m_gaussians.clear(); - for(size_t i=0; i<m_n_gaussians; ++i) { - m_gaussians.push_back(boost::shared_ptr<bob::learn::misc::Gaussian>(new bob::learn::misc::Gaussian(m_n_inputs))); - std::ostringstream oss; - oss << "m_gaussians" << i; - config.cd(oss.str()); - m_gaussians[i]->load(config); - config.cd(".."); - } - - m_weights.resize(m_n_gaussians); - config.readArray("m_weights", m_weights); - - // Initialise cache - initCache(); -} - -void bob::learn::misc::GMMMachine::updateCacheSupervectors() const -{ - m_cache_mean_supervector.resize(m_n_gaussians*m_n_inputs); - m_cache_variance_supervector.resize(m_n_gaussians*m_n_inputs); - - for(size_t i=0; i<m_n_gaussians; ++i) { - blitz::Range range(i*m_n_inputs, (i+1)*m_n_inputs-1); - m_cache_mean_supervector(range) = m_gaussians[i]->getMean(); - m_cache_variance_supervector(range) = m_gaussians[i]->getVariance(); - } - m_cache_supervector = true; -} - -void bob::learn::misc::GMMMachine::initCache() const { - // Initialise cache arrays - m_cache_log_weights.resize(m_n_gaussians); - recomputeLogWeights(); - m_cache_log_weighted_gaussian_likelihoods.resize(m_n_gaussians); - m_cache_P.resize(m_n_gaussians); - m_cache_Px.resize(m_n_gaussians,m_n_inputs); - m_cache_supervector = false; -} - -void bob::learn::misc::GMMMachine::reloadCacheSupervectors() const { - if(!m_cache_supervector) - updateCacheSupervectors(); -} - -const blitz::Array<double,1>& bob::learn::misc::GMMMachine::getMeanSupervector() const { - if(!m_cache_supervector) - updateCacheSupervectors(); - return m_cache_mean_supervector; -} - -const blitz::Array<double,1>& bob::learn::misc::GMMMachine::getVarianceSupervector() const { - if(!m_cache_supervector) - updateCacheSupervectors(); - return m_cache_variance_supervector; -} - -namespace bob { namespace learn { namespace misc { - std::ostream& operator<<(std::ostream& os, const GMMMachine& machine) { - os << "Weights = " << machine.m_weights << std::endl; - for(size_t i=0; i < machine.m_n_gaussians; ++i) { - os << "Gaussian " << i << ": " << std::endl << *(machine.m_gaussians[i]); - } - - return os; - } -} } } diff --git a/bob/learn/misc/cpp/GMMStats.cpp b/bob/learn/misc/cpp/GMMStats.cpp deleted file mode 100644 index c0c25df..0000000 --- a/bob/learn/misc/cpp/GMMStats.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/GMMStats.h> -#include <bob.core/logging.h> -#include <bob.core/check.h> - -bob::learn::misc::GMMStats::GMMStats() { - resize(0,0); -} - -bob::learn::misc::GMMStats::GMMStats(const size_t n_gaussians, const size_t n_inputs) { - resize(n_gaussians,n_inputs); -} - -bob::learn::misc::GMMStats::GMMStats(bob::io::base::HDF5File& config) { - load(config); -} - -bob::learn::misc::GMMStats::GMMStats(const bob::learn::misc::GMMStats& other) { - copy(other); -} - -bob::learn::misc::GMMStats::~GMMStats() { -} - -bob::learn::misc::GMMStats& -bob::learn::misc::GMMStats::operator=(const bob::learn::misc::GMMStats& other) { - // protect against invalid self-assignment - if (this != &other) - copy(other); - - // by convention, always return *this - return *this; -} - -bool bob::learn::misc::GMMStats::operator==(const bob::learn::misc::GMMStats& b) const -{ - return (T == b.T && log_likelihood == b.log_likelihood && - bob::core::array::isEqual(n, b.n) && - bob::core::array::isEqual(sumPx, b.sumPx) && - bob::core::array::isEqual(sumPxx, b.sumPxx)); -} - -bool -bob::learn::misc::GMMStats::operator!=(const bob::learn::misc::GMMStats& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::GMMStats::is_similar_to(const bob::learn::misc::GMMStats& b, - const double r_epsilon, const double a_epsilon) const -{ - return (T == b.T && - bob::core::isClose(log_likelihood, b.log_likelihood, r_epsilon, a_epsilon) && - bob::core::array::isClose(n, b.n, r_epsilon, a_epsilon) && - bob::core::array::isClose(sumPx, b.sumPx, r_epsilon, a_epsilon) && - bob::core::array::isClose(sumPxx, b.sumPxx, r_epsilon, a_epsilon)); -} - - -void bob::learn::misc::GMMStats::operator+=(const bob::learn::misc::GMMStats& b) { - // Check dimensions - if(n.extent(0) != b.n.extent(0) || - sumPx.extent(0) != b.sumPx.extent(0) || sumPx.extent(1) != b.sumPx.extent(1) || - sumPxx.extent(0) != b.sumPxx.extent(0) || sumPxx.extent(1) != b.sumPxx.extent(1)) - // TODO: add a specialized exception - throw std::runtime_error("if you see this exception, fill a bug report"); - - // Update GMMStats object with the content of the other one - T += b.T; - log_likelihood += b.log_likelihood; - n += b.n; - sumPx += b.sumPx; - sumPxx += b.sumPxx; -} - -void bob::learn::misc::GMMStats::copy(const GMMStats& other) { - // Resize arrays - resize(other.sumPx.extent(0),other.sumPx.extent(1)); - // Copy content - T = other.T; - log_likelihood = other.log_likelihood; - n = other.n; - sumPx = other.sumPx; - sumPxx = other.sumPxx; -} - -void bob::learn::misc::GMMStats::resize(const size_t n_gaussians, const size_t n_inputs) { - n.resize(n_gaussians); - sumPx.resize(n_gaussians, n_inputs); - sumPxx.resize(n_gaussians, n_inputs); - init(); -} - -void bob::learn::misc::GMMStats::init() { - log_likelihood = 0; - T = 0; - n = 0.0; - sumPx = 0.0; - sumPxx = 0.0; -} - -void bob::learn::misc::GMMStats::save(bob::io::base::HDF5File& config) const { - //please note we fix the output values to be of a precise type so they can be - //retrieved at any platform with the exact same precision. - // TODO: add versioning, replace int64_t by uint64_t and log_liklihood by log_likelihood - int64_t sumpx_shape_0 = sumPx.shape()[0]; - int64_t sumpx_shape_1 = sumPx.shape()[1]; - config.set("n_gaussians", sumpx_shape_0); - config.set("n_inputs", sumpx_shape_1); - config.set("log_liklihood", log_likelihood); //double - config.set("T", static_cast<int64_t>(T)); - config.setArray("n", n); //Array1d - config.setArray("sumPx", sumPx); //Array2d - config.setArray("sumPxx", sumPxx); //Array2d -} - -void bob::learn::misc::GMMStats::load(bob::io::base::HDF5File& config) { - log_likelihood = config.read<double>("log_liklihood"); - int64_t n_gaussians = config.read<int64_t>("n_gaussians"); - int64_t n_inputs = config.read<int64_t>("n_inputs"); - T = static_cast<size_t>(config.read<int64_t>("T")); - - //resize arrays to prepare for HDF5 readout - n.resize(n_gaussians); - sumPx.resize(n_gaussians, n_inputs); - sumPxx.resize(n_gaussians, n_inputs); - - //load data - config.readArray("n", n); - config.readArray("sumPx", sumPx); - config.readArray("sumPxx", sumPxx); -} - -namespace bob { namespace learn { namespace misc { - std::ostream& operator<<(std::ostream& os, const GMMStats& g) { - os << "log_likelihood = " << g.log_likelihood << std::endl; - os << "T = " << g.T << std::endl; - os << "n = " << g.n; - os << "sumPx = " << g.sumPx; - os << "sumPxx = " << g.sumPxx; - - return os; - } -} } } diff --git a/bob/learn/misc/cpp/Gaussian.cpp b/bob/learn/misc/cpp/Gaussian.cpp deleted file mode 100644 index 75219d1..0000000 --- a/bob/learn/misc/cpp/Gaussian.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/Gaussian.h> - -#include <bob.core/assert.h> -#include <bob.math/log.h> - -bob::learn::misc::Gaussian::Gaussian() { - resize(0); -} - -bob::learn::misc::Gaussian::Gaussian(const size_t n_inputs) { - resize(n_inputs); -} - -bob::learn::misc::Gaussian::Gaussian(const bob::learn::misc::Gaussian& other) { - copy(other); -} - -bob::learn::misc::Gaussian::Gaussian(bob::io::base::HDF5File& config) { - load(config); -} - -bob::learn::misc::Gaussian::~Gaussian() { -} - -bob::learn::misc::Gaussian& bob::learn::misc::Gaussian::operator=(const bob::learn::misc::Gaussian &other) { - if(this != &other) - copy(other); - - return *this; -} - -bool bob::learn::misc::Gaussian::operator==(const bob::learn::misc::Gaussian& b) const -{ - return (bob::core::array::isEqual(m_mean, b.m_mean) && - bob::core::array::isEqual(m_variance, b.m_variance) && - bob::core::array::isEqual(m_variance_thresholds, b.m_variance_thresholds)); -} - -bool bob::learn::misc::Gaussian::operator!=(const bob::learn::misc::Gaussian& b) const { - return !(this->operator==(b)); -} - -bool bob::learn::misc::Gaussian::is_similar_to(const bob::learn::misc::Gaussian& b, - const double r_epsilon, const double a_epsilon) const -{ - return (bob::core::array::isClose(m_mean, b.m_mean, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_variance, b.m_variance, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_variance_thresholds, b.m_variance_thresholds, r_epsilon, a_epsilon)); -} - -void bob::learn::misc::Gaussian::copy(const bob::learn::misc::Gaussian& other) { - m_n_inputs = other.m_n_inputs; - - m_mean.resize(m_n_inputs); - m_mean = other.m_mean; - - m_variance.resize(m_n_inputs); - m_variance = other.m_variance; - - m_variance_thresholds.resize(m_n_inputs); - m_variance_thresholds = other.m_variance_thresholds; - - m_n_log2pi = other.m_n_log2pi; - m_g_norm = other.m_g_norm; -} - - -void bob::learn::misc::Gaussian::setNInputs(const size_t n_inputs) { - resize(n_inputs); -} - -void bob::learn::misc::Gaussian::resize(const size_t n_inputs) { - m_n_inputs = n_inputs; - m_mean.resize(m_n_inputs); - m_mean = 0; - m_variance.resize(m_n_inputs); - m_variance = 1; - m_variance_thresholds.resize(m_n_inputs); - m_variance_thresholds = 0; - - // Re-compute g_norm, because m_n_inputs and m_variance - // have changed - preComputeNLog2Pi(); - preComputeConstants(); -} - -void bob::learn::misc::Gaussian::setMean(const blitz::Array<double,1> &mean) { - // Check and set - bob::core::array::assertSameShape(m_mean, mean); - m_mean = mean; -} - -void bob::learn::misc::Gaussian::setVariance(const blitz::Array<double,1> &variance) { - // Check and set - bob::core::array::assertSameShape(m_variance, variance); - m_variance = variance; - - // Variance flooring - applyVarianceThresholds(); -} - -void bob::learn::misc::Gaussian::setVarianceThresholds(const blitz::Array<double,1> &variance_thresholds) { - // Check and set - bob::core::array::assertSameShape(m_variance_thresholds, variance_thresholds); - m_variance_thresholds = variance_thresholds; - - // Variance flooring - applyVarianceThresholds(); -} - -void bob::learn::misc::Gaussian::setVarianceThresholds(const double value) { - blitz::Array<double,1> variance_thresholds(m_n_inputs); - variance_thresholds = value; - setVarianceThresholds(variance_thresholds); -} - -void bob::learn::misc::Gaussian::applyVarianceThresholds() { - // Apply variance flooring threshold - m_variance = blitz::where( m_variance < m_variance_thresholds, m_variance_thresholds, m_variance); - - // Re-compute g_norm, because m_variance has changed - preComputeConstants(); -} - -double bob::learn::misc::Gaussian::logLikelihood(const blitz::Array<double,1> &x) const { - // Check - bob::core::array::assertSameShape(x, m_mean); - return logLikelihood_(x); -} - -double bob::learn::misc::Gaussian::logLikelihood_(const blitz::Array<double,1> &x) const { - double z = blitz::sum(blitz::pow2(x - m_mean) / m_variance); - // Log Likelihood - return (-0.5 * (m_g_norm + z)); -} - -void bob::learn::misc::Gaussian::preComputeNLog2Pi() { - m_n_log2pi = m_n_inputs * bob::math::Log::Log2Pi; -} - -void bob::learn::misc::Gaussian::preComputeConstants() { - m_g_norm = m_n_log2pi + blitz::sum(blitz::log(m_variance)); -} - -void bob::learn::misc::Gaussian::save(bob::io::base::HDF5File& config) const { - config.setArray("m_mean", m_mean); - config.setArray("m_variance", m_variance); - config.setArray("m_variance_thresholds", m_variance_thresholds); - config.set("g_norm", m_g_norm); - int64_t v = static_cast<int64_t>(m_n_inputs); - config.set("m_n_inputs", v); -} - -void bob::learn::misc::Gaussian::load(bob::io::base::HDF5File& config) { - int64_t v = config.read<int64_t>("m_n_inputs"); - m_n_inputs = static_cast<size_t>(v); - - m_mean.resize(m_n_inputs); - m_variance.resize(m_n_inputs); - m_variance_thresholds.resize(m_n_inputs); - - config.readArray("m_mean", m_mean); - config.readArray("m_variance", m_variance); - config.readArray("m_variance_thresholds", m_variance_thresholds); - - preComputeNLog2Pi(); - m_g_norm = config.read<double>("g_norm"); -} - -namespace bob { namespace learn { namespace misc { - std::ostream& operator<<(std::ostream& os, const Gaussian& g) { - os << "Mean = " << g.m_mean << std::endl; - os << "Variance = " << g.m_variance << std::endl; - return os; - } -} } } diff --git a/bob/learn/misc/cpp/ISVBase.cpp b/bob/learn/misc/cpp/ISVBase.cpp deleted file mode 100644 index 7884786..0000000 --- a/bob/learn/misc/cpp/ISVBase.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @date Tue Jan 27 16:02:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - - -#include <bob.learn.misc/ISVBase.h> -#include <bob.core/array_copy.h> -#include <bob.math/linear.h> -#include <bob.math/inv.h> -#include <bob.learn.misc/LinearScoring.h> -#include <limits> - - -//////////////////// ISVBase //////////////////// -bob::learn::misc::ISVBase::ISVBase() -{ -} - -bob::learn::misc::ISVBase::ISVBase(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, - const size_t ru): - m_base(ubm, ru, 1) -{ - blitz::Array<double,2>& V = m_base.updateV(); - V = 0; -} - -bob::learn::misc::ISVBase::ISVBase(const bob::learn::misc::ISVBase& other): - m_base(other.m_base) -{ -} - - -bob::learn::misc::ISVBase::ISVBase(bob::io::base::HDF5File& config) -{ - load(config); -} - -bob::learn::misc::ISVBase::~ISVBase() { -} - -void bob::learn::misc::ISVBase::save(bob::io::base::HDF5File& config) const -{ - config.setArray("U", m_base.getU()); - config.setArray("d", m_base.getD()); -} - -void bob::learn::misc::ISVBase::load(bob::io::base::HDF5File& config) -{ - //reads all data directly into the member variables - blitz::Array<double,2> U = config.readArray<double,2>("U"); - blitz::Array<double,1> d = config.readArray<double,1>("d"); - const int ru = U.extent(1); - if (!m_base.getUbm()) - m_base.resize(ru, 1, U.extent(0)); - else - m_base.resize(ru, 1); - m_base.setU(U); - m_base.setD(d); - blitz::Array<double,2>& V = m_base.updateV(); - V = 0; -} - -bob::learn::misc::ISVBase& -bob::learn::misc::ISVBase::operator=(const bob::learn::misc::ISVBase& other) -{ - if (this != &other) - { - m_base = other.m_base; - } - return *this; -} - diff --git a/bob/learn/misc/cpp/ISVMachine.cpp b/bob/learn/misc/cpp/ISVMachine.cpp deleted file mode 100644 index ea5ad28..0000000 --- a/bob/learn/misc/cpp/ISVMachine.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/** - * @date Tue Jan 27 16:06:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - - -#include <bob.learn.misc/ISVMachine.h> -#include <bob.core/array_copy.h> -#include <bob.math/linear.h> -#include <bob.math/inv.h> -#include <bob.learn.misc/LinearScoring.h> -#include <limits> - - -//////////////////// ISVMachine //////////////////// -bob::learn::misc::ISVMachine::ISVMachine(): - m_z(1) -{ - resizeTmp(); -} - -bob::learn::misc::ISVMachine::ISVMachine(const boost::shared_ptr<bob::learn::misc::ISVBase> isv_base): - m_isv_base(isv_base), - m_z(isv_base->getSupervectorLength()) -{ - if (!m_isv_base->getUbm()) - throw std::runtime_error("No UBM was set in the JFA machine."); - updateCache(); - resizeTmp(); -} - - -bob::learn::misc::ISVMachine::ISVMachine(const bob::learn::misc::ISVMachine& other): - m_isv_base(other.m_isv_base), - m_z(bob::core::array::ccopy(other.m_z)) -{ - updateCache(); - resizeTmp(); -} - -bob::learn::misc::ISVMachine::ISVMachine(bob::io::base::HDF5File& config) -{ - load(config); -} - -bob::learn::misc::ISVMachine::~ISVMachine() { -} - -bob::learn::misc::ISVMachine& -bob::learn::misc::ISVMachine::operator=(const bob::learn::misc::ISVMachine& other) -{ - if (this != &other) - { - m_isv_base = other.m_isv_base; - m_z.reference(bob::core::array::ccopy(other.m_z)); - } - return *this; -} - -bool bob::learn::misc::ISVMachine::operator==(const bob::learn::misc::ISVMachine& other) const -{ - return (*m_isv_base == *(other.m_isv_base) && - bob::core::array::isEqual(m_z, other.m_z)); -} - -bool bob::learn::misc::ISVMachine::operator!=(const bob::learn::misc::ISVMachine& b) const -{ - return !(this->operator==(b)); -} - - -bool bob::learn::misc::ISVMachine::is_similar_to(const bob::learn::misc::ISVMachine& b, - const double r_epsilon, const double a_epsilon) const -{ - return (m_isv_base->is_similar_to(*(b.m_isv_base), r_epsilon, a_epsilon) && - bob::core::array::isClose(m_z, b.m_z, r_epsilon, a_epsilon)); -} - -void bob::learn::misc::ISVMachine::save(bob::io::base::HDF5File& config) const -{ - config.setArray("z", m_z); -} - -void bob::learn::misc::ISVMachine::load(bob::io::base::HDF5File& config) -{ - //reads all data directly into the member variables - blitz::Array<double,1> z = config.readArray<double,1>("z"); - if (!m_isv_base) - m_z.resize(z.extent(0)); - setZ(z); - // update cache - updateCache(); - resizeTmp(); -} - -void bob::learn::misc::ISVMachine::setZ(const blitz::Array<double,1>& z) -{ - if(z.extent(0) != m_z.extent(0)) { //checks dimension - boost::format m("size of input vector `z' (%d) does not match the expected size (%d)"); - m % z.extent(0) % m_z.extent(0); - throw std::runtime_error(m.str()); - } - m_z.reference(bob::core::array::ccopy(z)); - // update cache - updateCache(); -} - -void bob::learn::misc::ISVMachine::setISVBase(const boost::shared_ptr<bob::learn::misc::ISVBase> isv_base) -{ - if (!isv_base->getUbm()) - throw std::runtime_error("No UBM was set in the JFA machine."); - m_isv_base = isv_base; - // Resize variables - resize(); -} - -void bob::learn::misc::ISVMachine::resize() -{ - m_z.resizeAndPreserve(getSupervectorLength()); - updateCache(); - resizeTmp(); -} - -void bob::learn::misc::ISVMachine::resizeTmp() -{ - if (m_isv_base) - { - m_tmp_Ux.resize(getSupervectorLength()); - } -} - -void bob::learn::misc::ISVMachine::updateCache() -{ - if (m_isv_base) - { - // m + Dz - m_cache_mDz.resize(getSupervectorLength()); - m_cache_mDz = m_isv_base->getD()*m_z + m_isv_base->getUbm()->getMeanSupervector(); - m_cache_x.resize(getDimRu()); - } -} - -void bob::learn::misc::ISVMachine::estimateUx(const bob::learn::misc::GMMStats& gmm_stats, - blitz::Array<double,1>& Ux) -{ - estimateX(gmm_stats, m_cache_x); - bob::math::prod(m_isv_base->getU(), m_cache_x, Ux); -} - -double bob::learn::misc::ISVMachine::forward(const bob::learn::misc::GMMStats& input) -{ - return forward_(input); -} - -double bob::learn::misc::ISVMachine::forward(const bob::learn::misc::GMMStats& gmm_stats, - const blitz::Array<double,1>& Ux) -{ - // Checks that a Base machine has been set - if (!m_isv_base) throw std::runtime_error("No UBM was set in the JFA machine."); - - return bob::learn::misc::linearScoring(m_cache_mDz, - m_isv_base->getUbm()->getMeanSupervector(), m_isv_base->getUbm()->getVarianceSupervector(), - gmm_stats, Ux, true); -} - -double bob::learn::misc::ISVMachine::forward_(const bob::learn::misc::GMMStats& input) -{ - // Checks that a Base machine has been set - if(!m_isv_base) throw std::runtime_error("No UBM was set in the JFA machine."); - - // Ux and GMMStats - estimateX(input, m_cache_x); - bob::math::prod(m_isv_base->getU(), m_cache_x, m_tmp_Ux); - - return bob::learn::misc::linearScoring(m_cache_mDz, - m_isv_base->getUbm()->getMeanSupervector(), m_isv_base->getUbm()->getVarianceSupervector(), - input, m_tmp_Ux, true); -} - diff --git a/bob/learn/misc/cpp/ISVTrainer.cpp b/bob/learn/misc/cpp/ISVTrainer.cpp deleted file mode 100644 index 5ccedb0..0000000 --- a/bob/learn/misc/cpp/ISVTrainer.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/** - * @date Tue Jul 19 12:16:17 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief Joint Factor Analysis Trainer - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/ISVTrainer.h> -#include <bob.core/check.h> -#include <bob.core/array_copy.h> -#include <bob.core/array_random.h> -#include <bob.math/inv.h> -#include <bob.math/linear.h> -#include <bob.core/check.h> -#include <bob.core/array_repmat.h> -#include <algorithm> - - -//////////////////////////// ISVTrainer /////////////////////////// -bob::learn::misc::ISVTrainer::ISVTrainer(const double relevance_factor): - m_relevance_factor(relevance_factor), - m_rng(new boost::mt19937()) -{} - -bob::learn::misc::ISVTrainer::ISVTrainer(const bob::learn::misc::ISVTrainer& other): - m_rng(other.m_rng) -{ - m_relevance_factor = other.m_relevance_factor; -} - -bob::learn::misc::ISVTrainer::~ISVTrainer() -{} - -bob::learn::misc::ISVTrainer& bob::learn::misc::ISVTrainer::operator= -(const bob::learn::misc::ISVTrainer& other) -{ - if (this != &other) - { - m_rng = other.m_rng; - m_relevance_factor = other.m_relevance_factor; - } - return *this; -} - -bool bob::learn::misc::ISVTrainer::operator==(const bob::learn::misc::ISVTrainer& b) const -{ - return m_rng == b.m_rng && - m_relevance_factor == b.m_relevance_factor; -} - -bool bob::learn::misc::ISVTrainer::operator!=(const bob::learn::misc::ISVTrainer& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::ISVTrainer::is_similar_to(const bob::learn::misc::ISVTrainer& b, - const double r_epsilon, const double a_epsilon) const -{ - return m_rng == b.m_rng && - m_relevance_factor == b.m_relevance_factor; -} - -void bob::learn::misc::ISVTrainer::initialize(bob::learn::misc::ISVBase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - m_base_trainer.initUbmNidSumStatistics(machine.getBase(), ar); - m_base_trainer.initializeXYZ(ar); - - blitz::Array<double,2>& U = machine.updateU(); - bob::core::array::randn(*m_rng, U); - initializeD(machine); - machine.precompute(); -} - -void bob::learn::misc::ISVTrainer::initializeD(bob::learn::misc::ISVBase& machine) const -{ - // D = sqrt(variance(UBM) / relevance_factor) - blitz::Array<double,1> d = machine.updateD(); - d = sqrt(machine.getBase().getUbmVariance() / m_relevance_factor); -} - -void bob::learn::misc::ISVTrainer::eStep(bob::learn::misc::ISVBase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - m_base_trainer.resetXYZ(); - - const bob::learn::misc::FABase& base = machine.getBase(); - m_base_trainer.updateX(base, ar); - m_base_trainer.updateZ(base, ar); - m_base_trainer.computeAccumulatorsU(base, ar); -} - -void bob::learn::misc::ISVTrainer::mStep(bob::learn::misc::ISVBase& machine) -{ - blitz::Array<double,2>& U = machine.updateU(); - m_base_trainer.updateU(U); - machine.precompute(); -} - -double bob::learn::misc::ISVTrainer::computeLikelihood(bob::learn::misc::ISVBase& machine) -{ - // TODO - return 0; -} - -void bob::learn::misc::ISVTrainer::enrol(bob::learn::misc::ISVMachine& machine, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& ar, - const size_t n_iter) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > vvec; - vvec.push_back(ar); - - const bob::learn::misc::FABase& fb = machine.getISVBase()->getBase(); - - m_base_trainer.initUbmNidSumStatistics(fb, vvec); - m_base_trainer.initializeXYZ(vvec); - - for (size_t i=0; i<n_iter; ++i) { - m_base_trainer.updateX(fb, vvec); - m_base_trainer.updateZ(fb, vvec); - } - - const blitz::Array<double,1> z(m_base_trainer.getZ()[0]); - machine.setZ(z); -} - - - diff --git a/bob/learn/misc/cpp/IVectorMachine.cpp b/bob/learn/misc/cpp/IVectorMachine.cpp deleted file mode 100644 index 61f7ee4..0000000 --- a/bob/learn/misc/cpp/IVectorMachine.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/** - * @date Sat Mar 30 21:00:00 2013 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/IVectorMachine.h> -#include <bob.core/array_copy.h> -#include <bob.core/check.h> -#include <bob.math/linear.h> -#include <bob.math/linsolve.h> - -bob::learn::misc::IVectorMachine::IVectorMachine() -{ -} - -bob::learn::misc::IVectorMachine::IVectorMachine(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, - const size_t rt, const double variance_threshold): - m_ubm(ubm), m_rt(rt), - m_T(getSupervectorLength(),rt), m_sigma(getSupervectorLength()), - m_variance_threshold(variance_threshold) -{ - resizePrecompute(); -} - -bob::learn::misc::IVectorMachine::IVectorMachine(const bob::learn::misc::IVectorMachine& other): - m_ubm(other.m_ubm), m_rt(other.m_rt), - m_T(bob::core::array::ccopy(other.m_T)), - m_sigma(bob::core::array::ccopy(other.m_sigma)), - m_variance_threshold(other.m_variance_threshold) -{ - resizePrecompute(); -} - -bob::learn::misc::IVectorMachine::IVectorMachine(bob::io::base::HDF5File& config) -{ - load(config); -} - -bob::learn::misc::IVectorMachine::~IVectorMachine() { -} - -void bob::learn::misc::IVectorMachine::save(bob::io::base::HDF5File& config) const -{ - config.setArray("m_T", m_T); - config.setArray("m_sigma", m_sigma); - config.set("m_variance_threshold", m_variance_threshold); -} - -void bob::learn::misc::IVectorMachine::load(bob::io::base::HDF5File& config) -{ - //reads all data directly into the member variables - m_T.reference(config.readArray<double,2>("m_T")); - m_rt = m_T.extent(1); - m_sigma.reference(config.readArray<double,1>("m_sigma")); - m_variance_threshold = config.read<double>("m_variance_threshold"); - resizePrecompute(); -} - -void bob::learn::misc::IVectorMachine::resize(const size_t rt) -{ - m_rt = rt; - m_T.resizeAndPreserve(m_T.extent(0), rt); - resizePrecompute(); -} - -bob::learn::misc::IVectorMachine& -bob::learn::misc::IVectorMachine::operator=(const bob::learn::misc::IVectorMachine& other) -{ - if (this != &other) - { - m_ubm = other.m_ubm; - m_rt = other.m_rt; - m_T.reference(bob::core::array::ccopy(other.m_T)); - m_sigma.reference(bob::core::array::ccopy(other.m_sigma)); - m_variance_threshold = other.m_variance_threshold; - resizePrecompute(); - } - return *this; -} - -bool bob::learn::misc::IVectorMachine::operator==(const IVectorMachine& b) const -{ - return (((m_ubm && b.m_ubm) && *m_ubm == *(b.m_ubm)) || (!m_ubm && !b.m_ubm)) && - m_rt == b.m_rt && - bob::core::array::isEqual(m_T, b.m_T) && - bob::core::array::isEqual(m_sigma, b.m_sigma) && - m_variance_threshold == b.m_variance_threshold; -} - -bool bob::learn::misc::IVectorMachine::operator!=(const bob::learn::misc::IVectorMachine& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::IVectorMachine::is_similar_to(const IVectorMachine& b, - const double r_epsilon, const double a_epsilon) const -{ - // TODO: update with new is_similar_to method - return (((m_ubm && b.m_ubm) && m_ubm->is_similar_to(*(b.m_ubm), r_epsilon)) || (!m_ubm && !b.m_ubm)) && - m_rt == b.m_rt && - bob::core::array::isClose(m_T, b.m_T, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_sigma, b.m_sigma, r_epsilon, a_epsilon) && - bob::core::isClose(m_variance_threshold, b.m_variance_threshold, r_epsilon, a_epsilon); -} - -void bob::learn::misc::IVectorMachine::setUbm(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm) -{ - m_ubm = ubm; - resizePrecompute(); -} - -void bob::learn::misc::IVectorMachine::setT(const blitz::Array<double,2>& T) -{ - bob::core::array::assertSameShape(m_T, T); - m_T = T; - // Update cache - precompute(); -} - -void bob::learn::misc::IVectorMachine::setSigma(const blitz::Array<double,1>& sigma) -{ - bob::core::array::assertSameShape(m_sigma, sigma); - m_sigma = sigma; - // Update cache - precompute(); -} - - -void bob::learn::misc::IVectorMachine::setVarianceThreshold(const double thd) -{ - m_variance_threshold = thd; - // Update cache - precompute(); -} - -void bob::learn::misc::IVectorMachine::applyVarianceThreshold() -{ - // Apply variance flooring threshold - m_sigma = blitz::where(m_sigma < m_variance_threshold, m_variance_threshold, m_sigma); -} - -void bob::learn::misc::IVectorMachine::precompute() -{ - if (m_ubm) - { - // Apply variance threshold - applyVarianceThreshold(); - - blitz::firstIndex i; - blitz::secondIndex j; - blitz::Range rall = blitz::Range::all(); - const int C = (int)m_ubm->getNGaussians(); - const int D = (int)m_ubm->getNInputs(); - // T_{c}^{T}.sigma_{c}^{-1} - for (int c=0; c<C; ++c) - { - blitz::Array<double,2> Tct_sigmacInv = m_cache_Tct_sigmacInv(c, rall, rall); - blitz::Array<double,2> Tc = m_T(blitz::Range(c*D,(c+1)*D-1), rall); - blitz::Array<double,2> Tct = Tc.transpose(1,0); - blitz::Array<double,1> sigma_c = m_sigma(blitz::Range(c*D,(c+1)*D-1)); - Tct_sigmacInv = Tct(i,j) / sigma_c(j); - } - - // T_{c}^{T}.sigma_{c}^{-1}.T_{c} - for (int c=0; c<C; ++c) - { - blitz::Array<double,2> Tc = m_T(blitz::Range(c*D,(c+1)*D-1), rall); - blitz::Array<double,2> Tct_sigmacInv = m_cache_Tct_sigmacInv(c, rall, rall); - blitz::Array<double,2> Tct_sigmacInv_Tc = m_cache_Tct_sigmacInv_Tc(c, rall, rall); - bob::math::prod(Tct_sigmacInv, Tc, Tct_sigmacInv_Tc); - } - } -} - -void bob::learn::misc::IVectorMachine::resizePrecompute() -{ - resizeCache(); - resizeTmp(); - precompute(); -} - -void bob::learn::misc::IVectorMachine::resizeCache() -{ - if (m_ubm) - { - const int C = (int)m_ubm->getNGaussians(); - const int D = (int)m_ubm->getNInputs(); - m_cache_Tct_sigmacInv.resize(C, (int)m_rt, D); - m_cache_Tct_sigmacInv_Tc.resize(C, (int)m_rt, (int)m_rt); - } -} - -void bob::learn::misc::IVectorMachine::resizeTmp() -{ - if (m_ubm) - m_tmp_d.resize(m_ubm->getNInputs()); - m_tmp_t1.resize(m_rt); - m_tmp_t2.resize(m_rt); - m_tmp_tt.resize(m_rt, m_rt); -} - -void bob::learn::misc::IVectorMachine::forward(const bob::learn::misc::GMMStats& gs, - blitz::Array<double,1>& ivector) const -{ - bob::core::array::assertSameDimensionLength(ivector.extent(0), (int)m_rt); - forward_(gs, ivector); -} - -void bob::learn::misc::IVectorMachine::computeIdTtSigmaInvT( - const bob::learn::misc::GMMStats& gs, blitz::Array<double,2>& output) const -{ - // Computes \f$(Id + \sum_{c=1}^{C} N_{i,j,c} T^{T} \Sigma_{c}^{-1} T)\f$ - blitz::Range rall = blitz::Range::all(); - bob::math::eye(output); - for (int c=0; c<(int)getNGaussians(); ++c) - output += gs.n(c) * m_cache_Tct_sigmacInv_Tc(c, rall, rall); -} - -void bob::learn::misc::IVectorMachine::computeTtSigmaInvFnorm( - const bob::learn::misc::GMMStats& gs, blitz::Array<double,1>& output) const -{ - // Computes \f$T^{T} \Sigma^{-1} \sum_{c=1}^{C} (F_c - N_c ubmmean_{c})\f$ - blitz::Range rall = blitz::Range::all(); - output = 0; - for (int c=0; c<(int)getNGaussians(); ++c) - { - m_tmp_d = gs.sumPx(c,rall) - gs.n(c) * m_ubm->getGaussian(c)->getMean(); - blitz::Array<double,2> Tct_sigmacInv = m_cache_Tct_sigmacInv(c, rall, rall); - bob::math::prod(Tct_sigmacInv, m_tmp_d, m_tmp_t2); - - output += m_tmp_t2; - } -} - -void bob::learn::misc::IVectorMachine::forward_(const bob::learn::misc::GMMStats& gs, - blitz::Array<double,1>& ivector) const -{ - // Computes \f$(Id + \sum_{c=1}^{C} N_{i,j,c} T^{T} \Sigma_{c}^{-1} T)\f$ - computeIdTtSigmaInvT(gs, m_tmp_tt); - - // Computes \f$T^{T} \Sigma^{-1} \sum_{c=1}^{C} (F_c - N_c ubmmean_{c})\f$ - computeTtSigmaInvFnorm(gs, m_tmp_t1); - - // Solves m_tmp_tt.ivector = m_tmp_t1 - bob::math::linsolve(m_tmp_tt, ivector, m_tmp_t1); -} - diff --git a/bob/learn/misc/cpp/IVectorTrainer.cpp b/bob/learn/misc/cpp/IVectorTrainer.cpp deleted file mode 100644 index 86adf70..0000000 --- a/bob/learn/misc/cpp/IVectorTrainer.cpp +++ /dev/null @@ -1,228 +0,0 @@ -/** - * @date Sun Mar 31 20:15:00 2013 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - - -#include <bob.learn.misc/IVectorTrainer.h> -#include <bob.core/check.h> -#include <bob.core/array_copy.h> -#include <bob.core/array_random.h> -#include <bob.math/inv.h> -#include <bob.core/check.h> -#include <bob.core/array_repmat.h> -#include <algorithm> - -#include <bob.math/linear.h> -#include <bob.math/linsolve.h> - -bob::learn::misc::IVectorTrainer::IVectorTrainer(const bool update_sigma): - m_update_sigma(update_sigma), - m_rng(new boost::mt19937()) -{} - -bob::learn::misc::IVectorTrainer::IVectorTrainer(const bob::learn::misc::IVectorTrainer& other): - m_update_sigma(other.m_update_sigma) -{ - m_rng = other.m_rng; - m_acc_Nij_wij2.reference(bob::core::array::ccopy(other.m_acc_Nij_wij2)); - m_acc_Fnormij_wij.reference(bob::core::array::ccopy(other.m_acc_Fnormij_wij)); - m_acc_Nij.reference(bob::core::array::ccopy(other.m_acc_Nij)); - m_acc_Snormij.reference(bob::core::array::ccopy(other.m_acc_Snormij)); - - m_tmp_wij.reference(bob::core::array::ccopy(other.m_tmp_wij)); - m_tmp_wij2.reference(bob::core::array::ccopy(other.m_tmp_wij2)); - m_tmp_d1.reference(bob::core::array::ccopy(other.m_tmp_d1)); - m_tmp_t1.reference(bob::core::array::ccopy(other.m_tmp_t1)); - m_tmp_dd1.reference(bob::core::array::ccopy(other.m_tmp_dd1)); - m_tmp_dt1.reference(bob::core::array::ccopy(other.m_tmp_dt1)); - m_tmp_tt1.reference(bob::core::array::ccopy(other.m_tmp_tt1)); - m_tmp_tt2.reference(bob::core::array::ccopy(other.m_tmp_tt2)); -} - -bob::learn::misc::IVectorTrainer::~IVectorTrainer() -{ -} - -void bob::learn::misc::IVectorTrainer::initialize( - bob::learn::misc::IVectorMachine& machine) -{ - - const int C = machine.getNGaussians(); - const int D = machine.getNInputs(); - const int Rt = machine.getDimRt(); - - // Cache - m_acc_Nij_wij2.resize(C,Rt,Rt); - m_acc_Fnormij_wij.resize(C,D,Rt); - if (m_update_sigma) - { - m_acc_Nij.resize(C); - m_acc_Snormij.resize(C,D); - } - - // Tmp - m_tmp_wij.resize(Rt); - m_tmp_wij2.resize(Rt,Rt); - m_tmp_d1.resize(D); - m_tmp_t1.resize(Rt); - - m_tmp_dt1.resize(D,Rt); - m_tmp_tt1.resize(Rt,Rt); - m_tmp_tt2.resize(Rt,Rt); - if (m_update_sigma) - m_tmp_dd1.resize(D,D); - - // Initializes \f$T\f$ and \f$\Sigma\f$ of the machine - blitz::Array<double,2>& T = machine.updateT(); - bob::core::array::randn(*m_rng, T); - blitz::Array<double,1>& sigma = machine.updateSigma(); - sigma = machine.getUbm()->getVarianceSupervector(); - machine.precompute(); -} - -void bob::learn::misc::IVectorTrainer::eStep( - bob::learn::misc::IVectorMachine& machine, - const std::vector<bob::learn::misc::GMMStats>& data) -{ - blitz::Range rall = blitz::Range::all(); - const int C = machine.getNGaussians(); - - // Reinitializes accumulators to 0 - m_acc_Nij_wij2 = 0.; - m_acc_Fnormij_wij = 0.; - if (m_update_sigma) - { - m_acc_Nij = 0.; - m_acc_Snormij = 0.; - } - for (std::vector<bob::learn::misc::GMMStats>::const_iterator it = data.begin(); - it != data.end(); ++it) - { - // Computes E{wij} and E{wij.wij^{T}} - // a. Computes \f$T^{T} \Sigma^{-1} F_{norm}\f$ - machine.computeTtSigmaInvFnorm(*it, m_tmp_t1); - // b. Computes \f$Id + T^{T} \Sigma^{-1} T\f$ - machine.computeIdTtSigmaInvT(*it, m_tmp_tt1); - // c. Computes \f$(Id + T^{T} \Sigma^{-1} T)^{-1}\f$ - - bob::math::inv(m_tmp_tt1, m_tmp_tt2); - // d. Computes \f$E{wij} = (Id + T^{T} \Sigma^{-1} T)^{-1} T^{T} \Sigma^{-1} F_{norm}\f$ - bob::math::prod(m_tmp_tt2, m_tmp_t1, m_tmp_wij); // E{wij} - // e. Computes \f$E{wij}.E{wij^{T}}\f$ - bob::math::prod(m_tmp_wij, m_tmp_wij, m_tmp_wij2); - // f. Computes \f$E{wij.wij^{T}} = (Id + T^{T} \Sigma^{-1} T)^{-1} + E{wij}.E{wij^{T}}\f$ - m_tmp_wij2 += m_tmp_tt2; // E{wij.wij^{T}} - - if (m_update_sigma) - m_acc_Nij += (*it).n; - - for (int c=0; c<C; ++c) - { - blitz::Array<double,2> acc_Nij_wij2_c = m_acc_Nij_wij2(c,rall,rall); - blitz::Array<double,2> acc_Fnormij_wij = m_acc_Fnormij_wij(c,rall,rall); - // acc_Nij_wij2_c += Nijc . E{wij.wij^{T}} - acc_Nij_wij2_c += (*it).n(c) * m_tmp_wij2; - blitz::Array<double,1> mc = machine.getUbm()->getGaussian(c)->getMean(); - // m_tmp_d1 = Fijc - Nijc * ubmmean_{c} - m_tmp_d1 = (*it).sumPx(c,rall) - (*it).n(c)*mc; // Fnorm_c - // m_tmp_dt1 = (Fijc - Nijc * ubmmean_{c}).E{wij}^{T} - bob::math::prod(m_tmp_d1, m_tmp_wij, m_tmp_dt1); - // acc_Fnormij_wij += (Fijc - Nijc * ubmmean_{c}).E{wij}^{T} - acc_Fnormij_wij += m_tmp_dt1; - if (m_update_sigma) - { - blitz::Array<double,1> acc_Snormij_c = m_acc_Snormij(c,rall); - acc_Snormij_c += (*it).sumPxx(c,rall) - mc*((*it).sumPx(c,rall) + m_tmp_d1); - } - } - } -} - -void bob::learn::misc::IVectorTrainer::mStep( - bob::learn::misc::IVectorMachine& machine) -{ - blitz::Range rall = blitz::Range::all(); - blitz::Array<double,2>& T = machine.updateT(); - blitz::Array<double,1>& sigma = machine.updateSigma(); - const int C = (int)machine.getNGaussians(); - const int D = (int)machine.getNInputs(); - for (int c=0; c<C; ++c) - { - // Solves linear system A.T = B to update T, based on accumulators of - // the eStep() - blitz::Array<double,2> acc_Nij_wij2_c = m_acc_Nij_wij2(c,rall,rall); - blitz::Array<double,2> tacc_Nij_wij2_c = acc_Nij_wij2_c.transpose(1,0); - blitz::Array<double,2> acc_Fnormij_wij_c = m_acc_Fnormij_wij(c,rall,rall); - blitz::Array<double,2> tacc_Fnormij_wij_c = acc_Fnormij_wij_c.transpose(1,0); - blitz::Array<double,2> T_c = T(blitz::Range(c*D,(c+1)*D-1),rall); - blitz::Array<double,2> Tt_c = T_c.transpose(1,0); - if (blitz::all(acc_Nij_wij2_c == 0)) // TODO - Tt_c = 0; - else - bob::math::linsolve(tacc_Nij_wij2_c, Tt_c, tacc_Fnormij_wij_c); - if (m_update_sigma) - { - blitz::Array<double,1> sigma_c = sigma(blitz::Range(c*D,(c+1)*D-1)); - bob::math::prod(acc_Fnormij_wij_c, Tt_c, m_tmp_dd1); - bob::math::diag(m_tmp_dd1, m_tmp_d1); - sigma_c = (m_acc_Snormij(c,rall) - m_tmp_d1) / m_acc_Nij(c); - } - } - machine.precompute(); -} - - -bob::learn::misc::IVectorTrainer& bob::learn::misc::IVectorTrainer::operator= - (const bob::learn::misc::IVectorTrainer &other) -{ - if (this != &other) - { - m_update_sigma = other.m_update_sigma; - - m_acc_Nij_wij2.reference(bob::core::array::ccopy(other.m_acc_Nij_wij2)); - m_acc_Fnormij_wij.reference(bob::core::array::ccopy(other.m_acc_Fnormij_wij)); - m_acc_Nij.reference(bob::core::array::ccopy(other.m_acc_Nij)); - m_acc_Snormij.reference(bob::core::array::ccopy(other.m_acc_Snormij)); - - m_tmp_wij.reference(bob::core::array::ccopy(other.m_tmp_wij)); - m_tmp_wij2.reference(bob::core::array::ccopy(other.m_tmp_wij2)); - m_tmp_d1.reference(bob::core::array::ccopy(other.m_tmp_d1)); - m_tmp_t1.reference(bob::core::array::ccopy(other.m_tmp_t1)); - m_tmp_dd1.reference(bob::core::array::ccopy(other.m_tmp_dd1)); - m_tmp_dt1.reference(bob::core::array::ccopy(other.m_tmp_dt1)); - m_tmp_tt1.reference(bob::core::array::ccopy(other.m_tmp_tt1)); - m_tmp_tt2.reference(bob::core::array::ccopy(other.m_tmp_tt2)); - } - return *this; -} - -bool bob::learn::misc::IVectorTrainer::operator== - (const bob::learn::misc::IVectorTrainer &other) const -{ - return m_update_sigma == other.m_update_sigma && - bob::core::array::isEqual(m_acc_Nij_wij2, other.m_acc_Nij_wij2) && - bob::core::array::isEqual(m_acc_Fnormij_wij, other.m_acc_Fnormij_wij) && - bob::core::array::isEqual(m_acc_Nij, other.m_acc_Nij) && - bob::core::array::isEqual(m_acc_Snormij, other.m_acc_Snormij); -} - -bool bob::learn::misc::IVectorTrainer::operator!= - (const bob::learn::misc::IVectorTrainer &other) const -{ - return !(this->operator==(other)); -} - -bool bob::learn::misc::IVectorTrainer::is_similar_to - (const bob::learn::misc::IVectorTrainer &other, const double r_epsilon, - const double a_epsilon) const -{ - return m_update_sigma == other.m_update_sigma && - bob::core::array::isClose(m_acc_Nij_wij2, other.m_acc_Nij_wij2, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_acc_Fnormij_wij, other.m_acc_Fnormij_wij, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_acc_Nij, other.m_acc_Nij, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_acc_Snormij, other.m_acc_Snormij, r_epsilon, a_epsilon); -} - diff --git a/bob/learn/misc/cpp/JFABase.cpp b/bob/learn/misc/cpp/JFABase.cpp deleted file mode 100644 index a87e57f..0000000 --- a/bob/learn/misc/cpp/JFABase.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/** - * @date Tue Jan 27 15:54:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - - -#include <bob.learn.misc/JFABase.h> -#include <bob.core/array_copy.h> -#include <bob.math/linear.h> -#include <bob.math/inv.h> -#include <bob.learn.misc/LinearScoring.h> -#include <limits> - - -//////////////////// JFABase //////////////////// -bob::learn::misc::JFABase::JFABase() -{ -} - -bob::learn::misc::JFABase::JFABase(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, - const size_t ru, const size_t rv): - m_base(ubm, ru, rv) -{ -} - -bob::learn::misc::JFABase::JFABase(const bob::learn::misc::JFABase& other): - m_base(other.m_base) -{ -} - - -bob::learn::misc::JFABase::JFABase(bob::io::base::HDF5File& config) -{ - load(config); -} - -bob::learn::misc::JFABase::~JFABase() { -} - -void bob::learn::misc::JFABase::save(bob::io::base::HDF5File& config) const -{ - config.setArray("U", m_base.getU()); - config.setArray("V", m_base.getV()); - config.setArray("d", m_base.getD()); -} - -void bob::learn::misc::JFABase::load(bob::io::base::HDF5File& config) -{ - //reads all data directly into the member variables - blitz::Array<double,2> U = config.readArray<double,2>("U"); - blitz::Array<double,2> V = config.readArray<double,2>("V"); - blitz::Array<double,1> d = config.readArray<double,1>("d"); - const int ru = U.extent(1); - const int rv = V.extent(1); - if (!m_base.getUbm()) - m_base.resize(ru, rv, U.extent(0)); - else - m_base.resize(ru, rv); - m_base.setU(U); - m_base.setV(V); - m_base.setD(d); -} - -bob::learn::misc::JFABase& -bob::learn::misc::JFABase::operator=(const bob::learn::misc::JFABase& other) -{ - if (this != &other) - { - m_base = other.m_base; - } - return *this; -} diff --git a/bob/learn/misc/cpp/JFAMachine.cpp b/bob/learn/misc/cpp/JFAMachine.cpp deleted file mode 100644 index ae4d1d2..0000000 --- a/bob/learn/misc/cpp/JFAMachine.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/** - * @date Tue Jan 27 16:47:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - - -#include <bob.learn.misc/JFAMachine.h> -#include <bob.core/array_copy.h> -#include <bob.math/linear.h> -#include <bob.math/inv.h> -#include <bob.learn.misc/LinearScoring.h> -#include <limits> - - -//////////////////// JFAMachine //////////////////// -bob::learn::misc::JFAMachine::JFAMachine(): - m_y(1), m_z(1) -{ - resizeTmp(); -} - -bob::learn::misc::JFAMachine::JFAMachine(const boost::shared_ptr<bob::learn::misc::JFABase> jfa_base): - m_jfa_base(jfa_base), - m_y(jfa_base->getDimRv()), m_z(jfa_base->getSupervectorLength()) -{ - if (!m_jfa_base->getUbm()) throw std::runtime_error("No UBM was set in the JFA machine."); - updateCache(); - resizeTmp(); -} - - -bob::learn::misc::JFAMachine::JFAMachine(const bob::learn::misc::JFAMachine& other): - m_jfa_base(other.m_jfa_base), - m_y(bob::core::array::ccopy(other.m_y)), - m_z(bob::core::array::ccopy(other.m_z)) -{ - updateCache(); - resizeTmp(); -} - -bob::learn::misc::JFAMachine::JFAMachine(bob::io::base::HDF5File& config) -{ - load(config); -} - -bob::learn::misc::JFAMachine::~JFAMachine() { -} - -bob::learn::misc::JFAMachine& -bob::learn::misc::JFAMachine::operator=(const bob::learn::misc::JFAMachine& other) -{ - if (this != &other) - { - m_jfa_base = other.m_jfa_base; - m_y.reference(bob::core::array::ccopy(other.m_y)); - m_z.reference(bob::core::array::ccopy(other.m_z)); - } - return *this; -} - -bool bob::learn::misc::JFAMachine::operator==(const bob::learn::misc::JFAMachine& other) const -{ - return (*m_jfa_base == *(other.m_jfa_base) && - bob::core::array::isEqual(m_y, other.m_y) && - bob::core::array::isEqual(m_z, other.m_z)); -} - -bool bob::learn::misc::JFAMachine::operator!=(const bob::learn::misc::JFAMachine& b) const -{ - return !(this->operator==(b)); -} - - -bool bob::learn::misc::JFAMachine::is_similar_to(const bob::learn::misc::JFAMachine& b, - const double r_epsilon, const double a_epsilon) const -{ - return (m_jfa_base->is_similar_to(*(b.m_jfa_base), r_epsilon, a_epsilon) && - bob::core::array::isClose(m_y, b.m_y, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_z, b.m_z, r_epsilon, a_epsilon)); -} - -void bob::learn::misc::JFAMachine::save(bob::io::base::HDF5File& config) const -{ - config.setArray("y", m_y); - config.setArray("z", m_z); -} - -void bob::learn::misc::JFAMachine::load(bob::io::base::HDF5File& config) -{ - //reads all data directly into the member variables - blitz::Array<double,1> y = config.readArray<double,1>("y"); - blitz::Array<double,1> z = config.readArray<double,1>("z"); - if (!m_jfa_base) - { - m_y.resize(y.extent(0)); - m_z.resize(z.extent(0)); - } - setY(y); - setZ(z); - // update cache - updateCache(); - resizeTmp(); -} - - -void bob::learn::misc::JFAMachine::setY(const blitz::Array<double,1>& y) -{ - if(y.extent(0) != m_y.extent(0)) { //checks dimension - boost::format m("size of input vector `y' (%d) does not match the expected size (%d)"); - m % y.extent(0) % m_y.extent(0); - throw std::runtime_error(m.str()); - } - m_y.reference(bob::core::array::ccopy(y)); - // update cache - updateCache(); -} - -void bob::learn::misc::JFAMachine::setZ(const blitz::Array<double,1>& z) -{ - if(z.extent(0) != m_z.extent(0)) { //checks dimension - boost::format m("size of input vector `z' (%d) does not match the expected size (%d)"); - m % z.extent(0) % m_z.extent(0); - throw std::runtime_error(m.str()); - } - m_z.reference(bob::core::array::ccopy(z)); - // update cache - updateCache(); -} - -void bob::learn::misc::JFAMachine::setJFABase(const boost::shared_ptr<bob::learn::misc::JFABase> jfa_base) -{ - if (!jfa_base->getUbm()) - throw std::runtime_error("No UBM was set in the JFA machine."); - m_jfa_base = jfa_base; - // Resize variables - resize(); -} - -void bob::learn::misc::JFAMachine::resize() -{ - m_y.resizeAndPreserve(getDimRv()); - m_z.resizeAndPreserve(getSupervectorLength()); - updateCache(); - resizeTmp(); -} - -void bob::learn::misc::JFAMachine::resizeTmp() -{ - if (m_jfa_base) - { - m_tmp_Ux.resize(getSupervectorLength()); - } -} - -void bob::learn::misc::JFAMachine::updateCache() -{ - if (m_jfa_base) - { - // m + Vy + Dz - m_cache_mVyDz.resize(getSupervectorLength()); - bob::math::prod(m_jfa_base->getV(), m_y, m_cache_mVyDz); - m_cache_mVyDz += m_jfa_base->getD()*m_z + m_jfa_base->getUbm()->getMeanSupervector(); - m_cache_x.resize(getDimRu()); - } -} - -void bob::learn::misc::JFAMachine::estimateUx(const bob::learn::misc::GMMStats& gmm_stats, - blitz::Array<double,1>& Ux) -{ - estimateX(gmm_stats, m_cache_x); - bob::math::prod(m_jfa_base->getU(), m_cache_x, Ux); -} - -double bob::learn::misc::JFAMachine::forward(const bob::learn::misc::GMMStats& input) -{ - return forward_(input); -} - -double bob::learn::misc::JFAMachine::forward(const bob::learn::misc::GMMStats& gmm_stats, - const blitz::Array<double,1>& Ux) -{ - // Checks that a Base machine has been set - if (!m_jfa_base) throw std::runtime_error("No UBM was set in the JFA machine."); - - return bob::learn::misc::linearScoring(m_cache_mVyDz, - m_jfa_base->getUbm()->getMeanSupervector(), m_jfa_base->getUbm()->getVarianceSupervector(), - gmm_stats, Ux, true); -} - -double bob::learn::misc::JFAMachine::forward_(const bob::learn::misc::GMMStats& input) -{ - // Checks that a Base machine has been set - if (!m_jfa_base) throw std::runtime_error("No UBM was set in the JFA machine."); - - // Ux and GMMStats - estimateX(input, m_cache_x); - bob::math::prod(m_jfa_base->getU(), m_cache_x, m_tmp_Ux); - - return bob::learn::misc::linearScoring(m_cache_mVyDz, - m_jfa_base->getUbm()->getMeanSupervector(), m_jfa_base->getUbm()->getVarianceSupervector(), - input, m_tmp_Ux, true); -} - diff --git a/bob/learn/misc/cpp/JFATrainer.cpp b/bob/learn/misc/cpp/JFATrainer.cpp deleted file mode 100644 index ecb23a2..0000000 --- a/bob/learn/misc/cpp/JFATrainer.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/** - * @date Tue Jul 19 12:16:17 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief Joint Factor Analysis Trainer - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/JFATrainer.h> -#include <bob.core/check.h> -#include <bob.core/array_copy.h> -#include <bob.core/array_random.h> -#include <bob.math/inv.h> -#include <bob.math/linear.h> -#include <bob.core/check.h> -#include <bob.core/array_repmat.h> -#include <algorithm> - - -//////////////////////////// JFATrainer /////////////////////////// -bob::learn::misc::JFATrainer::JFATrainer(): - m_rng(new boost::mt19937()) -{} - -bob::learn::misc::JFATrainer::JFATrainer(const bob::learn::misc::JFATrainer& other): - m_rng(other.m_rng) -{} - -bob::learn::misc::JFATrainer::~JFATrainer() -{} - -bob::learn::misc::JFATrainer& bob::learn::misc::JFATrainer::operator= -(const bob::learn::misc::JFATrainer& other) -{ - if (this != &other) - { - //m_max_iterations = other.m_max_iterations; - m_rng = other.m_rng; - } - return *this; -} - -bool bob::learn::misc::JFATrainer::operator==(const bob::learn::misc::JFATrainer& b) const -{ - //return m_max_iterations == b.m_max_iterations && *m_rng == *(b.m_rng); - return *m_rng == *(b.m_rng); -} - -bool bob::learn::misc::JFATrainer::operator!=(const bob::learn::misc::JFATrainer& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::JFATrainer::is_similar_to(const bob::learn::misc::JFATrainer& b, - const double r_epsilon, const double a_epsilon) const -{ - //return m_max_iterations == b.m_max_iterations && *m_rng == *(b.m_rng); - return *m_rng == *(b.m_rng); -} - -void bob::learn::misc::JFATrainer::initialize(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - m_base_trainer.initUbmNidSumStatistics(machine.getBase(), ar); - m_base_trainer.initializeXYZ(ar); - - blitz::Array<double,2>& U = machine.updateU(); - bob::core::array::randn(*m_rng, U); - blitz::Array<double,2>& V = machine.updateV(); - bob::core::array::randn(*m_rng, V); - blitz::Array<double,1>& D = machine.updateD(); - bob::core::array::randn(*m_rng, D); - machine.precompute(); -} - -void bob::learn::misc::JFATrainer::eStep1(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - const bob::learn::misc::FABase& base = machine.getBase(); - m_base_trainer.updateY(base, ar); - m_base_trainer.computeAccumulatorsV(base, ar); -} - -void bob::learn::misc::JFATrainer::mStep1(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - blitz::Array<double,2>& V = machine.updateV(); - m_base_trainer.updateV(V); -} - -void bob::learn::misc::JFATrainer::finalize1(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - const bob::learn::misc::FABase& base = machine.getBase(); - m_base_trainer.updateY(base, ar); -} - - -void bob::learn::misc::JFATrainer::eStep2(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - const bob::learn::misc::FABase& base = machine.getBase(); - m_base_trainer.updateX(base, ar); - m_base_trainer.computeAccumulatorsU(base, ar); -} - -void bob::learn::misc::JFATrainer::mStep2(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - blitz::Array<double,2>& U = machine.updateU(); - m_base_trainer.updateU(U); - machine.precompute(); -} - -void bob::learn::misc::JFATrainer::finalize2(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - const bob::learn::misc::FABase& base = machine.getBase(); - m_base_trainer.updateX(base, ar); -} - - -void bob::learn::misc::JFATrainer::eStep3(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - const bob::learn::misc::FABase& base = machine.getBase(); - m_base_trainer.updateZ(base, ar); - m_base_trainer.computeAccumulatorsD(base, ar); -} - -void bob::learn::misc::JFATrainer::mStep3(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - blitz::Array<double,1>& d = machine.updateD(); - m_base_trainer.updateD(d); -} - -void bob::learn::misc::JFATrainer::finalize3(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ -} - -/* -void bob::learn::misc::JFATrainer::train_loop(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - // V subspace - for (size_t i=0; i<m_max_iterations; ++i) { - eStep1(machine, ar); - mStep1(machine, ar); - } - finalize1(machine, ar); - // U subspace - for (size_t i=0; i<m_max_iterations; ++i) { - eStep2(machine, ar); - mStep2(machine, ar); - } - finalize2(machine, ar); - // d subspace - for (size_t i=0; i<m_max_iterations; ++i) { - eStep3(machine, ar); - mStep3(machine, ar); - } - finalize3(machine, ar); -}*/ - -/* -void bob::learn::misc::JFATrainer::train(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar) -{ - initialize(machine, ar); - train_loop(machine, ar); -} -*/ - -void bob::learn::misc::JFATrainer::enrol(bob::learn::misc::JFAMachine& machine, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& ar, - const size_t n_iter) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > vvec; - vvec.push_back(ar); - - const bob::learn::misc::FABase& fb = machine.getJFABase()->getBase(); - - m_base_trainer.initUbmNidSumStatistics(fb, vvec); - m_base_trainer.initializeXYZ(vvec); - - for (size_t i=0; i<n_iter; ++i) { - m_base_trainer.updateY(fb, vvec); - m_base_trainer.updateX(fb, vvec); - m_base_trainer.updateZ(fb, vvec); - } - - const blitz::Array<double,1> y(m_base_trainer.getY()[0]); - const blitz::Array<double,1> z(m_base_trainer.getZ()[0]); - machine.setY(y); - machine.setZ(z); -} - diff --git a/bob/learn/misc/cpp/KMeansMachine.cpp b/bob/learn/misc/cpp/KMeansMachine.cpp deleted file mode 100644 index 7b4a5a2..0000000 --- a/bob/learn/misc/cpp/KMeansMachine.cpp +++ /dev/null @@ -1,258 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/KMeansMachine.h> - -#include <bob.core/assert.h> -#include <bob.core/check.h> -#include <bob.core/array_copy.h> -#include <limits> - -bob::learn::misc::KMeansMachine::KMeansMachine(): - m_n_means(0), m_n_inputs(0), m_means(0,0), - m_cache_means(0,0) -{ - m_means = 0; -} - -bob::learn::misc::KMeansMachine::KMeansMachine(const size_t n_means, const size_t n_inputs): - m_n_means(n_means), m_n_inputs(n_inputs), m_means(n_means, n_inputs), - m_cache_means(n_means, n_inputs) -{ - m_means = 0; -} - -bob::learn::misc::KMeansMachine::KMeansMachine(const blitz::Array<double,2>& means): - m_n_means(means.extent(0)), m_n_inputs(means.extent(1)), - m_means(bob::core::array::ccopy(means)), - m_cache_means(means.shape()) -{ -} - -bob::learn::misc::KMeansMachine::KMeansMachine(const bob::learn::misc::KMeansMachine& other): - m_n_means(other.m_n_means), m_n_inputs(other.m_n_inputs), - m_means(bob::core::array::ccopy(other.m_means)), - m_cache_means(other.m_cache_means.shape()) -{ -} - -bob::learn::misc::KMeansMachine::KMeansMachine(bob::io::base::HDF5File& config) -{ - load(config); -} - -bob::learn::misc::KMeansMachine::~KMeansMachine() { } - -bob::learn::misc::KMeansMachine& bob::learn::misc::KMeansMachine::operator= -(const bob::learn::misc::KMeansMachine& other) -{ - if(this != &other) - { - m_n_means = other.m_n_means; - m_n_inputs = other.m_n_inputs; - m_means.reference(bob::core::array::ccopy(other.m_means)); - m_cache_means.resize(other.m_means.shape()); - } - return *this; -} - -bool bob::learn::misc::KMeansMachine::operator==(const bob::learn::misc::KMeansMachine& b) const -{ - return m_n_inputs == b.m_n_inputs && m_n_means == b.m_n_means && - bob::core::array::isEqual(m_means, b.m_means); -} - -bool bob::learn::misc::KMeansMachine::operator!=(const bob::learn::misc::KMeansMachine& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::KMeansMachine::is_similar_to(const bob::learn::misc::KMeansMachine& b, - const double r_epsilon, const double a_epsilon) const -{ - return m_n_inputs == b.m_n_inputs && m_n_means == b.m_n_means && - bob::core::array::isClose(m_means, b.m_means, r_epsilon, a_epsilon); -} - -void bob::learn::misc::KMeansMachine::load(bob::io::base::HDF5File& config) -{ - //reads all data directly into the member variables - m_means.reference(config.readArray<double,2>("means")); - m_n_means = m_means.extent(0); - m_n_inputs = m_means.extent(1); - m_cache_means.resize(m_n_means, m_n_inputs); -} - -void bob::learn::misc::KMeansMachine::save(bob::io::base::HDF5File& config) const -{ - config.setArray("means", m_means); -} - -void bob::learn::misc::KMeansMachine::setMeans(const blitz::Array<double,2> &means) -{ - bob::core::array::assertSameShape(means, m_means); - m_means = means; -} - -void bob::learn::misc::KMeansMachine::setMean(const size_t i, const blitz::Array<double,1> &mean) -{ - if(i>=m_n_means) { - boost::format m("cannot set mean with index %lu: out of bounds [0,%lu["); - m % i % m_n_means; - throw std::runtime_error(m.str()); - } - bob::core::array::assertSameDimensionLength(mean.extent(0), m_means.extent(1)); - m_means(i,blitz::Range::all()) = mean; -} - -const blitz::Array<double,1> bob::learn::misc::KMeansMachine::getMean(const size_t i) const -{ - if(i>=m_n_means) { - boost::format m("cannot get mean with index %lu: out of bounds [0,%lu["); - m % i % m_n_means; - throw std::runtime_error(m.str()); - } - - return m_means(i,blitz::Range::all()); - -} - -double bob::learn::misc::KMeansMachine::getDistanceFromMean(const blitz::Array<double,1> &x, - const size_t i) const -{ - return blitz::sum(blitz::pow2(m_means(i,blitz::Range::all()) - x)); -} - -void bob::learn::misc::KMeansMachine::getClosestMean(const blitz::Array<double,1> &x, - size_t &closest_mean, double &min_distance) const -{ - min_distance = std::numeric_limits<double>::max(); - - for(size_t i=0; i<m_n_means; ++i) { - double this_distance = getDistanceFromMean(x,i); - if(this_distance < min_distance) { - min_distance = this_distance; - closest_mean = i; - } - } -} - -double bob::learn::misc::KMeansMachine::getMinDistance(const blitz::Array<double,1>& input) const -{ - size_t closest_mean = 0; - double min_distance = 0; - getClosestMean(input,closest_mean,min_distance); - return min_distance; -} - -void bob::learn::misc::KMeansMachine::getVariancesAndWeightsForEachClusterInit(blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const -{ - // check arguments - bob::core::array::assertSameShape(variances, m_means); - bob::core::array::assertSameDimensionLength(weights.extent(0), m_n_means); - - // initialise output arrays - bob::core::array::assertSameShape(variances, m_means); - bob::core::array::assertSameDimensionLength(weights.extent(0), m_n_means); - variances = 0; - weights = 0; - - // initialise (temporary) mean array - m_cache_means = 0; -} - -void bob::learn::misc::KMeansMachine::getVariancesAndWeightsForEachClusterAcc(const blitz::Array<double,2>& data, blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const -{ - // check arguments - bob::core::array::assertSameShape(variances, m_means); - bob::core::array::assertSameDimensionLength(weights.extent(0), m_n_means); - - // iterate over data - blitz::Range a = blitz::Range::all(); - for(int i=0; i<data.extent(0); ++i) { - // - get example - blitz::Array<double,1> x(data(i,a)); - - // - find closest mean - size_t closest_mean = 0; - double min_distance = 0; - getClosestMean(x,closest_mean,min_distance); - - // - accumulate stats - m_cache_means(closest_mean, blitz::Range::all()) += x; - variances(closest_mean, blitz::Range::all()) += blitz::pow2(x); - ++weights(closest_mean); - } -} - -void bob::learn::misc::KMeansMachine::getVariancesAndWeightsForEachClusterFin(blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const -{ - // check arguments - bob::core::array::assertSameShape(variances, m_means); - bob::core::array::assertSameDimensionLength(weights.extent(0), m_n_means); - - // calculate final variances and weights - blitz::firstIndex idx1; - blitz::secondIndex idx2; - - // find means - m_cache_means = m_cache_means(idx1,idx2) / weights(idx1); - - // find variances - variances = variances(idx1,idx2) / weights(idx1); - variances -= blitz::pow2(m_cache_means); - - // find weights - weights = weights / blitz::sum(weights); -} - -void bob::learn::misc::KMeansMachine::setCacheMeans(const blitz::Array<double,2> &cache_means) -{ - bob::core::array::assertSameShape(cache_means, m_cache_means); - m_cache_means = cache_means; -} - -void bob::learn::misc::KMeansMachine::getVariancesAndWeightsForEachCluster(const blitz::Array<double,2>& data, blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const -{ - // initialise - getVariancesAndWeightsForEachClusterInit(variances, weights); - // accumulate - getVariancesAndWeightsForEachClusterAcc(data, variances, weights); - // merge/finalize - getVariancesAndWeightsForEachClusterFin(variances, weights); -} - -void bob::learn::misc::KMeansMachine::forward(const blitz::Array<double,1>& input, double& output) const -{ - if(static_cast<size_t>(input.extent(0)) != m_n_inputs) { - boost::format m("machine input size (%u) does not match the size of input array (%d)"); - m % m_n_inputs % input.extent(0); - throw std::runtime_error(m.str()); - } - forward_(input,output); -} - -void bob::learn::misc::KMeansMachine::forward_(const blitz::Array<double,1>& input, double& output) const -{ - output = getMinDistance(input); -} - -void bob::learn::misc::KMeansMachine::resize(const size_t n_means, const size_t n_inputs) -{ - m_n_means = n_means; - m_n_inputs = n_inputs; - m_means.resizeAndPreserve(n_means, n_inputs); - m_cache_means.resizeAndPreserve(n_means, n_inputs); -} - -namespace bob { namespace learn { namespace misc { - std::ostream& operator<<(std::ostream& os, const KMeansMachine& km) { - os << "Means = " << km.m_means << std::endl; - return os; - } -} } } diff --git a/bob/learn/misc/cpp/KMeansTrainer.cpp b/bob/learn/misc/cpp/KMeansTrainer.cpp deleted file mode 100644 index 36c628c..0000000 --- a/bob/learn/misc/cpp/KMeansTrainer.cpp +++ /dev/null @@ -1,228 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/KMeansTrainer.h> -#include <bob.core/array_copy.h> - -#include <boost/random.hpp> -#include <bob.core/random.h> - - -bob::learn::misc::KMeansTrainer::KMeansTrainer(InitializationMethod i_m): -m_rng(new boost::mt19937()), -m_average_min_distance(0), -m_zeroethOrderStats(0), -m_firstOrderStats(0) -{ - m_initialization_method = i_m; -} - - -bob::learn::misc::KMeansTrainer::KMeansTrainer(const bob::learn::misc::KMeansTrainer& other){ - - m_initialization_method = other.m_initialization_method; - m_rng = other.m_rng; - m_average_min_distance = other.m_average_min_distance; - m_zeroethOrderStats = bob::core::array::ccopy(other.m_zeroethOrderStats); - m_firstOrderStats = bob::core::array::ccopy(other.m_firstOrderStats); -} - - -bob::learn::misc::KMeansTrainer& bob::learn::misc::KMeansTrainer::operator= -(const bob::learn::misc::KMeansTrainer& other) -{ - if(this != &other) - { - m_rng = other.m_rng; - m_initialization_method = other.m_initialization_method; - m_average_min_distance = other.m_average_min_distance; - - m_zeroethOrderStats = bob::core::array::ccopy(other.m_zeroethOrderStats); - m_firstOrderStats = bob::core::array::ccopy(other.m_firstOrderStats); - } - return *this; -} - - -bool bob::learn::misc::KMeansTrainer::operator==(const bob::learn::misc::KMeansTrainer& b) const { - return - m_initialization_method == b.m_initialization_method && - *m_rng == *(b.m_rng) && m_average_min_distance == b.m_average_min_distance && - bob::core::array::hasSameShape(m_zeroethOrderStats, b.m_zeroethOrderStats) && - bob::core::array::hasSameShape(m_firstOrderStats, b.m_firstOrderStats) && - blitz::all(m_zeroethOrderStats == b.m_zeroethOrderStats) && - blitz::all(m_firstOrderStats == b.m_firstOrderStats); -} - -bool bob::learn::misc::KMeansTrainer::operator!=(const bob::learn::misc::KMeansTrainer& b) const { - return !(this->operator==(b)); -} - -void bob::learn::misc::KMeansTrainer::initialize(bob::learn::misc::KMeansMachine& kmeans, - const blitz::Array<double,2>& ar) -{ - // split data into as many chunks as there are means - size_t n_data = ar.extent(0); - - // assign the i'th mean to a random example within the i'th chunk - blitz::Range a = blitz::Range::all(); - if(m_initialization_method == RANDOM || m_initialization_method == RANDOM_NO_DUPLICATE) // Random initialization - { - unsigned int n_chunk = n_data / kmeans.getNMeans(); - size_t n_max_trials = (size_t)n_chunk * 5; - blitz::Array<double,1> cur_mean; - if(m_initialization_method == RANDOM_NO_DUPLICATE) - cur_mean.resize(kmeans.getNInputs()); - - for(size_t i=0; i<kmeans.getNMeans(); ++i) - { - boost::uniform_int<> die(i*n_chunk, (i+1)*n_chunk-1); - - // get random index within chunk - unsigned int index = die(*m_rng); - - // get the example at that index - blitz::Array<double, 1> mean = ar(index,a); - - if(m_initialization_method == RANDOM_NO_DUPLICATE) - { - size_t count = 0; - while(count < n_max_trials) - { - // check that the selected sampled is different than all the previously - // selected ones - bool valid = true; - for(size_t j=0; j<i && valid; ++j) - { - cur_mean = kmeans.getMean(j); - valid = blitz::any(mean != cur_mean); - } - // if different, stop otherwise, try with another one - if(valid) - break; - else - { - index = die(*m_rng); - mean = ar(index,a); - ++count; - } - } - // Initialization fails - if(count >= n_max_trials) { - boost::format m("initialization failure: surpassed the maximum number of trials (%u)"); - m % n_max_trials; - throw std::runtime_error(m.str()); - } - } - - // set the mean - kmeans.setMean(i, mean); - } - } - else // K-Means++ - { - // 1.a. Selects one sample randomly - boost::uniform_int<> die(0, n_data-1); - // Gets the example at a random index - blitz::Array<double,1> mean = ar(die(*m_rng),a); - kmeans.setMean(0, mean); - - // 1.b. Loops, computes probability distribution and select samples accordingly - blitz::Array<double,1> weights(n_data); - for(size_t m=1; m<kmeans.getNMeans(); ++m) - { - // For each sample, puts the distance to the closest mean in the weight vector - for(size_t s=0; s<n_data; ++s) - { - blitz::Array<double,1> s_cur = ar(s,a); - double& w_cur = weights(s); - // Initializes with the distance to first mean - w_cur = kmeans.getDistanceFromMean(s_cur, 0); - // Loops over the remaining mean and update the mean distance if required - for(size_t i=1; i<m; ++i) - w_cur = std::min(w_cur, kmeans.getDistanceFromMean(s_cur, i)); - } - // Square and normalize the weights vectors such that - // \f$weights[x] = D(x)^{2} \sum_{y} D(y)^{2}\f$ - weights = blitz::pow2(weights); - weights /= blitz::sum(weights); - - // Takes a sample according to the weights distribution - // Blitz iterators is fine as the weights array should be C-style contiguous - bob::core::array::assertCContiguous(weights); - bob::core::random::discrete_distribution<> die2(weights.begin(), weights.end()); - blitz::Array<double,1> new_mean = ar(die2(*m_rng),a); - kmeans.setMean(m, new_mean); - } - } - // Resize the accumulator - m_zeroethOrderStats.resize(kmeans.getNMeans()); - m_firstOrderStats.resize(kmeans.getNMeans(), kmeans.getNInputs()); -} - -void bob::learn::misc::KMeansTrainer::eStep(bob::learn::misc::KMeansMachine& kmeans, - const blitz::Array<double,2>& ar) -{ - // initialise the accumulators - resetAccumulators(kmeans); - - // iterate over data samples - blitz::Range a = blitz::Range::all(); - for(int i=0; i<ar.extent(0); ++i) { - // get example - blitz::Array<double, 1> x(ar(i,a)); - - // find closest mean, and distance from that mean - size_t closest_mean = 0; - double min_distance = 0; - kmeans.getClosestMean(x,closest_mean,min_distance); - - // accumulate the stats - m_average_min_distance += min_distance; - ++m_zeroethOrderStats(closest_mean); - m_firstOrderStats(closest_mean,blitz::Range::all()) += x; - } - m_average_min_distance /= static_cast<double>(ar.extent(0)); -} - -void bob::learn::misc::KMeansTrainer::mStep(bob::learn::misc::KMeansMachine& kmeans) -{ - blitz::Array<double,2>& means = kmeans.updateMeans(); - for(size_t i=0; i<kmeans.getNMeans(); ++i) - { - means(i,blitz::Range::all()) = - m_firstOrderStats(i,blitz::Range::all()) / m_zeroethOrderStats(i); - } -} - -double bob::learn::misc::KMeansTrainer::computeLikelihood(bob::learn::misc::KMeansMachine& kmeans) -{ - return m_average_min_distance; -} - - -bool bob::learn::misc::KMeansTrainer::resetAccumulators(bob::learn::misc::KMeansMachine& kmeans) -{ - m_average_min_distance = 0; - m_zeroethOrderStats = 0; - m_firstOrderStats = 0; - return true; -} - -void bob::learn::misc::KMeansTrainer::setZeroethOrderStats(const blitz::Array<double,1>& zeroethOrderStats) -{ - bob::core::array::assertSameShape(m_zeroethOrderStats, zeroethOrderStats); - m_zeroethOrderStats = zeroethOrderStats; -} - -void bob::learn::misc::KMeansTrainer::setFirstOrderStats(const blitz::Array<double,2>& firstOrderStats) -{ - bob::core::array::assertSameShape(m_firstOrderStats, firstOrderStats); - m_firstOrderStats = firstOrderStats; -} - diff --git a/bob/learn/misc/cpp/LinearScoring.cpp b/bob/learn/misc/cpp/LinearScoring.cpp deleted file mode 100644 index e504f22..0000000 --- a/bob/learn/misc/cpp/LinearScoring.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/** - * @date Wed Jul 13 16:00:04 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ -#include <bob.learn.misc/LinearScoring.h> -#include <bob.math/linear.h> - - -static void _linearScoring(const std::vector<blitz::Array<double,1> >& models, - const blitz::Array<double,1>& ubm_mean, - const blitz::Array<double,1>& ubm_variance, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const std::vector<blitz::Array<double,1> >* test_channelOffset, - const bool frame_length_normalisation, - blitz::Array<double,2>& scores) -{ - int C = test_stats[0]->sumPx.extent(0); - int D = test_stats[0]->sumPx.extent(1); - int CD = C*D; - int Tt = test_stats.size(); - int Tm = models.size(); - - // Check output size - bob::core::array::assertSameDimensionLength(scores.extent(0), models.size()); - bob::core::array::assertSameDimensionLength(scores.extent(1), test_stats.size()); - - blitz::Array<double,2> A(Tm, CD); - blitz::Array<double,2> B(CD, Tt); - - // 1) Compute A - for(int t=0; t<Tm; ++t) { - blitz::Array<double, 1> tmp = A(t, blitz::Range::all()); - tmp = (models[t] - ubm_mean) / ubm_variance; - } - - // 2) Compute B - if(test_channelOffset == 0) { - for(int t=0; t<Tt; ++t) - for(int s=0; s<CD; ++s) - B(s, t) = test_stats[t]->sumPx(s/D, s%D) - (ubm_mean(s) * test_stats[t]->n(s/D)); - } - else { - bob::core::array::assertSameDimensionLength((*test_channelOffset).size(), Tt); - - for(int t=0; t<Tt; ++t) { - bob::core::array::assertSameDimensionLength((*test_channelOffset)[t].extent(0), CD); - for(int s=0; s<CD; ++s) - B(s, t) = test_stats[t]->sumPx(s/D, s%D) - (test_stats[t]->n(s/D) * (ubm_mean(s) + (*test_channelOffset)[t](s))); - } - } - - // Apply the normalisation if needed - if(frame_length_normalisation) { - for(int t=0; t<Tt; ++t) { - double sum_N = test_stats[t]->T; - blitz::Array<double, 1> v_t = B(blitz::Range::all(),t); - - if (sum_N <= std::numeric_limits<double>::epsilon() && sum_N >= -std::numeric_limits<double>::epsilon()) - v_t = 0; - else - v_t /= sum_N; - } - } - - // 3) Compute LLR - bob::math::prod(A, B, scores); -} - - -void bob::learn::misc::linearScoring(const std::vector<blitz::Array<double,1> >& models, - const blitz::Array<double,1>& ubm_mean, const blitz::Array<double,1>& ubm_variance, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const std::vector<blitz::Array<double,1> >& test_channelOffset, - const bool frame_length_normalisation, - blitz::Array<double, 2>& scores) -{ - _linearScoring(models, ubm_mean, ubm_variance, test_stats, &test_channelOffset, frame_length_normalisation, scores); -} - -void bob::learn::misc::linearScoring(const std::vector<blitz::Array<double,1> >& models, - const blitz::Array<double,1>& ubm_mean, const blitz::Array<double,1>& ubm_variance, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const bool frame_length_normalisation, - blitz::Array<double, 2>& scores) -{ - _linearScoring(models, ubm_mean, ubm_variance, test_stats, 0, frame_length_normalisation, scores); -} - -void bob::learn::misc::linearScoring(const std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> >& models, - const bob::learn::misc::GMMMachine& ubm, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const bool frame_length_normalisation, - blitz::Array<double, 2>& scores) -{ - int C = test_stats[0]->sumPx.extent(0); - int D = test_stats[0]->sumPx.extent(1); - int CD = C*D; - std::vector<blitz::Array<double,1> > models_b; - // Allocate and get the mean supervector - for(size_t i=0; i<models.size(); ++i) { - blitz::Array<double,1> mod(CD); - mod = models[i]->getMeanSupervector(); - models_b.push_back(mod); - } - const blitz::Array<double,1>& ubm_mean = ubm.getMeanSupervector(); - const blitz::Array<double,1>& ubm_variance = ubm.getVarianceSupervector(); - _linearScoring(models_b, ubm_mean, ubm_variance, test_stats, 0, frame_length_normalisation, scores); -} - -void bob::learn::misc::linearScoring(const std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> >& models, - const bob::learn::misc::GMMMachine& ubm, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const std::vector<blitz::Array<double,1> >& test_channelOffset, - const bool frame_length_normalisation, - blitz::Array<double, 2>& scores) -{ - int C = test_stats[0]->sumPx.extent(0); - int D = test_stats[0]->sumPx.extent(1); - int CD = C*D; - std::vector<blitz::Array<double,1> > models_b; - // Allocate and get the mean supervector - for(size_t i=0; i<models.size(); ++i) { - blitz::Array<double,1> mod(CD); - mod = models[i]->getMeanSupervector(); - models_b.push_back(mod); - } - const blitz::Array<double,1>& ubm_mean = ubm.getMeanSupervector(); - const blitz::Array<double,1>& ubm_variance = ubm.getVarianceSupervector(); - _linearScoring(models_b, ubm_mean, ubm_variance, test_stats, &test_channelOffset, frame_length_normalisation, scores); -} - - - -double bob::learn::misc::linearScoring(const blitz::Array<double,1>& models, - const blitz::Array<double,1>& ubm_mean, const blitz::Array<double,1>& ubm_variance, - const bob::learn::misc::GMMStats& test_stats, - const blitz::Array<double,1>& test_channelOffset, - const bool frame_length_normalisation) -{ - int C = test_stats.sumPx.extent(0); - int D = test_stats.sumPx.extent(1); - int CD = C*D; - - - blitz::Array<double,1> A(CD); - blitz::Array<double,1> B(CD); - - // 1) Compute A - A = (models - ubm_mean) / ubm_variance; - - // 2) Compute B - for (int s=0; s<CD; ++s) - B(s) = test_stats.sumPx(s/D, s%D) - (test_stats.n(s/D) * (ubm_mean(s) + test_channelOffset(s))); - - // Apply the normalisation if needed - if (frame_length_normalisation) { - double sum_N = test_stats.T; - if (sum_N == 0) - B = 0; - else - B /= sum_N; - } - - return blitz::sum(A * B); -} - diff --git a/bob/learn/misc/cpp/MAP_GMMTrainer.cpp b/bob/learn/misc/cpp/MAP_GMMTrainer.cpp deleted file mode 100644 index d20b150..0000000 --- a/bob/learn/misc/cpp/MAP_GMMTrainer.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/MAP_GMMTrainer.h> -#include <bob.core/check.h> - -bob::learn::misc::MAP_GMMTrainer::MAP_GMMTrainer( - const bool update_means, - const bool update_variances, - const bool update_weights, - const double mean_var_update_responsibilities_threshold, - - const bool reynolds_adaptation, - const double relevance_factor, - const double alpha, - boost::shared_ptr<bob::learn::misc::GMMMachine> prior_gmm): - - m_gmm_base_trainer(update_means, update_variances, update_weights, mean_var_update_responsibilities_threshold), - m_prior_gmm(prior_gmm) -{ - m_reynolds_adaptation = reynolds_adaptation; - m_relevance_factor = relevance_factor; - m_alpha = alpha; -} - - -bob::learn::misc::MAP_GMMTrainer::MAP_GMMTrainer(const bob::learn::misc::MAP_GMMTrainer& b): - m_gmm_base_trainer(b.m_gmm_base_trainer), - m_prior_gmm(b.m_prior_gmm) -{ - m_relevance_factor = b.m_relevance_factor; - m_alpha = b.m_alpha; - m_reynolds_adaptation = b.m_reynolds_adaptation; -} - -bob::learn::misc::MAP_GMMTrainer::~MAP_GMMTrainer() -{} - -void bob::learn::misc::MAP_GMMTrainer::initialize(bob::learn::misc::GMMMachine& gmm) -{ - // Check that the prior GMM has been specified - if (!m_prior_gmm) - throw std::runtime_error("MAP_GMMTrainer: Prior GMM distribution has not been set"); - - // Allocate memory for the sufficient statistics and initialise - m_gmm_base_trainer.initialize(gmm); - - const size_t n_gaussians = gmm.getNGaussians(); - // TODO: check size? - gmm.setWeights(m_prior_gmm->getWeights()); - for(size_t i=0; i<n_gaussians; ++i) - { - gmm.getGaussian(i)->updateMean() = m_prior_gmm->getGaussian(i)->getMean(); - gmm.getGaussian(i)->updateVariance() = m_prior_gmm->getGaussian(i)->getVariance(); - gmm.getGaussian(i)->applyVarianceThresholds(); - } - // Initializes cache - m_cache_alpha.resize(n_gaussians); - m_cache_ml_weights.resize(n_gaussians); -} - -bool bob::learn::misc::MAP_GMMTrainer::setPriorGMM(boost::shared_ptr<bob::learn::misc::GMMMachine> prior_gmm) -{ - if (!prior_gmm) return false; - m_prior_gmm = prior_gmm; - return true; -} - - -void bob::learn::misc::MAP_GMMTrainer::mStep(bob::learn::misc::GMMMachine& gmm) -{ - // Read options and variables - double n_gaussians = gmm.getNGaussians(); - - // Check that the prior GMM has been specified - if (!m_prior_gmm) - throw std::runtime_error("MAP_GMMTrainer: Prior GMM distribution has not been set"); - - blitz::firstIndex i; - blitz::secondIndex j; - - // Calculate the "data-dependent adaptation coefficient", alpha_i - // TODO: check if required // m_cache_alpha.resize(n_gaussians); - if (!m_reynolds_adaptation) - m_cache_alpha = m_alpha; - else - m_cache_alpha = m_gmm_base_trainer.getGMMStats().n(i) / (m_gmm_base_trainer.getGMMStats().n(i) + m_relevance_factor); - - // - Update weights if requested - // Equation 11 of Reynolds et al., "Speaker Verification Using Adapted Gaussian Mixture Models", Digital Signal Processing, 2000 - if (m_gmm_base_trainer.getUpdateWeights()) { - // Calculate the maximum likelihood weights - m_cache_ml_weights = m_gmm_base_trainer.getGMMStats().n / static_cast<double>(m_gmm_base_trainer.getGMMStats().T); //cast req. for linux/32-bits & osx - - // Get the prior weights - const blitz::Array<double,1>& prior_weights = m_prior_gmm->getWeights(); - blitz::Array<double,1>& new_weights = gmm.updateWeights(); - - // Calculate the new weights - new_weights = m_cache_alpha * m_cache_ml_weights + (1-m_cache_alpha) * prior_weights; - - // Apply the scale factor, gamma, to ensure the new weights sum to unity - double gamma = blitz::sum(new_weights); - new_weights /= gamma; - - // Recompute the log weights in the cache of the GMMMachine - gmm.recomputeLogWeights(); - } - - // Update GMM parameters - // - Update means if requested - // Equation 12 of Reynolds et al., "Speaker Verification Using Adapted Gaussian Mixture Models", Digital Signal Processing, 2000 - if (m_gmm_base_trainer.getUpdateMeans()) { - // Calculate new means - for (size_t i=0; i<n_gaussians; ++i) { - const blitz::Array<double,1>& prior_means = m_prior_gmm->getGaussian(i)->getMean(); - blitz::Array<double,1>& means = gmm.getGaussian(i)->updateMean(); - if (m_gmm_base_trainer.getGMMStats().n(i) < m_gmm_base_trainer.getMeanVarUpdateResponsibilitiesThreshold()) { - means = prior_means; - } - else { - // Use the maximum likelihood means - means = m_cache_alpha(i) * (m_gmm_base_trainer.getGMMStats().sumPx(i,blitz::Range::all()) / m_gmm_base_trainer.getGMMStats().n(i)) + (1-m_cache_alpha(i)) * prior_means; - } - } - } - - // - Update variance if requested - // Equation 13 of Reynolds et al., "Speaker Verification Using Adapted Gaussian Mixture Models", Digital Signal Processing, 2000 - if (m_gmm_base_trainer.getUpdateVariances()) { - // Calculate new variances (equation 13) - for (size_t i=0; i<n_gaussians; ++i) { - const blitz::Array<double,1>& prior_means = m_prior_gmm->getGaussian(i)->getMean(); - blitz::Array<double,1>& means = gmm.getGaussian(i)->updateMean(); - const blitz::Array<double,1>& prior_variances = m_prior_gmm->getGaussian(i)->getVariance(); - blitz::Array<double,1>& variances = gmm.getGaussian(i)->updateVariance(); - if (m_gmm_base_trainer.getGMMStats().n(i) < m_gmm_base_trainer.getMeanVarUpdateResponsibilitiesThreshold()) { - variances = (prior_variances + prior_means) - blitz::pow2(means); - } - else { - variances = m_cache_alpha(i) * m_gmm_base_trainer.getGMMStats().sumPxx(i,blitz::Range::all()) / m_gmm_base_trainer.getGMMStats().n(i) + (1-m_cache_alpha(i)) * (prior_variances + prior_means) - blitz::pow2(means); - } - gmm.getGaussian(i)->applyVarianceThresholds(); - } - } -} - - - -bob::learn::misc::MAP_GMMTrainer& bob::learn::misc::MAP_GMMTrainer::operator= - (const bob::learn::misc::MAP_GMMTrainer &other) -{ - if (this != &other) - { - m_gmm_base_trainer = other.m_gmm_base_trainer; - m_relevance_factor = other.m_relevance_factor; - m_prior_gmm = other.m_prior_gmm; - m_alpha = other.m_alpha; - m_reynolds_adaptation = other.m_reynolds_adaptation; - m_cache_alpha.resize(other.m_cache_alpha.extent(0)); - m_cache_ml_weights.resize(other.m_cache_ml_weights.extent(0)); - } - return *this; -} - - -bool bob::learn::misc::MAP_GMMTrainer::operator== - (const bob::learn::misc::MAP_GMMTrainer &other) const -{ - return m_gmm_base_trainer == other.m_gmm_base_trainer && - m_relevance_factor == other.m_relevance_factor && - m_prior_gmm == other.m_prior_gmm && - m_alpha == other.m_alpha && - m_reynolds_adaptation == other.m_reynolds_adaptation; -} - - -bool bob::learn::misc::MAP_GMMTrainer::operator!= - (const bob::learn::misc::MAP_GMMTrainer &other) const -{ - return !(this->operator==(other)); -} - - -bool bob::learn::misc::MAP_GMMTrainer::is_similar_to - (const bob::learn::misc::MAP_GMMTrainer &other, const double r_epsilon, - const double a_epsilon) const -{ - return //m_gmm_base_trainer.is_similar_to(other.m_gmm_base_trainer, r_epsilon, a_epsilon) && - bob::core::isClose(m_relevance_factor, other.m_relevance_factor, r_epsilon, a_epsilon) && - m_prior_gmm == other.m_prior_gmm && - bob::core::isClose(m_alpha, other.m_alpha, r_epsilon, a_epsilon) && - m_reynolds_adaptation == other.m_reynolds_adaptation; -} - diff --git a/bob/learn/misc/cpp/ML_GMMTrainer.cpp b/bob/learn/misc/cpp/ML_GMMTrainer.cpp deleted file mode 100644 index f08fb2f..0000000 --- a/bob/learn/misc/cpp/ML_GMMTrainer.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/ML_GMMTrainer.h> -#include <algorithm> - -bob::learn::misc::ML_GMMTrainer::ML_GMMTrainer( - const bool update_means, - const bool update_variances, - const bool update_weights, - const double mean_var_update_responsibilities_threshold -): - m_gmm_base_trainer(update_means, update_variances, update_weights, mean_var_update_responsibilities_threshold) -{} - - - -bob::learn::misc::ML_GMMTrainer::ML_GMMTrainer(const bob::learn::misc::ML_GMMTrainer& b): - m_gmm_base_trainer(b.m_gmm_base_trainer) -{} - -bob::learn::misc::ML_GMMTrainer::~ML_GMMTrainer() -{} - -void bob::learn::misc::ML_GMMTrainer::initialize(bob::learn::misc::GMMMachine& gmm) -{ - m_gmm_base_trainer.initialize(gmm); - - // Allocate cache - size_t n_gaussians = gmm.getNGaussians(); - m_cache_ss_n_thresholded.resize(n_gaussians); -} - - -void bob::learn::misc::ML_GMMTrainer::mStep(bob::learn::misc::GMMMachine& gmm) -{ - // Read options and variables - const size_t n_gaussians = gmm.getNGaussians(); - - // - Update weights if requested - // Equation 9.26 of Bishop, "Pattern recognition and machine learning", 2006 - if (m_gmm_base_trainer.getUpdateWeights()) { - blitz::Array<double,1>& weights = gmm.updateWeights(); - weights = m_gmm_base_trainer.getGMMStats().n / static_cast<double>(m_gmm_base_trainer.getGMMStats().T); //cast req. for linux/32-bits & osx - // Recompute the log weights in the cache of the GMMMachine - gmm.recomputeLogWeights(); - } - - // Generate a thresholded version of m_ss.n - for(size_t i=0; i<n_gaussians; ++i) - m_cache_ss_n_thresholded(i) = std::max(m_gmm_base_trainer.getGMMStats().n(i), m_gmm_base_trainer.getMeanVarUpdateResponsibilitiesThreshold()); - - // Update GMM parameters using the sufficient statistics (m_ss) - // - Update means if requested - // Equation 9.24 of Bishop, "Pattern recognition and machine learning", 2006 - if (m_gmm_base_trainer.getUpdateMeans()) { - for(size_t i=0; i<n_gaussians; ++i) { - blitz::Array<double,1>& means = gmm.getGaussian(i)->updateMean(); - means = m_gmm_base_trainer.getGMMStats().sumPx(i, blitz::Range::all()) / m_cache_ss_n_thresholded(i); - } - } - - // - Update variance if requested - // See Equation 9.25 of Bishop, "Pattern recognition and machine learning", 2006 - // ...but we use the "computational formula for the variance", i.e. - // var = 1/n * sum (P(x-mean)(x-mean)) - // = 1/n * sum (Pxx) - mean^2 - if (m_gmm_base_trainer.getUpdateVariances()) { - for(size_t i=0; i<n_gaussians; ++i) { - const blitz::Array<double,1>& means = gmm.getGaussian(i)->getMean(); - blitz::Array<double,1>& variances = gmm.getGaussian(i)->updateVariance(); - variances = m_gmm_base_trainer.getGMMStats().sumPxx(i, blitz::Range::all()) / m_cache_ss_n_thresholded(i) - blitz::pow2(means); - gmm.getGaussian(i)->applyVarianceThresholds(); - } - } -} - -bob::learn::misc::ML_GMMTrainer& bob::learn::misc::ML_GMMTrainer::operator= - (const bob::learn::misc::ML_GMMTrainer &other) -{ - if (this != &other) - { - m_gmm_base_trainer = other.m_gmm_base_trainer; - m_cache_ss_n_thresholded.resize(other.m_cache_ss_n_thresholded.extent(0)); - } - return *this; -} - -bool bob::learn::misc::ML_GMMTrainer::operator== - (const bob::learn::misc::ML_GMMTrainer &other) const -{ - return m_gmm_base_trainer == other.m_gmm_base_trainer; -} - -bool bob::learn::misc::ML_GMMTrainer::operator!= - (const bob::learn::misc::ML_GMMTrainer &other) const -{ - return !(this->operator==(other)); -} - -/* -bool bob::learn::misc::ML_GMMTrainer::is_similar_to - (const bob::learn::misc::ML_GMMTrainer &other, const double r_epsilon, - const double a_epsilon) const -{ - return m_gmm_base_trainer.is_similar_to(other, r_epsilon, a_epsilon); -} -*/ diff --git a/bob/learn/misc/cpp/PLDAMachine.cpp b/bob/learn/misc/cpp/PLDAMachine.cpp deleted file mode 100644 index 4193c85..0000000 --- a/bob/learn/misc/cpp/PLDAMachine.cpp +++ /dev/null @@ -1,960 +0,0 @@ -/** - * @date Fri Oct 14 18:07:56 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief Machines that implements the PLDA model - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.core/assert.h> -#include <bob.core/check.h> -#include <bob.core/array_copy.h> -#include <bob.learn.misc/PLDAMachine.h> -#include <bob.math/linear.h> -#include <bob.math/det.h> -#include <bob.math/inv.h> - -#include <cmath> -#include <boost/lexical_cast.hpp> -#include <string> - -bob::learn::misc::PLDABase::PLDABase(): - m_variance_threshold(0.) -{ - resizeNoInit(0, 0, 0); -} - -bob::learn::misc::PLDABase::PLDABase(const size_t dim_d, const size_t dim_f, - const size_t dim_g, const double variance_threshold): - m_variance_threshold(variance_threshold) -{ - resize(dim_d, dim_f, dim_g); -} - - -bob::learn::misc::PLDABase::PLDABase(const bob::learn::misc::PLDABase& other): - m_dim_d(other.m_dim_d), - m_dim_f(other.m_dim_f), - m_dim_g(other.m_dim_g), - m_F(bob::core::array::ccopy(other.m_F)), - m_G(bob::core::array::ccopy(other.m_G)), - m_sigma(bob::core::array::ccopy(other.m_sigma)), - m_mu(bob::core::array::ccopy(other.m_mu)), - m_variance_threshold(other.m_variance_threshold), - m_cache_isigma(bob::core::array::ccopy(other.m_cache_isigma)), - m_cache_alpha(bob::core::array::ccopy(other.m_cache_alpha)), - m_cache_beta(bob::core::array::ccopy(other.m_cache_beta)), - m_cache_gamma(), - m_cache_Ft_beta(bob::core::array::ccopy(other.m_cache_Ft_beta)), - m_cache_Gt_isigma(bob::core::array::ccopy(other.m_cache_Gt_isigma)), - m_cache_logdet_alpha(other.m_cache_logdet_alpha), - m_cache_logdet_sigma(other.m_cache_logdet_sigma), - m_cache_loglike_constterm(other.m_cache_loglike_constterm) -{ - bob::core::array::ccopy(other.m_cache_gamma, m_cache_gamma); - resizeTmp(); -} - -bob::learn::misc::PLDABase::PLDABase(bob::io::base::HDF5File& config) { - load(config); -} - -bob::learn::misc::PLDABase::~PLDABase() { -} - -bob::learn::misc::PLDABase& bob::learn::misc::PLDABase::operator= - (const bob::learn::misc::PLDABase& other) -{ - if (this != &other) - { - m_dim_d = other.m_dim_d; - m_dim_f = other.m_dim_f; - m_dim_g = other.m_dim_g; - m_F.reference(bob::core::array::ccopy(other.m_F)); - m_G.reference(bob::core::array::ccopy(other.m_G)); - m_sigma.reference(bob::core::array::ccopy(other.m_sigma)); - m_mu.reference(bob::core::array::ccopy(other.m_mu)); - m_variance_threshold = other.m_variance_threshold; - m_cache_isigma.reference(bob::core::array::ccopy(other.m_cache_isigma)); - m_cache_alpha.reference(bob::core::array::ccopy(other.m_cache_alpha)); - m_cache_beta.reference(bob::core::array::ccopy(other.m_cache_beta)); - bob::core::array::ccopy(other.m_cache_gamma, m_cache_gamma); - m_cache_Ft_beta.reference(bob::core::array::ccopy(other.m_cache_Ft_beta)); - m_cache_Gt_isigma.reference(bob::core::array::ccopy(other.m_cache_Gt_isigma)); - m_cache_logdet_alpha = other.m_cache_logdet_alpha; - m_cache_logdet_sigma = other.m_cache_logdet_sigma; - m_cache_loglike_constterm = other.m_cache_loglike_constterm; - resizeTmp(); - } - return *this; -} - -bool bob::learn::misc::PLDABase::operator== - (const bob::learn::misc::PLDABase& b) const -{ - if (!(m_dim_d == b.m_dim_d && m_dim_f == b.m_dim_f && - m_dim_g == b.m_dim_g && - bob::core::array::isEqual(m_F, b.m_F) && - bob::core::array::isEqual(m_G, b.m_G) && - bob::core::array::isEqual(m_sigma, b.m_sigma) && - bob::core::array::isEqual(m_mu, b.m_mu) && - m_variance_threshold == b.m_variance_threshold && - bob::core::array::isEqual(m_cache_isigma, b.m_cache_isigma) && - bob::core::array::isEqual(m_cache_alpha, b.m_cache_alpha) && - bob::core::array::isEqual(m_cache_beta, b.m_cache_beta) && - bob::core::array::isEqual(m_cache_gamma, b.m_cache_gamma) && - bob::core::array::isEqual(m_cache_Ft_beta, b.m_cache_Ft_beta) && - bob::core::array::isEqual(m_cache_Gt_isigma, b.m_cache_Gt_isigma) && - m_cache_logdet_alpha == b.m_cache_logdet_alpha && - m_cache_logdet_sigma == b.m_cache_logdet_sigma)) - return false; - - // m_cache_loglike_constterm - if (this->m_cache_loglike_constterm.size() != b.m_cache_loglike_constterm.size()) - return false; // differing sizes, they are not the same - std::map<size_t, double>::const_iterator i, j; - for (i = this->m_cache_loglike_constterm.begin(), j = b.m_cache_loglike_constterm.begin(); - i != this->m_cache_loglike_constterm.end(); ++i, ++j) - { - if (i->first != j->first || i->second != j->second) - return false; - } - - return true; -} - -bool bob::learn::misc::PLDABase::operator!= - (const bob::learn::misc::PLDABase& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::PLDABase::is_similar_to(const bob::learn::misc::PLDABase& b, - const double r_epsilon, const double a_epsilon) const -{ - return (m_dim_d == b.m_dim_d && m_dim_f == b.m_dim_f && - m_dim_g == b.m_dim_g && - bob::core::array::isClose(m_F, b.m_F, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_G, b.m_G, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_sigma, b.m_sigma, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_mu, b.m_mu, r_epsilon, a_epsilon) && - bob::core::isClose(m_variance_threshold, b.m_variance_threshold, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_isigma, b.m_cache_isigma, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_alpha, b.m_cache_alpha, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_beta, b.m_cache_beta, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_gamma, b.m_cache_gamma, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_Ft_beta, b.m_cache_Ft_beta, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_Gt_isigma, b.m_cache_Gt_isigma, r_epsilon, a_epsilon) && - bob::core::isClose(m_cache_logdet_alpha, b.m_cache_logdet_alpha, r_epsilon, a_epsilon) && - bob::core::isClose(m_cache_logdet_sigma, b.m_cache_logdet_sigma, r_epsilon, a_epsilon) && - bob::core::isClose(m_cache_loglike_constterm, b.m_cache_loglike_constterm)); -} - -void bob::learn::misc::PLDABase::load(bob::io::base::HDF5File& config) -{ - if (!config.contains("dim_d")) - { - // Then the model was saved using bob < 1.2.0 - //reads all data directly into the member variables - m_F.reference(config.readArray<double,2>("F")); - m_G.reference(config.readArray<double,2>("G")); - m_dim_d = m_F.extent(0); - m_dim_f = m_F.extent(1); - m_dim_g = m_G.extent(1); - m_sigma.reference(config.readArray<double,1>("sigma")); - m_mu.reference(config.readArray<double,1>("mu")); - m_cache_isigma.resize(m_dim_d); - precomputeISigma(); - m_variance_threshold = 0.; - m_cache_alpha.reference(config.readArray<double,2>("alpha")); - m_cache_beta.reference(config.readArray<double,2>("beta")); - // gamma and log like constant term (a-dependent terms) - if (config.contains("a_indices")) - { - blitz::Array<uint32_t, 1> a_indices; - a_indices.reference(config.readArray<uint32_t,1>("a_indices")); - for (int i=0; i<a_indices.extent(0); ++i) - { - std::string str1 = "gamma_" + boost::lexical_cast<std::string>(a_indices(i)); - m_cache_gamma[a_indices(i)].reference(config.readArray<double,2>(str1)); - std::string str2 = "loglikeconstterm_" + boost::lexical_cast<std::string>(a_indices(i)); - m_cache_loglike_constterm[a_indices(i)] = config.read<double>(str2); - } - } - m_cache_Ft_beta.reference(config.readArray<double,2>("Ft_beta")); - m_cache_Gt_isigma.reference(config.readArray<double,2>("Gt_isigma")); - m_cache_logdet_alpha = config.read<double>("logdet_alpha"); - m_cache_logdet_sigma = config.read<double>("logdet_sigma"); - } - else - { - // Then the model was saved using bob >= 1.2.0 - //reads all data directly into the member variables - m_F.reference(config.readArray<double,2>("F")); - m_G.reference(config.readArray<double,2>("G")); - // Conditional because previous versions had not these variables - m_dim_d = config.read<uint64_t>("dim_d"); - m_dim_f = config.read<uint64_t>("dim_f"); - m_dim_g = config.read<uint64_t>("dim_g"); - m_sigma.reference(config.readArray<double,1>("sigma")); - m_mu.reference(config.readArray<double,1>("mu")); - m_cache_isigma.resize(m_dim_d); - precomputeISigma(); - if (config.contains("variance_threshold")) - m_variance_threshold = config.read<double>("variance_threshold"); - else if (config.contains("variance_thresholds")) // In case 1.2.0 alpha/beta version has been used - { - blitz::Array<double,1> tmp; - tmp.reference(config.readArray<double,1>("variance_thresholds")); - m_variance_threshold = tmp(0); - } - m_cache_alpha.reference(config.readArray<double,2>("alpha")); - m_cache_beta.reference(config.readArray<double,2>("beta")); - // gamma's (a-dependent terms) - if(config.contains("a_indices_gamma")) - { - blitz::Array<uint32_t, 1> a_indices; - a_indices.reference(config.readArray<uint32_t,1>("a_indices_gamma")); - for(int i=0; i<a_indices.extent(0); ++i) - { - std::string str = "gamma_" + boost::lexical_cast<std::string>(a_indices(i)); - m_cache_gamma[a_indices(i)].reference(config.readArray<double,2>(str)); - } - } - // log likelihood constant term's (a-dependent terms) - if(config.contains("a_indices_loglikeconstterm")) - { - blitz::Array<uint32_t, 1> a_indices; - a_indices.reference(config.readArray<uint32_t,1>("a_indices_loglikeconstterm")); - for(int i=0; i<a_indices.extent(0); ++i) - { - std::string str = "loglikeconstterm_" + boost::lexical_cast<std::string>(a_indices(i)); - m_cache_loglike_constterm[a_indices(i)] = config.read<double>(str); - } - } - m_cache_Ft_beta.reference(config.readArray<double,2>("Ft_beta")); - m_cache_Gt_isigma.reference(config.readArray<double,2>("Gt_isigma")); - m_cache_logdet_alpha = config.read<double>("logdet_alpha"); - m_cache_logdet_sigma = config.read<double>("logdet_sigma"); - } - resizeTmp(); -} - -void bob::learn::misc::PLDABase::save(bob::io::base::HDF5File& config) const -{ - config.set("dim_d", (uint64_t)m_dim_d); - config.set("dim_f", (uint64_t)m_dim_f); - config.set("dim_g", (uint64_t)m_dim_g); - config.setArray("F", m_F); - config.setArray("G", m_G); - config.setArray("sigma", m_sigma); - config.setArray("mu", m_mu); - config.set("variance_threshold", m_variance_threshold); - config.setArray("alpha", m_cache_alpha); - config.setArray("beta", m_cache_beta); - // gamma's - if(m_cache_gamma.size() > 0) - { - blitz::Array<uint32_t, 1> a_indices(m_cache_gamma.size()); - int i = 0; - for(std::map<size_t,blitz::Array<double,2> >::const_iterator - it=m_cache_gamma.begin(); it!=m_cache_gamma.end(); ++it) - { - a_indices(i) = it->first; - std::string str = "gamma_" + boost::lexical_cast<std::string>(it->first); - config.setArray(str, it->second); - ++i; - } - config.setArray("a_indices_gamma", a_indices); - } - // log likelihood constant terms - if(m_cache_loglike_constterm.size() > 0) - { - blitz::Array<uint32_t, 1> a_indices(m_cache_loglike_constterm.size()); - int i = 0; - for(std::map<size_t,double>::const_iterator - it=m_cache_loglike_constterm.begin(); it!=m_cache_loglike_constterm.end(); ++it) - { - a_indices(i) = it->first; - std::string str = "loglikeconstterm_" + boost::lexical_cast<std::string>(it->first); - config.set(str, it->second); - ++i; - } - config.setArray("a_indices_loglikeconstterm", a_indices); - } - - config.setArray("Ft_beta", m_cache_Ft_beta); - config.setArray("Gt_isigma", m_cache_Gt_isigma); - config.set("logdet_alpha", m_cache_logdet_alpha); - config.set("logdet_sigma", m_cache_logdet_sigma); -} - -void bob::learn::misc::PLDABase::resizeNoInit(const size_t dim_d, const size_t dim_f, - const size_t dim_g) -{ - m_dim_d = dim_d; - m_dim_f = dim_f; - m_dim_g = dim_g; - m_F.resize(dim_d, dim_f); - m_G.resize(dim_d, dim_g); - m_sigma.resize(dim_d); - m_mu.resize(dim_d); - m_cache_alpha.resize(dim_g, dim_g); - m_cache_beta.resize(dim_d, dim_d); - m_cache_Ft_beta.resize(dim_f, dim_d); - m_cache_Gt_isigma.resize(dim_g, dim_d); - m_cache_gamma.clear(); - m_cache_isigma.resize(dim_d); - m_cache_loglike_constterm.clear(); - resizeTmp(); -} - -void bob::learn::misc::PLDABase::resizeTmp() -{ - m_tmp_d_1.resize(m_dim_d); - m_tmp_d_2.resize(m_dim_d); - m_tmp_d_ng_1.resize(m_dim_d, m_dim_g); - m_tmp_nf_nf_1.resize(m_dim_f, m_dim_f); - m_tmp_ng_ng_1.resize(m_dim_g, m_dim_g); -} - -void bob::learn::misc::PLDABase::resize(const size_t dim_d, const size_t dim_f, - const size_t dim_g) -{ - resizeNoInit(dim_d, dim_f, dim_g); - initMuFGSigma(); -} - -void bob::learn::misc::PLDABase::setF(const blitz::Array<double,2>& F) -{ - bob::core::array::assertSameShape(F, m_F); - m_F.reference(bob::core::array::ccopy(F)); - // Precomputes useful matrices - precompute(); -} - -void bob::learn::misc::PLDABase::setG(const blitz::Array<double,2>& G) -{ - bob::core::array::assertSameShape(G, m_G); - m_G.reference(bob::core::array::ccopy(G)); - // Precomputes useful matrices and values - precompute(); - precomputeLogDetAlpha(); -} - -void bob::learn::misc::PLDABase::setSigma(const blitz::Array<double,1>& sigma) -{ - bob::core::array::assertSameShape(sigma, m_sigma); - m_sigma.reference(bob::core::array::ccopy(sigma)); - // Apply variance flooring threshold: This will also - // call the precompute() and precomputeLogLike() methods! - applyVarianceThreshold(); -} - -void bob::learn::misc::PLDABase::setMu(const blitz::Array<double,1>& mu) -{ - bob::core::array::assertSameShape(mu, m_mu); - m_mu.reference(bob::core::array::ccopy(mu)); -} - -void bob::learn::misc::PLDABase::setVarianceThreshold(const double value) -{ - // Variance flooring - m_variance_threshold = value; - // Apply variance flooring thresholds: This will also - // call the precompute() and precomputeLogLike() methods! - applyVarianceThreshold(); -} - -void bob::learn::misc::PLDABase::applyVarianceThreshold() -{ - // Apply variance flooring threshold - m_sigma = blitz::where( m_sigma < m_variance_threshold, m_variance_threshold, m_sigma); - // Re-compute constants, because m_sigma has changed - precompute(); - precomputeLogLike(); -} - -const blitz::Array<double,2>& bob::learn::misc::PLDABase::getGamma(const size_t a) const -{ - if(!hasGamma(a)) - throw std::runtime_error("Gamma for this number of samples is not currently in cache. You could use the getAddGamma() method instead"); - return (m_cache_gamma.find(a))->second; -} - -const blitz::Array<double,2>& bob::learn::misc::PLDABase::getAddGamma(const size_t a) -{ - if(!hasGamma(a)) precomputeGamma(a); - return m_cache_gamma[a]; -} - -void bob::learn::misc::PLDABase::initMuFGSigma() -{ - // To avoid problems related to precomputation - m_mu = 0.; - bob::math::eye(m_F); - bob::math::eye(m_G); - m_sigma = 1.; - // Precompute variables - precompute(); - precomputeLogLike(); -} - -void bob::learn::misc::PLDABase::precompute() -{ - precomputeISigma(); - precomputeGtISigma(); - precomputeAlpha(); - precomputeBeta(); - m_cache_gamma.clear(); - precomputeFtBeta(); - m_cache_loglike_constterm.clear(); -} - -void bob::learn::misc::PLDABase::precomputeLogLike() -{ - precomputeLogDetAlpha(); - precomputeLogDetSigma(); -} - -void bob::learn::misc::PLDABase::precomputeISigma() -{ - // Updates inverse of sigma - m_cache_isigma = 1. / m_sigma; -} - -void bob::learn::misc::PLDABase::precomputeGtISigma() -{ - // m_cache_Gt_isigma = G^T \Sigma^{-1} - blitz::firstIndex i; - blitz::secondIndex j; - blitz::Array<double,2> Gt = m_G.transpose(1,0); - m_cache_Gt_isigma = Gt(i,j) * m_cache_isigma(j); -} - -void bob::learn::misc::PLDABase::precomputeAlpha() -{ - // alpha = (Id + G^T.sigma^-1.G)^-1 - - // m_tmp_ng_ng_1 = G^T.sigma^-1.G - bob::math::prod(m_cache_Gt_isigma, m_G, m_tmp_ng_ng_1); - // m_tmp_ng_ng_1 = Id + G^T.sigma^-1.G - for(int i=0; i<m_tmp_ng_ng_1.extent(0); ++i) m_tmp_ng_ng_1(i,i) += 1; - // m_cache_alpha = (Id + G^T.sigma^-1.G)^-1 - bob::math::inv(m_tmp_ng_ng_1, m_cache_alpha); -} - -void bob::learn::misc::PLDABase::precomputeBeta() -{ - // beta = (sigma + G.G^T)^-1 - // BUT, there is a more efficient computation (Woodbury identity): - // beta = sigma^-1 - sigma^-1.G.(Id + G^T.sigma^-1.G)^-1.G^T.sigma^-1 - // beta = sigma^-1 - sigma^-1.G.alpha.G^T.sigma^-1 - - blitz::Array<double,2> GtISigmaT = m_cache_Gt_isigma.transpose(1,0); - // m_tmp_d_ng_1 = sigma^-1.G.alpha - bob::math::prod(GtISigmaT, m_cache_alpha, m_tmp_d_ng_1); - // m_cache_beta = -sigma^-1.G.alpha.G^T.sigma^-1 - bob::math::prod(m_tmp_d_ng_1, m_cache_Gt_isigma, m_cache_beta); - m_cache_beta = -m_cache_beta; - // m_cache_beta = sigma^-1 - sigma^-1.G.alpha.G^T.sigma^-1 - for(int i=0; i<m_cache_beta.extent(0); ++i) m_cache_beta(i,i) += m_cache_isigma(i); -} - -void bob::learn::misc::PLDABase::precomputeGamma(const size_t a) -{ - - blitz::Array<double,2> gamma_a(getDimF(),getDimF()); - m_cache_gamma[a].reference(gamma_a); - computeGamma(a, gamma_a); -} - -void bob::learn::misc::PLDABase::precomputeFtBeta() -{ - // m_cache_Ft_beta = F^T.beta = F^T.(sigma + G.G^T)^-1 - blitz::Array<double,2> Ft = m_F.transpose(1,0); - bob::math::prod(Ft, m_cache_beta, m_cache_Ft_beta); -} - -void bob::learn::misc::PLDABase::computeGamma(const size_t a, - blitz::Array<double,2> res) const -{ - // gamma = (Id + a.F^T.beta.F)^-1 - - // Checks destination size - bob::core::array::assertSameShape(res, m_tmp_nf_nf_1); - // m_tmp_nf_nf_1 = F^T.beta.F - bob::math::prod(m_cache_Ft_beta, m_F, m_tmp_nf_nf_1); - // m_tmp_nf_nf_1 = a.F^T.beta.F - m_tmp_nf_nf_1 *= static_cast<double>(a); - // m_tmp_nf_nf_1 = Id + a.F^T.beta.F - for(int i=0; i<m_tmp_nf_nf_1.extent(0); ++i) m_tmp_nf_nf_1(i,i) += 1; - - // res = (Id + a.F^T.beta.F)^-1 - bob::math::inv(m_tmp_nf_nf_1, res); -} - -void bob::learn::misc::PLDABase::precomputeLogDetAlpha() -{ - int sign; - m_cache_logdet_alpha = bob::math::slogdet(m_cache_alpha, sign); -} - -void bob::learn::misc::PLDABase::precomputeLogDetSigma() -{ - m_cache_logdet_sigma = blitz::sum(blitz::log(m_sigma)); -} - -double bob::learn::misc::PLDABase::computeLogLikeConstTerm(const size_t a, - const blitz::Array<double,2>& gamma_a) const -{ - // loglike_constterm[a] = a/2 * - // ( -D*log(2*pi) -log|sigma| +log|alpha| +log|gamma_a|) - int sign; - double logdet_gamma_a = bob::math::slogdet(gamma_a, sign); - double ah = static_cast<double>(a)/2.; - double res = ( -ah*((double)m_dim_d)*log(2*M_PI) - - ah*m_cache_logdet_sigma + ah*m_cache_logdet_alpha + logdet_gamma_a/2.); - return res; -} - -double bob::learn::misc::PLDABase::computeLogLikeConstTerm(const size_t a) -{ - const blitz::Array<double,2>& gamma_a = getAddGamma(a); - return computeLogLikeConstTerm(a, gamma_a); -} - -void bob::learn::misc::PLDABase::precomputeLogLikeConstTerm(const size_t a) -{ - double val = computeLogLikeConstTerm(a); - m_cache_loglike_constterm[a] = val; -} - -double bob::learn::misc::PLDABase::getLogLikeConstTerm(const size_t a) const -{ - if(!hasLogLikeConstTerm(a)) - throw std::runtime_error("The LogLikelihood constant term for this number of samples is not currently in cache. You could use the getAddLogLikeConstTerm() method instead"); - return (m_cache_loglike_constterm.find(a))->second; -} - -double bob::learn::misc::PLDABase::getAddLogLikeConstTerm(const size_t a) -{ - if(!hasLogLikeConstTerm(a)) precomputeLogLikeConstTerm(a); - return m_cache_loglike_constterm[a]; -} - -void bob::learn::misc::PLDABase::clearMaps() -{ - m_cache_gamma.clear(); - m_cache_loglike_constterm.clear(); -} - -double bob::learn::misc::PLDABase::computeLogLikelihoodPointEstimate( - const blitz::Array<double,1>& xij, const blitz::Array<double,1>& hi, - const blitz::Array<double,1>& wij) const -{ - // Check inputs - bob::core::array::assertSameDimensionLength(xij.extent(0), getDimD()); - bob::core::array::assertSameDimensionLength(hi.extent(0), getDimF()); - bob::core::array::assertSameDimensionLength(wij.extent(0), getDimG()); - // Computes: -D/2 log(2pi) -1/2 log(det(\Sigma)) - // -1/2 {(x_{ij}-(\mu+Fh_{i}+Gw_{ij}))^{T}\Sigma^{-1}(x_{ij}-(\mu+Fh_{i}+Gw_{ij}))} - double res = -0.5*((double)m_dim_d)*log(2*M_PI) - 0.5*m_cache_logdet_sigma; - // m_tmp_d_1 = (x_{ij} - (\mu+Fh_{i}+Gw_{ij})) - m_tmp_d_1 = xij - m_mu; - bob::math::prod(m_F, hi, m_tmp_d_2); - m_tmp_d_1 -= m_tmp_d_2; - bob::math::prod(m_G, wij, m_tmp_d_2); - m_tmp_d_1 -= m_tmp_d_2; - // add third term to res - res += -0.5*blitz::sum(blitz::pow2(m_tmp_d_1) * m_cache_isigma); - return res; -} - -namespace bob { namespace learn { namespace misc { - /** - * @brief Prints a PLDABase in the output stream. This will print - * the values of the parameters \f$\mu\f$, \f$F\f$, \f$G\f$ and - * \f$\Sigma\f$ of the PLDA model. - */ - std::ostream& operator<<(std::ostream& os, const PLDABase& m) { - os << "mu = " << m.m_mu << std::endl; - os << "sigma = " << m.m_sigma << std::endl; - os << "F = " << m.m_F << std::endl; - os << "G = " << m.m_G << std::endl; - return os; - } -} } } - - -bob::learn::misc::PLDAMachine::PLDAMachine(): - m_plda_base(), - m_n_samples(0), m_nh_sum_xit_beta_xi(0), m_weighted_sum(0), - m_loglikelihood(0), m_cache_gamma(), m_cache_loglike_constterm(), - m_tmp_d_1(0), m_tmp_d_2(0), m_tmp_nf_1(0), m_tmp_nf_2(0), m_tmp_nf_nf_1(0,0) -{ -} - -bob::learn::misc::PLDAMachine::PLDAMachine(const boost::shared_ptr<bob::learn::misc::PLDABase> plda_base): - m_plda_base(plda_base), - m_n_samples(0), m_nh_sum_xit_beta_xi(0), m_weighted_sum(plda_base->getDimF()), - m_loglikelihood(0), m_cache_gamma(), m_cache_loglike_constterm() -{ - resizeTmp(); -} - - -bob::learn::misc::PLDAMachine::PLDAMachine(const bob::learn::misc::PLDAMachine& other): - m_plda_base(other.m_plda_base), - m_n_samples(other.m_n_samples), - m_nh_sum_xit_beta_xi(other.m_nh_sum_xit_beta_xi), - m_weighted_sum(bob::core::array::ccopy(other.m_weighted_sum)), - m_loglikelihood(other.m_loglikelihood), m_cache_gamma(), - m_cache_loglike_constterm(other.m_cache_loglike_constterm) -{ - bob::core::array::ccopy(other.m_cache_gamma, m_cache_gamma); - resizeTmp(); -} - -bob::learn::misc::PLDAMachine::PLDAMachine(bob::io::base::HDF5File& config, - const boost::shared_ptr<bob::learn::misc::PLDABase> plda_base): - m_plda_base(plda_base) -{ - load(config); -} - -bob::learn::misc::PLDAMachine::~PLDAMachine() { -} - -bob::learn::misc::PLDAMachine& bob::learn::misc::PLDAMachine::operator= -(const bob::learn::misc::PLDAMachine& other) -{ - if(this!=&other) - { - m_plda_base = other.m_plda_base; - m_n_samples = other.m_n_samples; - m_nh_sum_xit_beta_xi = other.m_nh_sum_xit_beta_xi; - m_weighted_sum.reference(bob::core::array::ccopy(other.m_weighted_sum)); - m_loglikelihood = other.m_loglikelihood; - bob::core::array::ccopy(other.m_cache_gamma, m_cache_gamma); - m_cache_loglike_constterm = other.m_cache_loglike_constterm; - resizeTmp(); - } - return *this; -} - -bool bob::learn::misc::PLDAMachine::operator== - (const bob::learn::misc::PLDAMachine& b) const -{ - if (!(( (!m_plda_base && !b.m_plda_base) || - ((m_plda_base && b.m_plda_base) && *(m_plda_base) == *(b.m_plda_base))) && - m_n_samples == b.m_n_samples && - m_nh_sum_xit_beta_xi ==b.m_nh_sum_xit_beta_xi && - bob::core::array::isEqual(m_weighted_sum, b.m_weighted_sum) && - m_loglikelihood == b.m_loglikelihood && - bob::core::array::isEqual(m_cache_gamma, b.m_cache_gamma))) - return false; - - // m_cache_loglike_constterm - if (this->m_cache_loglike_constterm.size() != b.m_cache_loglike_constterm.size()) - return false; // differing sizes, they are not the same - std::map<size_t, double>::const_iterator i, j; - for (i = this->m_cache_loglike_constterm.begin(), j = b.m_cache_loglike_constterm.begin(); - i != this->m_cache_loglike_constterm.end(); ++i, ++j) - { - if (i->first != j->first || i->second != j->second) - return false; - } - - return true; -} - -bool bob::learn::misc::PLDAMachine::operator!= - (const bob::learn::misc::PLDAMachine& b) const -{ - return !(this->operator==(b)); -} - -bool bob::learn::misc::PLDAMachine::is_similar_to( - const bob::learn::misc::PLDAMachine& b, const double r_epsilon, - const double a_epsilon) const -{ - return (( (!m_plda_base && !b.m_plda_base) || - ((m_plda_base && b.m_plda_base) && - m_plda_base->is_similar_to(*(b.m_plda_base), r_epsilon, a_epsilon))) && - m_n_samples == b.m_n_samples && - bob::core::isClose(m_nh_sum_xit_beta_xi, b.m_nh_sum_xit_beta_xi, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_weighted_sum, b.m_weighted_sum, r_epsilon, a_epsilon) && - bob::core::isClose(m_loglikelihood, b.m_loglikelihood, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_gamma, b.m_cache_gamma, r_epsilon, a_epsilon) && - bob::core::isClose(m_cache_loglike_constterm, b.m_cache_loglike_constterm, r_epsilon, a_epsilon)); -} - -void bob::learn::misc::PLDAMachine::load(bob::io::base::HDF5File& config) -{ - //reads all data directly into the member variables - m_n_samples = config.read<uint64_t>("n_samples"); - m_nh_sum_xit_beta_xi = config.read<double>("nh_sum_xit_beta_xi"); - m_weighted_sum.reference(config.readArray<double,1>("weighted_sum")); - m_loglikelihood = config.read<double>("loglikelihood"); - // gamma and log like constant term (a-dependent terms) - clearMaps(); - if(config.contains("a_indices")) - { - blitz::Array<uint32_t, 1> a_indices; - a_indices.reference(config.readArray<uint32_t,1>("a_indices")); - for(int i=0; i<a_indices.extent(0); ++i) - { - std::string str1 = "gamma_" + boost::lexical_cast<std::string>(a_indices(i)); - m_cache_gamma[a_indices(i)].reference(config.readArray<double,2>(str1)); - std::string str2 = "loglikeconstterm_" + boost::lexical_cast<std::string>(a_indices(i)); - m_cache_loglike_constterm[a_indices(i)] = config.read<double>(str2); - } - } - resizeTmp(); -} - -void bob::learn::misc::PLDAMachine::save(bob::io::base::HDF5File& config) const -{ - config.set("n_samples", m_n_samples); - config.set("nh_sum_xit_beta_xi", m_nh_sum_xit_beta_xi); - config.setArray("weighted_sum", m_weighted_sum); - config.set("loglikelihood", m_loglikelihood); - // Gamma - if(m_cache_gamma.size() > 0) - { - blitz::Array<uint32_t, 1> a_indices(m_cache_gamma.size()); - int i = 0; - for(std::map<size_t,blitz::Array<double,2> >::const_iterator - it=m_cache_gamma.begin(); it!=m_cache_gamma.end(); ++it) - { - a_indices(i) = it->first; - std::string str1 = "gamma_" + boost::lexical_cast<std::string>(it->first); - config.setArray(str1, it->second); - std::string str2 = "loglikeconstterm_" + boost::lexical_cast<std::string>(it->first); - double v = m_cache_loglike_constterm.find(it->first)->second; - config.set(str2, v); - ++i; - } - config.setArray("a_indices", a_indices); - } -} - -void bob::learn::misc::PLDAMachine::setPLDABase(const boost::shared_ptr<bob::learn::misc::PLDABase> plda_base) -{ - m_plda_base = plda_base; - m_weighted_sum.resizeAndPreserve(getDimF()); - clearMaps(); - resizeTmp(); -} - - -void bob::learn::misc::PLDAMachine::setWeightedSum(const blitz::Array<double,1>& ws) -{ - if(ws.extent(0) != m_weighted_sum.extent(0)) { - boost::format m("size of parameter `ws' (%d) does not match the expected size (%d)"); - m % ws.extent(0) % m_weighted_sum.extent(0); - throw std::runtime_error(m.str()); - } - m_weighted_sum.reference(bob::core::array::ccopy(ws)); -} - -const blitz::Array<double,2>& bob::learn::misc::PLDAMachine::getGamma(const size_t a) const -{ - // Checks in both base machine and this machine - if (m_plda_base->hasGamma(a)) return m_plda_base->getGamma(a); - else if (!hasGamma(a)) - throw std::runtime_error("Gamma for this number of samples is not currently in cache. You could use the getAddGamma() method instead"); - return (m_cache_gamma.find(a))->second; -} - -const blitz::Array<double,2>& bob::learn::misc::PLDAMachine::getAddGamma(const size_t a) -{ - if (m_plda_base->hasGamma(a)) return m_plda_base->getGamma(a); - else if (hasGamma(a)) return m_cache_gamma[a]; - // else computes it and adds it to this machine - blitz::Array<double,2> gamma_a(getDimF(),getDimF()); - m_cache_gamma[a].reference(gamma_a); - m_plda_base->computeGamma(a, gamma_a); - return m_cache_gamma[a]; -} - -double bob::learn::misc::PLDAMachine::getLogLikeConstTerm(const size_t a) const -{ - // Checks in both base machine and this machine - if (!m_plda_base) throw std::runtime_error("No PLDABase set to this machine"); - if (m_plda_base->hasLogLikeConstTerm(a)) return m_plda_base->getLogLikeConstTerm(a); - else if (!hasLogLikeConstTerm(a)) - throw std::runtime_error("The LogLikelihood constant term for this number of samples is not currently in cache. You could use the getAddLogLikeConstTerm() method instead"); - return (m_cache_loglike_constterm.find(a))->second; -} - -double bob::learn::misc::PLDAMachine::getAddLogLikeConstTerm(const size_t a) -{ - if (!m_plda_base) throw std::runtime_error("No PLDABase set to this machine"); - if (m_plda_base->hasLogLikeConstTerm(a)) return m_plda_base->getLogLikeConstTerm(a); - else if (hasLogLikeConstTerm(a)) return m_cache_loglike_constterm[a]; - // else computes it and adds it to this machine - m_cache_loglike_constterm[a] = - m_plda_base->computeLogLikeConstTerm(a, getAddGamma(a)); - return m_cache_loglike_constterm[a]; -} - -void bob::learn::misc::PLDAMachine::clearMaps() -{ - m_cache_gamma.clear(); - m_cache_loglike_constterm.clear(); -} - -double bob::learn::misc::PLDAMachine::forward(const blitz::Array<double,1>& sample) -{ - return forward_(sample); -} - -double bob::learn::misc::PLDAMachine::forward_(const blitz::Array<double,1>& sample) -{ - // Computes the log likelihood ratio - return computeLogLikelihood(sample, true) - // match - (computeLogLikelihood(sample, false) + m_loglikelihood); // no match -} - -double bob::learn::misc::PLDAMachine::forward(const blitz::Array<double,2>& samples) -{ - // Computes the log likelihood ratio - return computeLogLikelihood(samples, true) - // match - (computeLogLikelihood(samples, false) + m_loglikelihood); // no match -} - -double bob::learn::misc::PLDAMachine::computeLogLikelihood(const blitz::Array<double,1>& sample, - bool enrol) const -{ - if (!m_plda_base) throw std::runtime_error("No PLDABase set to this machine"); - // Check dimensionality - bob::core::array::assertSameDimensionLength(sample.extent(0), getDimD()); - - int n_samples = 1 + (enrol?m_n_samples:0); - - // 3/ Third term of the likelihood: -1/2*X^T*(SIGMA+A.A^T)^-1*X - // Efficient way: -1/2*sum_i(xi^T.sigma^-1.xi - xi^T.sigma^-1*G*(I+G^T.sigma^-1.G)^-1*G^T*sigma^-1.xi - // -1/2*sumWeighted^T*(I+aF^T.(sigma^-1-sigma^-1*G*(I+G^T.sigma^-1.G)^-1*G^T*sigma^-1).F)^-1*sumWeighted - // where sumWeighted = sum_i(F^T*(sigma^-1-sigma^-1*G*(I+G^T.sigma^-1.G)^-1*G^T*sigma^-1)*xi) - const blitz::Array<double,2>& beta = getPLDABase()->getBeta(); - const blitz::Array<double,2>& Ft_beta = getPLDABase()->getFtBeta(); - const blitz::Array<double,1>& mu = getPLDABase()->getMu(); - double terma = (enrol?m_nh_sum_xit_beta_xi:0.); - // sumWeighted - if (enrol && m_n_samples > 0) m_tmp_nf_1 = m_weighted_sum; - else m_tmp_nf_1 = 0; - - // terma += -1 / 2. * (xi^t*beta*xi) - m_tmp_d_1 = sample - mu; - bob::math::prod(beta, m_tmp_d_1, m_tmp_d_2); - terma += -1 / 2. * (blitz::sum(m_tmp_d_1*m_tmp_d_2)); - - // sumWeighted - bob::math::prod(Ft_beta, m_tmp_d_1, m_tmp_nf_2); - m_tmp_nf_1 += m_tmp_nf_2; - blitz::Array<double,2> gamma_a; - if (hasGamma(n_samples) || m_plda_base->hasGamma(n_samples)) - gamma_a.reference(getGamma(n_samples)); - else - { - gamma_a.reference(m_tmp_nf_nf_1); - m_plda_base->computeGamma(n_samples, gamma_a); - } - bob::math::prod(gamma_a, m_tmp_nf_1, m_tmp_nf_2); - double termb = 1 / 2. * (blitz::sum(m_tmp_nf_1*m_tmp_nf_2)); - - // 1/2/ Constant term of the log likelihood: - // 1/ First term of the likelihood: -Nsamples*D/2*log(2*PI) - // 2/ Second term of the likelihood: -1/2*log(det(SIGMA+A.A^T)) - // Efficient way: -Nsamples/2*log(det(sigma))-Nsamples/2*log(det(I+G^T.sigma^-1.G)) - // -1/2*log(det(I+aF^T.(sigma^-1-sigma^-1*G*(I+G^T.sigma^-1.G)*G^T*sigma^-1).F)) - double log_likelihood; // = getAddLogLikeConstTerm(static_cast<size_t>(n_samples)); - if (hasLogLikeConstTerm(n_samples) || m_plda_base->hasLogLikeConstTerm(n_samples)) - log_likelihood = getLogLikeConstTerm(n_samples); - else - log_likelihood = m_plda_base->computeLogLikeConstTerm(n_samples, gamma_a); - - log_likelihood += terma + termb; - return log_likelihood; -} - -double bob::learn::misc::PLDAMachine::computeLogLikelihood(const blitz::Array<double,2>& samples, - bool enrol) const -{ - if (!m_plda_base) throw std::runtime_error("No PLDABase set to this machine"); - // Check dimensionality - bob::core::array::assertSameDimensionLength(samples.extent(1), getDimD()); - - int n_samples = samples.extent(0) + (enrol?m_n_samples:0); - // 3/ Third term of the likelihood: -1/2*X^T*(SIGMA+A.A^T)^-1*X - // Efficient way: -1/2*sum_i(xi^T.sigma^-1.xi - xi^T.sigma^-1*G*(I+G^T.sigma^-1.G)^-1*G^T*sigma^-1.xi - // -1/2*sumWeighted^T*(I+aF^T.(sigma^-1-sigma^-1*G*(I+G^T.sigma^-1.G)^-1*G^T*sigma^-1).F)^-1*sumWeighted - // where sumWeighted = sum_i(F^T*(sigma^-1-sigma^-1*G*(I+G^T.sigma^-1.G)^-1*G^T*sigma^-1)*xi) - const blitz::Array<double,2>& beta = getPLDABase()->getBeta(); - const blitz::Array<double,2>& Ft_beta = getPLDABase()->getFtBeta(); - const blitz::Array<double,1>& mu = getPLDABase()->getMu(); - double terma = (enrol?m_nh_sum_xit_beta_xi:0.); - // sumWeighted - if (enrol && m_n_samples > 0) m_tmp_nf_1 = m_weighted_sum; - else m_tmp_nf_1 = 0; - for (int k=0; k<samples.extent(0); ++k) - { - blitz::Array<double,1> samp = samples(k,blitz::Range::all()); - m_tmp_d_1 = samp - mu; - // terma += -1 / 2. * (xi^t*beta*xi) - bob::math::prod(beta, m_tmp_d_1, m_tmp_d_2); - terma += -1 / 2. * (blitz::sum(m_tmp_d_1*m_tmp_d_2)); - - // sumWeighted - bob::math::prod(Ft_beta, m_tmp_d_1, m_tmp_nf_2); - m_tmp_nf_1 += m_tmp_nf_2; - } - - blitz::Array<double,2> gamma_a; - if (hasGamma(n_samples) || m_plda_base->hasGamma(n_samples)) - gamma_a.reference(getGamma(n_samples)); - else - { - gamma_a.reference(m_tmp_nf_nf_1); - m_plda_base->computeGamma(n_samples, gamma_a); - } - bob::math::prod(gamma_a, m_tmp_nf_1, m_tmp_nf_2); - double termb = 1 / 2. * (blitz::sum(m_tmp_nf_1*m_tmp_nf_2)); - - // 1/2/ Constant term of the log likelihood: - // 1/ First term of the likelihood: -Nsamples*D/2*log(2*PI) - // 2/ Second term of the likelihood: -1/2*log(det(SIGMA+A.A^T)) - // Efficient way: -Nsamples/2*log(det(sigma))-Nsamples/2*log(det(I+G^T.sigma^-1.G)) - // -1/2*log(det(I+aF^T.(sigma^-1-sigma^-1*G*(I+G^T.sigma^-1.G)*G^T*sigma^-1).F)) - double log_likelihood; // = getAddLogLikeConstTerm(static_cast<size_t>(n_samples)); - if (hasLogLikeConstTerm(n_samples) || m_plda_base->hasLogLikeConstTerm(n_samples)) - log_likelihood = getLogLikeConstTerm(n_samples); - else - log_likelihood = m_plda_base->computeLogLikeConstTerm(n_samples, gamma_a); - - log_likelihood += terma + termb; - return log_likelihood; -} - -void bob::learn::misc::PLDAMachine::resize(const size_t dim_d, const size_t dim_f, - const size_t dim_g) -{ - m_weighted_sum.resizeAndPreserve(dim_f); - clearMaps(); - resizeTmp(); -} - -void bob::learn::misc::PLDAMachine::resizeTmp() -{ - if (m_plda_base) - { - m_tmp_d_1.resize(getDimD()); - m_tmp_d_2.resize(getDimD()); - m_tmp_nf_1.resize(getDimF()); - m_tmp_nf_2.resize(getDimF()); - m_tmp_nf_nf_1.resize(getDimF(), getDimF()); - } -} diff --git a/bob/learn/misc/cpp/PLDATrainer.cpp b/bob/learn/misc/cpp/PLDATrainer.cpp deleted file mode 100644 index af50140..0000000 --- a/bob/learn/misc/cpp/PLDATrainer.cpp +++ /dev/null @@ -1,800 +0,0 @@ -/** - * @date Fri Oct 14 18:07:56 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief Probabilistic Linear Discriminant Analysis - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - - -#include <bob.learn.misc/PLDATrainer.h> -#include <bob.core/check.h> -#include <bob.core/array_copy.h> -#include <bob.core/array_random.h> -#include <bob.math/inv.h> -#include <bob.math/svd.h> -#include <bob.core/check.h> -#include <bob.core/array_repmat.h> -#include <algorithm> -#include <limits> -#include <vector> - -#include <bob.math/linear.h> -#include <bob.math/linsolve.h> - - - -bob::learn::misc::PLDATrainer::PLDATrainer(const bool use_sum_second_order): - m_rng(new boost::mt19937()), - m_dim_d(0), m_dim_f(0), m_dim_g(0), - m_use_sum_second_order(use_sum_second_order), - m_initF_method(bob::learn::misc::PLDATrainer::RANDOM_F), m_initF_ratio(1.), - m_initG_method(bob::learn::misc::PLDATrainer::RANDOM_G), m_initG_ratio(1.), - m_initSigma_method(bob::learn::misc::PLDATrainer::RANDOM_SIGMA), - m_initSigma_ratio(1.), - m_cache_S(0,0), - m_cache_z_first_order(0), m_cache_sum_z_second_order(0,0), m_cache_z_second_order(0), - m_cache_n_samples_per_id(0), m_cache_n_samples_in_training(), m_cache_B(0,0), - m_cache_Ft_isigma_G(0,0), m_cache_eta(0,0), m_cache_zeta(), m_cache_iota(), - m_tmp_nf_1(0), m_tmp_nf_2(0), m_tmp_ng_1(0), - m_tmp_D_1(0), m_tmp_D_2(0), - m_tmp_nfng_nfng(0,0), m_tmp_D_nfng_1(0,0), m_tmp_D_nfng_2(0,0) -{ -} - -bob::learn::misc::PLDATrainer::PLDATrainer(const bob::learn::misc::PLDATrainer& other): - m_rng(other.m_rng), - m_dim_d(other.m_dim_d), m_dim_f(other.m_dim_f), m_dim_g(other.m_dim_g), - m_use_sum_second_order(other.m_use_sum_second_order), - m_initF_method(other.m_initF_method), m_initF_ratio(other.m_initF_ratio), - m_initG_method(other.m_initG_method), m_initG_ratio(other.m_initG_ratio), - m_initSigma_method(other.m_initSigma_method), m_initSigma_ratio(other.m_initSigma_ratio), - m_cache_S(bob::core::array::ccopy(other.m_cache_S)), - m_cache_z_first_order(), - m_cache_sum_z_second_order(bob::core::array::ccopy(other.m_cache_sum_z_second_order)), - m_cache_z_second_order(), - m_cache_n_samples_per_id(other.m_cache_n_samples_per_id), - m_cache_n_samples_in_training(other.m_cache_n_samples_in_training), - m_cache_B(bob::core::array::ccopy(other.m_cache_B)), - m_cache_Ft_isigma_G(bob::core::array::ccopy(other.m_cache_Ft_isigma_G)), - m_cache_eta(bob::core::array::ccopy(other.m_cache_eta)) -{ - bob::core::array::ccopy(other.m_cache_z_first_order, m_cache_z_first_order); - bob::core::array::ccopy(other.m_cache_z_second_order, m_cache_z_second_order); - bob::core::array::ccopy(other.m_cache_zeta, m_cache_zeta); - bob::core::array::ccopy(other.m_cache_iota, m_cache_iota); - // Resize working arrays - resizeTmp(); -} - -bob::learn::misc::PLDATrainer::~PLDATrainer() {} - -bob::learn::misc::PLDATrainer& bob::learn::misc::PLDATrainer::operator= -(const bob::learn::misc::PLDATrainer& other) -{ - if(this != &other) - { - m_rng = m_rng, - m_dim_d = other.m_dim_d; - m_dim_f = other.m_dim_f; - m_dim_g = other.m_dim_g; - m_use_sum_second_order = other.m_use_sum_second_order; - m_initF_method = other.m_initF_method; - m_initF_ratio = other.m_initF_ratio; - m_initG_method = other.m_initG_method; - m_initG_ratio = other.m_initG_ratio; - m_initSigma_method = other.m_initSigma_method; - m_initSigma_ratio = other.m_initSigma_ratio; - m_cache_S = bob::core::array::ccopy(other.m_cache_S); - bob::core::array::ccopy(other.m_cache_z_first_order, m_cache_z_first_order); - m_cache_sum_z_second_order = bob::core::array::ccopy(other.m_cache_sum_z_second_order); - bob::core::array::ccopy(other.m_cache_z_second_order, m_cache_z_second_order); - m_cache_n_samples_per_id = other.m_cache_n_samples_per_id; - m_cache_n_samples_in_training = other.m_cache_n_samples_in_training; - m_cache_B = bob::core::array::ccopy(other.m_cache_B); - m_cache_Ft_isigma_G = bob::core::array::ccopy(other.m_cache_Ft_isigma_G); - m_cache_eta = bob::core::array::ccopy(other.m_cache_eta); - bob::core::array::ccopy(other.m_cache_iota, m_cache_iota); - // Resize working arrays - resizeTmp(); - } - return *this; -} - -bool bob::learn::misc::PLDATrainer::operator== - (const bob::learn::misc::PLDATrainer& other) const -{ - return m_rng == m_rng && - m_dim_d == other.m_dim_d && - m_dim_f == other.m_dim_f && - m_dim_g == other.m_dim_g && - m_initF_method == other.m_initF_method && - m_initF_ratio == other.m_initF_ratio && - m_initG_method == other.m_initG_method && - m_initG_ratio == other.m_initG_ratio && - m_initSigma_method == other.m_initSigma_method && - m_initSigma_ratio == other.m_initSigma_ratio && - bob::core::array::isEqual(m_cache_S, m_cache_S) && - bob::core::array::isEqual(m_cache_z_first_order, other.m_cache_z_first_order) && - bob::core::array::isEqual(m_cache_sum_z_second_order, other.m_cache_sum_z_second_order) && - bob::core::array::isEqual(m_cache_z_second_order, other.m_cache_z_second_order) && - m_cache_n_samples_per_id.size() == m_cache_n_samples_per_id.size() && - std::equal(m_cache_n_samples_per_id.begin(), m_cache_n_samples_per_id.end(), other.m_cache_n_samples_per_id.begin()) && - m_cache_n_samples_in_training.size() == m_cache_n_samples_in_training.size() && - std::equal(m_cache_n_samples_in_training.begin(), m_cache_n_samples_in_training.end(), other.m_cache_n_samples_in_training.begin()) && - bob::core::array::isEqual(m_cache_B, other.m_cache_B) && - bob::core::array::isEqual(m_cache_Ft_isigma_G, other.m_cache_Ft_isigma_G) && - bob::core::array::isEqual(m_cache_eta, other.m_cache_eta) && - bob::core::array::isEqual(m_cache_zeta, other.m_cache_zeta) && - bob::core::array::isEqual(m_cache_iota, other.m_cache_iota); -} - -bool bob::learn::misc::PLDATrainer::operator!= - (const bob::learn::misc::PLDATrainer &other) const -{ - return !(this->operator==(other)); -} - -bool bob::learn::misc::PLDATrainer::is_similar_to - (const bob::learn::misc::PLDATrainer &other, const double r_epsilon, - const double a_epsilon) const -{ - return m_rng == m_rng && - m_dim_d == other.m_dim_d && - m_dim_f == other.m_dim_f && - m_dim_g == other.m_dim_g && - m_use_sum_second_order == other.m_use_sum_second_order && - m_initF_method == other.m_initF_method && - bob::core::isClose(m_initF_ratio, other.m_initF_ratio, r_epsilon, a_epsilon) && - m_initG_method == other.m_initG_method && - bob::core::isClose(m_initG_ratio, other.m_initG_ratio, r_epsilon, a_epsilon) && - m_initSigma_method == other.m_initSigma_method && - bob::core::isClose(m_initSigma_ratio, other.m_initSigma_ratio, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_S, m_cache_S, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_z_first_order, other.m_cache_z_first_order, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_sum_z_second_order, other.m_cache_sum_z_second_order, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_z_second_order, other.m_cache_z_second_order, r_epsilon, a_epsilon) && - m_cache_n_samples_per_id.size() == m_cache_n_samples_per_id.size() && - std::equal(m_cache_n_samples_per_id.begin(), m_cache_n_samples_per_id.end(), other.m_cache_n_samples_per_id.begin()) && - m_cache_n_samples_in_training.size() == m_cache_n_samples_in_training.size() && - std::equal(m_cache_n_samples_in_training.begin(), m_cache_n_samples_in_training.end(), other.m_cache_n_samples_in_training.begin()) && - bob::core::array::isClose(m_cache_B, other.m_cache_B, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_Ft_isigma_G, other.m_cache_Ft_isigma_G, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_eta, other.m_cache_eta, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_zeta, other.m_cache_zeta, r_epsilon, a_epsilon) && - bob::core::array::isClose(m_cache_iota, other.m_cache_iota, r_epsilon, a_epsilon); -} - -void bob::learn::misc::PLDATrainer::initialize(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - // Checks training data - checkTrainingData(v_ar); - - // Gets dimension (first Arrayset) - size_t n_features = v_ar[0].extent(1); - m_dim_d = machine.getDimD(); - // Get dimensionalities from the PLDABase - bob::core::array::assertSameDimensionLength(n_features, m_dim_d); - m_dim_f = machine.getDimF(); - m_dim_g = machine.getDimG(); - - // Reinitializes array members - initMembers(v_ar); - - // Computes the mean and the covariance if required - computeMeanVariance(machine, v_ar); - - // Initialization (e.g. using scatter) - initFGSigma(machine, v_ar); -} - -void bob::learn::misc::PLDATrainer::finalize(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - // Precomputes constant parts of the log likelihood and (gamma_a) - precomputeLogLike(machine, v_ar); - // Adds the case 1 sample if not already done (always used for scoring) - machine.getAddGamma(1); - machine.getAddLogLikeConstTerm(1); -} - -void bob::learn::misc::PLDATrainer::checkTrainingData(const std::vector<blitz::Array<double,2> >& v_ar) -{ - // Checks that the vector of Arraysets is not empty - if (v_ar.size() == 0) { - throw std::runtime_error("input training set is empty"); - } - - // Gets dimension (first Arrayset) - int n_features = v_ar[0].extent(1); - // Checks dimension consistency - for (size_t i=0; i<v_ar.size(); ++i) { - if (v_ar[i].extent(1) != n_features) { - boost::format m("number of features (columns) of array for class %u (%d) does not match that of array for class 0 (%d)"); - m % i % v_ar[0].extent(1) % n_features; - throw std::runtime_error(m.str()); - } - } -} - -void bob::learn::misc::PLDATrainer::initMembers(const std::vector<blitz::Array<double,2> >& v_ar) -{ - // Gets dimension (first Arrayset) - const size_t n_features = v_ar[0].extent(1); // dimensionality of the data - const size_t n_identities = v_ar.size(); - - m_cache_S.resize(n_features, n_features); - m_cache_sum_z_second_order.resize(m_dim_f+m_dim_g, m_dim_f+m_dim_g); - - // Loops over the identities - for (size_t i=0; i<n_identities; ++i) - { - // Number of training samples for this identity - const size_t n_i = v_ar[i].extent(0); - // m_cache_z_first_order - blitz::Array<double,2> z_i(n_i, m_dim_f+m_dim_g); - m_cache_z_first_order.push_back(z_i); - // m_z_second_order - if (!m_use_sum_second_order) - { - blitz::Array<double,3> z2_i(n_i, m_dim_f+m_dim_g, m_dim_f+m_dim_g); - m_cache_z_second_order.push_back(z2_i); - } - - // m_cache_n_samples_per_id - m_cache_n_samples_per_id.push_back(n_i); - - // Maps dependent on the number of samples per identity - std::map<size_t,bool>::iterator it; - it = m_cache_n_samples_in_training.find(n_i); - if (it == m_cache_n_samples_in_training.end()) - { - // Indicates if there are identities with n_i training samples and if - // corresponding matrices are up to date. - m_cache_n_samples_in_training[n_i] = false; - // Allocates arrays for identities with n_i training samples - m_cache_zeta[n_i].reference(blitz::Array<double,2>(m_dim_g, m_dim_g)); - m_cache_iota[n_i].reference(blitz::Array<double,2>(m_dim_f, m_dim_g)); - } - } - - m_cache_B.resize(n_features, m_dim_f+m_dim_g); - m_cache_Ft_isigma_G.resize(m_dim_f, m_dim_g); - m_cache_eta.resize(m_dim_f, m_dim_g); - - // Working arrays - resizeTmp(); -} - -void bob::learn::misc::PLDATrainer::resizeTmp() -{ - m_tmp_nf_1.resize(m_dim_f); - m_tmp_nf_2.resize(m_dim_f); - m_tmp_ng_1.resize(m_dim_g); - m_tmp_D_1.resize(m_dim_d); - m_tmp_D_2.resize(m_dim_d); - m_tmp_nfng_nfng.resize(m_dim_f+m_dim_g, m_dim_f+m_dim_g); - m_tmp_D_nfng_1.resize(m_dim_d, m_dim_f+m_dim_g); - m_tmp_D_nfng_2.resize(m_dim_d, m_dim_f+m_dim_g); -} - -void bob::learn::misc::PLDATrainer::computeMeanVariance(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - blitz::Array<double,1>& mu = machine.updateMu(); - blitz::Range all = blitz::Range::all(); - // TODO: Uncomment variance computation if required - /* if(m_compute_likelihood) - { - // loads all the data in a single shot - required for scatter - blitz::Array<double,2> data(n_features, n_samples); - for (size_t i=0; i<n_samples; ++i) - data(all,i) = ar(i,all); - // Mean and scatter computation - bob::math::scatter(data, m_cache_S, mu); - // divides scatter by N-1 - m_cache_S /= static_cast<double>(n_samples-1); - } - else */ - { - // Computes the mean and updates mu - mu = 0.; - size_t n_samples = 0; - for (size_t j=0; j<v_ar.size(); ++j) { - n_samples += v_ar[j].extent(0); - for (int i=0; i<v_ar[j].extent(0); ++i) - mu += v_ar[j](i,all); - } - mu /= static_cast<double>(n_samples); - m_cache_S = 0.; - } -} - -void bob::learn::misc::PLDATrainer::initFGSigma(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - // Initializes F, G and sigma - initF(machine, v_ar); - initG(machine, v_ar); - initSigma(machine, v_ar); - - // Precomputes values using new F, G and sigma - machine.precompute(); -} - -void bob::learn::misc::PLDATrainer::initF(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - blitz::Array<double,2>& F = machine.updateF(); - blitz::Range a = blitz::Range::all(); - - // 1: between-class scatter - if (m_initF_method == bob::learn::misc::PLDATrainer::BETWEEN_SCATTER) - { - if (machine.getDimF() > v_ar.size()) { - boost::format m("The rank of the matrix F ('%ld') can't be larger than the number of classes in the training set ('%ld')"); - m % machine.getDimF() % v_ar.size(); - throw std::runtime_error(m.str()); - } - - // a/ Computes between-class scatter matrix - blitz::firstIndex bi; - blitz::secondIndex bj; - blitz::Array<double,2> S(machine.getDimD(), v_ar.size()); - S = 0.; - m_tmp_D_1 = 0.; - for (size_t i=0; i<v_ar.size(); ++i) - { - blitz::Array<double,1> Si = S(blitz::Range::all(),i); - Si = 0.; - for (int j=0; j<v_ar[i].extent(0); ++j) - { - // Si += x_ij - Si += v_ar[i](j,a); - } - // Si = mean of the samples class i - Si /= static_cast<double>(v_ar[i].extent(0)); - m_tmp_D_1 += Si; - } - m_tmp_D_1 /= static_cast<double>(v_ar.size()); - - // b/ Removes the mean - S = S(bi,bj) - m_tmp_D_1(bi); - - // c/ SVD of the between-class scatter matrix - const size_t n_singular = std::min(machine.getDimD(),v_ar.size()); - blitz::Array<double,2> U(machine.getDimD(), n_singular); - blitz::Array<double,1> sigma(n_singular); - bob::math::svd(S, U, sigma); - - // d/ Updates F - blitz::Array<double,2> Uslice = U(a, blitz::Range(0,m_dim_f-1)); - blitz::Array<double,1> sigma_slice = sigma(blitz::Range(0,m_dim_f-1)); - sigma_slice = blitz::sqrt(sigma_slice); - F = Uslice(bi,bj) / sigma_slice(bj); - } - // otherwise: random initialization - else { - // F initialization - bob::core::array::randn(*m_rng, F); - F *= m_initF_ratio; - } -} - -void bob::learn::misc::PLDATrainer::initG(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - blitz::Array<double,2>& G = machine.updateG(); - blitz::Range a = blitz::Range::all(); - - // 1: within-class scatter - if (m_initG_method == bob::learn::misc::PLDATrainer::WITHIN_SCATTER) - { - // a/ Computes within-class scatter matrix - blitz::firstIndex bi; - blitz::secondIndex bj; - size_t Nsamples=0; - for (size_t i=0; i<v_ar.size(); ++i) - Nsamples += v_ar[i].extent(0); - - blitz::Array<double,2> S(machine.getDimD(), Nsamples); - S = 0.; - m_tmp_D_1 = 0.; - int counter = 0; - for (size_t i=0; i<v_ar.size(); ++i) - { - // Computes the mean of the samples class i - m_tmp_D_2 = 0.; - for (int j=0; j<v_ar[i].extent(0); ++j) - { - // m_tmp_D_2 += x_ij - m_tmp_D_2 += v_ar[i](j,a); - } - // m_tmp_D_2 = mean of the samples class i - m_tmp_D_2 /= static_cast<double>(v_ar[i].extent(0)); - - // Generates the scatter - for (int j=0; j<v_ar[i].extent(0); ++j) - { - blitz::Array<double,1> Si = S(a, counter); - // Si = x_ij - mean_i - Si = v_ar[i](j,a) - m_tmp_D_2; - // mean of the within class - m_tmp_D_1 += Si; - ++counter; - } - } - m_tmp_D_1 /= static_cast<double>(Nsamples); - - // b/ Removes the mean - S = S(bi,bj) - m_tmp_D_1(bi); - - // c/ SVD of the between-class scatter matrix - blitz::Array<double,2> U(m_dim_d, std::min(m_dim_d, Nsamples)); - blitz::Array<double,1> sigma(std::min(m_dim_d, Nsamples)); - bob::math::svd(S, U, sigma); - - // d/ Updates G - blitz::Array<double,2> Uslice = U(blitz::Range::all(), blitz::Range(0,m_dim_g-1)); - blitz::Array<double,1> sigma_slice = sigma(blitz::Range(0,m_dim_g-1)); - sigma_slice = blitz::sqrt(sigma_slice); - G = Uslice(bi,bj) / sigma_slice(bj); - } - // otherwise: random initialization - else { - // G initialization - bob::core::array::randn(*m_rng, G); - G *= m_initG_ratio; - } -} - -void bob::learn::misc::PLDATrainer::initSigma(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - blitz::Array<double,1>& sigma = machine.updateSigma(); - blitz::Range a = blitz::Range::all(); - - // 1: percentage of the variance of G - if (m_initSigma_method == bob::learn::misc::PLDATrainer::VARIANCE_G) { - const blitz::Array<double,2>& G = machine.getG(); - blitz::secondIndex bj; - m_tmp_D_1 = blitz::mean(G, bj); - // Updates sigma - sigma = blitz::fabs(m_tmp_D_1) * m_initSigma_ratio; - } - // 2: constant value - else if (m_initSigma_method == bob::learn::misc::PLDATrainer::CONSTANT) { - sigma = m_initSigma_ratio; - } - // 3: percentage of the variance of the data - else if (m_initSigma_method == bob::learn::misc::PLDATrainer::VARIANCE_DATA) { - // a/ Computes the global mean - // m_tmp_D_1 = 1/N sum_i x_i - m_tmp_D_1 = 0.; - size_t Ns = 0; - for (size_t i=0; i<v_ar.size(); ++i) - { - for (int j=0; j<v_ar[i].extent(0); ++j) - m_tmp_D_1 += v_ar[i](j,a); - Ns += v_ar[i].extent(0); - } - m_tmp_D_1 /= static_cast<double>(Ns); - - // b/ Computes the variance: - m_tmp_D_2 = 0.; - for (size_t i=0; i<v_ar.size(); ++i) - for (int j=0; j<v_ar[i].extent(0); ++j) - m_tmp_D_2 += blitz::pow2(v_ar[i](j,a) - m_tmp_D_1); - sigma = m_initSigma_ratio * m_tmp_D_2 / static_cast<double>(Ns-1); - } - // otherwise: random initialization - else { - // sigma initialization - bob::core::array::randn(*m_rng, sigma); - sigma = blitz::fabs(sigma) * m_initSigma_ratio; - } - // Apply variance threshold - machine.applyVarianceThreshold(); -} - -void bob::learn::misc::PLDATrainer::eStep(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - // Precomputes useful variables using current estimates of F,G, and sigma - precomputeFromFGSigma(machine); - // Gets the mean mu from the machine - const blitz::Array<double,1>& mu = machine.getMu(); - const blitz::Array<double,2>& alpha = machine.getAlpha(); - const blitz::Array<double,2>& F = machine.getF(); - const blitz::Array<double,2>& FtBeta = machine.getFtBeta(); - const blitz::Array<double,2>& GtISigma = machine.getGtISigma(); - blitz::Range a = blitz::Range::all(); - - // blitz indices - blitz::firstIndex bi; - blitz::secondIndex bj; - // Initializes sum of z second order statistics to 0 - m_cache_sum_z_second_order = 0.; - for (size_t i=0; i<v_ar.size(); ++i) - { - // Computes expectation of z_ij = [h_i w_ij] - // 1/a/ Computes expectation of h_i - // Loop over the samples - m_tmp_nf_1 = 0.; - for (int j=0; j<v_ar[i].extent(0); ++j) - { - // m_tmp_D_1 = x_sj-mu - m_tmp_D_1 = v_ar[i](j,a) - mu; - - // m_tmp_nf_2 = F^T.beta.(x_sj-mu) - bob::math::prod(FtBeta, m_tmp_D_1, m_tmp_nf_2); - // m_tmp_nf_1 = sum_j F^T.beta.(x_sj-mu) - m_tmp_nf_1 += m_tmp_nf_2; - } - const blitz::Array<double,2>& gamma_a = machine.getAddGamma(v_ar[i].extent(0)); - blitz::Range r_hi(0, m_dim_f-1); - // m_tmp_nf_2 = E(h_i) = gamma_A sum_j F^T.beta.(x_sj-mu) - bob::math::prod(gamma_a, m_tmp_nf_1, m_tmp_nf_2); - - // 1/b/ Precomputes: m_tmp_D_2 = F.E{h_i} - bob::math::prod(F, m_tmp_nf_2, m_tmp_D_2); - - // 2/ First and second order statistics of z - // Precomputed values - blitz::Array<double,2>& zeta_a = m_cache_zeta[v_ar[i].extent(0)]; - blitz::Array<double,2>& iota_a = m_cache_iota[v_ar[i].extent(0)]; - blitz::Array<double,2> iotat_a = iota_a.transpose(1,0); - - // Extracts statistics of z_ij = [h_i w_ij] from y_i = [h_i w_i1 ... w_iJ] - blitz::Range r1(0, m_dim_f-1); - blitz::Range r2(m_dim_f, m_dim_f+m_dim_g-1); - for (int j=0; j<v_ar[i].extent(0); ++j) - { - // 1/ First order statistics of z - blitz::Array<double,1> z_first_order_ij_1 = m_cache_z_first_order[i](j,r1); - z_first_order_ij_1 = m_tmp_nf_2; // E{h_i} - // m_tmp_D_1 = x_sj - mu - F.E{h_i} - m_tmp_D_1 = v_ar[i](j,a) - mu - m_tmp_D_2; - // m_tmp_ng_1 = G^T.sigma^-1.(x_sj-mu-fhi) - bob::math::prod(GtISigma, m_tmp_D_1, m_tmp_ng_1); - // z_first_order_ij_2 = (Id+G^T.sigma^-1.G)^-1.G^T.sigma^-1.(x_sj-mu) = E{w_ij} - blitz::Array<double,1> z_first_order_ij_2 = m_cache_z_first_order[i](j,r2); - bob::math::prod(alpha, m_tmp_ng_1, z_first_order_ij_2); - - // 2/ Second order statistics of z - blitz::Array<double,2> z_sum_so_11 = m_cache_sum_z_second_order(r1,r1); - blitz::Array<double,2> z_sum_so_12 = m_cache_sum_z_second_order(r1,r2); - blitz::Array<double,2> z_sum_so_21 = m_cache_sum_z_second_order(r2,r1); - blitz::Array<double,2> z_sum_so_22 = m_cache_sum_z_second_order(r2,r2); - if (m_use_sum_second_order) - { - z_sum_so_11 += gamma_a + z_first_order_ij_1(bi) * z_first_order_ij_1(bj); - z_sum_so_12 += iota_a + z_first_order_ij_1(bi) * z_first_order_ij_2(bj); - z_sum_so_21 += iotat_a + z_first_order_ij_2(bi) * z_first_order_ij_1(bj); - z_sum_so_22 += zeta_a + z_first_order_ij_2(bi) * z_first_order_ij_2(bj); - } - else - { - blitz::Array<double,2> z_so_11 = m_cache_z_second_order[i](j,r1,r1); - z_so_11 = gamma_a + z_first_order_ij_1(bi) * z_first_order_ij_1(bj); - z_sum_so_11 += z_so_11; - blitz::Array<double,2> z_so_12 = m_cache_z_second_order[i](j,r1,r2); - z_so_12 = iota_a + z_first_order_ij_1(bi) * z_first_order_ij_2(bj); - z_sum_so_12 += z_so_12; - blitz::Array<double,2> z_so_21 = m_cache_z_second_order[i](j,r2,r1); - z_so_21 = iotat_a + z_first_order_ij_2(bi) * z_first_order_ij_1(bj); - z_sum_so_21 += z_so_21; - blitz::Array<double,2> z_so_22 = m_cache_z_second_order[i](j,r2,r2); - z_so_22 = zeta_a + z_first_order_ij_2(bi) * z_first_order_ij_2(bj); - z_sum_so_22 += z_so_22; - } - } - } -} - -void bob::learn::misc::PLDATrainer::precomputeFromFGSigma(bob::learn::misc::PLDABase& machine) -{ - // Blitz compatibility: ugly fix (const_cast, as old blitz version does not - // provide a non-const version of transpose()) - const blitz::Array<double,2>& F = machine.getF(); - const blitz::Array<double,2> Ft = const_cast<blitz::Array<double,2>&>(F).transpose(1,0); - const blitz::Array<double,2>& Gt_isigma = machine.getGtISigma(); - const blitz::Array<double,2> Gt_isigma_t = const_cast<blitz::Array<double,2>&>(Gt_isigma).transpose(1,0); - const blitz::Array<double,2>& alpha = machine.getAlpha(); - - // Precomputes F, G and sigma-based expressions - bob::math::prod(Ft, Gt_isigma_t, m_cache_Ft_isigma_G); - bob::math::prod(m_cache_Ft_isigma_G, alpha, m_cache_eta); - blitz::Array<double,2> etat = m_cache_eta.transpose(1,0); - - // Reinitializes all the zeta_a and iota_a - std::map<size_t,bool>::iterator it; - for (it=m_cache_n_samples_in_training.begin(); it!=m_cache_n_samples_in_training.end(); - ++it) - it->second = false; - - for (it=m_cache_n_samples_in_training.begin(); it!=m_cache_n_samples_in_training.end(); - ++it) - { - size_t n_i = it->first; - // Precomputes zeta and iota for identities with q_i training samples, - // if not already done - if (!it->second) - { - const blitz::Array<double,2>& gamma_a = machine.getAddGamma(n_i); - blitz::Array<double,2>& zeta_a = m_cache_zeta[n_i]; - blitz::Array<double,2>& iota_a = m_cache_iota[n_i]; - bob::math::prod(gamma_a, m_cache_eta, iota_a); - bob::math::prod(etat, iota_a, zeta_a); - zeta_a += alpha; - iota_a = - iota_a; - // Now up to date - it->second = true; - } - } -} - -void bob::learn::misc::PLDATrainer::precomputeLogLike(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - // Precomputes the log determinant of alpha and sigma - machine.precomputeLogLike(); - - // Precomputes the log likelihood constant term - std::map<size_t,bool>::iterator it; - for (it=m_cache_n_samples_in_training.begin(); - it!=m_cache_n_samples_in_training.end(); ++it) - { - // Precomputes the log likelihood constant term for identities with q_i - // training samples, if not already done - machine.getAddLogLikeConstTerm(it->first); - } -} - - -void bob::learn::misc::PLDATrainer::mStep(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - // 1/ New estimate of B = {F G} - updateFG(machine, v_ar); - - // 2/ New estimate of Sigma - updateSigma(machine, v_ar); - - // 3/ Precomputes new values after updating F, G and sigma - machine.precompute(); - // Precomputes useful variables using current estimates of F,G, and sigma - precomputeFromFGSigma(machine); -} - -void bob::learn::misc::PLDATrainer::updateFG(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - /// Computes the B matrix (B = [F G]) - /// B = (sum_ij (x_ij-mu).E{z_i}^T).(sum_ij E{z_i.z_i^T})^-1 - - // 1/ Computes the numerator (sum_ij (x_ij-mu).E{z_i}^T) - // Gets the mean mu from the machine - const blitz::Array<double,1>& mu = machine.getMu(); - blitz::Range a = blitz::Range::all(); - m_tmp_D_nfng_2 = 0.; - for (size_t i=0; i<v_ar.size(); ++i) - { - // Loop over the samples - for (int j=0; j<v_ar[i].extent(0); ++j) - { - // m_tmp_D_1 = x_sj-mu - m_tmp_D_1 = v_ar[i](j,a) - mu; - // z_first_order_ij = E{z_ij} - blitz::Array<double,1> z_first_order_ij = m_cache_z_first_order[i](j, a); - // m_tmp_D_nfng_1 = (x_sj-mu).E{z_ij}^T - bob::math::prod(m_tmp_D_1, z_first_order_ij, m_tmp_D_nfng_1); - m_tmp_D_nfng_2 += m_tmp_D_nfng_1; - } - } - - // 2/ Computes the denominator inv(sum_ij E{z_i.z_i^T}) - bob::math::inv(m_cache_sum_z_second_order, m_tmp_nfng_nfng); - - // 3/ Computes numerator / denominator - bob::math::prod(m_tmp_D_nfng_2, m_tmp_nfng_nfng, m_cache_B); - - // 4/ Updates the machine - blitz::Array<double, 2>& F = machine.updateF(); - blitz::Array<double, 2>& G = machine.updateG(); - F = m_cache_B(a, blitz::Range(0, m_dim_f-1)); - G = m_cache_B(a, blitz::Range(m_dim_f, m_dim_f+m_dim_g-1)); -} - -void bob::learn::misc::PLDATrainer::updateSigma(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar) -{ - /// Computes the Sigma matrix - /// Sigma = 1/IJ sum_ij Diag{(x_ij-mu).(x_ij-mu)^T - B.E{z_i}.(x_ij-mu)^T} - - // Gets the mean mu and the matrix sigma from the machine - blitz::Array<double,1>& sigma = machine.updateSigma(); - const blitz::Array<double,1>& mu = machine.getMu(); - blitz::Range a = blitz::Range::all(); - - sigma = 0.; - size_t n_IJ=0; /// counts the number of samples - for (size_t i=0; i<v_ar.size(); ++i) - { - // Loop over the samples - for (int j=0; j<v_ar[i].extent(0); ++j) - { - // m_tmp_D_1 = x_ij-mu - m_tmp_D_1 = v_ar[i](j,a) - mu; - // sigma += Diag{(x_ij-mu).(x_ij-mu)^T} - sigma += blitz::pow2(m_tmp_D_1); - - // z_first_order_ij = E{z_ij} - blitz::Array<double,1> z_first_order_ij = m_cache_z_first_order[i](j,a); - // m_tmp_D_2 = B.E{z_ij} - bob::math::prod(m_cache_B, z_first_order_ij, m_tmp_D_2); - // sigma -= Diag{B.E{z_ij}.(x_ij-mu) - sigma -= (m_tmp_D_1 * m_tmp_D_2); - ++n_IJ; - } - } - // Normalizes by the number of samples - sigma /= static_cast<double>(n_IJ); - // Apply variance threshold - machine.applyVarianceThreshold(); -} - - -void bob::learn::misc::PLDATrainer::enrol(bob::learn::misc::PLDAMachine& plda_machine, - const blitz::Array<double,2>& ar) const -{ - // Gets dimension - const size_t dim_d = ar.extent(1); - const int n_samples = ar.extent(0); - // Compare the dimensionality from the base trainer/machine with the one - // of the enrollment samples - if (plda_machine.getDimD() != dim_d) { - boost::format m("the extent of the D dimension of the input machine (%u) does not match the input sample (%u)"); - m % plda_machine.getDimD() % dim_d; - throw std::runtime_error(m.str()); - } - const size_t dim_f = plda_machine.getDimF(); - - // Resize working arrays - m_tmp_D_1.resize(dim_d); - m_tmp_D_2.resize(dim_d); - m_tmp_nf_1.resize(dim_f); - - // Useful values from the base machine - blitz::Array<double,1>& weighted_sum = plda_machine.updateWeightedSum(); - const blitz::Array<double,1>& mu = plda_machine.getPLDABase()->getMu(); - const blitz::Array<double,2>& beta = plda_machine.getPLDABase()->getBeta(); - const blitz::Array<double,2>& FtBeta = plda_machine.getPLDABase()->getFtBeta(); - - // Updates the PLDA machine - plda_machine.setNSamples(n_samples); - double terma = 0.; - weighted_sum = 0.; - blitz::Range a = blitz::Range::all(); - for (int i=0; i<n_samples; ++i) { - m_tmp_D_1 = ar(i,a) - mu; - // a/ weighted sum - bob::math::prod(FtBeta, m_tmp_D_1, m_tmp_nf_1); - weighted_sum += m_tmp_nf_1; - // b/ first xi dependent term of the log likelihood - bob::math::prod(beta, m_tmp_D_1, m_tmp_D_2); - terma += -1 / 2. * blitz::sum(m_tmp_D_1 * m_tmp_D_2); - } - plda_machine.setWSumXitBetaXi(terma); - - // Adds the precomputed values for the cases N and N+1 if not already - // in the base machine (used by the forward function, 1 already added) - plda_machine.getAddGamma(n_samples); - plda_machine.getAddLogLikeConstTerm(n_samples); - plda_machine.getAddGamma(n_samples+1); - plda_machine.getAddLogLikeConstTerm(n_samples+1); - plda_machine.setLogLikelihood(plda_machine.computeLogLikelihood( - blitz::Array<double,2>(0,dim_d),true)); -} diff --git a/bob/learn/misc/cpp/ZTNorm.cpp b/bob/learn/misc/cpp/ZTNorm.cpp deleted file mode 100644 index 504f31c..0000000 --- a/bob/learn/misc/cpp/ZTNorm.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/** - * @date Tue Jul 19 15:33:20 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.learn.misc/ZTNorm.h> -#include <bob.core/assert.h> -#include <limits> - - -static void _ztNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>* rawscores_zprobes_vs_models, - const blitz::Array<double,2>* rawscores_probes_vs_tmodels, - const blitz::Array<double,2>* rawscores_zprobes_vs_tmodels, - const blitz::Array<bool,2>* mask_zprobes_vs_tmodels_istruetrial, - blitz::Array<double,2>& scores) -{ - // Rename variables - const blitz::Array<double,2>& A = rawscores_probes_vs_models; - const blitz::Array<double,2>* B = rawscores_zprobes_vs_models; - const blitz::Array<double,2>* C = rawscores_probes_vs_tmodels; - const blitz::Array<double,2>* D = rawscores_zprobes_vs_tmodels; - - // Compute the sizes - int size_eval = A.extent(0); - int size_enrol = A.extent(1); - int size_tnorm = (C ? C->extent(0) : 0); - int size_znorm = (B ? B->extent(1) : 0); - - // Check the inputs - bob::core::array::assertSameDimensionLength(A.extent(0), size_eval); - bob::core::array::assertSameDimensionLength(A.extent(1), size_enrol); - - if (B) { - bob::core::array::assertSameDimensionLength(B->extent(1), size_znorm); - if (size_znorm > 0) - bob::core::array::assertSameDimensionLength(B->extent(0), size_eval); - } - - if (C) { - bob::core::array::assertSameDimensionLength(C->extent(0), size_tnorm); - if (size_tnorm > 0) - bob::core::array::assertSameDimensionLength(C->extent(1), size_enrol); - } - - if (D && size_znorm > 0 && size_tnorm > 0) { - bob::core::array::assertSameDimensionLength(D->extent(0), size_tnorm); - bob::core::array::assertSameDimensionLength(D->extent(1), size_znorm); - } - - if (mask_zprobes_vs_tmodels_istruetrial) { - bob::core::array::assertSameDimensionLength(mask_zprobes_vs_tmodels_istruetrial->extent(0), size_tnorm); - bob::core::array::assertSameDimensionLength(mask_zprobes_vs_tmodels_istruetrial->extent(1), size_znorm); - } - - bob::core::array::assertSameDimensionLength(scores.extent(0), size_eval); - bob::core::array::assertSameDimensionLength(scores.extent(1), size_enrol); - - // Declare needed IndexPlaceholder - blitz::firstIndex ii; - blitz::secondIndex jj; - - // Constant to check if the std is close to 0. - const double eps = std::numeric_limits<double>::min(); - - // zA - blitz::Array<double,2> zA(A.shape()); - if (B && size_znorm > 0) { - // Znorm --> zA = (A - mean(B) ) / std(B) [znorm on oringinal scores] - // mean(B) - blitz::Array<double,1> mean_B(blitz::mean(*B, jj)); - // std(B) - blitz::Array<double,2> B2n(B->shape()); - B2n = blitz::pow2((*B)(ii, jj) - mean_B(ii)); - blitz::Array<double,1> std_B(B->extent(0)); - if(size_znorm>1) - std_B = blitz::sqrt(blitz::sum(B2n, jj) / (size_znorm - 1)); - else // 1 single value -> std = 0 - std_B = 0; - std_B = blitz::where( std_B <= eps, 1., std_B); - - zA = (A(ii, jj) - mean_B(ii)) / std_B(ii); - } - else - zA = A; - - blitz::Array<double,2> zC(size_tnorm, size_enrol); - if (D && size_tnorm > 0 && size_znorm > 0) { - blitz::Array<double,1> mean_Dimp(size_tnorm); - blitz::Array<double,1> std_Dimp(size_tnorm); - - // Compute mean_Dimp and std_Dimp = D only with impostors - for (int i = 0; i < size_tnorm; ++i) { - double sum = 0; - double sumsq = 0; - double count = 0; - for (int j = 0; j < size_znorm; ++j) { - bool keep; - // The second part is never executed if mask_zprobes_vs_tmodels_istruetrial==NULL - keep = (mask_zprobes_vs_tmodels_istruetrial == NULL) || !(*mask_zprobes_vs_tmodels_istruetrial)(i, j); //tnorm_models_spk_ids(i) != znorm_tests_spk_ids(j); - - double value = keep * (*D)(i, j); - sum += value; - sumsq += value*value; - count += keep; - } - - double mean = sum / count; - mean_Dimp(i) = mean; - if (count > 1) - std_Dimp(i) = sqrt((sumsq - count * mean * mean) / (count -1)); - else // 1 single value -> std = 0 - std_Dimp(i) = 0; - } - - // zC = (C - mean(D)) / std(D) [znorm the tnorm scores] - std_Dimp = blitz::where( std_Dimp <= eps, 1., std_Dimp); - zC = ((*C)(ii, jj) - mean_Dimp(ii)) / std_Dimp(ii); - } - else if (C && size_tnorm > 0) - zC = *C; - - if (C && size_tnorm > 0) - { - blitz::Array<double,1> mean_zC(size_enrol); - blitz::Array<double,1> std_zC(size_enrol); - - // ztA = (zA - mean(zC)) / std(zC) [ztnorm on eval scores] - mean_zC = blitz::mean(zC(jj, ii), jj); - if (size_tnorm > 1) - std_zC = sqrt(blitz::sum(pow(zC(jj, ii) - mean_zC(ii), 2) , jj) / (size_tnorm - 1)); - else // 1 single value -> std = 0 - std_zC = 0; - std_zC = blitz::where( std_zC <= eps, 1., std_zC); - - // Normalised scores - scores = (zA(ii, jj) - mean_zC(jj)) / std_zC(jj); - } - else - scores = zA; -} - -void bob::learn::misc::ztNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>& rawscores_zprobes_vs_models, - const blitz::Array<double,2>& rawscores_probes_vs_tmodels, - const blitz::Array<double,2>& rawscores_zprobes_vs_tmodels, - const blitz::Array<bool,2>& mask_zprobes_vs_tmodels_istruetrial, - blitz::Array<double,2>& scores) -{ - _ztNorm(rawscores_probes_vs_models, &rawscores_zprobes_vs_models, &rawscores_probes_vs_tmodels, - &rawscores_zprobes_vs_tmodels, &mask_zprobes_vs_tmodels_istruetrial, scores); -} - -void bob::learn::misc::ztNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>& rawscores_zprobes_vs_models, - const blitz::Array<double,2>& rawscores_probes_vs_tmodels, - const blitz::Array<double,2>& rawscores_zprobes_vs_tmodels, - blitz::Array<double,2>& scores) -{ - _ztNorm(rawscores_probes_vs_models, &rawscores_zprobes_vs_models, &rawscores_probes_vs_tmodels, - &rawscores_zprobes_vs_tmodels, NULL, scores); -} - -void bob::learn::misc::tNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>& rawscores_probes_vs_tmodels, - blitz::Array<double,2>& scores) -{ - _ztNorm(rawscores_probes_vs_models, NULL, &rawscores_probes_vs_tmodels, - NULL, NULL, scores); -} - -void bob::learn::misc::zNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>& rawscores_zprobes_vs_models, - blitz::Array<double,2>& scores) -{ - _ztNorm(rawscores_probes_vs_models, &rawscores_zprobes_vs_models, NULL, - NULL, NULL, scores); -} - diff --git a/bob/learn/misc/data/data.hdf5 b/bob/learn/misc/data/data.hdf5 deleted file mode 100644 index 7c406233e19c49f5ab6e2c26d32257fc4e47e54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2544 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf)AV!5f~pPp8#brLg@}Dy@CnCU}OM61_lYJ zxFFPgbaf#?uC5F~l`!*RG*lad0Sko10TURdM^p%SxH<-aJRAY_H7u2$fTlB8U?dh5 zB~}7Cu=MBwlOU63WMG4s1vQWnnvxkAAp%BFb73?yP#z>Bs9?_kNvjSFCfp1r|Cu2Q zS%IP;c_t<%umK!U^~{V3(4;*9VldQPA*d-J!5#|<e+GsMsLa4n!G8WOpd1a$hYC=C z4UB6>Z5<7P(GVESA@Jh!H4(mQW(V6uYYu(MU;97g$(=e;@Wy`gtScus+kM#oA;2|> zVd>TVTz_O2g(`mBZ*;ovMx7s%gPPUy2}LF%4p(x87<-rUIW%l)EA0?Fwg21Cq91Qx zGCRyse(`ftleB}t&1at19&kFW^VwY-|C+&pA(r#*7uy5--$@i@&+Za&xE?#XXxSnG zhYQ_p{l5N^4r>m5ca$v?ba1(NNvk1)$sy|#cfke$CWl(do=0{1fA`PO<|%tLLCoRO ze9y~*Tfgmp|M{*!=Zv5GZ`@ec+C5v;;Xv=~#wigy?L!U}YbeZkuzwA2O;VJ*n8U*p zCKB@AANE@~y=XkUjol$)GW-2nW+?}Tg=NBlT$k)41lHb5`}E!Z!;J+Ze@ew1D!lvH zV%vZ3SKoEww~T<0LxR`z&Ireg_LlY=SKn|IaG1w_zT5JTsKb;)XV2&NGdctvZIa=x zXFTwOH&o?G)d%~=wd<c=@?bsSv2$waCzi|hF(n(_ww(WGA9G7xP5sR;dt+(o69FY3 X_nX~v5R?`By#LA1Utc}bKG*{QB}4O; diff --git a/bob/learn/misc/data/dataNormalized.hdf5 b/bob/learn/misc/data/dataNormalized.hdf5 deleted file mode 100644 index ac8d0302ebb312d35a8ee43c1c6195b899643733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259592 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%0Dv6E|18 zE?T5L$$7#%_}heY=nJ=O)_*(a+jR>3)6UQD(oND+w-3e=<%d?BBYiO?K7@FEV3Qqp zmX`3Zx-e)rwX;iA9s-|p#2n(er~R&u+VlbQH`_j;o~jB8@g(Zhy+nAkbZj7K*PJ#_ zN}L6Cn%9blJoi-8W%WZZ#DhMU3UxvkDSwgrG2$8OgUQemeiC1@za_c2R1fuw6`P27 z6V+GMA$xl9BE&V{VSk?#?0Nv<W&VY@ZgjltcYcL$8C-v`I?jD+XG2>c?)dw$9%M(Z zosW3Z{@ZMRbohN8;ha;KBZ%s_R`8eeYL~6&Y10Of9&5^G5p{gu!{3hg(on*iWwYQv z6|&F9aqgj5N0ooOoquKf9!b)7%4EiRw$9br`jPBO=Mbn<Xb9FvyN}1boEzJ0KdG_? zQ$K1!sw0F~?jE*2Z`<(#`oXVkzO65aeNoo_41YQy+e1iCyg#spD6i~q<6@4RFY&DI z3*?{NXn%KB6L!BNd#1_cYeaS9+=zQ;md|(M)raoxq$dgmekCep0LI5MjL)ixzaC@j zvd?#Gr*VIr^U4|yc~5wL#cL1Qan4n^LzJ)EfV$wE_I*ygnbr3O;hgl7kXNi#YUHyM z^=%u;^^<bxxr>V85B&-6oVE9D>X`lBjrPcWmE>aQyYIli>5*Q$cpl!|{tnfCBK8Z> zd($_xi?^4F%0I&}9yMpb%{#A9th;_#0QE;yw%-kKas}b~i9cP2d6{O5-&23`*wF{D zcg6nRtIkYEyomUBcAxGcUQxSAwa-4k8NAKTd*FZrBo|$m9|dij1^X%6aRk)ay!;l) zdG7xZ_m2MwtSh@^$IBx2zjdSjn=Hn7^p3O`k9kqf#?`nFup|4lz;&qOZr-AwqVGM4 z$_&MAoMihWhIr@ACr`2`g37_3yb_GME>rbAMsjog7V5L?)(dq(4^L&+?R(<iF<1Y# zi*S0ZJvYwOUxhs8^W0K%mz<v%?oI7#pa}PJQD;H}dp%jWFXkbtr$U``W;O^WoJqK5 z^Z3B6PsFn{t<z~2;aO&4-_*VA@BF-eC*%`b{kQe^zKK{Td1&o1>c?EYWyc%+_9WR6 ze`mpUlXGYv)<s>tsbRlF<^I6mYY+l{e-oP@e<glb`)d|IYG>~!V_xj&@3#rZyX4c5 z580D}yLj=fJFerLA)7HS*`Of$XJ36j5l%S+E#LWqUDvOv5a+yq9@Gm_{0ZVmSMt6N z{L@2NKT#wBc_}^ZIU9Ox<#=j0zg>g>)aMTHn`jb+IM9Fez;j7HI6Kypt?Xj!N~<9+ z+-MxZ{&wA`Z^Asy{%@$4=Il|dtK*l(pX|%AsnM@!9P^ZT=Ft^(FX?$5%e@if=4V=A z{Y2qs*q>B~W3bC=`Pu%`g@Nid-;tkYSed;T|1JBzF#FihgLs{@<SWqmjUS^ucPQ$C z*s#a$FXyJ&dYkolf*Xymojt$OEOEO;yk5UCj;M2~FQ|%ZcNe&pql3L%a#1Qn5K&#f zgAd8g^DLN`aw=GVlrN9<R4qCoKG`5<<E6#95YjXIJ<-3o?PcwUj#*50lFm!#<EMNf zoT}Cgbwm!Z-&1pXB%r>_So=KLWUUVWxX!^voz-6UJVfyz;sV(dE1qIpJi22z*<<$` zVSFn7$XVj~`A_h(T$BgnlA~n=<STnXE{dJF1pekS%tOx)KIP`pQ|Eue`Z+b4!w*iO zFk5$q*2a9;vWch@%E#U>=>7Z-*--)QQP<`Ada=Zt)mMSn{kKMwU6Fqe{OfEE!#HKO zDyXNTxW6Caoi+CNQvO#M>W*yI5Am(v?zZcEaXI2yjmV2QmS>M#CcBQa3wiCZ1HNR3 z#oOn*@=^`t7cV$Gf#jmtCya|NJ_~<|elm*W=D<qGozw%56R##^gTMKR&oOS)K5iM- zA?bS-CPR9}rA%KN@n!lHI6*jZ+}<BJ`U>RYzt!O+=NAURuQKMSCSDdf4}bB<=9ssP z?0Ck@C07e~1rp`uI@)o)2#24Yx(^VCI->{T#aXi4`YUMKMd;mezeZF{&T94C!(S8c zx}LQB)(D%o{0i{A+x3~$u7~zH>PC7i`~5|f=YI|yf4m6m#Aa869ql$A{*wELB927B z5ZG}h4Mo1OZ0}E#J=gbCK9C(frT$0a^{;I%5EUX5{HU&OyGreR&mOF=&U^#wrM})n zJeraHte-1nM!zhTeJ-Wv_J2cmoZ)wFlfEdP_&!hVhNvfMjW|f{JZu8;(ll85ka+#( z`dh-Y$hTp{n?FY%B3{&cd5<W6JlPBF;up+Y?|5hBQ`W(6^44cN-oC9pp!e%v$WPtl zk9%G&eSPA>Q=-n*tILS0@#UTq&g?CXdStRchCPvg$^(+K3-<hQ5!4ECDf&!~Aw8a{ zV*pVx^W7c7CH<Zv#eMXb^!==)a|qcO`};6!R2p@J$GwI<dD33@@>#RJ$ex){7IjT` zvi-<f&UupSD4#&;M`c?cN4)%Hm_PC6&x8-et0G6w6E8;iB7eo+K}$%^o~8Q+dBL2) zMAgGC@W0g6FQdKq(tpuj`4#5F6Za?Htdh;I*>NG%E)O^UN|g6r4?mh^ZO}hUb<yfI zopY1g*}@#CLp<l4_r#kwC+&4lrJA_zlFNF=lU#{6L0&|E@8d&MR1W+|a-A;yO0?HD zHhz1RLp+F@H4z`8?b{86XAdHt5LLUYqaNuWo+1v-o4q#vn~eAi_6qK`b+GEO&xDub z&LO^Kv&CnrU0kyFt*Sw}+pt&cw;RxFm>=^u_sd{D=H*h`K0S07wVR*HUIeb0J$Foh zIfXb^15X|&JG|1<yF^*pp12Nh{T&42SvLL$^;~|ud>wWU+TT%~|AN;MUOwAy>&3cC zSjVJzX4|G;CcLw5D)NvG+!RZ^>}apcM1sdH;`xFw#Gkr+2J>X)zG1!1$PqTbFTb<# zA7{T8t^=YEQ@?DJy-rb?`y=n2!|t}uPtJ#UOuA2Tre5*GI6CLH*WWF3hY~LyJoEvb z`W)-&%%1#-?5ZqRyou^{X|SF;d!Svv@~PoJr&S5uUl|YkT`FB@y3MET!MGlD9^1dO zF+30Il<Nn2<c}Da_89fYGum_UWNbT6>W4QOah7P(?<vm4pVksix7dw1l|HR(oa7I; z`%B%9FR5LunT9wqVln(?{t))Mc#LEF%iSWFa8BI-tb_0<f&R^<!Zt6%UyOsD#P`1R z`jY5Rw6M?DdAb3pW9nhR3on-)`RZ510Uv)4@yezpp2Ly&T~yP3J>s61t$}rLefJQ4 z5hYIDA$={Yz<)CL8|0np-3Q~4aYr=9F}L?CqB^$LWx}(%cTwL&=84wd?RRViZp<~r zgHAUb^+)MH&<|@g_5!s#dBQPn=T$i3K;$X*jO6A^s2|zoS0W#P_R0o-IK}O`kmBhh z^ebaK2T{A3z1FUO;<?A-cyZX_Uq)Xdd#p(S>MqL^iue`jF0CLvsV5`eSk%!?u#@gL z*i(<~ciQ#v!Wfqf?t}frjNP>ZdP%=`KgbEWF6b9Ra@{$@6QU~5S>&Z!(!=^|<ep<B zXB~DU4rI;J=!gBGg4{@+@M}C#owcG}ho%eT3C{~012vgDA<x9By+;UVN}M!Ao&Wx{ z`FbduUH4JtV@Qwv5ON80_=neoQ%h<j5Eb9wJS56n&x5~Yn+%8}*?s#>!aKR@;d(<x z<U!o<&-0OIdSr3ze{A`R$FNs3@x0)6yD$&u!Qz*sub!WcgPpR60|;j(EI35G{M-)X z6z;di60a+lL_cQBaO}^{i(#;%YZSKo|DN#eq|Y<gMV*(-zW>ZyM7@K2_~O%KN9DeJ zpC})D0&?flt83J*A2wJ@ayj`R;@kPD1MC`)3|K!NP#)uR)|c`joXEBd^;LG5b(MHC ztNwkmBL>)fGAD98Af7LojQkK@*RBzcZ9eWza&<28yJY=x{!Mbnd!?<%0V7b~WtJ0H zpnvZADQY)`N1Z2LWU$wFVw*<<$@N?}<eeIG5tQFK^Ni%`z(PfMQ)v*!sh13TPCWaq z|6OVqd58W-R1WV6f111Y_gts)zcz0Zzq26gpYbM~iP(sEl{xKm6*FfF@=5G0w+;4g z=Z4?R?OOIa?2*5nkNg4g<IL=h{8FW_#<;oc@%1wi$7W_5#Ep1a@&@FGPFmd3*5F<5 zfnnVGVlVi`8SNfTINf={Wum5}ecmkIWykeB+p+d6$yMyQH(rE`D}(iMKI}0hcLg@q zolQ)=h1zB9Pd1)|%A?+}8#Db0C&Co`DA>Zcgk!Hyg+M>PH1bX*#<N=Gj($z?`k04V z@BsOzSDXwdJ-w-<oiF#bb)i?QL$E)uz%imc>!)o*&Acq|yILFLL%h>qlo#Z0694}3 z@SB&!vmNe{kgt4<_!8d}j(QP3$6D~ZdDS5B2`4a4**NAL@hsqZIO(x%GY=D$-v41f z&RO9{JTLd!5YG6#nM}Ot*mWNG-=CcUzu?MpqIyA5<VDi?cxH50*j4!t+jxxm$L4$C zWvK6_`d%9sk<G3B7A-B!GS>rkPrSsubj^9ssXr&o2kR@A4~IQxWJT!fxNK2`ceX4= z-Qq2>!>?xC7StK1@oLm*XI3*i&SLJk{*d`b`;lE0KN{mvF$HZMIQYXWvZty(#dwl_ zhjp3^e@A%Pq(Cg%&)$rMe#IA|#OrtVJR8{}FZyGhzXp@stbTKqs7MzBoGP#^2>8YG z;XgHR_9f!k>`cgG`ExjU?a_WF$<<~1oS7Z%h<tZu%|7GhlIw-(5GSJZpPG2KET|7r z^KkG6@Qd095*0xQP+y$+Pwqgzagqm7-f%wZx~kXaJn?E?0LCL<-C5{H?R9=fJo1Rs z$OE&k)?SjE=u&py;2)9Syw}xxB$r{ckoPisZ}jUFXnKR}^89%<>=hjIALvedKguR1 zJfwEHU@G+V?%kLN|I@x_?*yK@PIwVg=mJp_G3_EzJ*Oh-vZ&(rmh_o9f_kF;p4oUP z+0VuYYlw04NsIAZn){uGoVguY2|G9YKPG+gBJ>1N)vG=HAZwV5#Op1wO9`jO9=CBf z)Yc7iH})&!zmCK8gg9#dzEqF=595<1bKRkK_HIQm*%2RJA0x_5MH?3?FXDk+I1hc@ zUn72#zFRFW=d$rp?)^v7WA3lx$euXuZ{vDrLBuV4&>Qh57k-Cb?Y$TIrN4H;b%WUv zg7{UQeIrPp_1}$r=bgUTy7x8!`>gZifQ{d$D?U(vDlwkL@Rk1H_l<c=`n<mVdn7sg z80_&+U2jvnJ~zkK&rS<bpZS4CuSqVp&cZmHo_FpO&(k(Q9Wy_qLjU@3Hsl%4TLJYZ z>Af$fbwk*3`ZPj(h`s^n$LwEuf$XT_k++CC16q!Eb5V0|%qHT^mpe0wXFc!Oy8U-g z^v^zIo=0*WSs!(fy&Q*e@VQNG{b_L6)`{Z-Hxo`QK7jR>e&;YQdENIU^dFu=eN%2z zPoST~zqgX7+O7wmc21y|OJ8k2af*0VJP-V*dqh4Wx%tojej<LF^@7@YIs3d{er^1M z+SwmLcHHAjBd_`CSy*S$-oDSs<*gf}=ZrcBeaCwX&Z$#vf5i2_8vo=u*-=mIcVx{P z`<)#5pxrZ)%WOMQx42UQ>*ds{@s{Lzr@?b=Hm5S;fj!H%o%+#%^=$l{oN$G3BIhYz zlC!#jST}aLZy52$zZ~@S)F||$yV>7`M9ItWuhT!L^<x_QT@=^%C~O{nbo)a3yz22z zu){(T?=o9sFUZsWjC$z2{pd}+U^B6=%hUFKR8z(iaqD;$hCLlv6L~J)d_jIPw?5cs zMWyebyl9-|yjFqEtBm;Lk+bl7ky$qr_xoaA1^AUs>9K%t&Y(wr)UVDFfO+VkTdPT~ zTBd>@#EkmDn{Hj>NUkUEgP&NXZip}EThD7G=gsZk#j#*}UMNdH!3TD;w@#pTQ)oso z@#c*Wc<GUNJr+0hD7DL;gAk8u=&zB)J59pg5MEVVVe@xeXN*(rES^AeC+7#OtIE64 z;=KEUXG1vRP-LHkJYrohBJNd4Hyd{wmR%x!v%W6sm=jyu_V>HZZ|$}h_1N{@qU$sc zRX8K^$wYTS9dc@4yifX~vpsKF_bK&~cx}ER-psh-7za<wu|BdwkF(Uyb8kUib9`sV zkX^ks^LL_ZfIWwue^?MtIGKM6>W<!#8}pRQssurQPh-><`L0A9>B;WpQBPU(k63@! zG8p;6+_QQR-n7^TIS>9t6Yt#p`hoQLq9N~yiaiy;J2}1`qjvT*{d>sU+3Q2@-U9KY zDs{(r<kbm&)NWRlu=Bfj#l~aTml&rR<p;{IuYE}NlD<EyDl9>L5<Ln-pAR~Gh1!$O z|5u|o+WYz(6Kr1gE_xc{C~lvRv0s&4zqbzJj1_#1d8uZ%u@CSW9k4F^%%$68SN5{s zHD`m5Ax`yt`@Rm}YQKZW!{Y)7$HpExMg6cm39mrsExki>Cvp<}>NM?)_2LH(VSU-o zY%zq>eKUsuzvm}Ic;y)rM%2v7@dol-@+tAGLD3^<pEU{N6*cVhe*Jnr;#D}`Y&=}v z@ErJ->t7SqcLyLI^~9e)dbxQ1Is|cSJd1gvz2rjFD>1nR{H#_LvE#gD+nJLN*T?$t z9{7`g4!TBq^6PKuwTqh8cHa~`n|_5n{$e;$HFD-nFBf&%EnH5#$oLv{NS7&U>%sJ1 zhe*!(!9~D-*$O{ue;@2eCQq)tq|f@VxJ*>7+=Tk3w$+AQ7t0h(dYa`vOYJ%^qavPn zzI~FYc~JK-$@w2@5BTBf;b+mQ%T<y)&F5>9%f$N>xu)+n;(43W_B!T|K*W_8Fgggh zM;!u5Pk(uecv3fpXyRqu16&`N?K@Ei)V#Z>bGkvl1Ei-<JjTAJvz$V|DsM3CCH?&% zFW2`L;lzi4tz?faXkhE#%FY)_&gMNq{b2bQBffOEgrkrreTV(najc(CQ}!$Aixu`g zBjcXU=FjdG9|^A-cSIbTX%ljA7q4}?S0vYEQz1T7)y=TO9v=Hfc2upv0N5*g9)CwG zjF)|XVcBi`PRiOP-cM|QW#grj8`fWW1Uw`?Cw(*cOLj{0nt1*2;yX8zAGN=4n+j9j zgCG7Y#wQN+PtB?Q`erNtHvTTP>tT11FTANga5_&foY%rrov^<rSEz^Qlsfeqw3~o& z(33+yK~JjExL(y?3m${Ln_CtW6-$>Rj&-f)`2E*;*c|V-Iv0HK_qcr74%k<<zI_7z z_7A6^?-ObH%5!WUbr^_ws=B#edeQj(`+g=Io7wUkQIqHPJ(9~C!;wd#;dSgM>TXBq ziDxsP0sr<Z>W}kupM5S`QNa&<-DcqUs#bAiM;E99J3Ld)r^Ji)8&I#zJZ7&~e%g)t zYF?E=zBrkGLOkh*S+M@9%YzfJQ|S*s>en=?eVcgs=HX|e>Plm*lWF!LklLA7U^?z1 zywGtwu1USV5Kg#P_9CiF`1k`i=Kd7oW%u2PJL%Ihj^y$|zj&gmrF~DxeBApT_~Lhw z=el7O_CtB91LDs7<&OHy4(~)=Gw-v%1^(6#>9xy_e)pT5|3qK-!}QGHOYLUKVO&p{ z!PirB7tb=R!aU@RVeqfhq$c86wz`fuadx-dfN@nQfbsI8i(hz=-aq5fpDI}daV~#W z_XsDimw!rB-?ZONGBe-VxVe-Qc_SWX!2YLyjKcV2$EjZkZ|c8HAiJvC{BYu(-_J)A z6~1Nf5LI2*ApcmaFWzXsUD?j-Oc(q;xH&Ql`zxz*=%belpLEWNtUJ(;cy)TwccLPG z8|qEc?^ep0jd|!}9lWVshdl(IXM7b(yj(aB>+KxrW%n!Jy5MEIukWdy7081)5@UYD zxI|cuLnK!>uAOjmQKwTuTL-Q^#`QGw7`vI;MaQ?;fAqg^Q7=rzQ>brx_V`z%$2u=Z zyEAqW{HnIizCn8O`d?_5E&o0V+~$8!R|L<Ric|Zp82C{PPJ0b_pM9FB+7$)A$O6-B zoW*?%fd1@Y%ZJxM9?9@B*jL3ZPsEv=6SRT!MaDdcXVq^7`jhp(oFKW5-iQ2Ed(s92 z_fI73=(#s+J(HOjCtTUq@R!;C5_#Y>&V~HfaV29hj;g)ZkiJTP7k)QErBEmMvg)We z;+?{EwEAn`8p3P84aW#?VxB<X9Nh2;@?RUI=PtR(mj!vqD{sPn<qYyn4S9>VsC%rs zJ^#!ZR@I;E==Krzdf|`NXy=C#pSyhUN4=JnE5J|uKYNY}S7G2;R0~_LVs751{>`^K z_sO0dIwOR5S^n`EqWsa<!;t4{2b}IO?h(nwG!sj5)q6hX$;>hMNryi%)b2Q|aebpl zx@F`pp0D`{_Z7~gKW)G1qTdlN>3k&lYmGSQdBxlPKK~sXw;p|c&`*(iPl!6HLs9od z;6A%v6+*GTY~r35q%SK>dPtOYT;WO7c~Jv-@A`VgC(>tIUSs}d;WEfstMlN6@AFW? zi;SyqeZcpBctCj5x((u+7uoY4waeKV4}s=bh4Hc`r?I}`;RieaB3)1yc%yspgR1rf z>uJXL-ywVQ{+a-y&cwsWGadR@5ZMzwzv23US8<P^c9Umo0`NaiwewH>`xI7UG_HTe zjba$5Sa#diy?IaIUv}^S^4#nVv3Ya)KJt;p{&$-C;U``_C%bG?!N<fqD_^2MX?njd z>3r!??x_gEs?<#lnsmN&O6M*v3$*woToKDc_y7LqLr`*D(G+kZI62Nq0e3YdIj&d= zxGHy(<BF$%TYE1#u0#qr_8>W~WD2;!50m3crGU%$A~~*f3b;`(ljF*yfD4UEjw_o2 zj=xHdE0+Rp&+Fv4#N)^R@1@26bH*gcRY<|!#MtDxiYeesTyk8c6mY-9C&yJz0e9$K za@@};;C_6c99Ja;ocxd+S2YD(<j3T=YAN8_e@>38o&wJEOLAO|6mZVB<hYtC;O2c# zj;oadE`}wq2enhcbxWNbS0@FWPLmv0Hw9eTbjfk`Qot=spBz^|1>A=W$#D%*z==%B zaSc<zUCo>v*C+*Cm8{8eZYki_W=oFaDd1R+<haHu;0EVRj%$(v&M#MTT+<YAb@C*~ zHA?}f@+QYMPXU)PUvgZF6mX;RC&#r+0T=pXa@;Q|;CR90xK=6P_7qBvYn=ivXW`_y zHYwmH7D<l#H3gh0njF_Q1>7&ilH=N?fICz?IqtU<a6gtzj%%L+PL@iJ>yQF2vUGCX z?<wHgmraiAm;%nTTyk8e6mU+3<haf$;O13Kj_Z;F?*G~F{=Xo}12Rv4L)Vp#+hyFp zsiD=65HG_Xt|Mw5+`T~8n{wyiqeR(=AMO)X&2Ky*D%SjQ*^B71t3Jf*yP0u+!)`5n zK)kHo824pzX$3#x*`u-cdiMObK;lKAjt9Jm)~kr;F}zE2+>h~P)pn4aO}vfkZkFvJ z?1?w!?0wo1`@Wu@Fc9}Y&eq^NWKWiQwwv^1y)L*95Fu4yPY=v<mfG2je_+Q9^~1dR z_F&x4>5U;zq37EZ_nS_?<<NJId*V7@#@OGZOpZIAWJmRM-$XR&K1l!ReVX*ezw_~2 zLlj+w`z{r|3HJs1PC9#^lX?@LlbONx{A*q49PTf)SJXYSr(ZqC^*`S@Fdrv-wJt%A z)riA$4(G?Q@P}9xahUL;axScgp1%n9A?9wW?~rePpPKa5l`(k!BF7}y^X%rWxlHYR zMmF4!sRNmD-)P>?^Ye1aO}m)^)Xs)afIoPSuDI`0v8}BiZXCk7EPUDUFND`Ke<`R5 zpWti#R^U`>PJGujxPRdh%c2R#14{)H6&{oDe1Pq34!dUka`1v@($ueNI4qEG&KHCG z9Gzoh6!C25Uc{FZWWOV>VkYP1ge#rdeqVEXJ)GMo+nIA@$3&#X{TBad&&?33Ap9o7 z+%HkP$QYW2^o99^`$64mUMR`sofl!C_0u43ShEtiKi79VLar7M!1_1^&!;AR^=|>p zLze$!<8n%1Jn8ExUF`F@OI2|{EGrFs=H-&JOidB@&Z%?$gk$@n5r-@?AMQI%cl(~9 z8So>XhsiIa?6@+-z@N@s`}b5L?U=7*k00BM_z+%CqsX3<w;AqdolTFUVZUD-?i-z< zcMvD6cNs-;xqde8%X!*Dc%G!<5}#)kY=4sM%9`UCcTx7!)Og}mo}2GL6W{xlJtN|X z*Jo{B%0`RO&i^`y{#m!m*6!}-$ZPE$fcsUo{{#GEW)BG?eRg^fo+CNa+v2&J%+m<p z72`pDAy?1KA|8{zZ!2!5wSJ2Kd>s9cuzy!7hnB)~1(~54;*w{{@y5+%UWAlR&0W+9 z`Hp^B`k(N3JgioSSJcjbsgOWa<!^bL?6HhD5I;KiNvt~yk3@Y_@;t`N@7r@-&AHBa z&L~@?!S}z+*>1MI)B-#1Qsq)}mpNxx;{>v+(?;6o7`J|YME%LYqxSj2`?{zXCV1y@ zk~?ZaI8l-KyO<o-3;KLx!Rus)7mmU>#fo-sfqT9Z>!7;iIz;VyOgVR=&gcbxL`CK$ z_PJE|E69(e=O=RCtS_Xm-TPu)%!0*Bh*#Iw93|=u<?yd8lUk7-Gi=6rqH2siUs`V1 zjqfX}$BU8QW|trQVVpjw8*F)CHtxdfeI*eWviaf|(q|QlU9xuU_ifeb52xH*Vp-CD zFIm+tb&=Y+hY#XTM}>Vx`_kW0U+CNqY8NXPKP0&rRU<WbQD^cbJcm;;uMpSr<N`aM z#J{%{J~wT?s8c7P7umy??ELS%ni56vT*-{sg8j>Qr@le$rtOsvgg3`(qkrBf3h^jz zN6w;ldHXo(m+JBd#>t%~IB%Yp4Z`~H!oJ9F`L5|h^f%4Z?h~2H!_TJeW)G5!i@mIT zzzSQ>FETuzb0&M^Jb5)L82Y@BM7?%e9EX2+=Db)J{bNOpk5$ipgzWJbT|$T^ougu! z*Xd8Z{PE--H|no__Nzo${dt>+s&7Lue(jywemC>h#w^?=H`|86FMQ&vSkhO+&%^Id z)(_bK&8Gy!HUDP`*4I2b3At=jA9YV}iLiXZZHNo~(~t*bhZoG}PyO=9t2Vy-RtYD$ z9&G<UP=08DIwk%a5eQt!O#A$B=|<FV6*nI1B98jm_eR+9)ZC>nQeQyb;`8m_z3{*L z!LAJG0l$b6m9|npW_IvV&=OC-l6^HP6XJ(OeYAD&Q!&(amZcK*WoKzs<dg0Yc9HPx zWqDk8@Ln0OksY2xhLT(doCl8GTlbuJnJN8AYG>hHv468x5f_MeHs{3pGXItMos37P zIt$#?+csVzqCXIC+Ml<759}KUKbb&#{x2W3+vdZ(bY5;`zh(6cM0wDHS48!|{f|js z#oKd|)aI|7N$&I?c^<f%?%3b>ny@Rt&wl*~a`6@UELOPTdP0x*ajBO}Ph|QIoCvV* z-<r$zd=q_c9P)?_E^J8O-1u+{^zo?X(Ca!gf+$;K&o`2OOArtIV(}otsp~$tZqp-9 zM-b1)`-c;im+u9Wp4syn`<IzD3~|rqR>!)rSv4O~yHn`Oe$Zj;7Ev}S3-W>Y_JCb} zrnTJ%YuVr3P1zEdhbmv@81xE!xa;Opllx0!{4%#EsPk|a>aEI~5%omeIBx5T?|7`A zPCOq^*DiqT6g8_a_AU0fk&Vv^o?FPijGc9tsCZX3y>?Odz60u_x@DhtJ6-Z2eq{F> zh#Qf&)e#zx`uVXB>GAlgs8?$CdR$NPPY-_JByU>eGT}sj``(Ef>bV<w8y-v2bGo~` z6L0e5v-z`g75u>pZH0f;mR}(^`IVLTTZnZu_3I)}<-%h5HR(5Y9aQL|^5Vl-va440 zi6JUy{k@j#i%azpH-g`QpGA0Pn>Q^sc%%QOWo*7w+<%>TU9{^n=q=SRh$j7=KA#bf z>pU@k7UG3hjKMmvW5@A3gg$rnftL%<C)Tmo3lnSXAbr*-WD8N9{RZl$xas?rcyp>9 z@{bk%4|2ZJ>ln$!(~Uu1L_7Vuf_Pc}JN)20Zi98>2Zx~Eu^h~saLy08kS9*%A&6@| zVZ7zL+uzZh9+!5)&cZY+2(R)z>;=8=H&Ac1_aoFf^|;zi!kJIOm#Cd}Z1j>Suf6#L z$(^yo;)#lT`{7UXZ=EpW`JX=?C(8CT!?=v85CGi%S%<s`fA#zx@Dn`e6VEnXK1)=_ z9QP!-3EySMJ7GG;Av2!13Vhve7YWCUF4#uYdDRc&(5>5R@a1~P6P438h7;9)|BSqH zLXV>Eu;$+{lbrY6VaGXnvEAqAcv^hkZdhj)?vA`QgMR-=cvCKyt<SZKz9l~CyQ@yd zAA;P--h)l31NuVVPt>j^rn39Q(}$=B&is*RcS`+-_~FHly&|0G6Ss>fuWi4#A@?t| z`O_-Em+b!Uy!0*45Rc;G0PJI?oF~><E_#5vq8=#tSp;@KT`+FH!@ikY_chs(=PP5r zqH7h@NnLHy4U)4?^{=7-#P1E6;~k!oT<l$m^<eIEY#mK{kNtQTL+yN*08Zu4_#XPj z&mz7}&LuVv7w1Pj$e~Ly552<w8R0~~_HjgY6MNq!i`_%K^I-eFxV~<G_cl3BA%2`@ zC9$q-So6c^H!8ayQQd0|)<HRC!y#|d9C6NP75qkg(tWpczRqDU7psbH$90G(S?2-q zj?Y4jhyT<Naj61=myn*UG|n6PA0CE+c3W!*FVj5sK>Mrie#G-`ZJ!f0=U>H=oNblx zJ5Mz}jO3z9Pvo;4`W^n#IcmVp|GsZqe>my}@6yQb2UoIVeg5}-+uqxuCqv)b{UO`p zH)NMp@cc;q$@uq>t7(21r@8Nb8sjK-9R3!u{_ltvH4Ne|>AOy*ZU1FthsWJIN$qCl z@liyblYcKFIV-!*ov1S+C*n;VvVZ@?_t^7zRB+TK!i!k@JuG=P{vPqN`Y-T<`4VO0 z>EP1cWQV`Gf&NtevB88hUv_$vTvw=anW!4nGk~Z(z76f-Y8|WxUzypH<l?s?h%>X$ z&&Q4QMg`hDOZOc4#eO{FPdN7e+GnDw?AIqmdE)y{uJ4IlBHje$z`BWSJ9YuT;7{yt zYPPiNlQ}BN&4qKa?3zwgF8108n&;bd!mACxW1K4X2KF-(&|n|Q`Jf$72xlIi*-O;% zc(sw_vier!sjhnICEDwTW54Cz_WKAbmHSr0nMGM5iR#)pVu`8)P40tU8;rQs1J+>P zPMQIjr}}%(0ynZhxFG7Gnef*7hY#LKa<-uOQld%km6_S!F@IUH5Z1+c9CVr5`S@8F zm-H=lig-188Tu7<w`eaHFH|JzgOm3i@=gscp<%aLW2~PuguyT7##HN{wCN&9Pp*Ay z{XBLq)?eJ2Z~e4kDe8hg5wi}s9B1~BJ$52$D=2G>bznPwLETWF65v<4D}6ZH>uude zdLpNNpG|j6!1{<bg|Cp@gxYf&W#doq7hmg(@r&qwSD^pbYRfabp1i^=n|BLWU7~jW zTc4d|C+Rz7&eaR^AV1Xf0_g9F-_?<mP)E$XY={Tm{qSbeGpmkYB`VI_zhhKe+Mw=> z*CpRT|6++CqQ-N>1;S}D>O4_aEuZzr%w@-kS8qpReOQFR`m@@0KTdj2lDC<MICY)Z zb(8RBbG<vzTQp?28}S)~a9to;56_{=-pjei(EiUX_|L3pyqa*Fue0}QD>A0$#Cwmx z`su8T_7I-0zKlA;hYiEJ$#vDQlAai|)tjiiI}-b$_;3;T=e%W8dmobeDB_;0x?jnT z=-%=PQGHzBBWmXTiS=<VMTU_bHle!Br+F7`z5F|y58-5{aLiMjGWIz|gC_P|<@*`& z9MY-VE0%Ch@5i{#VqLf4d4c{Ck(#^YdikJmwEtWx1pO=teNDV**&O3n8-9r)-t}An zICd*2ns|0F0sENvqnjt`@qCwXpX1~kXRqJZ`W`2_DkHCf9*xF+<Ak&hgZ@u7jzC^4 zYasEemOUStP5cY-Eek%fb#B3Wth3H+zw2W<HXICmwUUSv&Fwk$X5v-&K^88B{1qER z5zoBd74)N*bv=syI{jqh-Xn`5J0`l!X`*7>x*gQ+>=?9|czNR;;?lfYjyyAgW$iv1 z-#V6XDnXwo%A4#sO;ohq8V~BR_Oq9Z*E8BC5U)D;h7d1%8T6|zRz)7E8FQCIp7<WS zlRNt|@GG}(Co100#Cq%e=Mh)Vf;$+8n))2;A^dCE``E<ya74siyDrb(B0j~QDiLnf z|CgiTL|NQgJN}w`qQO7h6+l!+EPX*#Uao_7Q{uNBUL-%7={8aG^B|kITiT(%v9pI@ zPkD^+rFPeK8S-8|O?!)Y$NwGT(-iDt`#TVT_0&V|Eq5b)qMya-Je!GEb<ZQNbl=El z#Ip-?aou7zM<QR7>a!Tt{y5o}<6rm_<rQaP{mtZA7?;@F7W;<USS=9kYjb)NHLs?x zB<lReFA<e7^RyfBzqaupDm^a&Cwx2%@j7k`;!fW?b&z;|`p`r#7ge$44-qx5gK)p0 z^Yy(0e2L76cX`sDt0|l^t4MD0ZL#rDGv`U@UpZs_&CA1oCbrfmlFOab;)$9knO{L~ z@L=S-;Q9PWp7eJa@~>(^#Pi}iP)}LCTgVG}^>6G?I%h-hyjcrd?~a>L!mBbJ5TB~U zYWPRYdyaX^T9sjsrM-{*;A<Nm0lvio>~Gw|{#}wj>o&&CWk-6Az<kAn``ZX7eqQh& z<Y654R3H1D8}q5Wjiaa!k<_j}8hd?szUK|nV{@)yer9(X#J3oJ8RM1vPaYt=v!T=@ z!Wj{UI8d>rj*(o<>hzVUJn|pxsoHDqfp50{B2j1BJ}=;Mx7zAO`mH}f&YunZK)m|6 z(Z)p@U(C-*WzWsi(|02-oUHwEKd+Y!@+LbfM~~~UQ?wZ3TF=ZJMm*2c)7Hn0_f8Y9 z-M=GFg~t-$b;sCeBxm_sKX4=b){4W3ch1EjU*z^u$4TxK8+(f=8&V5(T=#rw*JDXH ztdp~{k3Y4G`r8yy`CocF&fXg^4z?+y-Cqwmmj7iw=EdsVz2`-G8|^ta?EUYE1LtmO z_(R9NIz#Qc*!XiqW%^UV>nq;KKVCaK;#=mrj{Ql6-*`>^i-`3>L|NzC+o8W|wiod# zW7<bV_4*yCb1LxjL25Vs_Cyk8Wq*z%DhG6Y0KVsjZEh}Ju^Rh`7d>a*B;F}s8vbM1 z^E?MGv;^v;>@`ghue00lOzCgGY$v>$V9yzpoA<vV-n0!z9+>#pO~faC2S>#Xn@PO< zwb(hLV&Bggr&G2R>K^+mZ4Aj()Us1vF3Q^G#d<rx$6Nq^@8b!gI&k(CqU!Io=ZVUZ zX|<b+CcXFTM3jP`*^0IBi&ON-QM8{ff_bSS&9FWqIxF(mxMx5;Q-dm^oj0tF_;dyr zKs{4g)?9=BvbKmXbu7~X>R0R9TS)E%h3q1pd${c&Ue?WW812KK!mrxx7p$+dCh`!q zi}trLA5|ca-LH>rhQ9KBY3G-F1b96vW;fYUP5aCsJ)Nn+MbIwm?h;km|3+Lo!S?%r zs){%4nhQa@s9n@+f%(hEYfu*)w<QtKn<@g)?)Dh@Y>IqcLp-Zms+kwjavtZ2mpjrN z1@HWU`HR@fs5?&L^9^xxQ83}0fC0~m>L&d#Ua>p^{uYlXg^*m_iALP9PjkS_jO(Jw zt}6KWCFq8Y?}?gkAA!@idpsvzE}8zxjr3dXKpkKmE}$;+@%HbrRKE>~8yyvlxG_^U z9ss^s2mBr>+iuLjUHZ)b4~)}fvG;vC{fKa~&x1yxe#kvHkT-JbjyTe1y9Q&O`PAb3 zU@vqH@>}iRjOU5G!z26q=b>q!PUr~qXR0oZfL#wK9C~IS{LJoDMn21|8xVJ@N#8lt zu5$nLl&F4O9n|cM0^ZDvgWpxvy?)d#S5-La<)Um~);B~=HHJDRYu=BAe$T<sSCys! z@BBL~lH{hT`AT^Cu#_TRJgI5prodGAgP&RUFXWjbU{Cef^PYH~>6h!Ehi+p&PKP_F zKW4&F4==Kt;rdOY>}d2wqN4Iq#39>#{SxV!pDVpXyZffM#Ea&w-V@IUp7@ORuo+K@ z7t^{y&s5k1`?AWcJ0y2jv_DEX5!v=IQRRE+Dp9_sG3pcFo8t!YW>GO)AImp~9^Y65 zan5VZGhWo5x&9~6b}eyTp#Of2`Xn}HMSMB(t<BS8znvwV?tBgN7Q+S{A)Zxh4Eg`Q z*V(&em>c1o#B+VV<iWnlPoBcM$flE?P`i_94aO_}S&aGdsUCK{Car!&c18C#j|s;c z2>3z%)DUr}mh{8=nN@B<gmWf7L;N{ChEFBDZj|jTQKw-e;8bm9^K$<$xXyOQRtq3K zdG8nGh5R!C_Knw`bEGHMPR2gX*H82%oLSR%74Y|WEFr2_2VtCi)D7ghuJ91+EV3>S zC4Cmx^)%s}(gA@)S&{q+B-g?J#1gM+ECp|xjC)7C-uqHPeqgOH;n@9z{lv?al`aym z>SRDZ$YM+P5TEp2C)WKq;#7nV3<R!Oxf4X4it?V9i|P%J9uSqOF8Pq$WNHO}u#x%x z1HXBI_4|*7Zv*$yp6|!}rraf--#KpAquFbJ;+>)2juT}UL*QS@z67|rSW!76_F40y z)fM9PglgzdZ`v}9csb*pH|eQ@Kd%P9!kiG|`HWEX@8n$>PQ2>_E~sC+{)^Lub1vq( zN^;R;{3+sD@hhm)=DHXBF6Rxj>sim93(E8FvFq|nG{$KTE`)tCx-k6cyw9!4j;JR+ zL6^GO_&6Mgb&~gspq`k7`!=tC?K+bBm+hB5LI2g`FdqJ>4)RbvlW)=fs1NMRF1fG{ za%&dEfhuOt$CC%&z9fAo+flpjg)T&sp0g$*o~Y@z@;tShuY-fZR~%y3Kk5R;p$Z<n zOmcSR0>&XP*Tgu*+sg1iAHD1jwQGNS9;GTX&X7HR(Lp>r!M`J}OusVlt1Pw?*F#C) zDPu8Hj}u<S{0+Q%y7vO{dKgFCEAIfrk;$7D{i;9v$54M_PN!I+@_4@Y(7zcS4ZZC4 zJT-mr;w|ur-&v6L>~m=mJ2!yzc<;~Wi0U=f9ujrl+TUrMbk7k7=I(R5&TRwUQM*jL z=A;|Z<If)v75&EFAj+?|4x)A*=ncQ}n?qtDpJC5m<%@HEBVPCP3Ma}IbvZ(KcC9w@ zn++_D>j5_G0Q{*w|BL$Nd|HmWpch9m?SdQcDQ`*7dD}RS?C=MN5FfgP$1~Ww+Rq>D z<^6Ge#16H)NjS0j?s}4&Z}$U<s<N9gfA)FRS>olVCx}yL=6>`q`ZfGOdV255c%rQJ zi#Wou)%NdZ^^>gdzo|az1Ie8-Gwu2$em8`_^2WSW<DiMuE^0@fC(0AA>s)`A6X`~J z&+gfNziqYq(MS87Lq|8<N_crT0sd9_E5h&MaO1tO!`mZ{^onOM!2e<}PF1u%`sFd{ zabLm~=`GZcjDO_=+=M*nkFlwUcM*Oa@x~ve4<?*GF&2ImZJxu99+n37^{5l~NZ*Oh zdx&t(p;`aJ-iqNjh?<{gog}I}S{^1U`<=Z_)TvVT3{k!<AL7g0O^fx{U32Xtxyh3E zB~fuH?6RASvJ&=rd(!u_c-J$b)Go(miJ^9VeJj?Bee*{>6W+6tkJ_!D2jSSj<%bEE zRG;<rfruY*I0yXWi0n@Y=PZBwm~f_90~;r48onpFdNv-<!OXMmU#XpUPK$VReUI)9 zwKH$`yChdpTi&Am-pzL;H#_ctXZIsAXcy1>ZAc(FA9Ct0QJr(lGs24^Cyo*?em#hK z>)h;+Kys(;SIk32w);-)D!qOFAv>3cef=?CEaBw47D2#2IfHeQJ(i~9q`y7dkL0YD z8|<)g6)+z0wL9v8(_<6zN#@uUMfM%frlGL+!*E=es1?gRNzSU<zblpxt1lv+j}E~2 z&48OX!Jo<Une^25f4&eky+`4F5V^Z(I_=_h<qS5?MOO5u+84*T)yiAL2`{((2tSy$ zaW=32?PkcX$W{aP&FEz|uiU=DzB6o^&AYP;SCGDVGt$OERp%h-@m5o@9%lK1$Hbe0 zd!7?c<?#$5Ue}y^pQzmRS9b2APMf{&sGYsZihSc^#ykV=_n%`y-`qytIX~0@pY*$x zO85tUbvA}0ex%1KT%SqzLa6hqaqvgjo!$@6eNC!wn3sv#iszgE+Xpk=wRLdzJ@n5? zo<m+J&sMN6TNL&rJ9_<f+n>8ee{BEsGq7Jd+c%6;Wq3r?d^DJkif&@p)8{hcO8=1| zitx^-QCM$Pem2IVwzU9WmiZlaP2c*T2&W@j+$Jg`9wEP+@rxl(`W_q`Un+w7(-opo zH;fU$o9q*jxB8}rAH>w&$TPid>_hbLG2}aF{mQ|l@B9>v^_3?xz9zZ)^2LrPW;g1B zGq;hgGhIg^fApJnptAKntGDVgaI#@w2<eMm{urm~?)H)FC!KR;+E)N?#wqOI&g`d% zL+*PERM)xo2>qvfZTp>c68D=)-=B4A&puA}#NIvYfOE2V6V>}Xj}zq!regfMLyV0d zFE7*)F}X3u!}{OCx|&uc{mG8Ayro@_=e~A*K5dJKyyL59uy^1f>a4sx*!nSK(pi#= zTrZ!37XAP^>+_=*>8Z2_PY^Zvw?85(e)|LYD|7k79xL(<{mWbXQ0LU*A+HH1_xq#H zi|+A3Zp07kX8T>Y5Pp$M?gzl`yWx9@s(WP~5RPTt<W0Pe{u6m+Mm)p%>Q?2CP`i0D z0_($nPkoMf^=yc>f4mLiO#a>wb<T9P?~8~H3+52cnbq(U*<};Qqh9H*;sxXhg%JO2 zViSzp>7uaSx^z8^U;fB&Jtp09AiniK4{Y9dz48_P*Iw^KcEz^C)}MpN2a=pk$?%e> z;qMK#vy<Ma>+**ZuShQXZn#Kt9hVz+<;nVpPm%Z?b`d-&4tkx2gc4QG`RBkd*6@=U zwZ>k5<*Rv#<orbcmqg9r+ScxnR@QH?_g;1*{bQBx5@mO5#{&0D+7CoU?g=*DUqsva z=dtfU@e1F+0pFx%B;iykdya$-Sb%+s_v-MJ<h)I9)JfLJo{MGjRJHZFQ@}~s@46oC zQnkgptAS^6-@s-D-6Q)deHZl0`nH6>_;0Il9i@gOpda%`eawR&8HN3aA2^0MU{h|r zCw=i_1me)?`T_fZlkF4qRLg%+$N0dP@VmLx73(EyWyAY=^87f|3w<*O{Oa29;eVak z=L_cb-TqE1>PACf|8NxXq6_!AL+z$lUpxPcor8&Yew>Q95@XU~9D3mcdmZ^`0_Ls7 zppVc?JXe$Ne(FiQ7~TNy*NMr|*W6q@dvDL@RfoDo67Rh84kDcEd%ku(%l1TG@&gAj zF0nW9`#V{>-zJ>CcMkE-p7xI?eYxNZ<Yw><j8~+sYUi<G_+!{D^dt5SRY{;uu<Lf* zLgz=m>i~OBBa69Z^UEiXFWF@s8e#q9`@D93{vjtJ&ou|@ZTbY^_a8Z?r;SVRNpaLJ zy0<`mlXEg6&(-IWH)tHPOp9aGp7b80jOa9n<j#Kuu&=U-|M(Hl;+`NM`S>yzuQR## z7?Sf`RWAVFdmZ)<ezMdDH<w(lx*kn(T{AO&*A%tNBM)@wSetJ>I@`Fs`^zc9F`sib zUuVe>@I6D2uYBNK_}iSl<4<xEKNo%#3FFX@uAG3sr)FQzrqyI;cz^ht`4vWe5jQ&A zh2H(4$afz72KB``ZvDjvRQ^is^4C)~4;$S^T#G)B5YJ8ohg>xFM*cX<7QAtD;mw#% z0i-9E9YmdwUbbGEun5G9EZFZn+CMc$T=Lot?eE1t<E%eccTUY+`f^94wSVM4>@#L$ z&!c3Yrwa)qeYUlIIPv11gZXH48vCd2@d|id;PZWIcTTlIeR8tcIxVO5K^*fAjSi6= z=l*)&)u-j~v(6rzn!DuOrw#g1pXS*8^2fy=32)}+@guv&vF}sJC$X?+(wj|aZ@3=* zkkjuXkDb~9sBg}&#P>Z~XGEOxf?eS!$LIGL=p~-xEeA}s`S9sG;*zBv_?g;Ow`?{a zoeAN@JKKuya&u93Iq`n}gD>J*Zn5tp@^&LJFR?oD++6P~$OBdI3+5v_Ikq2<%}>dW zN<Go;7aP7{d@Ov|agxhTn{ZvEf69xxVycD1FTBbT_=Dw)!gx%#yzzt=kA4mEa#5D} zcM~kM_b}LR;b!ao_8iY)_r}9pgcIk+AfEJ%^ZSYCqnz(V<)GFV3CAPXU>|pGtVMpv zunuw5?)>%z>+i%Dv-#4e?L(5Yk2g_A*iS8hV?QVECq?eQLwm0J@FPE%8vU|;6KuZE zYdVVB#oLnyVL#JB<gN7Tf8Na{mv^UI|CgK(f61#~Fkk1`Bu{ELx$9t^WuX(Grh5-N zu0f&jm#F4$_t|`(;V;$I^F8{TegSc-Mzpf?JkW6-$<6r55oFhiKBr-SVemEJ4;4WD za4zJs^ZT>IO_J;B72qFJpf1)~yqk{tnDjk3*KxK9WJfRj4|Tv<8gA>-;l>!Rvn)4w z)?2_&W?Boxk5k~<C$jH!UwM`E&86Tb=&$L|$SW~E)Q9A(RB7Zh`};K3m2KUHc+@N3 zVZC*_tq({~<n3^W@N%jf#v}gy@f75}e?Yxt-jA>z{6&ZBB<GvA0Iv=%wQ)Gae)rC) z)foPi%VQA7&d?U{w>Xm;b%x&@_=Nfq-GjVg=fWEJO|Gqfm3Zxy`Z~4igJ(|@bqZBI z0lw5h8~?w1VqMtKG*~}Y{{Z4eRa^<b>r}5XFHzTiUy7ftjDBUnjsIZ3aFF%)%djuR ziwvm)KzHQE`Y^w3LDZidZ>d^675-BLo7uYe$o{@>##YAqiW&C(e0^(#KiOel#w{Uz zBhN<>)$;__o3&1iyPj_mXR_$INWwe)R${+1xkq6A|Mx!9s{^Pre6D?eOy*tt2>AQ< zyAW*RJFB0nwe5GMeXm7i$bXD*JacQ{<-sA_h?n)dSbVnW@7-Ly$-OI<<Z3*#`M)g8 zkX(-a0-V`D3)d;G3+yPuIi8RHp>|$xj2-_u4ZrA!k=XB8m$a{`-He_JJbSPn^+w%{ z_(u9H*Y*%<*S=3suh@dhhlqD3MWMbsH9LT^u<nRo*9RaEP`muWAnsN8$VlMVmyYpr z$z9*O`v7|JA;!V`PeR?1&Bxn#d+H=myBISK<8>-dxJUZ@=gfg5*Y%s+Cf+>VgE%(h zD<Q8~tqNFIem)oC*r^(Xcw(p8B97Fu>^9$zHAj5&u+q=S4m%Zs^%k3p9U}W`T?zPC z9Q|nREGus7zPmm5(45-*ne=4feH&kqeyER*`}7+mS4GyMo{1uh-@yLITJR4~eEuw& z_ky0Yl0{H|ro?z}qU=q7=<7AU@SAK?Vjs!Hu|^Y!>SndzKPP{7TmM+NwR>k9>WSJ? z263p;`uhQ2Y7*8_4u1=rP6$+PWUuZ=#I>6B`8IH4Gg*JmUSQ+6slBgO%KlxYnVJ3! z;rOWb2KwEE4^i27J@QYsTyTtd9wM(2HFEhaqR!^2@UN<K0Chue&T!p}+AIBa1~_vq zhNwIdjdpYAZ`1+vE&=a{vG)6r2YiS9&Irqt@doLuo$t33l^Y+yzUzCHSU<HZC&s5Y z&$&qLJZn{~zX^F^uYXsc2&Deh#(%I6YOh%rV9z%c{xkI!Ax=c!6VW8sK`S@FPL4C0 z^mw`d_7YX`xqL{@W=vm3yi;KX^ttB?#D%je{U_j-*xy<8gkRPZp0C*P1hj@X_BSV_ z^l9RgzSk-HHG%)M9C?%Erd|<S|GIuhopk=H2D|?|kN3^|aKfqhDY)O^zu0<edQ80U zM)K>e{E0d{-(&oG&5R((+tdPYBCG5reX;3}9z>nAoiHykSs)H&->JxVd8(|<>yp3W zdQs#r_l@kxx3gZ5o(Z}2j(AbWU>$hN9ENyRIskd0zh=R_)%Db;N$w2!DH82-Ut&KN zZr;cfzWSrTm#dve`yvk6f%fMJC$AKSpUkOxiE*EJzIQ=`aXBYC1rv_%jJpSV@fGrq zRrj-gDCu>d?5f||z^-na(T{K{t_$LhcUpajc)4a|5OA;aVceqSS?s%tjf7pbe>C<t znNZS$@O;;+3q;NLs@6{%YaRrjX{%kw*ayfD6IJ>y*_AifqF=sX8rIjTFc9@yw|HUW z^n=0r=z^01$c`G60riUQE47vMS@iH{BxkpF+#_BU%Z55)ZuQzva(!kA{LjYOzhhG+ z&&QD5iO+BQ?_18+mAYfGZo1>hC1i)cxVeWY+v8#PkEi=lpH1e$=$DVQbw&OYhxs_} zsXw5<4AIzU<b_l4FK^Qs>&JZUxw&Rq0r=Z=D}(-Inkymb@4y4Zi#ePf>!-(;J4SNR zbSeBVnkD{y{HaN(kL>D=uhcGYN1{IH#%U0r=8QeBT8z$knc7Xp;qWUP|8pquZ0c6T zt2vPvU+p>}E}XdNeX!SjP&8;4`+J1S+YEjeqsk??xzwF9_U|jqPo1w2&ip$baV^rX zyG=YFcKToFSMLKo^S;O-(v#;qA0;^p9|nIoB|BmNlykG+q;?ke9pm6x2g5%q?byT6 zi~r>^+EXvoq_3`IL4L~6G{MBnsoiir&d;{I2>j}*XMk__;5bp9`2Mq*ktvXPEtUrZ zx5#}rQROVaIP@KRo&jIG{SxHW${z9}`)RMiA7cLy_|r*vhH=PHF_UoY@2;p@CjV~4 zp?+W3m*g_X5AcsjS7!(DqQ+pXBkPm+_b$qwGbZaUjiz=d@jE!W(hrDxQ6LI+POsLl zsNJ}y!Z_9O;#hA{uh32}vU{`serk7p&)nw8?8NU-rn&?_>JH11&pPL)CxquCvL_IA zJ~e|M)EN7m#&u5URkS~ti8$w8C!Z59d;W`c*I7%!zLUF!pPNfAcBJz~dx*yT#hyWT zh*v%9VcmHHd!L{yhoOJgY6#}90(*v$z6x!22X@MNJ|jK;Wvd<EWiR+qUX70+x%2Z# z#E))r;sWtW-}yDi?x2pd-|YJ?+A|&UNNkS7dhrb%Y~B6s&I#CwKl2ha@jXU0=ATG6 zmpN51?E{j_uVHVA=bejUoN{4V)L*katq-;H-xr*qcBk|^JN|5OuxCz3T_L$H=dFmc zmLE}HS!^l9rQW_fl;rZ@-vM4OYU;=RANJn*y{e-N8y=h@Ed^Q}2A2ZGp)HVUaV_pL zc+ui68+R{mgF6HWPRJ00pn(8^0AWIKO+p|*kngN}lIMEQ_g?2ecz<EB*4(pZX4&k0 zviEG*kIiYck$BNyZXmUrTs3`(XY;4mAzogX6oU5C?a@!y>F+~w-Xt^fjSsp5d&{`3 z*6)jUBi`8RxYdMXPn%<2DlEOV`%3%!E~^oO{1dslBF<Ft!D|Swu56k?)a2=~-_J$0 zyb1q`{cEF$=Ow#aygC|2yv%9OcQo(rVgE5}?ER{Uw{_hd$n=o(IoU45&SGF{#IyMH z9qJSt@&(rovP{7s!trruu%ED$_Bj^A3nGs6@Y-9cUDWLaJ0*Y5f{%H8ljdP^*zYTv z-^))YT=Kccy66DZ12y`eK*I5fndehG8(Rl<bxz)bKKY^m)}#LT^)TVoH@<^#s_9GQ zmGmnNJ-q99#G%|jZV$DKMEiGBIj9KsL#J=QjU;!LZO3?~OP@2u%XV!~5aq@GS?@=D z#>bj?b0z&{qRHn%sJa;~eo7kX<39OL6aIhi!}`CxM0mBLk&Tz7zaA%^{}6_KkEe=+ zzuC%e@zjqUvd^XJHTF71G|TgX<WBDZO;p_)i{B}=cNFqW>@2f|^qDI6kVj@|M$}RD zC~OhobuTa2$;tR0aj19Pw)vCKzK6gL1%9CZZ2w+6pU58&XL|drV90xnhuuZe`>>|O zGmPWRI)nA7e7}Yf&e?Fw=G!Ry-CcgV@M{`hmHUeN$Mz<CCEj!%8b^4wzeEiB?X8db z@!1*903Y*1B*{&$1mp?pHW2m3)YHI;%mp73js>PVL^!dp`hDU>t2m6KMz?rCa(N>- zf#k{W0hwkO1Bhqm?B6*}%>hdY=S)_Qh_c@X;692C?QolT)9+&xQIXmob(IaB275d4 zKA5MREzhAnO)bpF854;-<G12pk(?LKbQA5Fq6QH)SysLAb5Zv2GyE<7JPG~!`X586 zomE}Bim1*vb0cU(p}9omc|XJz`_Rw$xp;mxE2!@1g>g(`;TOR5%LRLxBBwBp=$i}n zFkim6_Q+8d_EIx{-$r^|_sj6Nv-CLfMjqM;Kl0OaG_|Xrj=}EYeMQtE9{CmZkbAcX zrgk|c0`}m`Pd%aWol9FV54Hb1>aq;)4}Y;VZxR2d{@M+MlLrUk{>6zb2t6ix-B{A+ zY+du7+RccfiJ(yfunt+<Kh*Lo-x6h8wp=AD3S7nC*LnXQsQ3J&eUFoe{($<T<Hw^8 z>Xw7CPqRF$V*RM!q}>=--&zj6eAS~n(3^YHJJ9sS@OKbC^IRn1)z+|YM3dv0SL+x~ zJnOk)3-FJhd?H?E4^1GdE~E$~xejO@1^MP7u#2c*-=h&JhQc1snswI*$3E#e!tqqa zg3zz{8Qd=lSp@5qEz02fkN>tYn%a|}7iHz19;AM*>vz->bNx4*&!e}lgFe>20OC=a zb-M}2?tHvL{du|jCy0vo2M?3ntW2LsR3{AiN^)6p-~+U`N_x(;N*X)=xe1|!Q!Txb zN6s7jekuR4*dvmQ>Gto;rbUly#LK38qJb~9)$ZTJD+U4QS2DuO)oy<L1>>+T>oG5< z;fD~Cs~2m4ll@OTB|J-zb{}5;AN*umPr>@s;NRe1GwpU5_0#^(&J%S4t3VI?XD9O5 zX>JgQ&XV4bNuRF8u<wdb<L!Oa+OHUgXI}CedJfOT`t<1Sh<o#J`8n#x%RISH?W|Gv z1<(`p<|y&v*VXp9)Y&1}Kls~`h%51f{jRc^VSiUPGV2%WCw|-sd$Mhr5NG-yFF(>F z`)#{V?aqPpvBayR1MGGGBYV!SJkbyFB_H_O`ro5vJmK_aiFK-3;joMNeCrkT%oy{G z+Qo(A7GJ@hKd+bgpkC?8p|A%p)e3s};ykdQeiVf`6R8VezUFu@;G8$DrjlMZ#(oc6 z)M|5u_~h@;%H|y~9#_5Wyy~X1_2}#p=+WEGe4+Ws*UN0Y>{XaIn;L@oiiJ}UC$i%X z#E)3N9r@#U@33+5+y`+g_f5J<dYq^o$7p=h;~(U;+z^F2AohPme5;c7J2ob<guVU= zsf}^ix17GzU$-9=O8wQrzqdiprw7PK?)NyJc)qAQ>Z_i06?IgdZ5&1YnD=3<TQr=5 z>mt{8=KV>o8(*+|!Wq;>k^MCGSze`D0JWQO_PRwCPJy~A*Z&+&<Ct&9&l6=)yP?+^ z6oGxk+`NxE$LDv4JydX0#GmLe5&E4>B|}KBi2E}J{SQ5ZU0mPOjU%4t$OeD1!}(zs z{rJ5hylG!(A5k@Mk`GZi`2*&|GSA;b{hS=>U<aK&(+=>{-|i-yN!i)P_21`jliX}6 ze}t%>J^c*YN7Y$Nyvh=FoOpGz8)))-Kq_k5N|Ng~&yY9j$kSQGi$4EdrGD(*FNhcY z)#o(HWzzTV#pyi2JJnl-5l$Vc0sqP0TOjXE#xy%2PkL{{X?Pm>D`M?)HS$UZ)D7O_ z%QC__`SSY_HLt(3^YiTiJgZR{_S2tJE%T!GFZMo{^)G<=m<^>aQa_PC@euSJnXnVM ztXp9(XGRgoMVp~fe#z%chep~178fl|>FUZ@^10ET&RvWt<Bn@<yQA;_`A@rF-Er+a z;B+~6Tze0=5*6HW9X#L`RdmO7^nm+N$sO0p15Q?P$949AJ6F{m*Tn<wpIYv?t{!lq zwcT;j1Fl+KcU(6QI91Ob*WCjyeFJw~4-dG(4c&1)J>YINa>w=ZfD=vJalJj@b~JUz z_3?nq(##!~9M}J6jMD!{H+RSN^`OtRaL4uYfUDoi9oOFj&bzfcZh!||&bIEjfgW&9 zJ9pe554fl8-EseVz%}dWjvMR&cdU~;ZiojQ@8XUd>H#;at2=I(2V9JF#|`&@YuDW! zH^Ku>_i)FJ^nfeT%N;k$18z}ocid<XxDS2YabrB-WM6mOSP!^!{oHZmJmAU=aL0}J zfLl4x9XG)Pj{WP7o9F@e&tP}lBoDaIA?`TG1FqUIcidzTI5pfIH^l=k{YZD*R1dhp zqug=RJm7APcE?TkfD>cgaWg#Nc8qh!&GdlFGQk};%L8uoM0eb54>&W)9XH1VuKr|q z+*}Vh?<wxMc^+^%r@7<id%!u<-Ej*%;GWKK$1U`L`~U9~|BwHl1zhJ3+TV8?Y_!+$ zx5qxD>rA;gH?H56BVXdWbD4TeR19x`-$7jOzufV2@y@i|_V<E&_MA!C_sda|vo|wt z5;gwgKY%7A;Qo_sS%u$Y#M8$1cdaVfK6{a#OUu3xm977a0o^|e_hb6)S<FXos*B$% z*!KS(QM=l=&;DN0_4++O8fSg_OGMS7t;dPV-kI%va{Vc|pEPCu#C?`*)iAYowd;sy z&q<FkFYJBz_4M}sC;5G;k<T=>8=r#EYYO_}en9rTigoLT^KJjGJH8Q4{go!Aa8Y*u z&p;aA8T#3-V}APx;`OUTccCwAcq~zos>3mon=b2D5#?*`^UrE_!H?9=@~n#^>Li5T zCd#W-Jqdo^@Am#{ntk7qZ%+9F?Y|zh_lwce-sfMw4ZG^vQTD!S{kW%oE<Nnh;&{TF zRo6a(5BvEYQT^;uC{dYZ8}2LAg36dDTV}r}={k_v-haJnj{6&P^f2a;{GPrk&^MO) zJ9Te=@*+KjYT$lWZYc-7=JM|tPkTRvKh&_3uLv&=&Vn6Ox_7v*(P{1bjJ(Z2#D`%i zpwD$MHT<sc=d||det8A;*M2k5PmS;L9{MtT#C<&<S}l&|VbZij+^T1#zXD&iQ3A=G zD@~wZ9I9md^}L==yW~7(8SJBqt&Il$*RNj)F9&u^AYN3jjOPXP#R{K@XVX*KxcTWf z^m7(^eIUFp_YUKk4i}#hPW3;8I1{`v#xuprMG#J93x*w?THC%6PXB9C2^W>Q8X_O% zmM4fCw!Gj2YL}J6qlogvDv?CZ{DWAZ*b*G>MSRLvX|;>$;Su(E@Lea6zx@10;AF4t zZ_#hvXXGK{<&hVBsCY;Hl^z7U>C2C7T=lDB@Becz!2P=GU~1Sy2j#;2#IR4+pXDPy zlU}FqL#&S-@Y_c`ui66kQPT|O&x#kczZ2v>cb3L;F8ka9?pSL0MOF64?*~Tu!oFr` z{T0-1CfN6G<%|7Ks2>~Z1Q8Y86OsR_^|zCRbDA}=arJUC;#wYCjCGlI<`dyfuF~+M zJhO)h;?q}vpXB3&ht!|lE%X6;qHo<Ls*4Aqj>x>XZlL`{5aubfMqCH(=O(bLDG>)f zj!XsriLD{1GvfIH)B)zR{tNo=%7gl$ZeBxw<?}I-<nm@T@>aw|g?YJnr}kvbLwVK1 z?*!^}HN>k^zNxKOrCZ}Y0#WxBsA^kpDe2*1E%AG>$uI|T!#n->jP%KGJq{9OXV%)^ znKouaK05vTqHZ{Ay^*JKe{J|p?H+9RgIz=6Hz#_yjc*=<`OD3ThoJA^(6rj6mdCe* zJ!RcFPch!^lAl4V%t|R-?W*4(_(3d5XY2Bn{#dV*b#E-;)X@dd&*C>Dj&zC{h*MF& zFXkmu`D34Qj)q}AszUGuKUY8JayI0R98ou=aPj=ln(s-Ue%cD-@xor%$3*{V<O5GR z(8k5mr1N0bEQMY5;z-0fYda3}R}-Hmk{-6C1>!~j(8R`pH+w*GS+Sdq?>{zO!gz5# zkWZ%Y8RUtRknoM<JeP?eYEmA?I?R}#P*+5jjFEoSzPFW)hjMLgohUHnB;lO~d(#OQ zRmW>RBA&(9Osk1DypQ}-1?FO2;@cv~_1bpGTc=|M<c~@?i+xM{^!-)nTd^DQD-vT7 z=O$z~#&`NufL&FF8CPjO>}w@!zw>$EKfNt7hU8A=oY#oT7OP=Deelap;6nqkPLuP< zYA@<vEciaj_3ZhN!OwpJ{qpz2h(|rL0DgC5<9<Qj@*bbUphx|U-@SCmsIA2F${(<A znG@gplOBFEBkZhx2}RxDV;Y<wxoFjH8BsZNGW@J76oMaBR1VY`{h-t-YB$wpM?g=( zQyYltW)q_Ph{m5DMpSKY971waFXL_Sf44h8)XcEw77E!Od8B=xqAu|Ih5V`ADcA8P zQF-tFF3=11xjr!^-Bd4^T(p0G6SU7P*inA0{DF9L={@4W^!YuSc($X-MWW96RL6<x z!AZYMZ#{bh@~?+OiSpO=QJ2}z0d_xMbH~n$9Yx%!N%JuumZrun^!uwG&c~C>_5v?n zmB+f-gLJXfF0b3?-o*MPI2T>ZfvE+J<MaF#wX6P*EPhp4#EZ<neUqO{F4FX}ae4QL zPlPiM7DJ!Yu-GkXH-CQ1u3c13t&G1f$%=*J3CD)Upq<Z3IybI+8XGSQ?fXdVYxCXI zpZERU*7ZNGV?USQ??+wWcb=rxu6Fa3L#}h}$M+@ppmaD_#r(WGrEs;oUdZ^0c|6Gp zyXtBWVP_p0ahc>!n!nEz)%6pPf!3;Y)yu`J&5KcYlHUX6|IERD!z1tI64dWs1OM?Y z0`caYx8D=tkFr~N-ujnGkMr&)<TDT4agBI=V{uyQ&&IcZOS~v~!1`}W@dV(zb;mv` zTX{|KbG4h&li^p@)!)|lH!7uY$<@UY$aDE?3&bDaxg2(Nj@fyNPZM8Le?6)h)~Wi0 z9V7knQ6l2r6o^3nv;NT|Nv=1}d`Wocr2k#wRjUT?h&t^jJ|elOISuuWW&as=;a74Z zE_jyNAE;dpPxXQ*|6-pHHK9x6iDyv{5w|KbM|<KOpRaaa`^6nE7jH_ZL_V0UonZ$P zcr=LQ&dMrh(7q%`9Q70bdEF(-y6Xo-d7sWUE~oi^BVPS=E)nflW3G6)cyV~%ZK7tj z^&^}3z+MMUDvAAu6<G`Wsl^ieo;WcL_7#gheWiYKa*>Bb^~7^nuQ}TS{@2A1!X7%s zJ=8nlT>^HK?VG`W{Lk(h{eC)Y^I&Ma^=r|OIM-2~8w~$*-xP=&F{B#oDt>Ad?nmQw z>jJ;1yy0iT&uR((o5o!cN6!84unx6kD(b#db|~VNJ5_LfA=)m-{LQM#n7`Sx8+DiU z^u@lUv)I353Hbo~gFFzw730j=1iPAW`yQ=)eGThkA8Pv1dU&4|m>>H+!!6=X{9@Dr zp1LvOO8DdrBt0hR*-4^m_2NT>bFTQ?xT&xQ*VVe(7VMwwUNPu%PTJ=~`RA|bXAb`s zLH*Rrg0Qp6`lc`OY(rbv+xgrujClUR-`2m|<5LP3FM~$e`tnm7;KaCTSf6_S;;5gi z-RXW4{*%XhBVNR!lBn;_FRf4?SZrpjU#$BZelydjVc%r~+aoSahmZu)<9Z(g{$%?H z*zYftU4!^%dAcCp<-#SwG(S<M3(o1}qf)2UF5bjx)OoQv6yvBLRwR->mcPjx%rEQ4 z!_-ez6d#Ef8~jke`5!$#Lq72m@<If}A#YsIA=>!p8;&^En+CxDYU57Wo8R7M^KWcH z<d<{%##z$CKG}0!MgHEnu9lnab5#856RcZQ@BEp@mlFc)ez9utC+cS^XN5gXa9SG| zb7CS0=lr$U=EbU3kBR5yi`sQnTl$`O-8CL{Nj%wQ<u5t%R?q$A6}7AO8!>-T<0j(T zJS%|uEN5TFbtIdg3+HCBogqG6F1&1%_7wG#2_5aax>iZ0Nza=sn4iuu7V)kdc7PsU z?k?(p+<VH(AAbu%|M3@X9Vjpu_I64ivi8VP={n}suw^*L3(JFe6bELbZt=>EaQ(yD z4gEmvY{m-MP5WQ5^=0gYB_ww?by!c7FUfn$k9g<db>hwA3y4d0+Bc<e@oL>Y<bx>o z_A9lE0+#0+vn3L*rY^uZVy}Ik!^8)kAh|w&=&+xQvf4|rP8~T8^X7%}+k7i=C5+mg z|0dlhDo%EUT!#LEd{_SeJ|{iqNkx1AGxeIyo0|TJBWGJU@`Nqyf^{dKd+e<CIY|2W zrt8R0wm9j!s{B**<3IbuzD~zRdr7~(9fEyV{W)wC@oesK*iWwAwjBJ*8?cKy?%?{u z^xkrY^sC9?SdSjqI<}^Z=e6ZxlJj(huM(A`|3&>!t3KU>p57%N6IEX}VBLKGFvN!l zZ*__Adh$oazbew}5ODg$DWcByd8os@vwe=5<*&I5_>@zzJ~RIU;=uIw!+vhc)H;BE zQ%XY*zc3l|cEa{x9JaX{{3Bl5?`r8P>7Nmvcl(C?HA&xDP$>hkPdTes!!Ozi^(7q3 zbS;v`cY=3ee4Vh&*6&u=my<mCyc(T21NG18UM+)m$@RoLSdZ+q$cOZZz$dYUXVvZZ zF4T#l=ZIGipS-1Zl`h>;qPkp)P?9^T%Y_mzYV^E7Jg=4m^OkSI?0Lhy3x4l&s{MuQ zESbI>_A%$?DcFaPX&eZBtJ6e6&-JsgqpGqL`vR}{5cZNelCIDBNn1C9R$#wlC96EA zaZT4EsBg|mdycJ+Y>4Yev9~Su57YXs_1DqEHtrvn#CY2K*8u7-p5M`+xrgqic`#q^ zo8a$_-buWAxdw3}lFt8E&F%YCV(pGN!s&na;yrV-@H)OfCF<6ELUKo^LmoPFHX~k5 z?-W>%NaG8?s{H%nq5s>24n%c_{GW)5Q^f;_nrV-0Tz@wZyxO#CnIE;cPJw(;jcefg zhp&x%iT(k_VHaop#c0B*2HRFb?ll4X3r`Voo8&UO>m0~e{-uaF{qi3nDtIR3g|lD@ z#?@_y;QB$-dk{tKPM>m{iK>D2eR1{uHq=R#b0+L-`cy&Q%9`7cdAV@%qZj-u<9i2E zKa=v-Hln)S9pr^>P(u?=OiFrBaaP)m)GnVExAkxS@IBxU_eI>wR|ilBo!pf`dB0xp zyBT{3`-|DL4)My>Xw)gEUjXW?6ISLe=@9{i{h^QjcMSaKyI+W!E6*^0T|Oi7N-S=O z@x|fZwvOuk*oRcF->!PO@a#~jb3|p8aflQ4TfzIpn;9n_l0H7WLoiX1=C7wD*S>k? z5*43Mz@BnJnJD7bKfdsbDiH#IIUVvNPFS71TdBWu#j&_j-V2B~aoPN+pZw#VLjNP{ z?vY&Id9w%dmwwlX@}FbEh&oB<rL#LVPY{mh%nSdU^3jW^T_4^aL2^@fC-T_IG7;<H zvLobbPKtxToj-`W?414M5%DVBgU8g5m1%<CtMrYoH;C77P6tst&$0x5;XU^o$h$Ry zeMO)@>Ya}I)!KXW!-s^IQ!1lBi?q)nCZ9{M4^=)z{nf0X1B7!@+PcQ$7Fa)(4zhZm ztcs;}-TC%M!pre#Lx`8V^;zQ8_}HbOe*LUpw|~Jr{`b7oo7bzUoel0BLezYD13Nfl zdr$VF{sm%TH@&dHE#mc%{;!BSCI5a;crmE!2cqit{>bO#^F0*%{wCq%$Mmp+8n`5g zaL%9tsI$)TUMGpynPZSQ;_6J)MbR$=^@G>WjD1UeX!?%yu!ecCzp+X6t`aXIUm;)B z)B%B{NA!4W<89N*aN>EZM$?Jv$^RiQ%#8l<kH~frb=E01+?VvIV@qLQzA&Q(zIjDI zqR#P_n6KDa!`ff9enNQX^Z29GF8=C{JmW2zXp)-&-@-_)YGt@W)ZE>Iy2W$dI7RL3 z@U^={RrB)ji%i=L@$3YgfL)zu_Prc=_8Q_#TrXkm^fvlF>C<uD5%26^xp&Z?7=`>* zGe%+m(L4m}XBB(-0zcsa{OCG21#y=AK9?9j3^?bhJ$GAW9=3(%B`YQR6J<NLUPOQP z4sl{${|!6y*I#UY?v8m$I6dLTPQtPOrXMF>oosZNczz=l^yoPoY`$JNg1Te8cLY<r z`e1**WjBu4>zX1-?>C$%3VZW<OMM8Z>#yHW)C6Sk2A`8*U3|j_*pU^zYvU`^=+@Ai z^nDgy^9Q^Bex*Vo4;~47s>UZCLC=daF+?4i=@wCb;Un@}PJfQN%;(JALUNPqkd2p0 zk3i+EYG=J%^8cNOaJKMa;>C_g_+OV!2%vr}@*3>PmrQ_u_FaLE(D(hzwV-Vt900EC zx=1e<TsQjp0a1RWGS<cG|F{_PX)h5^?0EX~gin4>Qpe`sPVMYi!~>F>3{gjjvbXC| zcl7687pR?=5wnS^VmlCTrdSZ>sZNbKLvqJ2b{q9m(<Jg=F4_P)%W+MtUvDghpT*Ky zR|#(hT{{7Mbcz*3_558vkRLn;xz=yt52f-wBDoI9f%wzg%3FIDdvFl=3?*#-WcsuT ze476b`4Rr|RV%L;xr%u1mk)J-MRqz)yt))(_5brjIPoH5+L@5At@6x^@U^=o5O2JT zBL7_Hv0=S(s2A+S4@cuWvFvQhwAzJZu~k11p8Kpg13f<XVGsRc)GOjy9WU$)GNQu^ zFT&kQ@s#8`WxdZt&GugVh^l83?e7bneBubF<MLp>qTfv5c(dj3uRiiG?9NmAqJE0Z ze>|i9f`>xC-kv%R`m%n;_i;t0)-j~dxm*GIopeL-U09jzNNVkpo7k9d)GqoizYIO! z9luXJpI0aV^3wMEUM5TbDB_(GQ!szlBV`2f?6=@$L}mWen70YGe}7;TUw-r>yx3;z zal>u6-{R$NJ|{VMy*NkxROO7wFZo|yTR$pvf`6Q{HNvRf***F-QC>6^#x+I1Kp($Y z9Q~5(hIqaV@hvkHvGe?E3hIt7+YE8U=3KZ0JvYvx-BcNE^Py~O8&6Xj?8SWE1WfUx z@e1yS-^Jy}!Ni*um4m2V|J?@hrvJ#~PdwjRMpL_!wUu2*{S1oas$B71B<ClaA+E*w zpQ1^wkJ)p>Wd8a$z#mUL8Tgr<Z2W}O-Us=Lnzr8Qd9VZ9CBf^Zo0K2vxsvlCQRljS zuS8t#1N$Vu2dYBzU!!(&I@MdEqPNEN9y=L&(Tn)N>WL&*zSUuGxw*_slAChxqDbz1 zjzHY%r?a5fdA8;#$#ss#@U!Ey%;w4Um#{B?E|*ffNd5dIQT8d|vX_gPANpP=>SQZ~ zeBj?@h8@M{f35!}+2`(^sy$&J`KYoV;YC1G<eQ$b3;UX=>lZ@u<o5+!=Ly?5z1$pr za<->h=I3hH)uv*9HM)=?UN!s`am}-)!TOwB#luL>qwV>pBHaPhOYLmEO>$QA7544q z>pIo(GVCum<U$?RA+O*!^|9X`FBjbTp(^rF=A47NDF@H_26=W9L;A$i;>Z(I;~n&f z+2ujasG+`uW7n5GBr3-gN+i7VY$5h7wRZ#j%PQQ*Iz_(o7}uFK5B_I?Z#3a`ld}iW zFGD@l2hk!P`-@yP1p9~%>=p-H()Z9*#}mi{<JIS+m#e>8{lpve*#gXq&AD=jc)86R zb}%ibqYm<UDYlRvK0M|KwVQhRY<&EY<|@g}tiFf?y{JV!YIl7%;yKBMPcOs|i=TCk z<nqnHQ$&sP#*Zi~mu3r5eNo&7e`YECtcUEJ;OCO_n0nWUifz9>L%UvM=R5S&JL1JZ zD`U}K-M-JR7Y@d{MCL89mv~>*+B>lU{3}kUMqKgi>yJ`@r)`z<)L$1VdV+Y~r&u85 zW4nzZDvr&<{G3v3J@G8X)p>p{q6daPBI-oGMt;k)SsoKFmZys#DjRhLRog?+Up%qr zyt@hp=A#>>+l~GuN+EA_XjQDsIq)yySx#Pg8hWz-i8`a-XS+{4FI(p(QFf#>@<}bv zX6G??sI}A9r2D7tEzS_m46ygT$?qqcMmgYD`S%&@$E@iTjGO%X23yw`{&b$%=K%PL z!MM&d8ShW=B7MJC0xwQfgngaAb4!vd|Lyl^JTW?*joXxUqKN0;UA{o=+Kflu>Ft#f zk1X9b!~x$qBpCgFEPveMug@T=zqCajvo{$KXHLNEK$45w35ZAW=+}$XPs@X-BjQyZ z*iG*X#J=KmN{{_Zci(R7X3{y{x_z2sq(?pbfIQF{`oaHBqp6rL3+V1m?X3BOS)||G z*>@b{6rA3I<fi$C^N>&X#q}~@dIxc1vR67w?fhn+*F+uv|27d$d}WwFPqP$u)@CK< zY3`SYoy~iDz0Nw9#klepdtSI|uppT97_TOZ^r)u>d951fu=9>C?N4&2(7zbh`R+&% z@utau1EAj1?-11!lHOZfT?*@9&sGd0IX`CK>*l$>8sHnm`Vdu-X|5BMHHuClDt2!4 z^>a~OJO3V{X8VsAR~@kDgqdA;QJ-{%CWwdR`xG;}GUAJ`ZD!{`e`O@}-VMNb`cWGj zfAKy$NbclNmM<D~n0Ws7Bl3`??T0$)^ec|_sYgOnyXrY~te=aDun%{Mnrb_SlAJAH zgt%gP7M>)zo|g~%is-id3HTRrn6I3d6o*m2JtVm(zwsqewLzuOF3MW|`UUcj_Pk{g zJT8!US)wWSKRqUXJMnsPjoV%>sus471s^a4e{a%-M%wGd#Vtcg&U!V(`b_i+*g+ME ziXpjZZND#|25taOeGEYSsu>$@QM>Bi{~%G>e8GAz7iCLp+xGP__`OUGnuGbuN>?#2 z5%c^U;hb`-?7AEMbcT58<g{^<A~)h(eOCwZ;dK5R^+*gWZ|7I<3HC{O<-j%?H~Cy3 zecjeGwy2TSA6D@j>DB)BJDSp`AnLO-H0Mo{Gcn%!J6e4uJ*-|&P1ICXwjK`}3V-T_ zlWl%n8r6u}m2db5>Mv)R7^1w_&u>UBwxy0Do*jN;<1cd<^2bpcelZQIU7&XJdzN*C z*C+n{KvZ6t20dzX((`9GH+&|X{_=|-=-aD7gcENoATCU`_o!3Ok|`TVZt^X~{7i9Q z*hf^1+<<<cOaM{#G4C~^{KQn`iBs^~BjTMOi@)_F`Q?yzMAfF{c3t_Z!%uSmZX1tT zdV8b2#wYYQ*_I%lv=e=h^q7!>n2*?S=qT~>-{G)>GdUgR!;9Fwlik}Q{zTQ0Xg8Nf zoguthw$NUO?T)^VadK4v&RIF}F13s6bvBV)j!N~8c=^6*IOJ<f-y}I(^>Q`w=E#e^ zXkXg(I@$xH!0X6BT%XBwzazd_d=}_8Px4~Dnme{0w!Dk$B{Ao%jmu$6Z$N+e+nq$! zzv+&VUfm)i>MAQ=!`gLgW$?OcaqHJl?=g-TSsrzOw^EolyVMx|c5bJ8OM29}kuONE zj_G_2`U~b*0=}sOyEp*{ZUFc9!Vt(e7QsHClD==KGyP`k&iBQ!K2!4%@XUMkeZuo< z^&Sxw&C}XCRs5GLq)&HAHJIdbYzM>>FVrJ~c(tk??9VEk#dV0jGs9k&F7E(4i(Y9l z9;??0_7Hv=<2g|+_mW<gHvn;AF6PGmBfmVxe9eM<xLy)xBX`j_Y~r1xM4ffshWa^` zk0Z`_ipMtJXNO_mR2BX}KB_LgPM}})_Q+dN=^Wb4%dp)fmo0<O66LwKFD89#A~VD% z-w*P$_otCu#$-m^vC}y)ujIdX%L<#ZZke)lIQ4VVkAVNohZ@+=*h+g&hxoM<>XNRw z1@*y6{D{19)_i(Q`t|qAt(}+I=W5K`vF9+4GjYf_HYMvf!l|It@sPh>kGdnLC!L$w zHb3Sq3Maz8rg=BSx#O)7AEtz|;|!a&kNUHDC0>#~Q`ml2%d}4Mka%6Gg&(!c!BzKz zZ&36eQD^73<0NN`!eRg9>u2ZWi%_&rpL&R>8qfoN76&__Ua{kc5T~yDkN|3zUD893 zs%)P-P{A|f(Jz0E06$l|?mi_NbZmLlSLghC%!}9bo=0-_;w9RpcVr~-eEe$UnW`5O z=SA%;QX~FF>|6Lr_DpzBIPqQY?L=i$Z^W%^{OKy;#a|6ke|W>kcAg={KapIPEV`4Z z?*9XxS8@i~?-%jBLy@QKMv-9B$BxyxN>pXpkN7g*Uw%UURJJTnNiKT6!QX><{spH= z?p#=aymDrh#&}MSa8SP2p7-k{PQ!fk;~j_x5pnqx>5;{DLoUaUx8sl7Vg2}K5!T_H z+=20(w)Pw{XL@n_ckb~K$P+g8@4+-at5+_T^r>cdo)Z-<?7nIK?695M`47dB4{Y@e z*i}y0f&E83>lR9QnPq^DlfaBm2`@etMc#>TMV?T*KK}b-qI~%_<bf(zeiiy9)ILMh zOg?+r%SD}lmlmJx?J44Ak9eCu9gA%wUj1O-JJ(x|UZ8%u#AoCUUr}@|wX@mw`3p5? zBkH7hx!d}`UM%9tS#cWq;e3|?c2UFf$DrSU1IS~ObK5rJb@7q2NWbX#au@Nk_1FW% zJ8MfVBWfO&gx$@B_oz?K(x$jCaZdNJbjAnxPhQK8{9>Q$8S2No_(nrthY?4J*K=o~ z-iiF)isUNv(G}3v_FNras}%Aj+0NqA9}lRXywnhRum7z5mUyR2-B;9)HJWf6`~drV zJbT;_&*8`ixxP}n_<Smn+SPzq_){OQ48Qa7`(vq{Z~OR>+C`hBzprP>gx|}Y&;_{e zk}+9roMfAe_))G04WKtyOItTKtb0Se^Efzxs2W%cdB$7b+)TVVRS<Pb9k~yC$Zd^c z{7ByC4*ve>4C{yS^v9)`2Md{kxRHgn+TYQB{w{*>{Ke%x=$E1$@S^^o*so-sAmo`N zMk3EuQTtq}SyUbKV{Zl~P(L|&%mXhMb*6`1f*!FMaj$aa#ov9MEcG!TS$X_bY8U1I zM*NvBO<+g!?hxWmRC<B<QJJgadQCs7g*@iGIQ*tMtwTJqT#Hbb*n}O{U+T_F%wykS z#GULv9Pwh#??nEnx?@9VeyZ#r)^Ahne$FR6g*}~ggJ2KUljC<yr>KwhL$NK0PjPsk zy)IbZ8T$3yWf(X4`?F53*bk)Ncz<0@)S0#gajdgcMf}Qxg|IH|Ukmm!X&N9eW#fVH zuj_gcJp1uCyPk<@P|sxekJkR3O1_1DXYYHWyz~%1qVif=%-{68gSx>Nbg=O`%YNrd z{@N4zP0!nQe=GYE@gm!;!+b=6pW!FH^}e-drnNTCzW#=N)H(1K`DXUSV0@j?7dTyY z3*y^3*beoVExTgl{6Ra!i8J?p9Ok#bIOZ>poeuFMyG-c^{bpA^)J=INT?E!s|K}q_ z+0JO|?+lZ_5U*1ngkMD44feVtPikw=n>#@D`a`!!ufAOO6H#&CGS<hp<bj=8_5bkv zgQ?^LyUFf(z7kHV*w3V&ulepBQRk<;_IK@s)8WLM1|z-@PSmsC?bUORB?5o671qUW zr9$2)-&C6jr=q=PQM(g&Y8(0;9)|kJmSuWPyzJw3ktlC70_&2mCc<AT=4aT`soxa- zkfjzPfBE)Iwk|A=MP1;X{*0#nPUF$YJN0az_4nyO@S<wd^IkMgy7l)l&R;jMFE~## z9fo{WKh$UbWdiJ|yV&zJS()=T4t7Pueols}(S+x#HzS|T@tT;A`dIE6$@Pyfw-a^z z>pb)$T*FcE;G<^mAga#BpbqIbcl?PL(?Ven_EP#0Ud+3Nx~fn2!1_eyjTZ@LCM<z} z*xM<He{<v)#ES@9iagL`9K;{56!4tz&Xq+r{<ao>M|#bbd3Q;!8jcAj%C2k-BRMPC z5dIdsbA2MY>v;tD+kCa(hfuleoh7+EuoL}F%Dz~SIFQc9^_8KRr@7z-|Ld;%w~}5b zy4ykM|Gqlxm;AkZv#|~KUw$D7_EXsv{ANaEe}I17hGG4@WaE3p>%_v(peIFJyDxRG z`_aoKH~)>Y`4*D(G5QTziM$pi=OK?Bx$6ex*>j^#s`>wXfS#?HFM-D0#`vbtPWaDs zs}DPx8Gj+)<-;6^W0UmUmrT<i=lb(n`(bypy3}hgnnx7Fa|NmygWY9)dwnjZ)`H!6 zgBzF+FL!t`jVqo^L|&<0FRdSE&x5@k-`{N<pZ3DK<PrNFJ8}5CCp3<Hdl&1JuY#}- z%i@DEZ~o_U``yif`C&i#>KW{<)9$eTFWV!W#?_aL*?nuwURzg>R(eTtb;Ca2C)@vV zg~oAyngBgKyr`XDsZ=)ZdOC5?Q!VBx;mp2Y;)&<eo+4ja2m8AQf0z0OwX?`?cy7_D zwGR6Uuj`9>s0H&7XX@;pZ`5C$N^_lP@^^65z}^^#HLi!cz&7W`JZ0Jo@VhfI8h+7} z##ujZ=Ex_0WexTt_2K~b89lsW0?k8A{E$Yws7|<r^=N0`Z5q#cQ}qB*8U7gh#rTi& ziC0$_Mp8c=^e6n_gja{1oz(vL{YRWUXXjNp1=gt&>~m-Gr*ZJJNgH*W`a4;MAs*Pa zX7`BaUq?VL_g@=9ygK0P3wf)P_x)(RUT+aEDyqXu@D;zF0G*f)apugKi21RqA()T) zG#zoFCJsQIF;6O?E+u~#Rc5U=kMui!@9g|rSH`}fGa9U4AASCg+D*DU$S*lQ4%ahm z)wdPsH)^eo)8oz3Y8Q?_&2IB+WZeL2XX`)RB`Rgf%b?@!_qEiaWqtfya?zrU^~3CE zHqHjFOCUKrVi3osH@EZ2mwzwG%@3jXNe|nWfOUvT7s5!cwEbOK96fc8+MVC#!p_1s z&qB0U>5Kd`BgdrGu69`@IErwxNKed9WG-v{woD^0)RT>2)NW2ci=h5GVk_#6N%$B2 z%;^%akJ(qv&d>aNfpBtUF2oa?`saJ%U9VjrKIHGE5C>*VBH~Yv%8xq2rrGBr<(Z6F z2Mg+ldc%%nh^7AK?gYez({3F6??eqkyy((<{JmW5dfijZQ?DL~d{ikbMPb~e>pHP8 z$790r8x@fU>gOof)hU_PpK!dC_cLlY<DNo4JD=(k$xYyB*iTR2dX0ECJ~$M(-b1{J z%BgFtT_STrA8Yst`6$oKeM@+qVZM!<`)S}0ak!}Ei`nPG)dc&UIMLG!dYne~9DH%I zH`XmK+3$eMQ+LPEcw)`RJJ8#>k+pY3jv&mVUA8BXkJ@&HC{I%y>vhsq+Dq-czzF!m zENYDYYDysHDROT_e<sgjy}a8U<e6A!-%m8I_duaPZy5G3Q>!BUu6&2VpL~`t{3VV* zvT<-%TD$&O74wm5JoX2b{fV{P&Q>32eyr!oVCbD$6LnWi?jKBYk#juysS8QxF?Ua6 z{T*IDgz)S`MbtAscBBvSYIey4>L(Z0`9@ULorAbgO)JCxD%gIfN`>tQj`{tDb;`i3 zh!5GMIr3I-TmF>vIXNa=Cz^Z?AzPo>=54yim?z8p?I?}o9Q4IJS;>hz39sKLo#)nn z?ni3p0T-;kxRvjzosGDGy5m&O@`BpM*&Fb$Q?l_Z@Vy(`b==*K`t0oL{h8#Zb;mI3 zFCKQmKB}+A!Tw^(^J64u$ErR6t&$P#X8y1DsGlrx74tP^Z!RHT%di)OQyaqIPrY~5 zC6Wt1eIxL>V=ohByLX=;sz*uGUv=at*2_ON!#*U!4`4m&d9IgUgi|xHPE)lw?h9D^ zLy)WW*<crydnw|S#V$Y`n)KIiVw^Vdr>VbaIvIIkij=nW-#WLb-HF(Qe&*&s@x<%i zrC>i9+7or0r@k9Q{aMm?_hc(`k$8PI5%Ix(+?GiFWc-!~px#q~mtiLnhtl{*0$;XI z1W{2d>H8U_`ePk>>Lt`yRrU@1VOlLm9Ll^ix1nEzJ<m~YTzD7ys~3fSePb$c;$ur2 zAMB-_Z`*yCKVN8{TQJl8VJEY88Ro|#`h#-swwS+jEDF3%xDrkJS@rYCGueB#&ELwA z)=s~_w(**}N-wOVY|RrySquA}DY5z{@{%RS2aq1ew_FIdJ4=2-J#a?VwQ)FR{v2wT zjcXu&c<~XZ2**!+Lq41SJrHO7zQTINnqe0AZ(-P3{IgF0Kj$&x*(_gkjd)$L<ayGo zCzM`Kyi?_;tHg^^&uko4T#Nm}Ia(L<R@<(IQ@iu7E9NEp-4CXIDz{^ZvbGvjlrD_? zcFYnRPrmm1GS2Ubh#Q#{&!W=&8yIiqSImdydjda*hr#f_)BiE{As+j~S<>$WeL@_v z&L!^=Z)(QBCaN#l-%-?=HdwdQbKiT?YmEInGCw>Y{rTSlb{6aN!%iyk)F;B}BN?$C zwbNeb=q$TzJvnp?^~H&weV)ciey+gjISYBE=Wj<|nt@5@!OokCyp#=_p^oUW6V{;L z?SMd{>gQNozsnjmuF<&s-DkwJY_J&X689&<4}7nEZp^uG$DeSfR6fj?FZF@HRI7in zPF7QQA-!hFLk-+39z;}BZ3MjD*9~zl4%b4wnt~rfsoi-nVgmJJg&6b*-)hJs)qjGW zSJuD$sa=%XbB^%(+Zt=vAr(=V_5IoK8*h@TC$-B1A(5aPi|(U-$<HzBPRq^^Z)OzI zM4ho`))LiY>mzRE?vrQzh!6I~yx7qR;nc3C=J6&f_Pjwp$jtR{{mp$!Bfgwty{$b{ z-NSrMP&dSzE<gJr^)mxP;eR=P4RE4jQ>=&AZgm5C>o$eooKruY@FRRgC+tu1mnAmt z-&U}7^1p8{sa?*wZtYj%FW5sh$bq`d^JPL_$St?76HceJ`7TO-z&<a2j=_9Xxwjvv zoh_*N*~>+epXV0?uCFJ#Q~ptE;i5b`=qd5?Mg`ObvEh3g7qJac=hf9ntY7`nJ&5$^ zF*i>V<^NQ<Nz}Bk&l8!%Qu9fVPXE-#;m-25-VU(u!Rr#W5x=tJd)S*#&hwu7i`@S_ zA}S~RggPwzyu+YpZ#~4NX*2#RaH;Lz@7W%ET_?-Dj)Z)yJ%3pbi@iwwT;H`o{_trx zt-lVwxkPd&_?srG4?e^=tYv$|2QT^$a6IrL{A6zaign3uL#%yQmazT~wBO?~)jmAN zxPunj_{tL&2)zw+qV72J9wJ}FqX5)LHY(%-;dOBHMMPzXmA0<UoQJx=+b+hqPLmqJ zq(>Afk9zJTJtre8bn>HqVr@UvLAgCE#^Xy)+jTzkf;~-%Mn?#z77amM3%&&V4!>mo zo}g-tzeW1lo7w?{V?9G*cXqvY6!bURnLt#3@<yE#Zz>@E#5~_P^m};<RNt;=^SOK_ zf0B#NSrdrL&R0<9<rVv#DW^zY*hh&I7)Sq-7r)1`^r0BX$$kNT(0#Y9qjCTDoVh%N zICPvy*u#`Kfjk#)AH$yfU_Y#vj}Ey+{p9GR_pajNPhlRL)*|lI7{|`*L>k<8nL@MR z7uWBY)}M<jWB$qYS-lTDLjBqKv<FGA+A{MFXwo?+Y;rTiTk>~sG|P;<;hV<5kIw7; z9|<ovFNh{;d|sknDgSk_FTZ1dKV<_OZ})Sxv%9O{KPPq4{n=6hd$5#2h$EA2m(BBp zfx)EDnZ7iJC~HzX8vUy$ox2^eYZA%z_0|4F#ga?NPkps-6mVaQ!7onuOzbDl!@6OF zlNCR2BFY!m@gp3cupIspCF{H=x&Hpl0kr44gLRrt9k5^Vam%kmF1}#CGT@kvkBsjz z4!^i)1+|-~87usV9(jj)%l{0rbt$eI>X|d_6xPT8>~j(L&$FP%WVh$_tBfTPFV3FB z=*N=3Be}N>{9=YAojbFp{bTe`)fm^a&hSd{G%m~5<v7Xpl@3_9sJ<I<t=evee}qYk z`I-ZT4REh*eNZiGeMSEPw{Mf&**ES3=!=$*NG=w1M!U`yY3(t#NF24B$?FjZDsxSn z&!PEjoOWytd#Thpo&dKX73^l3=S&12R^k;=cIzPOzPdXF@uGj3fOYAIUnBjfy+aq& zW&Tg}GQ#tE)3LAfx(87&M4K?gwH{vMIkk(U`!TLKQwerqOTPCZJ+AMeVE(T6AZ(tm zd2Q#@O~g>U)1)f=AZ~{3Aw6o0xleKvSSg-((LB2^QS&NqEa={xsJl*eiTrVDw!-{P z&<y0Uik!NX`m2J|Ar})HBHmcy_lRRXsXqK6$F@Y=vvR>97-!#L#2+hl4SHpbakw5Z zZ*y5cwv%%RCx@@vf_Y@I-=#D&=3qS{?p-L2%dXr%gZ9fU4-v0gAHG7oUR~rC=$qTf z6MiVoRpMo}>xYP{&24;$@@e+(wa&@(F~G0+?vfw%9~^J@pNl)-A91t|;?zu^hk7q7 zUcC(5jf&O|o9>_vs_HQ|pOSwUt#siU={0S>+yw107W3srs}3ig6%B_S^a2T-bK|mI zU#9OdzPVNNGU0T~O6bQ@w?f?Nr%jP(vOwZ7v_DG+J<0FUvzNo6k0nl@hxYw*kpD7A z7hgXbw_F}g)R|vx8d0&U+)bh?)*p6ZrH)Sp?z_COKY#q2@}l<YMGgSh{B;;n=l8|P z3%=+8>a{961b#5`2K>yw&BDB$T7$1sf4#Nadg{k#x9LNC^7jp$U%H_Vy1pN7<Dgeh z<bg_h9?9{|Z0qDn|0UF4?_GxdfaPCi<II04?9RT9M4qv?_Bn3d#y<C}mXCUle!056 zrg5E?<-ZVB#hPLt;bZN4VQK?IKDmDHdq8-0>6iP2lM`)zt8+)}KILEdG_^Y`b9fUK z%Thp}`L-|=^09ToLC4#_x3eux5O>Mnvyf>D!jJ68G}v7}yBO}}(qpC{L;Yh*60y(8 zUhig*9yw_Z;>;x0#P4U~bzjs^vt~8wgCj<rrvBpXb>tiWd>{T%Uza1_^_~l{)Xs|M ze+Yf+ZrOgJaiH95BG#>1oCTgA8UC7ZV%D<+>L;t8dFz#YzI3_YQj#hb^UBiXb9g<S zyVz`&J8n@5bpOBpIX2rJx7Y)Y&vnNw@qn8(&mFha11@I1JMKRZxONNOamzg5^dfiM zau2u?OWbiQJmAi)bH}apfGfAb9k<E@Zl!X^t@eOpo7{10JmCJ>?2cRO0T;T(9k<Q{ zuG%(t+<Ff<wcQ=J!2>S+PIsL0fE&Ea9k<Z~?$&O1+$Ik=vDY29*#mCJK6l&}54bGe z?zpWUaH9{n<F<LgnS<`Q?H+LTecW+7Jm9<!yW@6xz~wyZj@#t{=Nxm#?e>6sdfXki z#{;g}Nq5{{54dBe+;RIn;P`2G+<p(ZS$^&~Zx6T_?T$O(0oTso9e2<JP6xQ-4tc<p z2y(~yc)%?RcE=s|fctRP9e2b7PKLPSj(WhIJMWG=<^fmkqC4)m2i(d_?zj^kaO{dZ z?xY9YKcVipQyy@kSKV>G9&pvd+;OKp;M8?@oSz3=`kU@J?EyD9+#Pqu1Mb!>cbvZm zoQQD81$e;ixZ{os^nlB9&m9-!0XI6*9T)5YXYRY>&U(Prk8;PI^ML!mE@=LrAlU-) z_Lnfaj#Q1$;l7L)Uw)r>{>vTQU+OAz(9R~lc}a5JXb0|BRN5e1kD3nl+yb7>o`c1* zKRFIu(E+Q8ic9~U2d}<If7!SeuCJXc`*8mu<6b}VbK%(SU{Eo51FpyQmpXSzuETTh zCo0ml#q~FxOHKM%{Q<b&;4{BP5U-|J#&xwgviBbGPSSgGta7pI)Zf|J-4F5w{V={U zF}N=@_0nFTb~SMM4WcX|&tTx+H^=>ge$p8C6{>ft6C~$Pi`e_Ys*fUwH*c0;TwQ)| z5c)m15f8b%^4`nU?#vj5-~UwOPQE19)f+w`xg0d(8Bvk7sl6Xq5Mkfbd0${3<R3;q zAv~)!0ME&>5|uE2HOzj0PKB%sAe@d(|B)zvmBtX>>ADWjyUF>rHW9D3R)pQ;mwlg! z*Ng0PDC(Ea3)P!o3NhqB@K0bZ#N>}A?-!MxbvY2OGZRBiiwK#9-zo!R+o6#S#& zs^I=dw6wpUD(`Rcgf~$M_ILbgt#SV%O6S9Up6T;^4Yl)BEnpwhOW=OpY#509ULCUZ zBDJdng|7O!sBHA*D)1-X;`c<p@-*hdGYD(H%xyvCnmIEFCqD$kFKSh1_|^5?63!np zm0CU{ed><|anLvB*S$o|y?^ohj+$8IEb;o!7B>D?HOBn)p?~djiqr3gQ@b;0nYCN& ztr+6PsBXA#6H%XTfUjWZ&+bmL_wn8P+55r_opIkP@85-e_2r<~el-5SJ#9R$AAN~< z`En@oP&(&eH}>rf{3A!Uf`82c`yQvd+XMbGsj6CgKOO@A%Idd6NRRrQ1NW7#*PpCC zw%<fNvy)k(Xr8)yoQ>~Kt?d0dD`owk^nRkgaSeWzzw^h07kx6tK<|l0HjjLVhZE25 z9Y%hb64Q`}x?iSagy(zuG2x;t=ZFi$n}9&bjR?TH^}6ivuXB{a&LZTi#d+2LMtbE> zuQ8r^oD28iEK^84>2Zz^c}wkPb(xgHMa5+M`>3P3A}(ajcV7u7zdS^KvlC0b39n~( z#S&%n>U^Shws8vlD!YtA9E#NTy&YMi?Hj`J<w<`RoYJ~3`d>JUI%rN_wt3cOwvDg6 z_3%4~oYfrmSNF=kLjS9|ffGKRkJ5Pj@9G$bXUT5sMxRvav`a3->fm<|cGv3@^^+-! zydpd+l?l9Pnk9<lYLvCNo?O%Vt9Fe*;BQoXPgL~IV)KZNvHAO95auNw-9AJ5bgLnu zMEUWuchPS{?Ni|2KeT_JSicVa)tjQ=b=ySL4->o-bw=L%`#$;&4_-q3*u6YHM4j|Y z@ViFx@7v}|;fEwwtBxSAMC5&2kC#+~zuC)3;AM?0kc-E!fak$2AUE9_S%3dAYaQv~ z-=+1&c>ZY+w~D_=#JE{}ef(VQI^z}OwJEs<>tZ}3{N&`~k<`xCWkVi`8&j-Z4%znu z#f~j8&@(d;^@HyjA4+&$=J_>}a}gZ`I_CFzL|JsN>qKR`j~j`aP1`~t?`Y4lGn1wx zzm0ft+K=#kTcF<aFF)COHuoa*=^JbpwL81)_tjLzitvx<aTE4-N(|XRdYv>+U_Uu| z={4vJEQkJbSc1))h=sm{lev1|rgrtI4*bHW4LeS}I9YcGwX={w%tPi6I1GOFVAxlz z8hDR*9epJd^3;FWc<R*q0P#FL4)Lo7p1eZ5Q}5<}KcWpc_!BQn=0n|cE<c@1eDZr4 z?A2G;k(COckA9`wYU-zae?-2>ram@bqV2i4PLw^TUN72@I^z6s`YZJ_h5vxRWY!)y z*G{L}nL)VZvi#^b7_U|#)Hh!KEAmH{A991_tiUnYOS09-M?P*U?903L!+M?G8#8Lc z?QV<rG@P-qF*H9OJOFm&BTgC8Ba1u;0bO9vsp7pOk$1XNH`E#DW>-9a&W;BK5>C9b z=hho%681T{zX;B2RxwBMoU58s8v2|S_8fLKyZ<E`*IcmYyXyv5U~gyRLCl9e=y`zJ zofk6@-#Sg#cQg*alnVQxnjVaEK%IGau)oO2g^vl(NBN`fiq1#jFZSV%-3Nxg`H%YR zK@*TCPWiN`!>njfD&dl|PS+C9-aG<vB6F_2OT5_E3URIu*uMwq)kQ~<T-AIO@8_bj zMcuDNxnI&bY<cYWH$_&7I;J+RL%nvI=7Im&nNQXZIcM4YNzIXOvJr>f)#M3JNWZE2 z*Jq+4b=(Ki&r;lfNW5CV4fT-EZ5<2w<}Le(@&W0wkFXM_v0kxY`AgtS+xIVd+ugwH zCn;fP({BUvLrm?1dZBavhH+(?qITSJ?O|^zV_%Yf-MSOzXO5MEot<6Xq0c$l0`ctR zIQN0Z)4Mv}BFcV9h3h%C$QyOvWX$k}^oZQQ?WT6~Wnm)m^5Z+qSNb+ae>HFb?8R4B zc}MN+!+FFzANtg;Z_CP4)L(RDH>h3Zn;A#EzA+H{g=u5|PQq&V!LKrP_#wiHd<^R{ znSXmiJg@v^15uehCWiXU3}aq^-t39`;QZbOal$(;NBr^Bj?I%}9ifLs906XfJc&3E ziFvS}npf6NJo`7i7sTF$<2+t7ywfw%Z${<C{w@mJ_Y0EGrRUoVexY{9M5FGR#z*e? zxp<M`%LS6_22og_{+RSV%Xy1Fp#9qTwA$6q2H5XRIP(TQB|OjV<4u$W<-<Ci(e@kz zeY}jlE@?9w^W&>J*!9on38ase${t75SySvS^%uVtM!P=W;0?)n`SQ<6&QlG9-*rsw zHQ@V4qi*Tz(Z|5+-msfYJa(P>v4){HAYbv-UdO&(6HmP9|J_GwcYbLOdpaem!%jTU z<1gs9t2eG!M4f!7yL#OVJC7L|kq=JIHW7pqY1*J3iNyJcD`f&sl72qd#<BDD3+5}n z^@SZp%Xr);=+Etuk1|_Ro39HxXzHg%#2zBbzWX&2dVY*Zt%)xej`^Bq|LpX0v1a)> z)J^mAUd+dAevbHMk&Ql5Ke_85@<5MEXY*#`W}8P}N}r_ua_0xcqsq|Q#^rZ2{YdV- zEDAsIPBzcQp;)Wu>2}m}XYx;|`%W31R=DtbWXF_5P0rHD2a)#%;z^Bde~$F&@9lHJ z;?ZvSg+&yA9eAZS4=~SD3$RbJffE-IuZy0?JlL1xShrKVx2>}&ZTyHAaj>6L%I2-^ zI01Q)d@hhP?8!PBm))uQmGl{P687brQ#>NM8ow=+s2(#k3hgKFAg)xIwD6Oxw$R4M z50ws6JF7Nn72(A%8KBp>+50{5e1Uy$Nk#pE>nE{j%5}m!%a?7Wc9vPAPKX{muaI0s zx7|u|IqWX#7Z1*T8u*t%h(CFs-v%ylJK`w0Za5d_+I?-|1B|PD?!x}!PNh)bpY?)1 zvGOSDF$+Aqj^wg^`|U(cNLHISwJPocK1(CSu^9Xc^-u5IoLabWV#K1)euQt<82U|> z-(i34ofY*+oVD-CvE40Dmsy$DS4p4#<THZ$@n$=25!LHw_!E@}1>#e;D~J8ZtjvUX za9Y>*p?>m*A91~))5MP^yt>`)9?4b8{NY5+t(JF*vR4T=A^&(Ac=LHZ>WsPc271_k zO}(jIe=ZyD=b|dt8rYTRY=gX)we30iyiYw}!pW)g5odCmeP1B?IULrrkezR*s+XZ} zbTQ;7Z?|<e@oH76Frr*#hg}s5Mn3TmyWn><^hBs1;c}PNMET-RcYxoz4{_yu+7m=_ zXXGp!S1HTG9!mLdC7g-813R1G3y||K`H>$^$1?Y+pSfT69#OIW-6g^&p9`cL1zLaQ zU5M)vz2APHOBXM&4E??@W%un&qkq({ek{`7|MTgO5=f8Ja?dT$c2NO@7d~ABiSooY zh!<VJD70t2jq{FK&ZR#HSG$@s!(L~7x$vIa<*J`CU$fxo6zZ=YL@yvY=f`^z?+ofV zgn0d?KjPdO(CH-cZ0rl<r}9~4@7KTnWbaFpuItpkNr-#nwJV2q!R1hyhNx+h8*wkY zeR~2ub%q8Km8VN0UYyP|kNCNG{XWN8w2wM-o_JY!_eJ7WzX#}N7G$&bSsR0KoPXz_ zKJqu$zX0DW0O!WA72d!(qf&pQ{=C+#qeSKLw77qeADW<^h$010cbt#*JqNX-V+7%J zsbYK4Z)MqaptX~}r~a+}F+W$kcx3g<zI9`$T@D(x6ZCS%S7;xZ5_Q^Hx(0reS9%;G zxtW~x8QRYcL)@E5J#5@p-G;hvT5NkndiZN@^<HZmK)mW!`6=~tuGsgt#E_qm*P?rG ztb_eI7S}(rO*Z7EIMFSd@bb^&h&TDp{!Zq!c#k|`N%5>NlnNmntC;>VjU(ok!8j`A z<wWq~wxM3?bKMZn>`Wi)uYI{7=UIzCp#EagCHTv!sR~m+XV6hYawk`M<heMz`3&)< zLnGTS%R%I)Oz%I1@FsODyWUj|a35o4c0|00ri)MyWsUW*gp<?nA-_aSBJzM;RnV_j zM8ePJ{94FGNK>3E&hN}gDO~-SuYF$798QJ)GGp*Znvd`=4f{E{#W~Wi+YiThYUy7# z&rXJ{z_^2oo+Z4gls}%RGyNR$K>k{M3$>eEzPMj9{^fBW<D5!?eK`61S!!KaI^n{J z=YhDMGP6FS9+}ZKZje4*V&7e&vR*0J*QA{Ve>fNJU50$iZ98swe%Qe|e+Pcndp001 z<nf2s2<J2(gZjqqtVbMk{ph8aOU~;E>?7*;6u8dhJpxf5<m3Hsp<iBmO;il2_>k~A z<I88D>m~-1oR9Fe_4M3v#F^93?yI^{Hta`cr+t4$|L_oYmraJ_I+wk<4XPVYvi3VW z1M%q8jJNyR>0yXdlh_vP<edvVr}6ZQx<`pRo2q=Kd8p&X?EPH7%(z|`o%<qA_0Ygi zgj2J>q8=$z81+bfe;e!3a~cFwf42PkWzatLVRt$D@KNIV!1i0Izb-h!mnc852z5mc zu8aDiZ#KU~IF-BFA)+j*(p#cV!cTTR+Xf+j`KOD>d-i&0Jhkh6W$blk#R|9|XEzsr zBe}VobbopN>^VOdFTRiR0lu#HZsK*|h)G0M<Skq8rsaa)`MS4uKH2KRpQ=j*tWSBT z&!k;={$SN-^!ukS{B8=|wRz$@IEduQ@6G9qF^`Bhv6tXyQFULCmy35=<Ou`r!bH3N z!lnNM?!YfNf6I)|3Onl+cWwjs8@o!BUn&Iu%e3o}-^te-GR~eG%Di79j%B$rk%ZT) zyb(vbbY|?oa&v%<ulz$%7gf2!$OC=457x_XuAPGMK0QD`S%3ajFPeXz`cEK#vTg_Q z{M_01pbuxl&-z7uTz9Bh9UQ{3G+l9h!Uw*EeVmA;){d<T0mn1h_rO{4iixC0)*J__ zR<DBJ<bN$w3YT1sTX+ZKl(+8>>AqQzZ{m-p(U8xny^+S#t$SY}-kINY738IJq0Wd} zZxDZcRaHBmyYH|bz4AHsA-(juop;u;52&9SSG6JZeXWjqXr^aJeu!cBK=nxPWoYm8 z*A1dP^p(|{blxMI*&u@CvcNBhQ$426VJ{bNUKI=_Dq0TRK<&=PLf0S<_qsw<PTvRn z@@08pKj}3SaVoMe0X3^mVSViF5af}H`D)|$&#mW4pJeZmSLW3(h$~%b7xGZm*?$r3 zWmg=eaoERYyTETKw2gS(J=K4pe;tQ@wSB#&cE>BPjoT3~5odZtNgtB46PNr6Z~i~_ zzWTeX<9UB^cek=oibJ753lzwrMT$E`mKG>boZ^Kp?(W*f2^t7)S==oO!InS-CxMVa zkZ<PM<b6)g=j1>5{*pN}`^@a_?9A+a-Q2tP)l%$ZHuat(kaw>JeRK4q^Y_wQ7YQe? z)jmj6G>HLaWjs$3&$=wex~cDvxN&7$JeBMup4-NcH@-kPoq57-lE>F;Tz5!s_q?!O zcJ2Y%D;7ZgF+Y@re|eEi@Pm$B`jGVOi!ON$>GzMpeQj~F_a7uzr5gu=zKUK*)U<uS z#v`8EfSee&_<8OL;`zmgZ-|OH?zwGoJPh9p(=(n$0iUM{_9b<A`6eII5BXy+QD&R% zrgmBI0py~|oRcJ1N7@9D-2DE_9Pp(QzN0wicr3}8*UCI1p75Oe-F2kbBTG0ru@>@C z>`ZZraD4Zj2%@T328`E!r&~jRxCiR06d4ThvhCixKJir4ioH&}>3{4X@&EfSYNvBS z#OovDKY}hh{Q>mCiEY4b9r%o>9dq`H2hl9q5ihKLBh1TGcpM0M!v>Zps}k+<{I_V- zQyG_i6v@TtiwAt-srIYBhp5Oi@+isG(S6SD-_I_S+>|>5ec_+p#nYOLn+YdY&qY6a z&G0bjXUlSi<k~wnA-=M2B%b{%wgEpZJ>thqJ%qeguht>IY|L42(r3^1qOP*@UZ{h1 zrMpkVzqUJ0`m#gQbA(fw&x5k>TOm*Nq*HDki~a$>>%FUdf%i&*b?0G&ZV|6a-F-m% zeBoxy+dRyNxR=E)x;(FT?J>3ML_h!bS19o^%UFy{6u5+S5i=O%qSvO!WLNk4aD=Fw zH5&162E0SNKIp!i%Wr-<L+$26USG1O^6Z7b?5<CtBp2J=b(Q>c>M-J2kpia)XTF>V z)fvY;BA%b=@Q~UqTNws=HsvXjtBL7-h&Q+DTqCNF|Ks-k6`!&GDrdqu@e@LC5?;Q2 z1v&3D=sfYJ%mVn$jCvbEJnP}U%O!h89wvKg)I6-4==dvm<2w@dRiqe({zT-&VA50J zD-fSDLs8f<<u)HBx$NrBnY348W)L4=pRj(3-?LDSs-XVb?C-J8BH()$?+r(~eXwb< zM>G!ePFy7_BKDmkD!=TxP4<NR`w&s?_t{-<U3KT3@s{qqM?S$jj@nI_`<-P<Zgugn zbtvLQ<*SQ07QR^!?{;(F=Y-e)Tzn1t{pP{X=I45dH<r5bKJ=G;(OZvroUK+5abOy5 zenvd6Ul{cy@p~3>V>!f`s@c!g!%yGg_lI3v$@%lUa>xhyVf7iZYumeX_syGBv1Bjt zTunZ23F1e;nf#V;@>plYnH*LY>nD1&#y%nAewYP2?-pMqs@~T0BdYIL!MclFd9hx6 z@Fe(IW=i>l+C{IXSU2(M7e5cuJI>A#<>sr)+b6k^AMDw8Zd|9__eZ4Xp=iRf3;k{b zpDP9Yp;j=&o4L_wKgng?>Zgh7MWcg3=U>@NR6Q@_`Z@b<4{)E|Iqu@xoE<*#?RKF* z;+f}e=?}c=3jgu&dTW7ScV`vhRL4PXzN_4G>UK-$eQIZ?qcJYINT5GkqR1n{OV2e| ziHg76dGuz&u*rlsd(&e*j9*%pukS0u&xzmpl_h@(B)!D<$4%49+hHf+{<99ti}{JF zv#?JYk4VgqWh``uaQa@iXP~XeV}9!GFqglFz6~Hb8{A?oXrma!x$zsZ8~C`&&c6$L zMS8@;c;z&RH_`a`KH}|R_nlL|stDFwt&hO<xNTAy`;|Ri;xOSvhLRhBAJNd&mn-cK z`ozoQKgj3uq1Whb#OtaVQSbQIkH-lAzjFvzzqm#1c4FZzkdGM_K$L%)@qwthJt&H( zom~g}p6WmBln=Fgh1@}V&4!q#SoMn+@nXTUWz;S=ZA5(i?|Va)$KNG6`#Yy6+Eeb> zM|iVbBhC}gUt)U)!Je$yYALnb7V9?>-gM57byWFQp<mH0J@V3K@AniqarF#Q(L9eE zXTo{uZ1&HWNMDIfST9lgk=s{3nq9yjsfT#BKBM7Jb|Ib1!#kPX_%D>XKsZ*cFmQ?I z9?NQ_mXO@;K6Mm!KL3RH5_M9C`w)JJJ1;Zw{TH6W6LBM12yiy#P>jdu-Kf9%!2Gjh zhc6xI{JXACE#mdM7mz1@uT%c#o<oxVc3n&T=z_N{6HYc5{+g)xJOKV+8v_qeJNvY_ zAJN3~m-vVNh-1}t@@JCEXRWa=`p@#NUhZ}Gfpth__Z_o`A)t2RA8AZHUe#%W`eL4C zLENZf*B?{A?CQ1qu-7$<i@QTr;5X}^3HQzP)N3(lf8c}bFT4K67vjaVeekzRJ1ds# z$gY8ph^j_o-cdUX%z6iW&JL*0vW<97yse!M?e^Eg`0l&?cN4DX?1ygn9xPiu5c`Ch zJ<)xC_KY9uAY1AF&m-Dy-%s}C?sRX6>VnS?5@pZwVIQ(>KA}z-pX>0CYH;C`>(|r$ zE`L+n`6KTM_x;)Vqdvk;SRI@<r_&EV342dUM3Y|p|4m(;c-ZwW_{OiIsGXm5&zs2g zIb0o>atz~%e}55vHB+aZAl(11pNFPIzKC6q?>YV5{$x)TSO>rJAIl*x)S=%H7ox7l z_(jB{D}=Y*{Pz>y_?Po0UQLWXOH@v2iS;rpt3UCq#L3%)lgn1SJbU-@2+75`VA$b) z)fQ5_TJXV}sQD-1{r4gRHh}*<0{NtC|AD%vy7#_D`ue|mF8{vdJWsqFJPYxzPcK0{ z$=WJ_^u?9d7pPq=^nXD-%b5f7;F+Fao~G~pMI_fh{D6IqT_}$FZ~iQbbv1MSZo!V{ z@7H1H*In2z<4-L^Jn4^F9#Xp;_Am0)tZ=`BWrN1BuZlGeAw5~s192mdbUY4x&jtG+ zzdFm0sK^?4mE^q96|A?8814N2%{@!)eD-zZp^9jGjQIG2O@NcrvK&HtTw{!b1?D|O zc1-;3UZVDBYcFcIKdi?(iRne%ykB&Jzj@83!GzOs-(a0Yok{0_PwC#*H8nONE^P4O z^(1FeGqH|3b5G1m56$TE(=RvtBvq@mz~yuI+r&RNrjq@{_iYo;|CbdK-VdLX`Wf0^ z6?soo>-RyVuNU{fM7&{#j)Kn?f^}gb?wk(uY$@s#n=%07kqa;T5MG94Lp-angNSe2 zAr<_f%NN>2?V{->P4?J(b&)6^HZg#x89DA6+VeO+i@P~cS7n-)Zr&q1VZRd{R$`v| z@KVI3tkDL3O?*#Zj#|ALcE0uhk0?*wb2m}B>Cr)-c&ZMU$9T=#x9~Tg=#4y)(+j#d zU9>xpaC&MPPtr4a@?gK>!GVZ7bAE=4r=lfp5Kcx;cl$v1i)RV1U$k@a-?X3)wHuk{ z3~;mlcuDQD&4ehTw%N_|L|O48PVfA`vx(QG58%2<jBs&bE1WsyLpaZZorvl|!^42< z@4llW3*5%~Sg%cIsa+NFcYf+pbq(;D-FH&$hDjK|j&RTW$%tXDPL%T5NA~#Mxho0J z8@+fyR6gl_iKwWp_k!-bcEp4D6}6E!YF&UKxf=Nfd0;Xvn?*c3>g!858S?lEQ4{np z{HY>3YvOfp_x(dQ?Cw8=S4*EiCK~@;1o(*^Ocw#Y0U1Jx%A)SOW%|QX^e@8~pbqip zL(foq;&-ccNQ-ddb<uuqJigx0XDu(o9`pSNdBz{_zUdQ>vu`gWjzo(xk4cXQe7r)` z+{uXbGjA@raUcEJ?eB%RV4ONS!%p<Gt-TlY&MrV*VRNh9^NH7&4W~pAwSKkz!1r7< z5qzJ+2SJzRb$K6}0eHdJ!!P`gIK+c_F={>Z65dbLxBo<bh@ajcC%HZ}dmB+!@XRZZ zcp`(!VxIQ%TSGh>Z&2UNLXX?TC!X(Ni~67*tDvEap+9>r_Fo+~?+xMf`98>R_03I} zkInmTBAngR5P2ci+{So$>RgzYowpD1&4+9{P5Nf&$47)0-*!ZO)bEyIedM@Q&VQAA zAAr5zCl3Yf*8_FY{N4io(9ym-$d3M+2IG(wFCiY(4R;=~4ZerE$eNr{gfj~cg6H2~ z#XcryWr965@G9zx{qFi^>PKa0xd#1}aQ7eB09P;A>8a39JSSFf9D{XGzuXUm{citE zfL<T>J4;L*wvFVx!E&q<|HplgOr5B@oNzkvyH0~EBA;crJ72_p`^#x+7weZGPE^ZN zpt4!hQ)Exy3U_gQ<K_**$)YhQNv<Zpcul-n5`+5B8~+X7?mZAma=X)=k1J}l#dVBG zed#^P_1-hlq|bvd-6CFyd~b<oO&Z-Gs+VOzJ=0YxVLkY=NzgYH<~o1fY4d?_D$D?9 z%hbR=s4k{OT#IMLLD`NM@ROZ<2l1yyl*E3`>aOsnetAsZt7J#yZI@caQyW*=J#R63 zKd$3g?mH<-&Ih!81l%U~|2v&7H~e9myZBLMSL1raraq5+v}ZjY5Z-#-L_Oe(KBIpz zYy#p>A8rDBa`<e-G5@~FEyD9LyD%@&xFP<}q{iezKep$WyVNch=SCjb(yu=I#Pd2+ zZTQbV_yGT#<(GU3$J+R!zM8*>AwKz?=B|GC=z{wkywDElsS;f=E}6q3u6g2n&1-^h zl6^UO&LOhL_xIdRyn1*J>&qLrhdmxv9{;D)C3b%%oc`GJ9#J*W>k07lTU+quryd~6 zQvEuIsNDGb6{7mWZ!W$rIeR8|N#wol9*sI;XL@0rtVIXdwUN2s_>lfQ^^Pc?e&rq6 zu|<A3M^ybj#P$2@_uIkO|B5(fB^n|Qc!t-AA3LWn_M^n_l$oV5s1I^l@ZV&YHQR!5 zi}RIV5wBAZ!oHaJT_={U*-f&~{3|#={W%+cQ9q|a-BFRhz^|&JFRmAO+y018_TP-# zuz#wI7wOv`wcrQQsuad2?-qx?t#=FYAj_wJPdMJQAM!>HpAO!P8HD+(3*L*UT~y8$ zNtE6A`@T;+(Y}LSTqJzAT6vuJC%K$d2ICf+1GW;+4^}j!r_bGS<DR(E)#I~6(T|F2 z8%a2G<~O&WckC2Qyhy#mmnbW?3VyN`+Fu|$HpONG{JdcYiRZIF&nNzW_xa7IO(YlV z2lx}!W8Hf;a?=&~MVE5tIC60q{z^RmUxyDty=5;~-XT3x@F?ad#;mzZ_D!nEE|2Cs zKwXuWLoq(Px-aHwVl!YocGp4Z%gn}`^!V9Bn6Joo)5UY>1nkQ^<m@u^vpKu#r{rp9 z{}OlgW_wP=87q7zkZ`Pj2l&yJ`EwNUJdHtI%Uz-Hx9RsE>anWQ9QE3q*}9c*LRehC zvTxOSAL4s-hhO-#W|#+?{PYCj)S*T2k4lJV-m4DgCrr_^q^G8rbmQ3h-FnzLvowhG z^k2oWUhKOe=!gGgv7Wk?d;W;8@CMFSx&VE%G2D;z_0;rOSN5Xod)OKHJ>tzi_6Idz z$GN=9y9VRnmA^fVeyi3+9GF3)_Y-fPyYE}Di={S_9aG+&uf&7TEd-zKCg#gdlwM1` z{Lu^}J(bZt_s*9cI7htw<?%kE?9%iLMCG_=2R!1bo>6in@oH#m%+C(mg?tke#|4pG zk8OGsxHPR?+<I>dCAmpiGK%E#_BO1i+8u>{bkLYZ&@1Hs1nmP3V_ZCKd8|JhRcbNG z&CpYrw-{ah8S(bWCd8{~b`SMdRSAnCJ1R161yS+R|32YF4+j6Jc~zV}eF||TGWkbS zJDYjHjlcVtPrw)H^OUH~k`ntmiyh_SaANC2J|yor2=S{jt%4uT(NS+muIDwx^K86W zj%UQH=k9zSHSIRm)f{W(u17Wxz`TvmmIs6r|L#H^wO`+EBc5N$ih0`3SJAI|eg<*L zW1nF^vMmQ7zV)&@?>*x2Z0dc~2~+jjL()%tzD^X#g1ECMM#hnxW$YVHRBw*iNYtD^ zcMbGac^?nrZ?rr`d}7@&Rr^0CxhgXJ0a0;x>2TmqK72$tzNva3=w0`F!QS%mrgrN+ zb1zZeaO@ePtj5--gp=F$VEy@(GG4@+x|{Zbww-sJaHcZfL%c095Z5C%N5_4T{}$Vx z<Z@nst0Nl<zazQ2cxNH--8W&LVr-=_;JACfMJ+sR2&ex!2tVq5d64h?@09SbY*_>K z&HlOt{%6J3yLxxD5!PS!`_aOFv0K<@*n$n{U*%c*lI*IcSFwJo<679YJqt#XT&5X- z{l)BWiT%_p`r{GFP5kG0$)5hXAo3&e{C^uW8SBDRJd7rsh^ZApIPqumhs4{JzNlmJ zPD57*nkziFBfnh6b%kg*5pw-oF~niwIk7x4JN#{nmU~b3*qgqv&tGnJ-*sp)49};S zAKHgfyIr^(;}@OZV}0e*0?2Ps;L1lD2V1Zoe%G1neI~p*SvP>>{Lwh@yy5q!i5HC~ ztOtI26>q}HcAXKY{CVd8z!#bu0bI*vh%dIS#x0WTxvid)oR4bqmUx@K0qm>VTSG{$ zeBQwytYsyvgIS)|)qyMH!w4^`)qx-QoP@ks6ovVVx1;e~i}JXDdF#*&y9lpV1zsYm zb5si_`*!YmS1%S#$NGx0(;}(e^jZ!7m^K@O3CFih{7Q29t~l~VY#D(#5dCv*q;_@u z<{P5cbHM?^iOiKTPkyb7Kk@wBoe$Km^OQIUx@j@$g7B-2`<tB2$8%0*{|eL}(YLg- zpQgk|(pQUTLoWRyFkcxl3-wKmy#oKqf@k-jpRAt|clJa5J=BlcA)<+j;X6K2J3D+I ze&*j7e@uL0eHPtLy1Y4f5%I6L^??7y?pm(COi4JW>ZyDGP_<q8lJx)gyy&&!?zyKM z5AKm%4)_82Bz{`8-6Nj2KOB!CxozU-u5V^<eGR_T*b78iOZObUnYl8Sc-=D?{o6Ee zkjFAI0CrjDYKSZOD!|44t_i5S_S2Yq9%SeHQL#kzrm?8MB6K?9n!Rw}jS)N7;yH99 z3n9Mwc=x=p@;~A1{qP*Wqiu%%U&xLrALrt;-gES0I+S&|ukJZfzBUWyrC*fCyx9B5 zThMEm2Jy!Zy*Wd?X!ze<AF_A0&knTbJ@ABhc77Fp52>2<Ka*TGoZ;d+Tc7IGZVPQj zJe%?w{*Y_kIo0-E<CTPGHJe-~stQayMtGj(7nlE&K4aeI@sn#LH}$W>FLuHn_|bZu zc5%G^6!KD+Eb7){>_o&p&;1|#X`*AX{<3@r<ejSI&KorYCF%xGwHS4Z4fe$KjCgSq z>&?zSKzzsl{}1-<`_9-;bgMgvYn`DF^lgJOSZ~|xTjaeB8#fp8*jd;4A%7*{WXRJX z%;U#5h!_6&m)9Qg^Ai1gZ3f;WCFZNLRt_S$F6eoV<mz^1<g>V2=mp88+IAE8ak+01 zmDM@wfLPTZ>%pIHN54G9uuo_o7Ki@Tw8Dr3Z4&aW=Z7e2*ZtggF=W{1+aB?}&AJJB zBnlP!K<)N^9@GW4!ad)sTl6~$y{l#57j`n!3DQ$H--Uvn-0b$vx`jYZr~ar*EM@_& z2XxS~+oUhQJp+A_@*;5Y=K{KMKeJc|RyE4`V|X0q$vxb8;H>@Sb<~essKUvPsUNwG zsAgX913#YdJ;5Ol_LAK8^8HAZElL{*I?sK_OO2e0JdkUyc>-58Ce9-sCSngEZq)Y~ z(5}+C_n4#^0iGAhhx#PS>;hFa_u=^>Hn-?0(l^z2z~7>vK%UyD@{dU_n||^`dxlrY zL-wLnLLK?>Ka#7yV~tNdwS^8izl{$23cZuV+;~o8M7*eU_1!xD;EnpAJfq)}p03;j z@oCu)Zr!F{LH^49{ZJ?DeNQ~k$(zp$Av_!ZJ;p0ThQdGb?_pqEa_>)A2UT^ei`zj3 zya_Ll&&Im3M}E%l>xQ`d1HBUNH&!o?{L@c5p`P%l3p;51qW%xD&>vR+6;bsr49`)r zce_zv^<TrFCqqlZpUg8q^yPGS--N|f!2YA}48%Nb-XgGLTJ&*sAgtUc>c<Xi^_Hk9 zd?JAQvDKDiA5goV!~d$xH=uTsJ0F>^YJhc<1>N^P`SE5~Nl&-SeUt34VJYqqFP6Fg zH?i1~@Gmb={}r|Cm8X%1>f<8BsZD(vac;kk!Mx<a_Q)F%90J~EICYlnv2j15j;d_$ zPm>+lZks>sHOvHmu>$V8K;N$6)+u`8InvWrtL_JWL)Ht#o1s%<iRahLNuoO8IYt$_ z2lF(YX1{~H@DubSc0?e)?b)7)2YJ9Fi0r6QS22E;|I!WED=-IjQqJ!2mfB_M6Npdy za@|SrHHt<97q}VMC2U4^JcnoVWPMKUI^T$3YS%A%pCMjco#N(^z1AU;n+=WOKmJda zFVxOcA8~rNUkJ6c-lq^R?87bOfhrh_IAw1iLeH)#>elxMcRrmdzs-;IY`S?aAAa9` zn(P{r<vGd4kkM&PJmnX&As?kz9>j|&?fHgqdVj)qrRqnVBRucpz87g)mkT9cKI;<% z`C<3HBQdi&u5<OUZ_v(n%|_g+&F;HhEVui=Kkrm~1KC%F+C>uO1(q!!JF3CuFGTI| z|FAFd)Xm+vdrn6^=D$owe`=unzYM#14soSCW?d#bVsiL>=%-$ZJQW+FUqD_f%v}$) z%<zQT^^R_bNp3r)$2?h^vbb)uEqcK(GD~yt?C%C{9lmyO*QZz9`I>xxJH(CI(#4Jc zvirWDPO}E{H+>A`GVjQ1)DMrnig*)2_4iT#eEd4Zkr}t{Jn{C)?H5F4Q02Se(+x&F zwl4+pfpx0r>l5FuJuky9yAqB4O9ke_db1K~kx%C38Pto!|HJYQW3g}PYODRpu6eL7 z3igL)MEtN^g;7sb%EyRHwQUsYBhQ-;aU<hiz`tU4Z<nu`SHZrVKGC&zs^;?H>qyiS zIcGHd%r_szdZ|A%KA~~j|I$J)@qB49_hB^TbACcQ?^Eb1jZ1#{J%A{iGz)pBt{*r8 zTu{1;L}h6|te@FeBbsm~dY`l3WDo9ZtKZ!FnL3rbUgwA0d!i<)7WPw9*FAS+cNIgu zR3f$W!^z%m-ER$ALj9O5;cgrqudW4Ow-@T2nz7o=Z`yF=zdG^>dCbaui#ldH^>%*D z(H`@cx83h!>DS!lXQx)r$euV_<RwvkuRh|_MCL%;=+774k=$M^exIls@*aLtWojdj zWURU65id7q+9J+%?^Q>Mw~xxezGyaS2kDvgg>Mqo{wEQ4I_%B`!pRH2BA-OReTX-6 zxF&Gc{CSA*iU04G@6!6i&XiH-iP|9dKA7(B_C3=%`+Ks-Cszn3$|CloKFRtI?h!A- zr`{xLHaB(tU6l><Rwc8+E}xZfzirjxi@<$KwUnsJ{B@&GJk_<1A)d^U^bd#^m(#-! zBK<}9m0d1*neeQgJC}mpO5^Z9PsMlzyNh|t>>cAspRLR02m0(!#Iwo!3gZ*6I>8_6 z;9kTt&-_;y;Z(;%n3wsm0RB-cTFj&V`0IIyH~DcT@|K0T_mWiGxNy>w1Dilk49w^D z-wR(tNX~z~|CaRG<d{(6#o>yVfDd=)wb+Of&fmGGA>VCY_xz{$BZrHVg!BK|efK>z z{`sP-pXJ_QJbb{+ld!KI9wobca|gtOmEQ0Ri^~>B?YiG##HUQ#2lYkfD-lC-oB4=~ z=hk1Z5iieIbn!TAo~z$g^FAiKs_zgNhpW0^Uor*91(V!*KZT#oih8imS0y}0p@&`~ zdm=i20C4Bug33ADP7|-~6U2?G@U2_llxuGg-n?7%l-kX&-?;ToIU$VXdT6N!L|M}< zSYJMV%^Sk;%7-yNIV$1|wOg|Y`NQsAb9KAc(`JM-jhh7#wWmtK&#IVl>mo+Dd`fuV z%KmX=4D9A@g6jo!@VAF#mp@$xJg-s>`Xc>-&xF%iC%fy4n*CgyWi-xzKc<f)JvP(V zt^3u#BMEO?UUL0@oA7_NIWygU@Xvp~)Gh;N?j$PG*GIo*ToB^PRK4O&_RJ)I$VKG` zST{B#<`DGiY(7AgpYn6{c3jXc;!Vo(*jLPszg`h<&zHqG`8@X>CVlyZ>o@Vewz)f| zd&J}P+<U0QY;$MSKhvNt@`25bMLvrnmk|eAmB;*8%8rO*Ip4i6q0{C^|7^;E+tjbj zIZu&YoACb>eQ^0L;?3)Cu)ea;mLT+dtm<*lJRZ>Jo2DaAd7Xss1Ljp&Uo+`dj1So@ z;=adiYE3##dUnI<>m+A|wgnIs+M@omIvo3lYUS#+__gC;YByf)`55`dANM(UzzAQm z!>*r4ebskkVUIU;|1T2VyCT12m7It_JFVFovcn(9Q=}(y-@rQQ?*zs#Hx1Yedxgp% zUew_spNW?jMnppHeID04>g3r|KJjv0f0&EsU&bvao~<dpm#7Rl5=7LNTCv)L<ga^O zfxP+fE5!3tyWbJdKelkcXAUk#+=x$^QAbS7;ItyXU9X;lb+i9eI7@h)V<G%*nhiWo zylOrM^^yO$_dMB6d_TqB-0aqC!X?CkSnuojgzslDk2R<_@^&{|XYhU*UEbzAk9<)l zCFGKMxp>caFo5ivsFE(eq8_>UdO7j}$<>1q$SWCr1a-%*bb9>W7tC9g&xiQb2mZ!5 zWtX)3X#DcW`%j3P2a8Z=P3kGwm)Mvhn3o8M@+bS;^Q?=jjRRoc1T{uoWY7PEzTW44 zhlt_bpf5Lc+C_H7wJ`xi_3Nd;*|o1+J>NDDI3D}Ai^I&{A&!J!Tp;zw;`BMvQ(pf$ zzg-__NUop6VO`~Wg*ebhHeM&W{cGz*!n3+d4-&8PKE!y%=32XnPyGI@Xx24^aCpu< z@qFn8i&Msn7;Duy6=>r5(#f5>=oRAdiMUHCp!R?M<bRSBcR3lH3QdZ;k_;{)EGh14 zGPqU|NpaVb!5w~@6n8xt9Dkk^cOx0xj2B69H<Q7Yj!lZYl?-mdhom^)WN@(`lj8i6 z!O2faasJ8RE`Cmm3rGf6>1$G4U^2KBENNT?C4*xrlj3eCgX^0rDeg`(xSOey;)0XG zRZp7~cQ+ZFPL~vSFBx3=3`ueKlfezim=yOQ8QkqmNpTO8!HFzMaW)y;wya5UkCMS< z&z=+)k_>Kij-<H9$>40xq_`)^;2P&niVIB!=anZZE-V>b{(MPs;mP1s{-n5wWN;A$ zlH#5wgKJeNDehS^xWk2$;+`ji<KHC3y+{T(qi9mx%VcnGcv9S}WN@8|C&j%^24}ua zihGj`uJm_FagoX37L-hii%JF;TPi8;Z8A7nCMoV+GPsLnlj5S2!Br}s6!$(E+=>cG zaWTo@*!M|svB}{2R!WNdkPPl-<)pZe$>6G2Ns5b02B)hg#eGT!m;T43xX;PphWwNi z_azzJ?dnN!Uz5R!nn`iYZBPH_x@6nWNpUHX!Tle_|1U`NfT?u>*U_d>1g=N<l=QeR z79~D-;(Bv(Rb0=re1&iwF9Po2I$q`S!|z>jynHlWhw8hX-S0xbxIM(%y`#^PzUbf0 z{qEdQCzj+U<Q%SBZPP9IeZbQV^&=cB_*We0*jkZ9<&v~$H=RQ+lb+4D5%-1Ejel{y z9Dh!s>pxFyB(?LQ&F+()z2nXk)fK#PUqEH)g5MiDS6*Cys{vv7y`&Fkiy}QWpd5ZT z^W8(y&NDU$fc!xb{QlFOSK&IJGj}eq{HwV8Jy0qNzf)}9mG9AS)9dhyh`x;Ld)q%J z`uX2`a~+Stf4tP+_#Mwm?>a&K$a&x4`d+U+0zavb0b|LY`tLA)pQ-Oh>>!+o%z^u6 z?EFdmJ`fGuIjXYjy7Sb|t}MoQL}-8fj^ty0!tW~8J|BKph;Ba|gWU~%`hXT4gx_uU za8~@D;=6*+kv#GFJ?lFJyk0P31=*Je+8-dwmnM8ybKprY;@PMVw;^BV-scc`$74S1 zpUita;+vJ)1V0O21O4%e@8MTAB0GN1vGFG`F1Fw?^wha$hoKkU@G#lc{4{>Ii41Lh z(ND@L_<e4fcttq2(4DWMK61BiGiKj`{^JGkhnhU`Iq^2CBJA5-O%N|CXSw}kPqMmC zsGV<I=HmS8AlQ|eufUIHqQw0wnIY>n!V90WUx}K)N$z*(E_Y6lVpm>~T$jD^2JHvi zUGpG()@`4NsxbeB;5**F3VO98eiyQk6+4J$z4H$R^*M_;x2?LpAzrpGgZSc$Izi8L z>Vx}ldVi^KpZIou<S_b^BR0$--WFNlet-T@1nshFgJr;VAM4ifRIz(x*ZlL<hp6P< zh+8fM@+bbgd>>$E`nQ49&eMj!CCbKD4<{-@&OV`bo_#3V#fvUjS2I^eQ@a{D5Ai7D z3cdvY_{bFCk4|-Y{<)<a-$?iWRh>oOA{@Jv@di=-%h8+Q&wM>XdeV0&{KWGQH6&L- z#j#GdT~sKwvzaZizPfv==fv9uebEme&2|v42mW`HDDQV+A5m4yeOHtB5U3xjd0C88 z1iSm2y4p>|iMdh@^HwkXU45yrI?^LvU(~r220O8_$YcIy@Imn7)}vqbH~>8NJAwX8 z$54N2mkS!fuKno>{39NAI0Spsc1J<K+?x-?%k%SNiMO*}xpg^K^e)NOs&ApMmlsDq z>l0ospG%eoZ~k)cU)p>ArwOk+2Eea2=WSR2j!!rVJ5$;@f0vz$af#0Z4?=z|biWVv zpKu<6s(61d@#;ybqo7q@t|y#`J#iL%fqi?3vdTG8k7UJy$Y*)FpQ}@OLRSNSx%U~O z@^|l3MD>$vmx$WRw{V||b^HPP+@{)0a#cUr^;14B1bVZ&HuWLBIu)i7HQ(QwK~xs) ziE$_1rxHJ3IuHEs*8`|M{s7e*pd(71A*!x)?oHH`9qjHWzf7+^2<O@39LcqJC07?0 zcEx(D%_R^w%5FzovO{BD5Ki1o>FRRc2Ps56uTorfdA}joR%*BHe#W}84;da3Z|noi zU+<U;zwpZ8PG5Ci<PqP_OB9MGoO;k1b;8E{IEdupC-?np`LxJ=w69P3nB=<nx_89u zr7uzE^xN0|BsVq2pf0cr3FkuXyMnwFlSW`1yz7cnq-Uq(!Fvbl$niI%XU9$6OO!|L zoJ~}<y5sVqcgir}@BfWFFj?IByy~h!{z<<!sGB-t^CyH8(V3QzzVZ6`1oS3VhMeD@ z7fkZR^Z)tUy@Av&|7#rwe1-0aM;q$iN0HfIuOzv;)a43M-D|~D@GEA#_94FXe<4KK zFJY%amwbi4P5O?viC3NnLp`W{#~Mcy&R^15^B9ubR*$e=eD(^|b6w^ej8B&hm`?2` zAYwOgiSOyhlxRb|Zr%EpPdsJkU)&+8^Uc0Yloz=aN$q^^iRVP^!wY_p?_2hks4k)5 zcUDP7P`m7(b}Gr)D6e(ItM%@EOxw5l1>zIGvtYB;$37@hzd1~J**n8Av?shTAag## zb&2dy_6W)KTHjcrGUa^qllVNU&G#PbAk*hU{K*c13&<Xy>&~GSH~M3|wwODwR=zHY z_jqjDG#|;HY2F)t=e^dVj<Cr6QRpwna`dk*{DtS;%&vjaBv)Ii9f#h(U-AE0;ng(2 zCtl8SKY2uQ>Gkvt_*?FMQ&~OJd6Ki#!PsAT*^Th036H~lc~LbWobY_yq-dg|a(T>$ zjR<z*xF%g4?%Ec4VV~_pT$m!=?nCd>hiA|mlNb4;uHC;1dG6@F9`W{U_uaRM>f^s) zT=w$SoshSV{YW??*2WMo;u>RqVptCscey>WKZ(|R5EtUR)n0_-S;nUl@sv&YHHP%< zw`0Oc&T6)vPgJ+8<4;soI{_+2rNX`;LMEVp(_;$i09&50E`@U*CA@gP-{rxcQNBL$ zyexVY<7B>R_7bmph2MaDObzVca`#r$J+bs0?8;`F5x1(&zZkz=Gx<K*)fH~sB&z;C z4?oJGdk%r0ni=ylqx`QB&ugZ3`E~1W<dxv=J$jk7@&g~TbFt4I!m<57o+Msne|Q;u z>L6$TVgAP?H~AO7B+Aphh1_H-brJHk7rhCuv*o%@RDQedDalo#vhb6+(GdOf57q8c zJHL_TDroRa#4lSpC#8s&o9u;A&sp#PkdM4a?RT*A$^GBRmQNcCe(3jzH#Pm}TjJTE z+pr_lc*H3?at8ik^ArBxwq^wCpqg3`<2Tn1y61a)UwTL55b_1$NmXe59QJ+JJHH=w zamTyX3?`h-AIC&I)ld3j-#6WSUyxky`!$I4bdf_YUNRg&+}mM3?;$TUA%>`$%x{7} zx)$|Wt?%s#KH>Z&(OaP|vo3#p@rcLUFz-#&F4I?p9lK<(i?10KFmHAG2J%BrJC3?& z<~GH+RKt)Bq%T@-LqEE~d)PHi1HYiZs6XyeJI^%8)t{p)uan$(pM(E&_{1T^t1|bt z5YBumi1;<-?m^#(DKAMb+q(ZdnPw@$iwOsud_^kfpMD9?0|o3vKdQL*ZPMe_^a7$b z%AG^1GHi!mY>_9ZSE58o<hiN2(AkSR7m0CXulI(i`nxQsJv-VD_BPb`>_c|@W<5!~ zobb_yc$;Z0;#&L8MtqpxgfF$*<Da~!T`wFL2>f36e?s=<)>)Fvqn>FDwf`IEN$vW` zk63rxYWN4@MXNxpx40XF{1r#DAwG1yDJMyv#inq6tQmcPc$FgJEa{oc{T%J%zN4+; ze#LcH;`w-NPY>ih-_{G`;>#BAA^pVnn&tBB=+BI*x1Z#;(3v2ztDh&F6Fy)G)=_u` zZYO!-xyL$p8H|h1@;yd+JaruU)xE2S0C%+hd6Mf+=dXcosD}C>-#7FI-*+O`kLNhH zop@WezzvUhYVK^n{N$q3r~|r=yh(DkdchgA|2y{};aTcA$agin+I`~fbbo(pm-Sj8 zPUW8YSTEVA{ZW$Zg#SPCJfW`c1hX%sCvMe7e<IJ~cZ5@g_r?+Bou?rl_?iNEf0X4o z51uWqi*>SFKVV$ub4HgRK8N97-Egkk=N`;*>pkdIY7=jdwXBZ(Wer?D%H?BFH+6#> z4{02xK@WeTx_+NG;73-xOH{6P->EmR`(N;g=T+e%E^Zeb{75{Ta~f2Q-G=%Ve-J$C z9Z&lo@>+g*l)(`0)sl3eCl_Mgs-`>lUtA4%NByuL8^VwJ*wxKs*F>CzpKQB=&ab}i zdmp^yuZUY&^9jbOs^r7-sxoJDckWEW`&>MGBkU{6rvUJ}ZK^=(#}t^3{X>8A%w306 zJdXI6YnNlZ%Co{#!g0@Hh)X@`M~q92nG!&9JE|AzqpDm1>!CUc%tuBw!@9|f?tLNt zpb-3Nf2sz`f87yE`b>DBe#vr^-S`sTA6KJY{j?``?eU0*sp2^>Zks=?FX`#18Am|* zEaZo1G~_GsX5TmPzuvSngm|@}BgSR=6>-m_&F&0+UMNMB2jRoIpkBz4hi4L=&3Ess ziY!?z^iMUM1bIT;Q2l4(|Ml`lPUJtkJL@L3C!R|$_N_wv>7#w`dc@1)&y{>lR1bL; z4Lg3Lo)K^KU96{yN;qdPW*62?EC|8Apx3(RSxwAP@S;|f+t+^E^_BG5Up42FJ+b@U zd)RCAJ>pP58}9t{SDkDozTJG^&&6j}*N+-M5%rh%f9*s1s&__QkFu;$xSnIL%V2)y zz$N6Zsdf<ks>9Xb4>rYp7l4hZ55JlE8rQWf<srn0K34KA*=38?VVtJV>saD-gHafV ziV4K^w%t%HlH_JX^(P*L-;v@o@zU!)^i-rfH&~p`1Dx182mUgdEUuHx+H`S*=W@_( zqPAzuN22D!9{5?bDgUPj*=tY^b&9PWi}CBbg)fs_y&eA$_{lBYKD1|8N<sK{3Fp)w zIfgi9rTYXEp1;nwl<@4sXczzYO2Kb>^U`-Dm)%M(Bb=N%1@SCydt%=9JL#@BrvyHw zcII>I5#iPQefWK9_IE{GvPn6xj`q*G5!5bfu9-u4Q)L|1pQVaLT&eAC5!YhYU*`#D z{`}?!QQNKx^i-#v??_Lj-GFh}-3_r$y4x$Pi)~W}*D3nOVvJw)-G6}eW&in@uh@AP zdCw**)K#`+-)7jqyczjw-=@WN7he^CahpQN-MOX#c>@WjX4bUSzj=8W<6tifh7oUn zDuH!VF)>(Qy|5?Z#r}Hl6t$}{rx9l|+Y0!H_gwv)?3sB*;WstA2J%`AoCRvj=$q&# z?@H8lc4}!1@v?t2Tz|+E?NOI((;4n}SK}tI%PQLt=*{>GdB~&l1QM@9{>D1mOPvsJ zHl`%%q47NK;<{u#jMKbNi8wYj>S3O8%4e)I`>{OYM47*%$R3|o4gIq}BX0S`^Q^=) zS9kw-<<@ymy;bP<#aiq`rbjEx-|YJBE%X<;yjL4s-7v3p9OP|tqF>vtBkCTjTLSB@ z$4iXEJimqUE5D|$PNnbe)>$pVI@@nDAkXdK1BYl_I?JO+WLKC$FNhaShq-!lzbDS8 zR$Z#!qIRP<y86)I*hTQuzdC>QyXWE{Z!;I4hrYpjald}3FJ^PyP}pC$Gk_=yIDmE4 z1FP-!iDzxj&Yy^~f_)Lks=NChh!t(%KmPG6=BuX`ba_>0`&q(^fA=_lx7z`~^4{xQ zzc<3+2i^U9th+c`&0RkyJol?+)kPfh7S*1R9d4STe(RHc_Yp5w>|04R{v3sq=;!(Z z)F(U1JqK+^Wj#)E-KEPS55iAbh&WWc=N~1x-1v(hQ9EzeU7{wYJ@Q5N4fG^DA6yA> zsGn7SNW2}@5qYUgh9hot6>neY*XiT>ztaNqW?92r+|_OdzsrV2pOe0B7IY5yJzlQ9 zW!nS$sz=Y$)UMX=#Q62gPHzZjx{PyibGQ2z;(4ViM~KQt?!KdL(;fCq$lyDqZ$5p2 zzvaDA=udq72lHZe63%mY(<Fp&e93*Rhgjmi(;;@1#(J3MyYRgVb)nCG>PJo32z&hR z=7#ia+R>={wtXjjhl2I}g!-d)y>{!FaE=P|@3xKf*~!2_=v5t#`SNL9QD6D*sonV| zi>DzU_>A{BpIlwKk9uix%|#sA=C|*WzB=XZNAgq)FOgj{c>Ok#n>LZIUir65$eSy8 z5199ykMBqD-4An_cpT4g5$moGMPQtw#%{Oo_7B89#cK|_ME2N!TQJ}F$J#GaKkUgp z^v56Hb#YSn55%2*KNtS7*QX;M67N5=%iq9HqHZwG!;=$xx^w>)x$~3w%xA}_AC<Rm zN)b=(f?QZPUUT<V>d%&2kG#`OE5J`CYtS3Q^T<NTd;7x?%)@kuLH$lVSJU*ZgLc(3 z?iJaQgSw(_i*_%Nm+bSaXp%Fz8F9>JJ;Hvb8fJPya*?yHH}zv8iX&f`*8$|WE<Xk1 zv+F(u12;3D^LMcTw_p6(2<xl2%|QQV>#);=<FPl9$Lz<WsE_7u!uL*wR3AtENDp_; zhj<od(QmdYr%2Dpz-vTRmV2mUdO~N!joJDu>azTh9y}XS2K7RxJMQXZ**Et|PZXYs zc;r7Vk0PF(ndHXxLj}YwZ#@(BOf@ZudB{3ps3$hZv-gDOUx(nmHoh(d>uR>9S>Zu; z3S@+RUMtT#!kI&dQLojPobaDK-uxQjWV!wyiJG6>d&0Kxt@n^$a?k&phY#U5aXcLB zs2>-Mp?2PRE%Lxz%ZvNT;{8k953y^OV%=oaTf{9pUM#>T9xq;;!2H?wo~Spv+$+SL zJ~RgPlm&#Q7G!t*P}C)ve<Ai=dAp`tzwe5^qJFjCJor;Cn0o}{oPK!{*-!iqj=kO( z`N6j3!S#T>G7sx1j%|S-<*%1xFrEtTyCJ&uzuv^NvhG|c<(=?cf4ke0Nv^-_cKP#l zIQ(W8^b7Zhm&?cXKElq+zv76>AJ4jdBF)fq)NZ!Lz9zXUk{jzFy+%Wyk6n%ZSQK1{ z{fqq^4n0$=nDgiBpVEnVJv}@p^1<AGg#Aw)>xDeyev9EpJMF?tvTrY^boui`d#t~m zP+>30#lgQZKAtYS+n>HIgmK&1fjEbgeXQ-qKgxcl@#@OgQGZQ=Q1mZHjy*wkOsk?1 z)UMK2MST;u(j#81&&KuCt}@MmeIpuT9o0=g=Z{SZ=M}8%;7j`Qc$G-P>w?Fw618cM z$B~=`*F`_N+iAp$+9QFJoyH)aO!ZODFA3*(n^a%E!cN~Qeni#$?T8Pvw`nNxvgPw9 zM8(rGA)vq4NBqhUe#jenefSsXee=@QlQKUc?$mEP;BOJR7IIr8E%K0Uo`LH#RyHr@ zseM~Td&Jw<TkFB!>R8oC@a0Pc6E$xtUMDIy6}sp{wEkY?w|eZ0xHnlFBEQto7H%B| zx##K4`7!BCJf0t%mzt<v?e-tmr90L~Ehvw;;n#K{55?1-n2)Zw+Qn5C_ujksdke0Y z<@X_254)=p;!qCscJ(T*?FSm4-F^QtQI={P;)QLk3_B{tb*!`bI_C|wi;&v5P7@Wo zySh+6&0gq*^~UwBTG|flX6Bf-kY@~Vd9XD*{A7AB0nQfMj`h}j-V?&fD|cQHwe5zy z@ge^HTjVYO5_|!6%BFVXSTGdzR(W5>c+8p{(S)}fD@PG!#X~+5)e-JF5LF-ocFp^e zU&xMmvD49lp)ZM-sm38b_=Q;b+tzmH#L6KS>#U}@>wcYX+HJzCx@}zi_bTk_`ueG7 zV5j9n)G6g9eSoXH3hOItJ_;nB^+|{8EtT;#>{|aek9?^Ae9NvARr?nhqPqR<2auoa z<JNKO$NL^6zvkXs5*Zt8pmre_xp>Uzp7&>8CIT;JJvl*m)3@hR=>4$-{xcuFwh_<1 zOR*pAN6Nv!=Hhn5F>mT0L~?#RCGtdlKOE~I8t&TW6EC;3&Y?b=6$8-DE@y>){5gKG zYkE|1`_%Yf-M)}|!40w}8@Tr^_|H3$_j=BG<Z0q}L)6Y-*yH^RZlr$HgayGwdBS%? z)OhzDc|F_<_m^0%yXRroC*ggks_9%lM*6zzzBApCcQ!+Ath?U4*$eg_mqLA2PxBlE zpK_)*=<<bk$e#GM2J&4V@x*tZM9$;xJ7pEFA#PdP9#;vc`|a`ut)*~%A%7|if6Az# zZrxr7T!OtcwGc0IV_$#bP4*S%eTeqX5=m49Uq4Qi_kE1}b8`JoT<<a8Z{c^nWY!UC zx4jd-bNcJ3yB>tE-_^xU>TR&A63#D`|MU!?cK!2B_@Aw7jQ-iQOUP?;DxcdQN{9NA zT`_X7s|)=j@)*+l)E9MuwaN04?3fn2&JtCtEd0%uIX|goHIT0+qIU%PyPF?zt!wYz zL3ZuZR#!pW&YVE)w#aOZgD>BXaj7|7UQm1D_bk*#_uiwd(GLCDuaD1AJFoHkL!xSX z?E_>-P4`+vyf#OV6R*3SX+k`^c=aOj@>5RaneBeclH87MA3^kg-`!hS7=AMsu09|< zub0;ODLUc2mL4gC2+u~;I*fMDXPAcxZ;t-uZ=S12&e|71zO#?3Q1|R#xiH?u|96Y( zO%Nw0N11(u7Y&~rCA+Fu%J;;p@YjAsZP{Nxklb$Ex`24*Ss(es!-~1Mt+>L~>8q2$ z+j5uR6JCuAj3Ua%d%|DRGhi9<^6FaTk@?&RbyXE@5(Bwc5x4$#sv^!=_9j>lJ*~w^ zYBx`dxwsgT2m6%$s|@1I_8IEs5#P=>PY-pt%y)<?pE0o{m+ND(ud^)8LcpJhMBMBD zW?~+8cia-f>rFQ?U-|Q`2*T-a+<gu`R9quoo#=X>sOY!c)zL>+eMwKH4?m6ehL!ga zFDu<Y1U~WHwyc?vZ+66?TO>CThh5$!?t?xRkCC2@tQ1A<Z2x2UQ?+g9#{aG&;)M4s zfPIDa@&HwHXY3?BHhUv@T{jrlQ~YTSACeo-VK2#^dNCd2VO^)Mf&7{KKdNYIk5N0j z>)so-XP3HuCeD3La(T`l^RqcqV*U8Z;kce-5qY0eyNTSem+Z+L_u&uGqZ;DUrfr0H z<gG58BAiI?zI$h0-h+Qdr-E1~b>+fC*vXjr64_DT<i>t!vK7a5hv>8P3*^^xeI?2- zXG6Y=%M0NrHM2IxEB<Y@5A8cPx_D^%(fMI%8uVwse(U_rqHht7weZ6}$|9zD5^pmF zVV~!Xdfg^o-MN6cFbi@xnn7PAxg6&Md;HnLaM<aW=OpyIKR~?c)4weBh{u`7b_-GU z^3FkO*JXY@3_5Kp;>;E~ig+*sT0}se%DpFLBWnag@8KcjKg+PhpV~#1gy&-h6+1^f zf4Kv7PVAe3ea^m(OHX?I>pw2;hq>n^Y^C&AKXIT<7`2P}UV)^qCbWzp%3{}`uG$nU z-a+2X-3QUZeX-8`^fBPf#~X+vxpW)i!erQlc$If7_7hd3`$DoWzrM#l#Y7nT<4?Vj z&vs=V#Jzgabrtnv#xA=LTD}6t%Z}~`PL#cYxUzc68?wh5zQlUTss~O1KO#4%s@WRx zr3MUHMmU{$BCbm~D}91^JAUv}!iz5_qlmJRgP#+%hcCgeviLVgfJ>d>3g}69PLA%9 z0_(4}d%xa3&yIS=UhF{KNc`TtTDfTp+0z#@;W~ib&Tx--vwfcP@9Bn!Fa6)u!?6GR zC+O>ZKinif@q0t|Ts^Eet2z?#CrcD{{rP5adGJq7_)T8R34Kw~o$Jq6e~0+tS2g0F zeK%?!?B+}l`>aC{;!TWm&mXaF&tYG9x^rse&zrFyi#NG3PIK@l=jSEid&!Q;;qEJ# z&od%@;(2wi<V~V%?UZY1pWkE;QQoC7<f8fl%wK(|fI49^ZJtE!_F)k(=q;-2#?zzQ z5|XQtrKdoDpo%2QPI|j}mMw<)B%VVkGu?OVdf<lh=j<uLz^Cwn9*;f_|B9UTFm5rv zw%ZrFpGKS|o_j1i<UZs>{U&^;OspM+`l$AuKpvY@*)Nk_+cOsSMc3ho&%|@Q<v%~( zqjr<27JlEztqqY^x?E}aLG1QFigER=hyN?_j~(27h0wTI>Q^6l9YoYttdH^WC1VZ} zUQNjB@^Wyft6P0)M?wDJ{71sGX5ZoWoH_eF?rVuQjS;`rr|l7H7d^9GCTcF-d;@%w zvhX7-JsJ6ImYqPH%SP|9@3VBFkjt^9@jID$|A^~GGiEl<eG_5s|DvMo-}qfA(v<u} zc4ejWh%2+`#A)K~lt^C>>OW)x{K9LUm<PVm4-bg4<8lL0)!EbCA2_fz*oW|gf5d%9 zUTZ$iSr$X4;(no6b^`Wz>ClJ3g>-yJ`lh$fW8zg+_uj5}d*e3oww(L^h^W)^E#btm z-`|p4x9$Re>W2%FA2wH|<7nr1x1xR6{{2MR)SB=&yO-C+bKP<mfh!q~dLXWpf`3)* zNlOUNGfskEb;(@N*Ha|o%lfo||3%CsLpagKAM;S#0&bH%d#66~O3ir!oc=N&a`SS+ zMD&+G75r!BPxU5Vu6}qLa{r}>D?MS`dE#}e*Jw}tewJL77WNdMeu3K6(gW9g2p3fL z4D`FU*iAf-s}n+0UUvB_(%wHnyr{22iJJe~z6Sq$JNQioS=1fY!kzPH$~|>;WA87Z zY|-{R9%T2y#xT-TBcfqneb^RAyzLhCl-gOnr?1fdxceLM)l1$bUXH0bk*LVo#*kc% zF8iLST;}~A@`}CS57G53@|m68>ql~S={w;0u*sOGOrIY6h00iJ3$@FguW!Om@$^_{ z-fO2Kx%N2dM{*TA4ROSB4T&b6Kf458kGO>Wlofa9JKFaN&*3C|&q6GFhI%Z+)1m&b z@N~#~9#sYLsfvAY`8c@2b?T32uZr>WY<`G$U8N@SLATUTs9$;R+9#s+>(AkYH|r{d zfRA2{@!O0QLD}TTH%KmCuKq|=|KazU@UovdOw`s~?)<X<E!IU(+_jHzGR-2yA=`QV zBH_d%SJ&Bq2&|hC8xVi|uEz`5TRtv=DC_kV>nXpRjB)DASujslXeR0*@3`$U*;m^p zog^x{3`hU`V$>zl7k|6+GFb7wLDbG$W`0T3?AjGX?Q+BdT<6&W;tKI<?J&fj-CxYD zXQ@ZPslD~Q&|b68DWW2MoHtQ^woIT$Jk{yjA`k7vN5_dbD@r5&^vXUyXs@(r5Adlw zM-nft){Q1!mAiQm?bj+I-_@8N@Pm4_0qbQ)f3nc)^wq_4<+aEM-FhM9Y`{X~mHhB@ z8*tC$V%UATaT!s$GiDc2yTW}JR!;1XdaT#E^S(qVho5D|mo9#UyG~Xm?qj`d&_Kj9 zf7M`v2aS94lM`f5*x3_^YA=t|;Oh-Q-t!Z4&Jv$^9s+;c7j{*y>ZnU5eINLf1s_7( zn#zA5ZurHZ-J~bijXnu`Te_|CAUk!tY$eK8ReVHL6v~4<Qb*4sKjf!MsE@kiG1O;1 z+nrY=s%Am_YA<$<^mxFF*U+ysYLZVpZ$BS6OuW66@)_}JQg_rF`;<K(o;Uf{)!+QP zQ775(V0XQt(qq0xR|+6~)2;9!!m|yZ{E26&-eY~u?dixb{*Mpjrcl=dgp<{SRuWG6 zdSd<b>8zNSJe?+%<l^AV-9+`AmBEC!<C!P$3*KWrq|J_c!>US*O9y0!9cv4?b>CZj zGwG?u>t++>7d%%x{q*oFuk$DH=I7NLNiL4mJw;T8WQirb8oR;Sy>jF_$!(7t=Sgmk zL~bG~dCzd7di!#$pU&sb<q&sMx^Z=J*8wI=IgDFuz7R}y<f&O0hxu|Ayjbq84^+F( z!>C=1YIK&UnNbG*uyej3uM^J`V=H%ErFK@_2l>WdF2VZRi`D!{uDY%OUSC+T82mal z+$UbnSB-)H?TV(*Gu;x-=UebI;@YH69YlEZVaa)-tlWu>(0ew-LSAZ;i=)#`B8V47 z>fIvBZ_b4tE4a;@c)KYW<FgT!w)+rYyPC6CYu!HLS#kIOJhOO%CSIPpXo%{b6A{1c z?s?d?v9&LFkbM6P#1Zct8VGz&cfLRG{M&otO}6UzeIj<a@6@u#RpB?)#jPXD;r<UV z9=yc7^};aBLwzg~M*953@9>+hKI;|nBKYGpk9cZVkM@WCMQKAp4-Yv*a<Q&4{3t5C zM}CO6^`g<9zX$3kTU8nUk>*$Ei9$;dXSPiJm4s6_C&3T${zK=Vf+45Ku5R=f;?4Z= z>t@2);6=z+5tst;XLRE?gj3ZHqE4wP3pYV8;kzMnV8t-v`Rc>xpkI3t=4V<c*jMdx zMUh-Q=!*HWw{?(Lf-ge75Zyn;kiI%K7xUvwwbQ#?9s8Pn?7qh&_SVJzr<$L2>os#9 z)=S3RaQnpDO(_NS^I<>Mg|{yfLj9^!XD*R_-gzV_>+{`JlAF-6K14;og!cj8#-JXt zYirRj|EcOb(o^$WWBiHVSzx2zV1D*iDeM!ncQ@1_)%qXgw=UX#8R@Z|;m8M*+7CD# z^cC?bQ|!M(?fhVV%#*L0g?*B1zbP~x>+hbcVribB9@rMY;5uLUoI(B6RURQ8^)?U8 zGttkY)!=@lZ(cn;13SAKx%f;t7f3ek5Jmm!;-M}d3pYJWyzLU==GSz@UGS0aew^ml zZV)d|pSbN4PkH71FNm^*=fX*D{%Q+e{Ifk8{K&>ni0Xm&E)&ka44g~6da`2yQMso! z=FO@cLVoel-4GAbckW}t%f40NKR$6*DB;<=LXSw!9}dKIH><J+ai)8v2408-XQ|zM z=;#H!@8eU%vj&d?iPu*uTp->CRz!ZNF@9Hw=RuL{(f)WX{3)im|I3+C{ZRi+?L!|3 zC(H{kqGtRQZ=!ZghvTHDGLA<4iSVbeuj7uuZsPq7J}~tQ!r6ebm?vw}dKu}fT>+Sn zyf@B|c<$2}c2wg#m>)kq0CCK6?(ijjR_-0vPu>X)BD{WL4N;jQ^(^r3#=H59n~XTp zKXn>GdNzCv{4BofcZ7JIdoR|RwQ%vO-duL$Pk2vL^y{_)dYeatl3iAI0rm&gX*}|s z*X@e<W$CY+Ae>5_73<4p{pjr5E{JnmsNy}?nc<22HYegRFZnnn@<VL%MgFqMEr$?J zrX7m)W2?tvJ=uy6h-+S$VZ8G6n)@^!TR&X@Q4={C`vH&Ycn<pce*Z$$Mo)Z7?QBV! zNTN3PfVrUQYa)Mbo>Um09FPTZVSmr*;?vXpU)kh$-***7M#qt!$@d8Lm1Vt%{Yf6! zf^|szo`nr??|X`LKfCeA)(`iH*Hcp~WBtUy(ugaQYBVToQznM&^2uMG!G6}iJc+Ur zKO=tBxxbE~y;S}oXg_q+<-zD5c6g9py7`D#Q)AB|YF9s<Mtq6Q_m@+<9oFPJ<eeWu zE{k`^zGdfp3xB9i%doEe@ckgd>uuSuf>vsCn)LLtMmLF?xxt7}lbNA^Iq3Q=lC!`k zDMdWdU7kOJUah^TODcM=vy<9=Ut2vLfjHsQU4FB{lSdQY^cwJnsPcC8REN%b3%fP4 zB7W7WdxqNW(Ic?Odk(_-n6K{rc==677hk)MoFhG@$75bBb06GC(LT?1!@hr6)N?s^ zW=au{lL6P^2l-|^{3v&9LOkhq?)~M&@9wd6gOQJRN_*JXKRrgg@hVT@FZsKt%ZI;i zx%Io<8TUo?Lic|}eygCRap{jThQ=Y*F!)stssMl5@}E&Z*>sne^78F*7;l?9<B2AI zcTXQJ6id7e3WlF~y8&1iaVa#^Cthv~zDGaGs{{5imA>(L=+C@$jHp_31^HzczCeEP zp<kXszS%t|EFX0_L%e<SYO4?R<8$c}QMM;H>Wzpk?&{n62^xB}j)fA{UES{>nKCWb z%|6WIu48_7@3DxUog>JO>Cx;wQN7ax<B<)b!K=`NK4eGmx)-Tk%<w>-vx4sVIPqg; z)Ja}=2jY!?^xH^y*5U12(D@Nti0Xvzb@Fc-hLat$@Oc=?#kOXs@1}WatfSEnF+Q<! z5#;ulCI<;;ij6oydMw*_XF%)C{R;ifBe9Q}8->xI)*oI|yUgUyxn;jE#kkb)KR*)Q zG<u5o<AKFP2&a!^M8EP*XT&*M)jf{nD&q~@-xA-n_a{9&D>c@UozA_VcyYW8;?W#d zs1ssCtIedxvk!23)4igAd+|#e6ED}d%A6)%%?rkJR;t5C7nifzVxHn!Ie*e;)63o^ zoSgYQ2z2Ug)Gy7;V_oc;&T%AXXYP8V{ilTIC?gJGy-cUO*GX=ce1rNb_f5chsnLa8 zJTAN)<3sv$!{H~r;V$CD26|j0J@NZfwDYi>_&<RTtqi+*|InA{FCeA6p2@%6k9eKZ z6LBgUwtq=>Wi>CXFCW`Jh<NqWXY42ZRNfbaXQLOOUsJXX)<I`J27R99Jb2k-hui<B z9)AM-ys}PjRW{_cJah9Y+2wt@yYH#x+lF=34YvSq?z!_RRn(04gkxbl-1_-)j8Da$ zMLg&S*)R_^tm<0ybN7p@H*<S^Bt7Lh8S7|=R6{(7m*ZU>JN3+c&$#ao(S#E<b3P?~ z+tC|&FRv{|KXyWX=l|h#pA*iEckhksocTWx&-V8|L3+Hcc!&1#pRrDMYpZu8H$xv| zKB9LX<fnbJ@)gP1=I+j~opL@PJ^P=xo5%2Kh+})f#fNI%<}Bf5gGyI{d)W$p)D!Qc z4%&)kF%EHT;81GUT?f1Uzf?KIGfz_-eq-mxJO6ebiTJc0x#1U8rx5(Bk9>=9$h(W8 zsXtrkmy{x&CZ3nhN4x*mn84P^Q*k)g6Y5W7U5Pl;9n)FTGntPePFTYVpTTbk{RCXQ zjn2<Q^M3_@$V5>)uX-C)r@W4Qkk>oEp>{Sl6m><FtA~1Q6P_1UQQ!KKo*A(Vb&~tf zy-B>B|NJQQmM8pQ^oad`?7j7ORmT@LJ_NU7#chxlXp2)Q6v*K2?t?>-;tn04P~3v+ z!CeA@;2B8pBm^P^A1nk-aDsmCekS>>_pa}{f55xe+aK87Gtb^Lvu(~fId{%2;(5Zq zs5AVJpWhSC9K43ORiW|G#Pdx9Bhg-LIpST`)(=R|5mz2iyHno&uGD;LVdMK$#*^sZ z{t9`mtJOf>%ZDXwz3bHs>*w5lH&qQ@i+ECb-(eiyZ$9kroU4F56w#eNl0N3&2yx;p zd|~6Wx7TZG*L|Pbd|jIO-0Mmn<dvDx-k<tq_id<uGN|BUZx^q+Gz%xHH(!81_38q! zKc74j@vW95*2m`65szYdMc9SU{1NfXa#e!7`K1%=r)KqnU)9UW@TYUH&KJ@zJH*?+ zKi(^Xb*qsh57T_q;1<V-ijfmAu9M9^XW++k*zq=h0G_}51N(rPZ_n}Po4(t;Eq?SG z$vb&3VEv8^#`t1D5bUS-e8hakzPuj@$4fN@HBB$TKc<m=PeC+G2fNA+q1U}#IFoxX z>Z2YTf0yJ;mK-mM%5{nFw`|XUg>d?gJ-0x-%K(3{-;*DtcKN8p5~7aRs|`ex-jh)$ zirY9Yywgj#+GX`Iup|HSpWV;OC;nc#TwU0Owf*-U$tV52+w?S8rx{c}3VOr(rzAbj z;u?7GmNlOJhT2*Fd02;96omEa%zteK{>3#b*D(}%WBm3YzjO<G{=PF|4fZ?zwK4L` z`C4^lfJ>bm`O)qd`6?pb`T9#6(cbRdSEA;?UHHpMRz3magyl!P^VMtcUX+u^ewRt7 z&xz|l)j0GP;lvLuk>{+oJuiqw#B787i%*fHSJXXW=bQMuHeTcp{GCf)IEnqhOk0F{ z=DgmFb*f){5Z~hV^B9uXkNnP)K7I7;J>rwTZ^+ih+Bh6t5A)W)ybeMCp<ge6F1&vk z)TcM{oTb?sO}sPz5$dkvTNw3Gb*VLk+Eo$zJw>^5+cR$(=f&MvqWZ-k*oQwF3Mzum z;W|KkuY!6klWj&l;`NikA9~8KZAgyQEQb8kH!32ZRrQ9bFYM@4*iF~2pGvr3W?DyE z534mo9I&zph!?r40M;$NCL&J7^;FO&K2JhD<d^OD{>1Zcw=rJ-&!|Hp?iuziHvW{| zuk-Pn0j_cQ_)Dl;X7)FmUvnp8-w}R4U88<+=(DYVSC3;I&Y#~tl3sZ{HTEy_+SW<l z(eEnZouCiFkQ-OX?kkfHhZ9~`y|9g_;~%k!`c28g--uVc0^wiTebF~+XGJDGrgmBU zVIcA9_o8Qs>PrKj6E)*9p9a6|H`v2jxe4=CA1@-_oVY;fF)0)Op1Eoncu}ef;!Tb_ z2z#-gKV66ZFMlIWIA3wh+ofNW3x(ZHil$hP@ClktI9YU*_1l54_uvO}*h5AA^_=9) zn+pEa?hJ1n2KsQu3!*C1fcMnTyOqKCtV%n?oov$g74_>aO);MMZ&4`Wbdh-I6$=g^ z-uM9xyz<Lw^E5sW;+vnI1O4Kca*Ih$jIzI%(DSCgA-$?+5d6<Swzum$-xT|(S@Hws zC%dXkB*&Azhrjr~>4*!}c#R=>v)~Hqo~Sx-I`qAnfqCgV(WnzD*-^x=Q+W;MVeTiM zKYjB(>aXfn26|-H3h<-3^58Y;;V<r<0&P6nj+cBJ^vdm*KBGP7fmm-BP9MFr3;f=! zs5?TwQq*pSZas?jQkm>LW(|dXO#7bes9lU3jd8_|46v^{)Cc(~M}I(Gve8Eock<(s z+k{X0-GtNTCH&1Ux4lg5YC$J2;i5_Bs)=0oJ6>!|whP|WzqRrw;J!7DAYLaw5l_@C z==uS)tvBiz_sIr7IQf#^^Dc9T<Yd*Hn5Pq%1@XlFmt#KWhJBBXXZZIV=~0gxppJ{= zpF&7Z+zqku#{UF$oi~NLF1#9Bz1!2mU;4mXf6SwXJ%`@3OAC9M=?Qk;-9}>HmJ`<@ zkNL0rF%L1i{vDE&@z3BFmU0OEqRV#0eA#^adt<d+tR)-|`Wy}Xf$hk1ktzFu09U*7 zIW`J(Lu<Rv>Md~{!Sa>1*EK&jL%#9F6A`b@)V%w=lg^ipf8pg)!PveH$w8COjrMfz zV&-b@I4>&>+5hvOG1c91$vxnVw>vI{2VDIc?zog5aQkYy<5GFR<*MzDOYH%t>bT?5 zc)-Qhb;qUkfSb|M9hc4nF20pJF1-g_`!?>l3?6X0tvfEG2VC*??zkU3;1+an$7S+> z``FPPm)QeOc6P^Q@qjzu#T}Q`1FlRrcU(3PxaHCv_oD|K>*0>e?g7`Yr#mi(2V7V$ zcU(>nxIg;1<8pbxIep!6xjo?0^moVQ@qiohmpd-62VC?3cU(RXI5Ef_m)`?!+hBKG z0S~y$L)>u%J>bR+b;ofJI5W&0SI7gd{s?zmVGp={Bi(UDJm7MTcE=U<fKy}KaX)#$ z#g28y{p<nPe7rlZm<Qb93GTS!9&mh;JFbKW+>C$Rald%L#VdE*uO4vir?}&O^MKP+ z-Ek#7;EGRk$CdJcTQJ=nSK0&a<A3hBG9GYpraP{z2i*Bt?znOuaAoGW<H~!$EuZU- ztKb30=DXv5_kioSz#Ui711@Z#JFb!k+#f#fxIaALoW<_A${uiOmb&Arc)<Oi*E0X_ z|J^L0yB7I|>(JI4a6cfPX2kOsF?7^Jx(?N=VsM=-&&;*=n{6B8c><qb3OHRl{xr$! zmIZKMBZBOATy*N!TS?ya1HDhw?-Xrv2K<=6?Knd&zlGeh-8<1gF~r`-?T>jtJoCSg z>tfUP2i&(Ny^pGcGU7hS1gypL3sog+80l3n#yx{v$33{e6-CzI{*cwPzjtRl693+q zQC}sTY*-7=x74=XxPK9o`9;#h$9x+`{rdhytc&L@dkA`WFS~^P(LJsZRlnWEeXuCi z6n1d#f5!E=YHIH%P1HEt&xr@g@q9pUN<2>?->&zhPmO(M@2~f+z<f;82T!P7uITp= z{Rd|61K)7%eb9cZ;19kf^<(1o*LwCoEp0U9g;;LyM_1heP6QNuLpYIXAnqgNnE$L@ zc9*pGF}^;yUoqwE_Z8LSClLWOuj!jEL;vnR_IcCw>{y3clR1j|^~C}hUw+WIZ%TR| zD02kkzEoWIzeYH|t0%@a30*buEN34)FXI0${tW&1o7v}TfrH_1C*O8FPvPF(f`H%t zU^!7yWbJFBYEt4kCX+V9&f@+N_{TYw0dbl1y=H#m?MA|zM>!FvqTvGASysslJF03$ za6hMN&h+<o;beghm^ZIDbRWs_9$l@!9zMTB{XDWbp2NyhDc~19W;O0ljrb4G?UH^k zAgAYp|J2|i_IcFWmAL;j+d^OmwdDcEcO6&>JDNT_kq3HLALM};ZGV5RDvm<C+OhT= zjc;PE#$%p??Q>;4v`7T;qTd+IQ~tFR{^1Aj;(k(P@Ou&9>UYY9*!cJ_tM&WU@~|5} zJQDU`y-vUn{QIDf(Emdb#BtK|K&8+4QoC9-6aLo4PxujU{<;}P`dQ07){l+O!=7fd zFXG18I|O!fy_XJsYD})Pgm-#=-$e2(OFsBhj_7rh+D(-rh&$dT1a@XSP9d)N<w9G~ zFFPQf#H**Ui<5gh@FFA>>on;KqdusqgU^zFXL(VqQ(s7q=UPe6Pn;G<>~n>p3z08; zc+(@8wEzvDL+>u|~>e(&q&LHnuSc=wt?RGm41^|NEe@H~XCJi89<4eWOTS;Boh zhfu*6FfN-Cg6En}l?3=f$G3wWorE8zL+{JaAptbs)|GA&?<}lzkEq!6BAjT_dy-DE zned+ptc7@TS|3Jyu}aqh2*-ZxxHW*}2JW(dr%ZFr#^to9*Pv%aSIm=}CxOJ924ytl zelK!?<eWgC%|v;6`yPml`i%H6RsMuMM2q>Kso&_x2P7x^uC(#IuwNMQdVSz=>Ss;Q zULmSxjaop|6xa=Uc`qDsFAJ`SAUq!sf%)lV`=O6zD{brHuAV70^%p98ns97qqCEzE zjRfDhvE4tmG=`k=v2i8q)d@oXqN{rXTw><LvXex4zToTBZpKtY9b?|DVOMr6!(-}a zcQV*K7`ii_aLo7YC!#w46YzZ2frrGah^)^DuXCkC{c<*ry-Ym+sg3n#{dI2$C--sq zN&npJ9QDi9)_yFYrw{d;4m~h`9T02B-&7v<(PeC1;{SEPe07)kpmN|EjBi5vj3Rv^ zudT<<^W2CtdGt;Q#vPOm^VREYT&qHp0twHf(xJ}q#P7}Nv(>K<UWbLlp3b6auoG+e z7yQO^Ps4u3w+@{_@@z`+YebzI9W8BC82hgJZ#3db)_SuaxZJsI-2UbBg7nKh<1la5 zc8JZ#Zw+n|P9&ZSq-$Tob2HVoKJ2QV7Ds$Ii@Z?xdE|g+(DSv%E21XTG}u*+?Yk6u zcrnxobMcQ?;2Y$;NI3TD`32ys)_#t5x$rAdcCDMONAZ&%60e$NL%xgsAK*7p>c{US zr)D%m9Weu1`w`A5p7_3mcP?CK$TMFbQM<?xW}v74c*u#DyKNmV^$3176W;$#`uNXJ za9t&e?7sv2+!#CW3;~Ec{o_N7r=P6dMEyGI!7-w2%TugF%&Qnqyy!gggtv>z>#y<L zQa$+xcGa&!5I_7-;yE*24`F=gw<pnr7a!Yr2^Zz9@4!FiS6^IT$-K2-Z&BdXEz+-B zW;;sM{L>G0#k?wUhUD41!Uw3`IXK@RIN$A7&rt6(;J;_K<Fw9)y6WWW0zdO-6R(oI zdJ;RIs4Oe6PPX7q49S`1w=k|5veKXW*_OXxZ$7tl81ejZD&!A8>jV)mW`_HcoSOXe zc<{^pk>^^qgCFFI-@>Wg8I>ZGaJpQ=2hfNx<h?TX`_N9S1DgrQ`kco&|NA>{%2~(@ zCvdqYIa78q;^}|yR|i(K@s;Wc;?}Iq4nMFhD~^ypUNf1E&*{$}5U;;=0k2Ot!1HUi zs;`a5x$9tmCt(EU%i<hc=bA;uLoTQr;!M3t7X!UtvLkNHf|c<BF1^m)pCGS&=f9?Y zCw*32@0kTlzfeEFGY0v<8!tm#vV^TS2xk(%;~|R;w)(T#_rk@;!?BPXk@$U#-|Hb> zS$U3e)S!QC-D??gjP%IcBaxRTMQjA*R$cl?R1XWly3ObTmxy;7RJ8Ma@H_H3>Gz3x z<ucSYexx1NEt~f_552L)P*+7Y`}-Ypx%m~+!%Duo3Yy~x;zgeFenWWI4>>TtjH&p6 zcplJcBT=!s;!E`R?iUb1u;#ZgZ^1jj4`%MFr_`?Q-M>sY=SeW)TP*8xmv}MpC-m!& zIS}XU<7gW{(+gtXSHo5y5Ba01n4jFA7k<>|?EAV7^Rw|ka>9KYN7nt}6lm!<<Qsc4 z5c{oId3HF)tM+U%^*bwXqdxIQn|+995$A6}j#WbZI|o`o4{v`mmgHn}f4h%%?FPH) zoq3>_tx1D@fmgncIw$YUhQDNqn@32W_TGUw76TG6KbG|a{K0~M#D2jF=8q)(d}U@E zUsq3~UrqcO>lC$)!(V*KVa%6B7QIP$RqGb=-Kpw&bIQewDT{6W>QNtY;54Wj2wc{w zh*y<ep2av-OYKAZQTu%g6+Il|tE$sC1dyJfj~j{Vt#zV^$|-LS5Z>f?6h^$0Kl>h{ zym$}TQFNSX?YZG7{3ZTg1j?ruUPw6gNAxa|XTP3<|5(5BhpC<2|6@B*XWR(zy6*W? zgfo|N?;z^b+8PYLeo3rTinN+|_G}I0boXJH59?GDaj6r(yXq8-!FtT?sXl~P_i95= z((jtpU-e-pC-C*#09U^rxDau|oqdRVQ}Cbj)Xp9i`AAd_x@hB~Li?A*J6=)Gi3)Ff z{m2H^dqTXaSO<EXpdWU66Ry@zpQ)X{YXQHiH{BAbU3{wdn%ZS_DCz{C)ERaXuWuml zRi;ue2xmS$y+$~-?f`hUI1K(YkB{5==Wb!+aHYn6VD6^0aWb^tF_IG_^5T3Vy|n*3 z;@RL%PoX!Dt%rJ%{oc38AeLjC8xnbxbiRl9Fc<!EVzXeqPIPtfykD{-q(^re_>L$` z+4?KVn~Diu!bP3U15tnEzBHlKE@rRB{GEnBog`j<wCDFY9W&ZG^2=M~n~Wa>|2viK z-}!i?{r#wndb}IsBz^}+?<sbV^k~_}?jK#Ay`_F_5}#v?NUR6z>c<n#@&1B3sZQAY zHF0ClS!!3AdR!zqk#P#fS7pMNP`jD174gI_EP~(F=Uwo-_?!WL<gYTFBRQV)8R~;x zdKLSH{%iR|YBz!5HgCNfT_=4kzYp@6A6Sd|s46`cW1QWO5N9f4yREkoei6_cJXBM^ zPWun)q58f50^<4FafnBrvcMg}$%T)Rm)dKpALMS#w|2?6%i6QaAnU)OgY9`vv#W=Z z9{G07IihO&j#nfnx@Aovh}X$pQM;4uG~!tNmnn|=&8jZo^^`OA{O{^h;ZK=*E8<DY zOjtLoXMg9QZZG&waynUvjq|0A5U0{>71pCW1S4)tsvW44dfpv-|MYWb_*1tSihWh| z{0;fZ<^}Did6{#u*e68xLEniNBU9kMg}pr+i}C6ejH7nh%p3DlkBTCm^`v1_sb3C` zJ4{p!J&yfH-7678cy(H*(k?2d`e1${Pi@4rzBd^5VUfo{Rr3XQ{y#KB{;AOVup4VP z3-i&ruRkXJCMFVf-R!x5yky-AVqI$Z=uOlwy0*YRpy%iKMm%qD9r?u1G32cbY86lI zy7ykp&v{>WTLAHo@7TD?JRW{lZ{K{TcJ{S~jh{yk5{NfVr=VVP|E_1zKXWwVmc{M6 z<xTjEEgZDZx4&<5226y!8QSm#<R6D(|CYz=#SmV+-13duCI1`O8Lr<~U_GotYv@<K zr-cyif8QILo5to(>p6%gcCG1Y>Nnv(LQW*#1pBl5!S|`1@3-fyC4C2n)!l;payr=e zj7;dp5g5OKPZUwT{A)7dqVi(%t;Czzjo=qnLLt7Lh7EB4Z}Ls}g#IB55XX8~`gr0+ zf;|sGpEIbpPMI*&AyYmzcy_lX;#Zb=d>i<{X?VYhPumF`YbCIsh?FA`k7k8^p2)WN zz`o9lc*F(o`3>vP*(YDbJZ_6eM0I2d#FODK5eH&NvCrPrJ~k)b>lNEKA?}^uQ`-J< zPr|6*NwpbytNYmRNT|01;8%6-&PVF!x-;sG$j}e|(y7wlrgm9i5O@*z$|rz$-}-Ne zI^nm%iLyQRy$(}o8pbn6Lk-EXuT2n7GTj}FuNx%Tx=|wzdF`A(iah2!avg@AAB!T6 zMfbZ8NM2MahCI;S51pZYy~!W(<7~Nh2>oT-pr2)`WA~Rn&5*ZF*MHX$UUUw&`IdD4 z|IP&DInVYkfaLYfV;DzYJ7Defb3Wu7|NA${i9fsBy3pkk?4WyQKz%To-$G6u>3W66 z;fH$IIBb*4#$Bnp$On1!(KXC7rYhptdDIa3$3|C-AUWfe>?HNe_CFmZYR1GP9@z00 zh;yBC$`i<66OW0qQ}1Daab@2L;Nug|X|B}sCh<;<2dLXl&Z^iKc*@<|A$N7&%>Y+F zKWopIa4zITKFOlY&hua;*wLgcA3=Dr?jGi&)*VB?>M-yu$+KJj*zaV^GJA-3w%$5R zc-_7j_7NV}H-y?%htoT#T_vB4eB*=Sp<iSefc#?X-XT6*_iIsvbMn?jTr02rkY{J7 z!=7TX{k^_AmmBL5v)|zQ&AC4G0>+75as%Tmu)k|&b2mmppT2`})Ye+3&|hc*;)eP5 zfS+a0E50Pp>b^fpR0kBgLpake0RCVT`o^GtQBlN|9(5f16dU{v`ES}3$GO6?>y(t5 z<Xd_pUq#rr_oRnc46*xCvhRo^vvxW1RUNkHHuBI78HEeSX5Nh_Jgf3>KaJ<)7!N(V z+0M7ruF{=-P3>a!w@~8E{X>z&yRL6v5>=+vWum-I6&sghUSmHqKi<Ok2=s{!I0us_ zZ;ZGSei<>Is@Mm=A5!%yX4Niv-N^@WE*oUJ0lohJUL)${j)s0G6?;Lv{@ND%2EQ-| zc2Hqnu!{^Wyw%&)FHU~^MAQjyhx3Zf#w<@r&eSc9`KU3ivHy$Y2T(Um;Y+q&rui5{ za=i0Th#PaH?H$O~j=W6ms$Ew2LloT01mVnD#G9@$8~c}BUIKNDdnf*0<lL@Dkn1`N zaiv=?L7ef!b?;KU-dGv&Wy<cd_792uPUDG$zNq^wVF2Vr@1J1@c|2bn$;p5bUV?B_ z$NWcl`Fh+=qB_}3JQq#+z9Db35OqWz`iwkhgNxWYyQ(>OH97Dt#;b47hga9_b+_2{ z1b*hn-$GtxD1U}<{7F8Wztiq5@pkd*;#yoUnf?tC2l~(E!Gtpv+e5G1(*t!}9>@(l ztIjnMPeMHfbxtm4+J%=r-oT!$h5as|GbrW_>2X5d<9bg7pZ!4N$#fy_sa*v&#QVyo z{yN0Hv$i?n*!d-WD(&ib#uhn7IDKceU4PMx??~P(O8j2gEqgAY7#Z{h?d%ZdFUEI6 zp0UThFfZrmAD=K@%Ofd;OI{4`_>p+N@ILG)yA=D6<av{;@2K5O>4<fksr`^|D*873 zY_2cHeyE0g_7X0fip_YH<V=@85uY-yHtZ^9&b4`bED!3Q*q$5vhz#D2dLloB+v|m| z1EXm?7Bvs~!gAJlN%};1wFhXA7>79JO+VXsXx|6(W|67<sNbp4`8458j>P-eF2xQJ zuRHCzMbs&G>N!!d{CC(*-duG7{jPI#wX2<7{AL1N#KhM?ez2ZrQD@Z8tv6G<%)R0u zQRjZLm7sg<d*Xa`dFa<pPs9yxQvQuM=~=%D`ROzm^No1@(EdI}mVbnCoM)?S{EcsC z>rVZQHy~GH3+ez1XbwH1Z(Gz26FndHmE{Y5pz&GCpKQLbT5RiOhN^cU&nnpKtLNPx z5sr(Ez^flWA^y~mwXxK$GO~?CWz_>%j|yCXyq1gF_(RVlC!VPEZ-;X~^`>f|qFwES z)XvU?p9f7oAw0mvss+WcfAIAGBLDe}-``U|FX4~<NbkCgd=OQK!>;VkaKwXi@7HrA zZyuC<Oq7kZ-?=i+!f}0LmUhDYjhciwVju1Ac^oe<+&}Y+lWiSt6N~z;mj8x%vrdIh z(fI7l4aBi-`$rh*=auV*qy6_};Mt+%52;<$TXfOlXMtxsihc%uUmWTut9%7@ou|)Y z?cSp8Q^K2NyIv7ac3JZc^!Gs6MI29q>jpESGvZCO9R|OuFXQ|P#|ln{zxc<Vu#>9% zI-c5{@-be*Ma``+TSuF<It#s-?Q>M;*&WnVIr%I0TW8}g<PR^=2=?P`qoaVo^W$M} zmmc|j^j@O8lKpO};fFB~^RW`fQ)^b*I@P%&uA@!Y6ZU>|@`D7DbN<L|`9lW&P>~r? zH+aiv)Iome^<9jYc<zMjI~Eg2PDS^!`8a?1W9XSY57&8O?HlB+O6!k2Gao*Dqkb{M zo-3bJH`tE#@H>x8eBScCzP0zfY?!}X;D@*}<xkuC_S~NPDbl=%#(Xk=2!Y<&UvYiI zoVerEZcY>nqjp_7Kk`s6o8(Zt)7dwID9cl11NF;-!KaAl?fV50FOEFAPP{l}&k=PZ z?cZ~qzdORu(kBPvho_ik{p@ob<EX4JUPF)W7fE`|!p0YgcP8w>yqqt;`%=4F-_Xj9 z9kY*k=V0P_E4v5YCcGJMf7dNepR;zz^8@mZhwls|yuQ=Mu6ynojHByR1x_?rfI6h= z2SyN%=W2V7sQC0d>YwUS_7>#pUIWj4(qn!}`yjho9eKd|&v+R?<Lv1Od3oIaj?OeJ z^qJ(H_*`$GXT_7PL`BG1*qc}UYU}0?w^65@<$3J)C)T|}zObg5cMzWad*n)hi|EQl zK>41mSBaN>USd5wWqrgSuM!PCy4F0L2dux?_fMQ$Ri6@G<(_;C^zJ!ZS4KUCf7!r{ zs0ZTS`gPte9RE52*Izn&O5}~$`Lo@Bn+Mo<=~p_HcHv}1twX?f*@rr#Z*VW+YUimN zy`y%M^9l0JtlVzxdZ&E=wTm<5_Y-9|5)K8pi26Qn4pGst75t!HPq1~rqu)K?K8ROD zorj}75mk+PXAmx`r*%Pnkm;J+aau1$Ua)DuA|Cm(t;l0m{V$sjmF;<MPR<xV8qcf^ z{zO#2yp1|x%6h*ip1=JH`#7UVV?4)cfcnaR>hh4r7rza}yq&y>-<>&qA8{!jZpXN$ zR|V){^8;s+KH;Aa`-bd!>MqGUKL3SKJ3IPfBT;9;h22DTpXI2pD$i!D>wnjEr~djt za^`BjYeYrw0d~C^O0Oq5vv0{Vv|sxxoT!>_&nuDb&e-eQXMbVd`r)td2rr&Jfjw2H zw5XFw-`&&Ymckw;rgSLjkwbSrA*v5_2VPuic9i60+0JjN-I=um*G+2V9b9*?z!S(* zVP4?6)%0G2{N!U(c?lQZ#O1|4VH(=|FgCdraBOQIoDZp9|MVStTaST$9kUR26h#YN zqH)E^K<v+AMmg9+?H+;nWIm&>kepNvUIRC==569dvC;TFpPBp^_W`2M3Hv<6`@sY1 zXC3Dt{^iCVmw;a|4eM8D3t(QVpD)(W8_Ol=UoschZ))XX#DfgB@7Xw6!tH+0$KHp? zs+%JMT<W#5--#99ha(Po5pTqyb7ss}(#N|N$9^wMwY2@GQUsHnSo<o5sPj_->a-jm zet~$?yuYnmHB%h`?=?KkoAhigw3B%8E<POX-g^vDbvqV$D{q{Hf7CdR@!5bCZ-865 zAN!Q5{rx2IJTM6TqT3|QpQrqK&D+&3M>Rwqm?7n05B6>+u5WpR%&><!WWVDkAKTv* zvcvW}F{<`G%*T0}`404mhgR>X4cBNq$8Y5sqB?jG@<yhuW&NId)oa4*tG?I|dHp<y zGZC5!c`q|>hF{sm;a^E!oLh$Zu&dKhZ+VJ7xc*UXVzK|J%?$S7Q&%BA*_D)*zu)x^ z$@9VU4-jRsH=$3rZ4^hmX7+m)!hb33Y&v$G=k012d(#IIHNKw_Puj1yy-pCN5eNKm zQ`8fuQn^Q@M{Z3#H$L$>KNq90ZgF4%{ICDXig=V4ucy+4|8)wkEBJ{D(KHV4(FgkF z-Q4zE&_fZZ^QPJLtJE(G4YTn)DQysq$0`(gMpV2_hIO*+O>Yyg#@9ssbw+%IA5=PD z>>uoU-EE|Y6;FI_U49wtto(}O`!DL(tRJXfRBDfN_4TP`IH%Oy`!PMWo1v!>Cu+yN zwZ!uZiys8IDBJn-ed1;BTDys|{s#lWPrjEx{pLmP&qVdtYw$1gFL{c1HrxI^i<Mi0 z^{KT-Q8!qs&BzmRF9-5~y{U~nVa<2Ol3reTFyc+b?Zvq2f_*;BKKq=de)&2t)}gju z`A9t59tMAzeBHkg@2nn$>o<K{Bd&Gi3DiCQ_LG-z^~?I>5Xa8c{HQN1tnkeMSGz7c z4D)m%uObgs>w(rD2h!Pn?{z=abJq0{;@g=VhjE;3HNMffD*aH*iyhXMUitkJ=~c0Z zkq1fNb<!E~S$mvFXY;AGJ(pDF*?>AO7W{XT^vV8(uaLa>`3UNVSrT`i+Rearm=_y6 z@-*=(<Wv~pRKY(E5@jU~^z)9rwxWG|vn51%jh>ghT~v%3YU5`58st^dK4>~tMcnB@ zy`j&!mgx}5nQRM>lANye;t28VPe0g)-w#?!?Phl!=;iBrjUrx^td9Lk?;jWexus_j zx8}$qTete94<tQiQX1rs%vI<y@uJmW<frIj@0)d8BOBKxQ@~E5R<qTlk98^L5OwP8 zfIU>NS(m}L$oG(_p1l+K!CU|OEWpL9ZuXpD-6E}>hp+v8y6LbI*K_>Y8BlXBJL-WW zgpIRdxA&2}_~E3@|0bEg63<pGdPUTkR}prWad+)?ZV8`F-mZ3@;-+0!-BLFoKj*^> zqI`z^KBW^sDwTHerumPUAM5fi82t&Q{E6x|FQdS}?t8%7#V0)%Wlc`(C!Y07{QKg| zBU^|!GZ!FF<=gNNBqx){ppH6055EwvT4nl%_VMlC5Ec8@EcbR%cKxvR^Mn$Mshtn9 z=l<}}9<ZmX7qu7og5OY=RN*D4vvSoW_)%R*9Y_6aYp%^i9si!NlYaUF{?uFArqa}& z#=h6;q-<$%#b+UIO`5C$&_D5a*hi=lHa`4)aGk4jTt(hGjfYvkjQ<Duz)OtV<L%PR zR*bXpF{FgSJl5_EC#q(hTSEP6;o-x?^HW2kiJJW*QE$w#kjupD!uxzde{+D-8|t3% zCVc2b>&KJR?-9?syu>^?+mHR*DK6l5)}<ukn-914GG|{OB7G|D#VF|c7#mAet<W0n zCllW*o;)6TZerF2qCfkfo50U`ioA4szK4BybPwzsPPI=bNM5pC520sdp~ZwZyDDOQ z_HP>O=laon#4&F>+{S~djdAqb>UO_KcL@8B39;wXh(9>&rE?TRTsd1(e}w*{zds}W zIy`O{@lMsu?}(bqq2H*T-Ov4=c>SQ?EbzsPTp}tv21cR1Qkv_;JI4~wg{<Gk*75AO z9s;lIcQjR{jEEm`-QFj#&pogXQNnva>EY=fhY%I3Qy}higI_RT(>o>Vhnn=`N$PjX zpGI9$+x%fqek%>^qUyB9btWIxFCODItM-DZnwu>idUH;>OT7G6DTw%_^U}qMV=>e& z-ej?L=h7*}myDbVd+;Hx5tpjbw_AiW`|a}z_N)E<yv&~CF6rYtmIPD3zVq=4QFbO{ zD7CX2`;fPa^?FC`qH}5Z)tpJVN<1Ib1@q%o?cZHY#*L#$PLDsfiu&cn59^7V;bq`o z(JIXDW0z;bKJw}C*U)p+e$P{Gcn|xVb4{&%kEOu+_{=`Ij^Zm<oCCgj4b0D3cWHHi zOTVMaucLNWs5s`OuOC2tR!_`DYBvMokmu}J!WQ7m<$6!;&by$eM8(}<@Q3c62Kv~N z+89r444g&%`pX{VFJB*kcoi>wp;xT(IYs)I*X<9$ZJUpE%F89JT`C=Wj`mCTci(10 zci2}yoP&H-gZkS1Em0kI5G#D_eELtdaWZE(;?sDIMIA9eu7m$|ntWk2u1e^00s6(p zRm2<riI7)&GQn?V(RkR)$vGeXHLLU5IA|ZWgzz%E>jiDdT|7g2_@tqa(BAgo6{1dy zm++G)a02zjWd3I(;Y7Xq8$iq0@3*jD1}-8zJ9#9I+Ih{nABmcrzu0&VECaub>r-ui z`Gt=lUqAJBqB80Ix=;3bnfb2>)+Zm;yBOf=XS@G727O!i!=9}18N{R0x7uoIXXA#| zC7hG{2S4IvkIkr4`j^Uksa?)Xi~LoiQ=SLkWz=HAu?W7McqY<@6Yun1^BC>j{CtS& zNc+7}W$g0{y?Q<J&^()t_|X;4MG%hH48wfc!!T>-XJz0gv8i|{`eXO+4shYr@1L+9 zdE$=UpBgj{rFQZ7=vDMzs2M`k^cr#qbf^7p2+z<Sc`d$%26<C|Trb2oFEL9)F2@;+ zBNET|a4!1nBAkrXk?21W1OM@t^`D`=!EdO)(s$@7;#sLd0YuG$#y1JCtHmN7^cnm9 zrtI1361AHY#o&KdFi$k`a^yd!fiHa(<I5uhphqO6LcZu=f14kzhoBy?%_aAFll}$U z5f3_7dgPHjeDEmr^;vrubW8!ezD{T17d@%d9FpVRPc0zId=Cx*P5hpP+^2oPC*(lg zleM2iUe)}Lb;u$^4p6`8X5R<oMSh39nYTTUPxWnxb@B66V0RH3wIhJ=Db5`vIrVS! zX5!h|+pw4OOEEv<_0e?`sNWgW*v^0bWvh2n%WKpx{!aXT!t$;=iI<=3-|1!H%u$e= z6&z2L-)e}u<@{mK?_mCk??E;A@DlyaSHFXN^$~Z8GNTax@=|_Z;>8Vn-N4>z#J33S zw4dah(3z+Qrb{H`)t&U%=gsWkSJW@R_erH)RL8Z&{iABo0sePxPX!e_{|hGly8c?5 zN6CLf{nHP6B2M*?+&3`(f_VIWOl+-b&kY)7&vTY<M(&}0HL^MGFXhEUxPNv2wdZZ| zBKMGgDlq;zaC?R<^mgG*xj5vNT=5k8d55|;sGWuW345^_y>Ne)^!~GM7Xo{TzsK6V z%G&HD^d;V>@Q2~3YdrtthtTu6fz7unzoL%G#W@fss(9jeS3<)uo{mZdJx;YdcS(*P z4uD+Jdj+oZs;qsAh%3}@%G-06<R*JQq}q{y_;H@@yFmS_+DO>d_*C2tzI`rRC#HM} z0KcRx>Kw0}4ejc6#9?aJ%ljbj)zR{i0WMx9-++9U`_3bec#gXmhsQ-C&UM1ShH!j? zeQ!+m3CFlH%WE6I>dZmvH+S|RuFZ<ci->0%K7|t1?VDiV;eXomaMg#C*SuZrvd%2{ zpVusmdggrh!@Bv?C-=~wr!V$V9{k&D(!+EAW9!Yl((s$PQT#L7+cmsIc=J3N<ea$v zn2!o+{f_!o)04-D>anG5T@8xFI^~8cvDD63XT*mdRx^zBaBp#$s7_ZB`<>kOn*qQ3 zJm#UYo_tEYsN2s8Al#odfj1Rr-9r1bs<4lm|LG9q3T}j*RNgj;c@#H^+Ev>GAEG8< zkwcVcs~QbH?GnsKOkHB<m-i#;7~2$V>uA=r@E>cr!TKen737?{SFk?kp#7bw3`yn( zy=fo9-t0h@djT{~=L(ol()*&$nVoNdn|u;+Dj!zG^8<b{9PRo^1=z)@x+#Qk@^(9n z@4Vd=N%};?=Z~n}dD<5Cc2+%lLG8|=-F6)vVh|7JTli+km%0#0{cKdG{X}I@5bC~+ z40=fYtosK|)cL`FFWKbiz7@E{^Z&)l5x2m%ISPC0F%{q+-hT5;k~1kXo+ZkE*oSd+ z-RaP0COkbta=hf_Yedz^$j5|Z-Af?Poz(LYH`2MZhWhpSKkpM2e!bxb75#KO;hpS< zBZ->Q$6%MF?=0~AVGGf|uNeH|47BG!C!GtV{LUbL)viSUrYei;JhgH<+D)<ISchEN z)2?@6;{E1Ff7qLUy@Pc-rBlA5d8yp5qllVqmt%<Xh$^t3xbZrQ=ArWcguLbza~&t1 z#ZI&JWnf<PvrZ=v7rgEQ#1&su`Y7R&z7NhPT)hbX&R^CJQI`?dVsDpa0WO?8V$Tg^ z#l7J_wf5LWYFDF!t=)gvV)OFM3#^aLvcD%%okMq#Ua?^q<{=6nJwtN;`<}&u9gr6* zJHu}x@~8WRcM3<Kj_A}E7ZESNPtcItI4_uZ^`=TV@w|Kg^Wa4zTmR-4!aU?uiTHLJ zY`BB|s!d{v%9-|e7*1RJ-kJ<Q`WpQm8y*O7_3P{Du7KuRw~r{Rc;zbf%jNeEfes#x zxL^(QtRP;bx@GZi*B}mf&r%OaPX6b0ov50#+m|TIY1b_;ojpl%d{Zd$$uw*Uf2zwP zV0ZpUr^(dsT#cFsT-uwkx9G9}*A>pz7*Lg~HT)xQ48^!&`TQNgj~Vw5<aaf}bwkp3 zopk@S)6hS17wU$XG3G4sy2+E9M8!70AfoDnSxS`67~vn_B0T9ie~D$tZ~kH|;?}9r z7XIQ5a|94h{&N9&B!fmGuY~Vt)EypmX$kd<dC#yvm~UzK5U=|C0mmQ4SvsioT5ngo z`E%Af>gRr+_Y#%iWg+LR{|E7=j~3WRI8pLD;>f8#a0&4${Xd5YpY(exF{BUbsB9K+ zirRVgW5^5ciWB0U<XH}qobyi&_?NFe5(W8Mzn>(kj#RUG<d^unk)u;jP`jLL<H9+% z4|a6qzoSV{(s}9P_0#=?bGrR7m8c$?A%Oa|U$f)H%WHeD5_Nrd9`+UapG2cQ@w<Df z;kGw~H#-`jPO;r%5ie2~e@{5);^>V;b+U?4gj4;Bz#ppl+E>(WPON`K?fk|y<dN7E z6HdICJLw+vs|&}lf9SjEpAhfN>xTT1UtdHJZ*o<Bi1vFykYg=d0?(#ag<VYliSMYN zzr7ISO?2CayF|^EY_={HYIY6sJF_5O^v$YgiB~r_%_C|$u8btS+E5$z*8e{ABc2V~ zkNh*uvu-9{e`*|0)a=;;z2@&&TPG90i>g0XLw>VaYi|a)a6I(+4Wdc!Bk8Pv!XC~~ z6COZc`isbuq<v6682_2togMb~eDdFGmq}i=ivLJd)H%J4DBs!h9O3l-0PKh6!zb+j zO55*UvxU38gsb1_GVm?o<?JAg!_H=dpPVMOY`mtN4Et)ceHGzM)jH6tl5aUf`dRY3 z7}r_Y-~;iFN<4S-L1WZY_0Oj`=zp08>rs(eZ9Ybnv-Nb?600Z7em8<w-F^*vU#>nv zRIgu;cyUr6!~9wMh;Y)UI@<Gu^`;ll%OdV$98=ETCpcGQACkNrIUM!LG}{P2Ifb)b zA$hsz&P1X*<EO(!S(9(TCB0|P(;39GiW!aTFdaAEpKzjVsn?*{{zd!=lMeMrG;MF= zF1i)s$oy9n{#Q@>KJ|9VIlZ61Avra5<9p)e#Ewshs?WDiQ@eSb9D1A&<Hi%uCg%vF zel}$%_6?q;>P7Im2S5+++6v<(J%1M2r$CRmTy;O;_>x74S6L!0^2Ze3yPx#x#Pk21 zqNO$Q^4s}P!i(@#fyDE6ukI5shuuZoGOvEf15+~DHEK844<k-Y&aIEYr?KZgIOQ_I zPkPMc!K6pd_s0Bn`e?*E?_V8p#5(k~H1T|CXURRpi8=r61oZWuc8cVk-&SKB{^wk* zOTJuU<8JhgON0}_`>zsCjGK-;)Ex%mx`V&1a*o<{hJm|4!-8Qql{X9OwZ8w$agukY z99>P6wf$o2N`d#VhpBPvUusvqZM-=t?C<J$@?MA=-S6!%(kq^of`8>Y`(85dm>0aL z(;M?s^=h8RI5`(%pJ7|<b7NDz6y_^S%|JYhZEGW;Z$}*Lr@H-nh~(tpzVN$Q5*&^G zH|>@a<(+)7PI1l0?jwoc-P2kAMLluqc0fH*88_`9J?dlT{UoQ3Wcfn8vpV`Q_+O8_ z1RdBtj3_TN;U)Ep_&L{!>iKEy__u$<{LHdi4+v*Y96+4Pj4>aG*8yKp?@d?x{MhMS z5&IoKT?BQPr6>;ji=9*bNw4~2Zy-^VkB35E%9pQ*mq+a1X`Najh;LJ7kG1cdQ}7F$ z8oP;bu0s@&U%GM==#z=x-BaGd*teaEIoCm7w?OEZn>IWJpR?2fqIz`U72wlsi6`m| zOThT7ddhbJE?z9E_Kc{xo!sU_aA7~<omP8y5Z?GC{{7VN1nkVdR|%u`r26cHJo6GR zo)tWJkJ{z&%GOS~?el3->nrvtR(9SM$Q@le3G{HfAfo2Nr29nqqegFt$~GUZ{PZ7i zovc<j>K;J2@jK4|KcJMYX9FbcB!5n2^JK%2V8Zbo<~323u<Q#_)^#T8mg=w({bpZ5 z`*-iU^)a6C&2gOcij=c&6J87pK)fdHgRFIa#GmvT3Hz|*iO=h%e|}DK&YUm4M0tq_ zJ8tEoDYT1M4`QRxU+s^V(0h6v_A$AzKkACQ&}}ERCw*r@oX7^e>i_|)lkr8!tEBrB zy==!vjPr6At|R!Ee-Ote&sZDZzFF^)KG|gU1;WXB4(4T!`RyTI4g4E*&wOl!`lQR& zhri738Q|q?`@2c*yxC29Sn>UspYuHd{$}Sp<9g5e$37=iyEoW;{^`v{(yyzRe@k+X zK8O0Ix6FP@yeWDV@x_}yUP-*@RQ4d@Rh{>kzl?2ydFnpBY#uf2IE!#H%L;4nPpx1V z9bY8^^4~Yx^`GeRn)Jw;9T6u<-!~LlvLlb!=7W%vr)$R$j@LbLjpUuV4;~Y*W*bml zdDS6m*K4Pv?y^_+t`aZf*V_8=Gspa8zvZ7uPVdbBj{4d4zY~aODROT{`^|+IM@CP0 zP5n-fi<rO8Z_o3V{cmDC+4bOO$d7sPjpW4CYSs@$I^eoREGl`0+FAVys0*^qQ#<Zz z`@0+#G1*JFx}A8AcBgzK-oue=4h4~3@l(T3MEQVJHV(>N8%exgp6dxwnf~T`Zx=P) zhQ1=I3N%5!iMxGYQNMY%6we9emmKg9tLXC{a#`x_A^N}f>)x;bO7bSA-hK3UiHIla zdSCq!_%`ccPrY{{#&LY6!GCJy*>}{>H{|?ARMe<+mZ+Xx68UJ3SHOD=eC}Jsi430o z!khY?t%z^^%VMlU9BK}Kn)w?MpJHYatXGx&)7H^^`96|fr}hif7x`mC0`cnh<@H2) zjkzC4uNhhe@yeS7E+Jm5t_(S@p4s<-9t{CbeY=eLiCG<^NuEu4ZRas#Qxx&ehaa(S zw!p`>@5zXD%No~Wp?A`C<gc07={w=|-+AE&C&Omsjj7lj@oYNZ$f#ZYV(k&ciTPtH zaQxm4=;JxYS$y*}nS=|+t7Nuu660&@(ZZt-FrO1yE)iw3Paq!oU+K;h&tF7X|2Mzz z#M{M-maPo6oA{u3;(16caL&HYs4LFgH+b&kto|4E$aud_jQhFakZ+b9?IPXT+mQd( z5OvgSor}29ixMuAey7CZht%)%?(veS-u5CI_<VVhH%Y%A<iGXB{8Wc$cz;K;tmjBx zKDEE=V}<Pd)6TFqsONH=FXDjj%o$2J;nNcH7OnRo9<|pu#Ese6`z(zo=eBqYdgF<g zcJa=<a<Gps5rVpHYF5Sm;H<Il1IhGn;TM_eC)5Gcsx$J{DZd;3)WtjDdWVNjMjSc` zd3|XfJl~N>8b{?lag2B;>Wa1Z_VJP6H++Jf^}Q?a2*;lceSvnTBJ8TO+51W7*Y#MR zO4$f;t=sj2on_q^@T^Jj1Clq+OFyE{nakIS%CX(i&MH)g-Cch`fM0aszc8-Zc>F4G z*P8APaN))5!x2QaS2*yd;mudXv&8!pXT_aB!aJeWpHn;UJmx9!D$t$>r`~MEcsyG& z%vY4Fjk>@~6#tj-qJ3f5N8GJ;op@I5`&*(q?McY#Z$58GpR;2>#+BFi!oKRzm50D* zc@UC#zI0XAynb?0!M-Q{mvp|gr*jvFEVK9|+@D?$|Ns3Hz1$sF)dNnfbjMZmfZMjp z9ar50F7q09oVN$un6>UW;Q?pXx#Mbhz|~*xj;rYb7rV<HSIYyg`5t#%Z4bD^d);w$ zJm9#mJFcz=+>HJ1xOyIN@dw;-^*!L)A9Tkx@PN~Y+;I&(;EEr1$2IbRTX4i3*VqH@ z<57296Aw6f+#T1{1Md6@cU&_MxH19mxaJ;k%e6bMg$Eov?T%~d0oO0k9oNbOE-c6$ z*V+T_kF)N$HXd-!Id@!J54bcJ+;QzZ;D%gu$F=u>i@xNJ>)-(=Lfmm3J>a&5y5l-| zz-10|$949A8*{}S*Tn<QTy@8F^?<7%;g0L(0k<#G9Vb2Da$R%Bb@zZ%(eAh&9&oYO z-EloV;F{lb$My1nJABI>*V_Y*-*LzF@qn9g*B#f_11{dU<NA5PwZHF<>+b=lAGqWG z@_;M;$Q?Jp18zZ#J8qx{+{ef6xIrFp@`*ccum{}vr|!7FJ>bebcgGF!fLs2;9XHei zj>Wm-hIzpCi+9Hj_kas~<&GQS0r$rncic!1IOna!C0!^b;Yubpq)F=dzkrsmV(&|C zH^=p+<UiQwF(G|$zaf8|g8MDqIPtyQKd0ip$n|$iT(8Spq4xgq*+JaL^QxtB{jHV_ z7)IBv=IPeEM8(Mv+@~ou7uT~U%YEE`u=Ky!`|=Z|aUa6ooV<nW-PHSW{jc-I;Ck3} z-Gu93b+R_@GvwDScn?N=I*0K^XjyyR9@W7<2bs4pjINJG<(jzPk>wltl3wnVd_+|C zENa(xH!l+|-uPd|{jm6>{ydV?HP%KEO*&s%m(By6$kr<v;YF<%&?}}Kz&b>w4w#2| zIbj9lP6t~3bM13j*Lgd*pOQf_K{USj<%SpZ{FWTQpJ5XR!Y=C9LRg>9R~XL$c%wa7 z2QPd06zLUl_FO>q!+HBVj>FS2A9gPBy^|*~m?xi*3x06+=f-`ds5t*9jcd;NYz95j z+CB#e&xiYBbu`^qYImBo_oZ><kY;$FNgdn~N$sM=+!UH<xk9(WhnB$oH9MaY`b|s( z>?+bZ7+3F@cb4?9miIz|zg`EwXW_$|9-($8UALD+<?QVCIZdTv;o$#E34g0P_8cu8 z`p0`}Hzl?s9(acrr@dXgTJYOrYG?C(-Vqh+4)~)zMXiOzJ7tq$9?JJ6*2l}n+WYml zU!X@!Uw@wPqR4v0GmEx%l4IN1`>j7eB#<5!x#uhBw>Ow4%aPprG1+y*8}}Rjiu%>$ z&&UT}=usT>rp<!;K=Gp9HSmr9!~L+#Fa^Kg6m91`r*_@758extn+hZl@1$LTd8sQ! zVNdN{6M2*Ld|Tdrf%|(lA^Cm6tI2cyh|2gU_CC4p+F1cE-kj)&_%x9rcn+bLm51Mw z&Yj@%{9zv_)xjeq&+>IZ9<uj?z7VhL6^Ml1R9o=;M)fb?PkIGkbeE`ceN#lZD7*V7 z=INMqn(!vuY}iHrtx-qR4KLW&G;V_XV_CwUC$7Wyq3(#NlNU(NNnbCH^y*37u|9L4 zrp>o;ui<}Zvwbg7bS#B9;n^kDFBesRLvnn2wFuIqpNv8~KO1rf?Sa`buD-DT3iJmz zgnxOTl!1ijQ|$Rvd_&d{;!WQgv4k_-GTb3vFPn$?>)#rlLBCh+i`36{PO^HRmclyq zZwaV#&g?kYT}RhPe#t?J-}_yy50Jb%u?KM?((Q!3_=F#=A7j7SIyZDB@+s*%XzWnC z^)#M%bq94(zTb@a<0tCkxryHRtBvoQf$)PI{BQ%|jsFnXRqvjAk;dgO(jiX8iq+TA z&tJt;JIk8sGEo^*6n=I}gkT<g+PPTt@ApCd7hR@)AURQY<7;XcQUAccdTf2zUC2++ z?`*Dt{N`KjdAIu6dOWAl^LC+L%h{W49Ddu6IC5Uic!BX7eZuoW=gNCL9}$6BY<+k* z2J>R`p1@wtxAa)Am{bmSc1mr8oke^!;zSOz^-vW}eVpdY`o_ZV&h6qhjwjUuP9$4w zpHnS!G~v{6hWL}G#-U#6@TSNI^XpY>_lfObFLmwnC#?TnYs^#n4T&M1EguU1vo#rP zJw4J2ewO#QLXSSvJcPz^{;h!LOlrjzLvp-Us&CY;O3p!i=*-z*U-tJB<h_~XkND%4 zm!2UU?{gpZ#HoJzD#`0Qa}Y0TewAy~uX$;^zM`pZ-P+t3c=r6icaUHI2zpqg{d+v; zjT5Myg{;APRMT##OKkLU#2xd`fjHoaziT!vIw22O#~3{KbDp<F9y^KOK~vGEPSd>P z)ESt!nq3a_k$xKf<tZ0_MSp=A;6>9Q#G5|Q1#w~$_QFpl^>O%BjVxp9P2nasev22z zy4AT=w$3KLAEFO!-AQ`If_>1>${+Bhb;-p$5l71Z8T_ZS4?IZis`JKqgx59f`2o)L zjK~9X&;HKHT->>p`gvVnKf;UIyKWG5_U*h0ntllKO%*N=z5L>EP*dH$XDp9*xkvJ* zRsXGomyL43&Z^JE2;$Ae_kl#knWe~2_UBaCRb=?If#mo<0}i0SL)<3tk1`ztUu+H5 zBR&^KKAOLm?xKE^ssic=yXgCrcs9((#>deW?}(S(Cn3)G@Af+vT%N=Hole>8{DYfd zKJt<`>?-%<M1IM>R}c?L_1SEhd6@KxYE6)jI^!hxMebjNam20;h<p9KU;^RP?bEnU z;f+V$CY~p+{}}Sg{#q8`;?0cL$Q!3l0{pJ;<+Synn0<dxO?!)ZiX)W}2fXwR=vQs7 zV_f$4cRTOp(TFG6?ekR9uirgDJULrlBF{xy`~3hN+Z5x;v?*-e%AV~Q@WI7wJXgvT zO!IPTytQ?C{2Xhy1}chh?C}T0v*vky2&Yrufj#tdh3gS9Z1QKc*DZm(6l<!XUEd!J zf3OOf-%`I^`qMemCznUvB&u%N^E2fA@vxWJHR2iiyY_rQc+>h#O6{Uf+)vTOi&P<~ zJ8F2rFyfuDOK^QA7u~x^JkMPeewBxtoCLr3IqI8QCq8()`eoz?*we|tQ5T$^U2J@R z-UPX%^AP0A>~^1NZNFctGu!j<*{KOZq=)<1_l-<MdiX_lU1aUOr9SK+hfBMjC&_W0 z>iCWR2Dwrb;BR&03;f4#*xwa7D+k-W7Wpv`w(F<$G=FiYvc2AD-UIc9?YxY-te+?T zPWaX<o9C<T_a=CB)BPl;y{==wR9k*ILA=xLG3ul&FdOr7>Lx>-a&BHc27KAXI@mo` zEb(f6E!0IP&yUa}2d#qr&DT@`&=>w4d8o46>kwU{G2+Ad7Gdj|zx|yoFJ5UC;Z0S0 z{+9kX9C6{aKWq1eKm7fup9OBbPE_`q0ekXMmu;LcDQfF%hTmZqv;Mu+-@)d!`0o?q z!(7-0yNiF8B7RhfvzqjY6Ir96f9`73lcc}bhy%?~_maM6A@`3!-s+J*V7>g;22tKL zpTUc4U4N7l^D@iq`h-sk<c*p>7yeMwyPU@SpV@P2UEdiwPVy|L-!^L3=er`#)Ub80 zs9o<Y^p@J$$!NRI*-sv$z13k~wD;c)Kgd=ws2^<5K&(flS_M7)$o(L~o8a4a{~F!o z2Jx&?JH!{?*$43?H=Ko^oP$$s{;Hriz?H5EyUNQwFi+#Fv0fGxeU-*{?%D5#n#Y?r zf<G3#8FC|P*u1T}062BB9`f6aZ3{j6NGI%@ddhsPON9n}CON+KZ`4)2tK%o=d6Mld zQIV|`>a3jc8}OoO7tCKwdK(?!>ep4Xz%DX;w9VgifzZch&pA*1e8M-2Z*^=h=~F)i zB0f#)jEFOq_&p0JY8&bvJ6Qqy4o?vtN_c+K=8@>%Ar#{+*RZDvxMS^lVtq8><bc4} zpu=Oa&+ts&{D?O-XWM;i??=qXDf{gx>5;yhH-PT!06pT-cSAg@dD{9_zc@?04ql49 z)P0KCaTDKna(bji{bK1#ApV>d5q8|RW8pvbWjy?=f9{I;i88OYdb{)`o#XBLojvNX znpW!t#wjrWA@!T8O%cbU*kj}qmyN7m*NgDfud>}UL`9AccK=Ex-jKWsDsqL|dFEWG z`>NY+>)(#6KT*FdR4<15*{paQKcPLb?>py{J)m|yI}CMDWOy4ycvWlb6{3218`Nz! zEM*MwB5(w#DPQ0M$%%4*<Nj5J<$;}Kosv%>pQ1L#(SC8?38yDcz`RYI{X4VcGY<Ey z=IWX=gqQhq`V-|NZ^G_L=kcm9SHh`XjBbf_vFoGWkv@JV8`h^k+Uqe>{^Cc-539e2 zXwvnDTAzS*nPtoGLhj@;<O7Red7pUsp<NW=P4sreC97k9=OG5n^rwCivFJGUtJ=#@ zCv}!-kaM0dvGJYz=2^n2uXkY=mMIQ)P#eANIMwp+B6&F_eHc;JJ2&E9?GFZT7S>u# z^1M{jWz?_h-#<mX@ZWffcvWoCIpTG1``s)ayle;YCUuMTL{-RhjK_2CM;$V`r`#nu zo~he=qT<h*h<C>;AcA-&Q`*xcXVPs&emTA?F;DZ%zPE1XlnW%BE1zuslx&0XW!pQ5 zV>ae9u6yLumUjO&%Qfk9N=<=ZWQms6uK(qKk9Khg`sJJ+*yr`KF5%S93&ul^HS)qZ zV#$Zsz|ScHf2$TTh*#&A+7AO<czw_p*HPwS!ac&7RI^d1W#eZ%iI>-EeIcAovB<{7 zoEu-MU57tJ+==UbuTa16D}_8)1(#x8d`J-TM|fqj<2T<9IaaF6D3Uj=`&)h08Z04s zy?^anwD&A|jCg+7_cKu?H&}c4+V|Yqx4oAMr~72I@i1k<LBi>sb8Q~p9XK8G=j-CS zPPO<RLU?0lE{0r<Ks(Qp1y4gR@w!e7PxAq|zKx@(T~%HTo|it{pW4;Yw5Tg4_YCBf zIhQQ}?Uikwvx&#y2j-m``;i{|It+TItwQ|~jdDCAUZiXRKa28zUq}ChC_kdCeKh=L z5(<S7ul<hP@}~AK2e1x4JM%r@6TkEB6e){!^V<iZpQYV^c+@#lBQM11a=Rh_m;K#? z7=H}@H<d@6gZ_dGE>gc}HDD-co<gv*8kY=tV*VRz>zTCoKRSiaBa)M4f>FoSpP62f z99w)Dac#zYL!Pkd-movb-}wsl%dAZ=fqp4-o+!V20@oWVvbsaOnq3}wF25uM1DD{3 zxN;H_9s_@E!c?NVSe%W=PW=&Irpa4S$7c=vAj2<XUFO<y<e`%#=sL-nF)6Ixsk7j3 z)}?x60L^2-_@P8uZ!hFEE1Y=@;n}Ezh$}O)j*X8Nsr-TO_4f>-a{L|Wb5^Z^zt}&? zE|47Wzc!Yr<D`V2+2qu)gR?3SbyH@u^_ImA-bgreq1%3<YQbypBCOnD;*-9!V8UX2 z0*GHb2K%8oGz0sE{&h3_Y-*fC-4LxLaH3@=_)o{YhyD2Y!H6qoQpOk16I%!So)c`} zC)7bB5U0F#rT5hDbnR;Qy<A5g&^%Pi<MGt4Hw`{XJRgzcEb;2`QtO`#e?26g6}Wc> z{g=Drenfp~hI%1>nTU1C&Ml@>zuIJfXUOx|_rb-PXMxl%a)!Wvrt&La(kIVWMg3HB z=7mweti0zLQRjVcJD)VOupV<TV+7&V){m*Ri}GJ9d;u=c$V=4DUxlKcIr(a0{}D4J zcu_Fi#%J!?h*y212za&Le+|irPMzTw-BckDoOeHMA-#NhYwUNtOFx_s#gpem{>Z8J z{43Vy<_p5HFI%EXkLi)a=Evk$xQ|h5AJ{lqdHfvp^B(i?e9T#7pWDhd?J*wfwH<zS zhUAYSoNiM11nHG~9OR8YVb6WiJ;tK$@=|+Y7d5faQ^M(p+gPXi^ac4VYDFUdgq#&c z{bKli#I@Q`&&J=w9H<k{jXCdVJmWmuMpT7<M!w1-$6;p~bqIc8+V>Ob;pcsAKF36C z0{<`we&q8X$B{hinQtHTbg{p~Q%l}rzHGPGeZq?j_IJtBzwuVW@og)iPsN@={IJ>g z;1_Yc6#T^ho$pU_I@tcbNk>ngL%a;L_o2?E!Z=??{C3mkcihZJ(EIyY<f&7$G@iSQ zsjJ?gef@&x(B~Cr^X9)_!K<&S@plU~=>9|KZ&%?XQPCr}m!R>^=e<h2xfhK0Gu8d_ z&jVb%_&xJ=qNZh=2h`6C_`M@4whhI4`KVQ}FLUg7`;^LsIM%o0VJ~r{<}2vAY;o$m zz<YV3>uJQdSrPex^y#nXVhN`!|A4&US(`)=FTD?8Ts4AkC7ir7?k-W5d?Mn=T<?kN zLiNC&f5*NSf?oY_5Z1?j+<t`gu#iWXuSvLyb@HLZlM7d~h^}Gl!;^|OzIr}9L3opS z@=Y4Yi7>dHQJ3xgxNcbwd7uMUBQJUFbb*AE4FmU+oY<Th@#;*z{S<meUb=zy8wrS0 zd9Wesi~4QwCu&!NJ0lKR<P7k7jX&0FDooly{p^{&KQKpbU_Scmywl#UW~c00)GMB> zA>vQ1w|^htxvC!|IlVbM`ept<zY{OhTt5VTITOzt&12)!N#4$n^vMI;ah)Ys{IUhO z1C!x5C)pufml)UiY=qOXyHPjwl%ueh?tKM$$1?_EKVe=c5bwHk8@tcFDS`R%?s<bq zFE7;*c4vKiUM60i{DM3%`FkB8{pxI`RN6(wYWq8K`SDmhwaaI1UlN{0ZI2^fEI;^~ zczyM=tsiBcVjQ-y(O2qsD&@2B`(c@vaPj6vy|-x3cp83^nYSDud7ios^3wPX#5~lI zZT9@f8uq<YopUPuEmP!wi}60rv++6QFT|fyb;Wnmt0T(W^8`Z{VqRwM$h(A>^Ct!q zRat^HQJ%woH;4NzwRQD<^lOqg^G4wMiEk?mf3dhR@C!fH5%UvuzhR$L5g$=M)UW?v zPuCvbbM^m^Q3$1S+qcPaDPoa?Txy3!E=h_g%yCU6MO5T+L<$jdzjfp?mm#+`jL$LK z7{=}x+YW|dV>6rE#_#ibp6&P7>+!mtb6)55dY$wBeBSSK7NZUbQvlrF{}tmm9frW~ zrt#XxXn*1j<cruCg!WnR1s7){m!f{#S`QItBIfZ4>WA`o_eb#XVMj<`@9%?kM{gb- zOSp<oK|b+54Y7WU<MomM%71S@>5JASbvdd{EaBF_Kk`G=O+`P{>g~|CVKtn5^h7tW zn|dIgO5aBn3s@5A%O?eiusbB-zK8H@?s>x2+jog@{=EBtL6|=9A8XqvmFT8&J(q8b zCfp`mO}-KrK=iOU#Gx2B4*9{RA6y6iMW1T~^_M9dAvdAfRlum8g@FAkA|GV4+L45_ z&I2*8cFr5F&faq81M?5Q#d!3cZieLe!>*Vg*6x#?gzMMh))7?2^-p=c(993bB&dJA zl1y}d^XW{2;?MUl6WvyCeUNZ-H6C;xb^JK+R-0j;H5d)M^62`>L|1bq>Vs*~FP-#F z`@}s2?H;!u;IrI0bG+~h;)K6#;2%*p+tt5_oyafq(Q{i#Pc*Lqf3mi_{(!x{{0!)+ zMOZg&U_-RWG8<nAp!Pa%ng@RN%2dL|qof#ucA7iiNvYS+Z~f(!T$0l*PD4(fD|Ykz zUxgcx-&+K}+VOWX$+4`J#RTnf8%BJV<^IQK)n=gn>o)G5A(@|z{M5Z_qF(Wt53#<8 z_w$gKEZObr^)CU~*V*hA$RmECZz0*&^~Sh7?A;yt!KR$X{OgV*f{9=H+^uq#1yesv z(}H6JMUo%lMZPfIy$3Nf9`@|OdY6bVrwv1#*aUaK5?`1DIeTXKUb3sNL}9!#b_(i- zn0$W&>G4Syz&Cd7b&}(qx56Ltg>@L8S=Z0iFFPLR$xGjw38crK|Md=F^&?o%`Lfu( zgsXSv?jmSf4#GUzQ?=3v=MCKN7_v;Y0*@DGGt!*@eDZD*u7eNw2rsnD+M}O#&PJ@` zJpRfp(wAl=&i~Y(xO--7vq8ug+vPa=%b%{g8g`CPErxsx-vWYm*5$`UH&MGVAG*oy zBcM0vf$^FzOYS`wwHNEHdQb*=!?SOppQe0F6!gyqBTnu3eB`J3scJmgQTm8mA9mfn zPq?lYk2tU~_g!79;r5>@!J^KKF?F&?PTXpl5B=X)x;$*s2ys+;{*rxqm)mFfDAZH^ zcMar&YV*4D*LTZdPaht7m+bIPIj|>t&bsfRe*HVmt%C#CBcJWO0a#zu!S~$$x$f`i zH>;52@B@$Ber4Tkd_Q8&2je_d-E%r{R`x}VM@E;8C;Q@7^8|vn&5;{uZ!W(Fm^&19 zRi_ayey+TN{9)e?xCMUmpOFu&_9)lh@0nPS%z~C!=SuJ0ljldlE*tY{KHBLsRTDI? z_00>QcAsyG_iosT?d1gUk&&=}y%FZW^j;@9I}CDi$TieKQ+8x|l9$8FZ6`b0{}`T6 z<f-CAgo~nL<dv?|0^{My6|!OX2Y0Rwo81=uwfFnLpK{$)tXrmg^l0e!58OcVvSO2D z!c~_^=&xAd))`Z?i~Id=pfBQ3J{|-An??Px-m|qEoj>;lFD5(2_S!^t<ntY{-l^xB zFC)6hSmf&0K5fAdD}#AaPr?yLCM6N$kUL6#Pfr|HOnSU!lamBZ-0U3EQwJWQerkVr zZY8f&;Oy?6oJ)NB?vM+Rf2jcZ#7BP(yQ0&K8p6xxJD9sSXHp{KO!)^tWr)6Ix%1oD z&Tc>6aDj!LTmBxh%MzCyC)|5)J>u8<y&>wG&Wc4`X|==U$1gdq4zzp=`75&8oFsh_ z_rXp;|7C~|9(&5g{euOlS2FNhx6kslz<i78TY<~>r@}wVcTEE6>o>wMPCj%q#?A9n zQiyK*{p9kZ&O5LtRu4cti0?uQJk;+y)!e)u%|N^<R@+B->1I!y>vzLOc-~;cA0l5x z%gWbCkB_L~+FAA`#?3~0uV(ks*~x!#t})9z^a$;*eGI6=J?K9l|1I*!_9!{uIeI(h z!Cv=6e4AP~u|G5|PPly8RSxT~{x1M|#g`@`UahCf7V3w1b<7QFhqtYd_0gtviXvQ` zIp)@-_v&JuGmDpJki40gf%?WitCd8!iipB|m>pw%gcsM>(kdG-<lA))@h$%x&xNA? zqs@?yuITDqgJ)gc%0K6xi-rzBy|69EVZGvZ#3_>JmHJ}5+@}bB6n#&@9@`!SIn%m3 z?D4|#u8vQObNOSRjSe9FZmY2#>I<6?-`scIL!vA7I>y0Qop$Tlp|2mIe{Bn09R3hC zi*Rx7=hGywe_xBZH^aWe?-xdoL><vO%GH^DZzAqYi{_x0-W$Tlr(m5|FHFsYy?Q^m zcs<t`{gG8BB0qR_j`dql3vzL>qQeoAXASo!L$7nac<KiqH$Rea-Fchaf6P677WD5M z941(LPnl@=`gxKQpSgQM*#vjaw`}45r}y5M_%F%JkV^|muJqhCv$hZB*$#<?U30r9 z=E({M|L85*p(J1WoxW-oz6bi_+GdeGu5TiqRJ8%{o2vB%=1cup`54KGo?X+Rzi!WY zlD8GUK^+nsZe#o+sc{_f<vZ?wOttv4T*&qFMLaA29K^f!nYfGSEIna8_(7vF&o+6b zkMNTD=E7Leea6QDijNTwwrPlK=T`0=k5^7!t(!@F{zqffYm@%#4#IWCYw#yud-D|G z?5bN=dC*qOj|zGP^~tO+i#j4-sf&4L%>oR`+sLmn0N;6%Oi&!PTL|*6Hti#5GAAAf ze4%F&=q2yhnO&n{UruxP@Rgq1X1dOF`TXKR#Dfh_I!1b;@HNyG+q5Ry*X4gkzN>@D zZXCX0Zv4IeMtkCJHRQROnuz(;xo6Ii9Xm4rl85@WVr&dSzVVfGqVsp-E)rh)J`x*x z%;_aRgZ&8q@K;yAGqQ7_zkkXd(zCv)&^IUQT_9X$%qj-ouZpY3TOyz@+FwQfnum+9 z9*U?-$Rl}r1^TZJevWaoz;lUY$E+I(-1NHX;xls$>Zv#wf%p?2MI5Gf_|hd2ByXde zIX(UIQNl%)d>3!+N5hY-a6iV+DyCxmvbgvJ+Ufqv1=wkrgm@I~-@&*<_Wf+oo3=R( zdw-1HM>yNUF^{G9v)J0@uM%A^D0xl}kH);}!gW5vOShk0Dj>e8b7&3Z`u+fWws-*S zv&AD2cY1pJ2LWC={n2&!kELEiJ=ACYT$}{?+$BC6unPLD+G*4y-7dt*-Q0%pnZRb4 z2NOOA_qgb(t1%v4|KrD`FB-MM{K?^G0C|~um{(D~AMDvb-^9Ad4*MbQS=!hl^jptI zf7OsR?s+67!|k&o)?ocGOS4@(tm=P@<kg7ai`1SezdMz1)_t(6=Vyz;VQ*BJ%SYeh zCy*PJ>F%9ruq}sh$!}&6v`ya21N`j^<gs1R1@X`G+&x8XbQb(C&Tn=8i+{$|%cMQX zNB(gS^q-Bbi+-^_MQ6yKs?iDK6Y-NapuHFVLO$~`ZvvWUim+cZwGO)eW``kP<jF%% z3DOU$4ZoYVU%EVezY^-c{JX_v*c&{5m&Yq76JC!cXu1u*0@&f)S>m%JS5WU%&i4mF zzc3d2D&D8ued6l}GholWQwR51$=s8ecfP?tgyhvwwuj`*dILK;C)7i9Img}KW<MA3 zyG+T%ys)pzx%PJYV_(J(??PM(c>%xUvPT@>hpV{5Sf|zZ%WD{~J@(h?+tg0!eHON_ zilcVe9+g7S`gR4bE01)3|Ef0fO&;iw3AqC!5zpd_GY=p?XBhTNHts#tP4#dl`XeUv z0^PiL(nomhvNZ>H26%z&dJ6f>3iqO(s1IUJk{waGEc{dY`?DPqihk-1?t2RUPm0^e z)EfAN<oR>)mh9Opk%(hc`?s}(^Y_!RuMyjQ5r4dII|F&<_SNd4x<zuV&+#<`#ZMog z4yg-EH0bp&#S>J!24mebjm|pzmnOOUWG+W$dAxk98ew0@Mn3EIJ&P-$4zhwT@H`_5 z*I}MZ&tEcC7w3{5-?jpIBo6&>m+;c}kwipz8ntWYPrpu3oG!WV(XZqjuYJ*2$Hh}o zm=9fHGxA47&qn<dztnx&c=fpW_A%Mjoz|h=s+CoN^P{7V5S^DhjXJ^nenCHYovcCB zo*wwQi=%>f7m^&y_d#B<{Qj^b4$Q~=%W=!slf0afw2+{E?1y;d*W7m_>R!ZEqVv}j z{KzLCKtIjH7b3~7=qzp!G_~CSbxfAL2OiYK)s2q|ib!8CkIW;;x+NpO?CD5XM{dkQ zT=6Eioxgu;<DLsX>56vk_I8+GwX_Rx-Rce0snUDOG^>$7cI|+s@Pj>56Lmq=?&A9E z8<RwQ`F7<vz>hvp@_2F8ArN)Sw!VzGlO5ksMCY5oSV@ps_d6zE`##n&J8RZOqRWNT zP$%SjJEH;!AMBq0MQ~Ih^sf0F1sv3VKk-%n0TG0&X$9~XPyIp@?tQQ1AL5HZcdrmX zdmsH|1Kho-a`!64h3pre2)XI*{cLl1+Fszl2Hqpc4`v-8DAmR79xt@7zqpTZGr0S| zg!B9dk%Zfhp~w%JQNgvFk`_aBU2^`Cp6233Ha%uZPcG^b2mO-&2i5YQP)FsI#dk?h zWcqI)zN%j906|?h{u0r-Un=DEYn|YK^U0`q@DI9kD&^q%I|%2!$NWU{Vqt11;dbaT z)MGum3dXH>oVX3W^@Fk?H|rkgrs&EgqRSc{%nN&I(ILqFRTkstQ)-11F8YjH4!wyr zb`#DArJ+vopZ#KquD+ak7;y4!tOsmel<P-e1m@MY`5_hj)*q%2lx51Mc*u^=kC;ER zA$t$eMR58-z-48(5nq2Zb}`|0K_14fR_!rFXG@Y!5nboiKpe>11L1$+UkiRVhurhI zU<J^Vk-g569&hLFX%LHAfo>viA%A7k3e3NG(|-=xHQlZ!6O>g)Ais2-PA<-0^W8{v z)wPd@AZwd)-2=HYm@ig$>SV&z^?Q(Ko+mEuM%GzQbpHL~1k&TT<-d^YH*P9Hwrav= zf^zIK_*>p?jQQgs*IoQC7!pBxy7p}No8RS8BrjUI?`q7j9s3E_sbM=w&L)2S4dHyx zUk-n?5P59VtDPpg?fWn2rSF-`Rui2+Ug`5A^y`0wxMlkrT_$;P{2R=V{IoIhK^$`D zft8*MWX835Kze+v#=Nlp>8NA6S@UDC*WaykV#*Z6n{L<+`ER3guMl4!2!2HEu;RIQ z2sbTOogkcFxq<o7vv#9y@zfFUw`id-e!I{8es8yYvXkWH!y$+_{kHqw#LgXbj_j#r zu@?#IBj2Om@vNm+NuCWIw3eVQADBdZQ?3c>mk3rTi7p3sk0oehP9R>*`L52Ni(7Ak z-o<RhiB9&3Cw=*h=Qu&N>e4;p3%d*Bk=14)FZjMVj7Q~OybJl4suz-+{l}d<Xs>>N z`Xo0C)K{Ky0P|J)zm;uQ{wnG5*p?Z9qlV!3BUS%MG2!ZJI`%;<bpI^EWrMreN9iS7 z(SKHX67qyUz5G7$*}39055b)y+&mPx@0M(6I_P|1CG^8Y^g?{_8|7h7<<Gr9diLGT zrvO`IIk@#H_}8Q-;rCA^*JIo|ath{w51WSZ=`k;!Cq3D*&Wr#rRBxXRA!uhtWBz2# z@zI3qqA{rZJmNR_)iw-A9Ls4Vu<zi<{L)Fz{IC8K=<DBH9`_DhOSstA>zc<4S>?_b z0Y~)0ys9ehJWsYDG>+(^$@FO?uWzo|1ejXU&Cgq9p|5KnxJ7dI=b_I3ldGbhN<Mfi z^m`1zI9dLO#|bw}yX27_`RY)&Z#ft1{MRECbyHs-fqB&xTB3csa%3><|9;f1Pdn-$ zuGERTxn##Si^Dvyo=-&*&J$l+O7ilxUJ2lDb?3OMm}MBZ3_IZBvc%7-T@><3wCQ@7 z^z8gz$Wz(4I_jJ3`lqWe>f?1}PdwcK^KAEYE+pJs>{kFd;)B}+`Evu@IzMGK`X>)p z17CIa&xG8M8(rMaPmJ=Az1@exK(F#C;_(09lj-1oU$CFfbN)&!`j6!K=5#=L<P-Q$ zH*((}S>YEBd;R*MzOdmn(O>!DsTE{jyfp*unf7;10-tm9SCTio%b;$s?lqkMgZy_B zU(a>-L6}!O_X%ec+Z_Vkb1a7R<g``rZ|UzytZN4Hob79a`fOt+y81F@Ir4|~SaO*3 z?d^aB(l<eGTp-AY?ZUo7h>gfk<>#M8be&W*5%L!Yxb^g8<|d-6`n`{VUUDwINS};$ ztnfiS5><2elU(WV{JcW^R+3ktzH>k?GYft$Js(du54i|?4LckozG?S4;#7Qi7jegj z=VcO|e>p4~`k@I1uw3m#g0|pQ%qP3{JK{(6j-DUjrOSEqT|Cx%jChfCu3+43{jzZ4 z^QZDcU?<`-@=9clLqE*s@vv`dm)`(>_~f-DU;2KXcxuu@!p)AEs{otrh8_$5GYN7R zcbx})i93f)EK9;ZKzG@UdSNraaP_gxs!Jrt=ey??*7jwrpQ6djTRmj|pO8NYN>S0k z-rOqitC{~J=7S9xe30mR*w~3A$L5vY16Xnnp@?+vE!iENjuPE8`@_ZYdry!zdQo$% zcV=Z{<fH9z*wxj%v?#L6eA-?iJsbNo<kiI-#Eb0R=|AH034?&!eQDPSx39SGB;@7x zPJT*<JEYIMZny?JDRc8lPR%--L%2vN$ReD7UFh=V>%nITHw!jf;@ffCvI$pv?`0FN z!j2)2?X?0t7u!h-@f^WxpGUkJTl+TjDo;TBrbpUc!r7;7f%6LU^1$!o);+Op5cu++ zj+hUfUh^}^FDgJCwej1)=XD<64DgyMy$46P{TT6SYc0jP!dl1V5Z{!0c!u;<N+8A~ z){MaX+Dwr^biHvX{Hn@!K)mpn`N&_{BLMZp?h8TO*zSdM$ex<>@^rxKAMYi7dm<2i zF)8)X9}#pL>lAyw9o9{mtPhbqpDwqMyt?yIC}436;z!CA5rmr$Co90D%V7atTqeiB zzS;TW3BpCgz}bNFDq&vr{{LMjc^2~<;)sWTdV+BKU@7u|^*FPWa6arR#$z6}4kmrR zH)1<M5wve5@#W>khY7dchDH-qe!js(H<cLToIO7P@y~3Ri$vGmo<)7NRsJ`YaP~$v z>OkpzL-N*psCTw#a4zvJcjtntseQ0M@-`J75nT>y`!7M>_vupsUdY;yO(9$iy?>pc ze*O{aiYoaYR{Xjkm*jNMU!2`ZYeGn_^d5He*2)FYOWHSz<kaeD%%2E+=PKknS3o^9 zGw*naUs^YK`615#gI`J~x(r!_IwR-)6-Iix+)GJB=OyPtsIU9Qfd0aN;~_sa{9A%* z{wVlQ?@WQ8)WE4{q1U}_DnVBFMkqnkqGG(q3;8F@Qb13cjXGq*7r?JPW-a1`9jSku z<XF=k2LX5di2aP7Iv0Mjxz&-kX7s8=vZL$m!TyPTT=fp&vU^R$Ek8f@DB-H)++!Yk zDjD`x-@Hn6kukiOaIt3)`k{)d!yfN=E{^ENcP7>$7Lo%$>9<xMAi6Hvi20F~qAl4` z)hohJY~J!S#OD*zo!`b!x&-;Oid#sIb^8i-?DQ%N3735;B@i?PMIMqf>Uq>L5jA!m z(QVzgv7V^o324twO3fs?m=Njmyz8Z(NKf?qDT3(w#wpZ)d9QLF(OFzF=7X=yJxP4E za;G6^%4ETh{GV3H8y#6egP&9t^<3<K8U7b#iji;Xzg8LG2Yq;#pm=UJ=w`|5u0KJ= z$X9;3?Iq%~GuazG1Xq-Nzx37NT*9^QRg8yUOuhsD{-w~DC-0&Dm<Ih3f2Ms$_)D$7 z4tcRY1M@HbQpiVnCmiw0YnR8kS*%DWd$Pd;_}zRk{oepDZrcyZAi4;O|BWF3(a*(Q zC%+BA8*YSM74-IhgxfMBTwL_+gg9U|-TQB1d8;Jit50WQKcUMNCI=ASzBl}+znKSl z(|h<j*qt;GbwH{wk#{y^_Af+dV%uf#_2s>!U%KCr%}*~O+*as_yq2+h-FWl-TzsW` z7zz1SP0>HO=$|WuvyWQ>XR+_*5H9+@J0EiSD^Gj8xM}>|5#Y_HARpNJ4wxSm{RDot zu@CkTUp2VB8}fm5&JvU}CGtdnUI%{FNt?jeCO86e(b?ey*}U;_fF~<oBB(2Fxkk{2 zjM_<1re(N%o<8nq0P#~>!q2+m@9=~9U>cwpd;J{Ai!yT&M=bHEn~#k1?TD^FTY<X6 zF3gD|JFNG}T}0>8PlXaJegD~1egpkhqvKtCzd0QJv@^!9AU)mjDbyvoH1IU+j69P- zP;P!QkL>W@en33wS?=Bxk-8fGV^Qx%5nuG3;pSmc)o8-aH+}NnCB3iBCc^DeKg5SR z^-**H@h`jY(N$sH|A6QBMEzyCgI&LSE!_w^hjK!RZ*#-e5-v;c!D(?mjOb!WEb@}Q z?9O54-69d^D)>{hXIc-!xLMkJfbzNT50Rd_69imOsICZ?uZE$X>bZX$qIOt$0bGrH x<}l%^O;9jFd89e&T<Lcc?3eRs-vkFEZp7C$!(lIEd@w=wc5B3e_4_;B^M6YRh7SM$ diff --git a/bob/learn/misc/data/dataforMAP.hdf5 b/bob/learn/misc/data/dataforMAP.hdf5 deleted file mode 100644 index 9cd7bfe8533daab0a21ae20d342281ecf1afa977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259592 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⁢E=#~xrVhSv5 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 EfBs(Bi2wiq diff --git a/bob/learn/misc/data/faithful.torch3.hdf5 b/bob/learn/misc/data/faithful.torch3.hdf5 deleted file mode 100644 index a508318e6e8bcc528674ab7f9e3594f73ddb8367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21448 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 SvvL2%`dx^}VEy$AqvT)w#0)q9 diff --git a/bob/learn/misc/data/faithful.torch3_f64.hdf5 b/bob/learn/misc/data/faithful.torch3_f64.hdf5 deleted file mode 100644 index fe7f81b2bce427f6ab367cb6c7a2a6c1524e0528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23240 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 diff --git a/bob/learn/misc/data/gmm.init_means.hdf5 b/bob/learn/misc/data/gmm.init_means.hdf5 deleted file mode 100644 index 0b88738f3883e9b20c8eea20e2b278bf364498b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2176 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf(8zV2#gPtPk=HQp>zk7Ucm%mFfxE31A_!q zTo7tLy1I}cS62q0N|^aD8mf)KfCa*WIs+y=N{^5b@Njhu0C_b6>R(tYJpoN;uwY0m zDoU&ba$xDv113Qx&B(w8F$-!SBZCImBt|BP0L*$^G&3;egH#GC*fT)Vt^<P!H-pK4 zW{87WfubOJCMJl198mSlj0w=Bt^iR8C551-fb=w2O87G{WT42?niK5j?*huvP{%PS zK>a~$dq>S54S~@R7<wTfna1wE-AvHoO1bw!d(IGtHLF%>y{Kn!=&rPOPKxt(006^- BJyHMw diff --git a/bob/learn/misc/data/gmm.init_variances.hdf5 b/bob/learn/misc/data/gmm.init_variances.hdf5 deleted file mode 100644 index d0687a2ffc6bab5ea8b111c60cd112730af9b758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2176 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf(8zV2#gPtPk=HQp>zk7Ucm%mFfxE31A_!q zTo7tLy1I}cS62q0N|^aD8mf)KfCa*WIs+y=N{^5b@Njhu0C_b6>R(tYJpoN;uwY0m zDoU&ba$xDv113Qx&B(w8F$-!SBZCImBt|BP0L*$^G&3;egH#GC*fT)Vt^<P!H-pK4 zW{87WfubOJCMJl198mSlj0w=Bt^iR8C551-fb=w2O87G{WT42?niK5j?*huvP{%PS zK>a~$dq>S54S~@R7<wU~xF>l*F4s}}4c?heELM&V@3%jB)O2i{ec=YRIq{l~4gmL~ BKq~+M diff --git a/bob/learn/misc/data/gmm.init_weights.hdf5 b/bob/learn/misc/data/gmm.init_weights.hdf5 deleted file mode 100644 index 558faa66b67f5deb0550d2543372667ff45f1e70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2160 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf&vbR2#gPtPk=HQp>zk7Ucm%mFfxE31A_!q zTo7tLy1I}cS62q0N|^aD8mf)KfCa*WIs+y=N{^5b@Njhu0C_b6>R(tYJpoN;uwY0m zDoU&ba$xDv113Qx&B(w8F$-!SBQzy5GC~Ak*28FKpgc%MP{E!7l2#oUOt=|L{xd@y zzzP%v$uluAfeqk*s%K_QfF^C2&miiBpr(KnH&{yeGcZ&@BnF5K_VafE<!D$wRDk+x afSfaG?Pv&$hQJ^WfeJ8qV$Tl-*X;p$EH=~t diff --git a/bob/learn/misc/data/gmm_MAP.hdf5 b/bob/learn/misc/data/gmm_MAP.hdf5 deleted file mode 100644 index 91c5e69141e3042ef5d211fc4098a8d59649d62d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41136 zcmeI5O>7%Q6vyA%`7jM1DY=*+U@u4&t<)eD)Dk4NQd0RqLn#O>s@68Hi6a`PvJ+yU z(87Tvm5>mKs5cgIi9`_=T;KwgdMOtK5{JqMR6fLqRH+A0s2ZfOvoo)Bw;HdLbnR^V zPqaJpX5P-u{yb~FnKv_@OAYP0ZBzdy5`T#Vbx^Mx<<qkItJyMzWzNs4h@rw+6)wbN z#31oclvL@PRr!9sr}qyJlcUMybEqz(fesl<aRS1dia=_3_dfB!Y4z0H-p;9Z#xTY+ zrOaq<s!|!tl`2l6kjF|#rzVBq%2#s-eDZ@*o-T}y7FpeCk=<_ll_$|cw+J;dVzLHY z4-UEAvK)8XyNLHDoY%{}(sIw8jwI4!aam9gnXYW83k^5lpu>e1j^ri_bc=hHC?o0W z#bfbmr%V%9h{G-ZP8qlf`zL6GD5b8vF~L(KPYfB<sVER#?w94NYLj`ll&yPYxKrIW zt7O(ost<DKb5cRFAu{9Y0!_f*Begp;3M!eOy7&FYdhN;;-*@7hk=qN0JpmOutvIq8 z^W=~@ay~*3009sH0T2KI5CDN_6IjRnkuz%KK$xQ9a81#$`y;Ehqd$Zl9qktZwFdzZ z009sH0T2Lz6%x?-rTpX9L4K)o_sScaE4)9{HwFRrOV!llxK1i3KCo9N=-Qdz|52^~ za;0+chw_!arGG9O&%Uz#(C6JW^lhS2t>>RV;gpr6_%%_dgVmg0irr)EUtl?|{79S4 z$CSs&q8&Z7V_ErMZh(KP*JK2ao6Cu6`h%9#TH~4hQtWR!A5bj&Nxty)1O3(DV$8?= zIbK=yeJS;TH{CCpD&d`n{5k7G*7c|F3aH+U?NwlZ6t_3#?bU(=0w4eaAOHd&00JNo zRRR&{kEFLsxWY6Iy+5*AJ34QBTLA26FAqo{00JNY0w4eaAh6L0M8J-=AC}PDYDWjH zlStd%mH|83%L5V!fB*=900@8p2y8S0&Dzmy7xMfVmRm4C=8xSHy11n{LY*I@8;|CB zE4t6$w!JybheOQk@bZBK0w4eaAOHd&00L1buy#8-wEd4RT%BUy(0)#Z@)3+@#tXTU z*k9_UT-n)cDqoPd`CraV7R!Z7apK5fvGvqwrZiC=zkWX|wxhG5)RIVN_XmxiAG5s` z;(BrjyWh(P5(t0*2!H?xfB*<Yoq(_#g;~wx;vDjGojD+5CMO`gsR-!SJ#RTFF*s|L zvzD_#t<(Ff)(30$&wo$N?_KO(T>AaDM<<UGjTnjQHS3wH^#gs=$G`8-bj=KZGi7|X z_~Y$lebRNjT7Pe@_|;Dz-Ty1mt*2wBqOk5caZn-<U8T_18Ti*dfA?DBX2|`vn%Z|) zr){Z><eW}JrnCRZ8f~m+s_fZvW4(6e>iWsN->|M;Gd_;oKgPOe9WkVX00@8p2!H?x zfIzefH0vK@dyxClEVp2u*}kGg+>-u?&W;Y+KPV47I@&J+Y7YV+00JNY0w4eaD<lvB zJNlIR3Bk77(LwXJ(y*gf*z%wb0w4eaAOHd&00Pk_(5xNJ^AvbIn&lRZM_+hdA{Mt4 zhdU+Z`rnDOq}CeGy76e9x1uZl1C1TcoOm9M?s}wy00@8p2!H?xfB*<Yi@@6L=+M?Z zpI1}t1MKHiD8M)Tx@Xw^p|l$m3IZSi0w4eaAOHgEl|Zw0KhNLh@pG12Fn(^%OL)Tm z7q@N8_<7KL?pfdO>hicbbHe!fdVK>>FAx9$5C8!X009tK9Rbh&FZuM#&s?1T>&d0J zKE3qsm-p>@glNxlV!LPmm%*=JeD~yudHd{}XODe6wA?*Nv@6^7cD25B;m`W3m)}^3 KQ{SbIZT|sn8N8wZ diff --git a/bob/learn/misc/data/gmm_ML.hdf5 b/bob/learn/misc/data/gmm_ML.hdf5 deleted file mode 100644 index 238cd7e14f5e4ab92e505221f200cdba368cb593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41135 zcmeI5Uu+ab9LIlq+tPz-JmkRxgRT!v2$-}QG$1A(rX}|v75_von0h_S(Q87F=B|}f z{2LQ(eKIi;-Z<h*O)y--i#}jTc;SioU?RErfIzf_8Xna0rzUl0XMV^oncIW1cemx+ zW_RW{^V`|k&(2+bGryU+sbufA2Uo0FLE<kOr8bH=Q9doGzhh;Y!ZPO%s)(V&Nfk~< zWW*rxPZU?_D^>Ykz1Lsu>myr}%jZyCMm=pZmgEG4_Z5L;-_{-Cfm7<KxxJlM?TlfJ zrt|6H%tWy`lF1kCL?Msl$0o*w;K(;~dpz<}Qr@2(8P2h~-6A`j_A5`Kg{~87WJF{Q zxE>sGyJgw5+q;OzqV~tjxiaCL+igjtM@(5zCs~ecs0$4z-=N*uJ$p0bSz7K~CCZ39 zdS=8dwaYYdg*cqzAC`fWFq@}-qNKX=-UP4pzuaq3yP`mJZH+8fRhz6wrJPtR!%gb8 zgGy$-xO$PBc1Z=vhR8D21)6}rM=B3#6jU-lb?ocfdd<oe-*@7hk=qN0ojw&hsyMP5 z^W=~@ay~*3009sH0T2KI5CDO26KLW7$VoMFAWTtlIHqXO{gJ!1qmRIj4)+HEwFdzZ z009sH0T2LzJ0zg<OL@ny{rpm=ACot>?(qIlUm671FI7>G<2b48c+Ym3plfGd|3|5M z;YM-b=faIu^H*n$o$qzOb-aUm&qRx*>d@OC+hxVcyd`RPu<G+mv3rdD3oM(;kF?Ty zL3xZ4w6T*mE-3%YJ@8M(EJk3vx$LN>KbVkOi#)Smiv3MzeTrp2$@iXqptl-ajP;T? z$1SVAFD2Kz)4h_V625%Ko6{Pyu0PFwH(f11FS~QtAI0sBdAqeBfdB}A00@8p2!H?x zgq1)D`Xi|g60R^!1MiRM?C8}#FL<czR)8Jt<^c%=KmY_l00ck)1eO|s5ZKY>XC?He z+R=XNBvNH}%YYs2<^c%=KmY_l00ck)1eO|sdhKYo3weGF%MF+xGqY7f7q=8gpz~vN z<Iy~CMfd&>m)$wcheOQkaPxr#0w4eaAOHd&00Lnruy{K<u>FtD-JD`y(|%3{@(M=N zquESe>@W3BreN<iHI$XN`Cm?t=L*?kZr|SBV(Y2lbbeo9^!ELz*p40yq?SZFyWem8 z{Qa`KLR?P{VfVZFKmq{}009sH0T2LzuoDn=qcE#^T%1FGu9I)dn8gVQ?<)ejb<gX* zkQnT>%7Y1egIc@ySE_EQl+XV?ad7)w$K3oMzdt`dM$~UaOSi0NE>#Z<te-eP-TmpQ zUr${=@z0+p*3yfQESo7+znaSZ_}e#K7l|G?8aWh(b<fcOi9mFf0$*p~UHAOc2eq3a z_uDFJ-(8({LS@9KbQ&_9{YQ!6+Ip7Co-EYXYgVqVpX|Ht*~5|h$5{8=tT&1Kf&d7B z00@8p2!KGa1nTvVu|3HBXqFo=&um9dB4|i|L}y3)u6u?Z9c)8I=^y|CAOHd&00JP; zVgy29M;}r@A=p$q+Hc-g3U+jhwQN)e1V8`;KmY_l00e?1P_G@$^AvbIn&k$JN1yvp zA`rI}hchMR_TPz1NUcSlb>q=IZ$(%9VT~QloOm9M?s}wy00@8p2!H?xfB*=Di@@UT z=)l%JpH)-reeCCCAi$UWx@Xw^fwUVG3IZSi0w4eaAOHfbN}yi5pXYD$_&LiB7(cfT zN_fKl7q@N7__^PF?n%$@>hicbbHey}t9}AdFAx9$5C8!X009uVI|8o#UxrfezA?N1 zuUF<jJ9g#YA0FTQ9MQIgXt!(sm*dxCGf#ZiH8b|hw?}r(eN-{&={?K3O4SY1m#PP@ NeKKv*sw-_z{s-m$$DIHG diff --git a/bob/learn/misc/data/gmm_ML_32bit_debug.hdf5 b/bob/learn/misc/data/gmm_ML_32bit_debug.hdf5 deleted file mode 100644 index 275381b7e7573e060009a15220f092cfa323a1eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41135 zcmeI5UyKt)9LIm{-f@+aSmeQig6qR21W4{QNDv<^<c{=#{~B#DXRjXRdI?uZdk0li zASQap6E6_oSmH}bG&JEw9xx=l@MKIhku*La`fx@J4=N&%oI5-719r)D3&*zI<9nCg zncvKBXJ<b<ZGJPqndwxjf8&DrOXidKi^Zse;!c!LGwSb*B~w`D{2>*IsBlt+m8gtF zNc<BeRQf_yzE|(99RmYoYjXJ<s>`UaL&j2^fbfYTkQ!LOO+0W~JvFztORAkQjIm51 zGm@Psl}59LlAS2z(ZaroaUnSJ-P}Hp{IZk}<VHvGtZui+E~ov<lW3vKg&IYovIbla z4!Pa3Y}oBx#N#ph<K<kLbk3c&B+{dXEU24IM~<iqBTjyVcI9^O$&TmfDd#FtM#9lE zqDHw>rim-W;S~R@44i})td1>2DRt%J3EteYwLe0giUQHiC9+&qZ8D#ia&oB**Q(nN zDVg;W>P4>IDHS9eBGXV8XafEosXn7oP|5t%@#FRNT9qrl@5DDFw-*k(eJb>o;>c>u zlSAgn`3OM(1V8`;KmY_l00hEKppE+@7u3jsFh#}Tn4&@VM;_IVJ_S2E+#dwg9t1!D z1V8`;KmY_Dl7P-H<sHBF^GjV?CU0y$<o%&OHwds_s;VBxaZ=gwzRfa0*Ur5Dk8<tT zTcyDti?<ft{`Xqsoez88JKIJ5-^EJh+VJ~_?XnVN+!wVwSdICm*geMn1(prvM_OpU zp*%)OTHQ^nXO#ctG5DwACL^%jTy|8`A52QES)SQ1#r~$tKE<-1<Qq>v&|3{I#@yu1 zam%XjOQ{v^bgyKpgk!IIbJ|1J^{3hIrmN-WmOF?2QQY2`w_6Jm2!H?xfB*=900@9U zSP6unKayT4;R@3<@cxL-j$Z8Zf`=`)0_<ov4@e*Y0w4eaAOHd&FxLo#z>c=oNa!uK zqy5%Nq%C*LfF14T0SN>^00ck)1V8`;<{E)U?P#_Od43GbO_(1uy<S2Ww-iU9^J8@5 z(L8TO_x?{>?i}XBA?9_s`9J~z5C8!X009sHfv^*py&WCc{zq5tPO-0RKc@nD1!I}9 zT(%(gm)f5#+Ivk6=j3hf$(iwdF;~j(-Lp$<JvEXk>@AKxxE~eU(L;gMl1OLw`;DJ} zWVtKE_2dwCznc#v5C8!X009sH0T2i~0bw@^vzo`nIppWM@UD!RoPh9&BA{FMy!@!d zV6RmkO4=LL+P%MW?e(g4_3w!jn{Pbbb*EHXw$5Ipn~HUvyKg;nxpr`H#l+Q0@23}k zzWB%afBrnblr}s!Z@OIjVJiRaFJJcjMzmm6v=WAO&#^&?Ky;M?UuWQ5_x%0G^_wC0 z+p22cU7dDPWhAC_8Zw>zN6C@;dZx;rEY{a+Rj#g|?7QyS!;$;PSohqjH;Ma#00@8p z2!H?xfIzSW8ugE{J;?oNmYXooY+GI;Xi9%XXGi<4dxjkyY(quqAOHd&00JNY0wB<4 z1VUg(f1!Rtu%&ji-@L6f?C3UY*{BW(fB*=900@8p2n0)@Q9GLFDe!nS%S{-MzVeAg zAZ{rRXG+S0zY~{~TC+Us#-n-Oimv#R8atXf@jM#c^+*Q+5C8!X009sH0T2imf!W*9 zfvtPKtftue*w3jzfY14L&#?OgX*Vbo1V8`;KmY_l00i2VK%;g)&)??pbC#Pher}$S z@Pz#@ZrhUabHDlAlb+wz<#BW7gz@us{RE(1AOHd&00JNY0wC~c1YG;S45vSM``UrO zw%`8j%=J6xUVLpG(Z-oruWSF8v;W1XU;4Uddf!i{Pwl*MsA|wFyXW<kYbz_i*ACu1 MQZZ=J^^R5l12=!YeE<Le diff --git a/bob/learn/misc/data/gmm_ML_32bit_release.hdf5 b/bob/learn/misc/data/gmm_ML_32bit_release.hdf5 deleted file mode 100644 index 438e9932cecf179d1b834e2f5c19d39a7c906cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41135 zcmeI5O>7fK6vxNjgt(-r1`ah;(Cr}-BB}@#R1}cvpal6)C?6F>L8)Vci6aq%>;w!H z3gSRONc2+FTa0>11&Byo;1EFKk`t;_q#~;az79cvIJAZEA<>zgd6Zo=UPD;h8~%xQ zXWq=)+1cNYtvB;##z$f;E2mAJJ(Y>SP>9vAuob1#3-xz4FH=aS{7w}KsBl1qLqQn{ zF!9e=M5Rwx<vaDhTi4pkxF(fPp}LGU)yP<k5)i&u1Y)htYs3S$si&s)Hmceg!RU>r z<K2n=Y_=zn&hkVd_oR39_X)w0U*<MB<b_h+mF($GkveaYbyoY8C(%OZ2{jf7${J8T zD5Q2vvccQCh=)V`<7HhLwa&F%66rxh7F5qnOAe?D16F>3ZAot3mgq~e53H+184*j* z2pYLsnI^6fhgJLx8CVI;gEgxei>WK$O|X9Tw=Dryt0*uwK3kTns?E$#q#T_i!zJpr zok}LXh<cGr+NFYI!<cEP3p4?Jj|_jLQBcYB)Zw3t>s2aOeBX(0Mrtn<*1J^bwBkr= z#FIkeNcjjs00ck)1V8`;KmY{%O`wYVBbU|4fiOkIVVR;{_eb8=jy?%H+TR}p)E)#t z00ck)1V8`;-jIOKFXbG+cJoV(&XqSd-|+rWpBx0pFEy+l$8u8fc+)DGplfGN|3|KH z`)Ri0TIT7@XOHg(Htt#Q{kb~Uay69A6}mPb;AKUa@k*3;uuAhwk$a5%3nUxLk2Kx< zT6v73Y*9U1^g{Vx-hqEAY!U+Q=HgLJe=sVwCU_>l6#1L3yA(@)lJky!ptBlOjQNc- z$1bbBFN@8$r#mH6CH%D5nNuCIu0KtFH(f0c=j}P<kD~TQyzN?$KmY_l00ck)1V8`; z{7S$F{gJjt30Ih=p7%#|cJwTl7u=P%E5MGn^MC{bAOHd&00JNY0+Wq^5A5jtmlAqK z?P#}k5^Z^V%YYqi=K%=>KmY_l00ck)1ST7SQtfE63u%4~$z_-yGuAAji(87r)A=#F z@o1X2qI>^?d3z4=p%C*r?0g`B00@8p2!H?xfPmi#Ox%w4Z2zMhFQ?cSwVz|2yn^0% zZ!(b<`%CRiWcXfFT}gSH|K)gJDwE8nwr|@aww~&ar?+Q%U*C_4?C4HUYRQ<+?spqM z{~>R$5Y>}H*!^}skU#(gKmY_l00cn5?*xS1D9maa7pIV(>+&WUGbsV#dqqIE?s?u( ziGi<G?u_ycYI*N3S6Fr_f9s$A6RRG5Sob`eox7AT(v6MRjlQy;Iak=*F~9%T(1Jr( z{<?B+<lhG)bJ&WHr;Ozae;iL;y!mUx9mb}$1W);4-E*izA`o3A&(|3^*FFEfuXr=0 ze%r9xcUPw!RT+^ZIt`gl{-bDjaXnLI4`hn#RVr84Pj+4R?BGcKW2}3w)SJY8K>!3m z00ck)1VF%B0;T%L$R4DAG|6R{XSOCK5tOArqO+r2*FD3I_O_v-bPxam5C8!X009uF zG6FuZqkmC9Ay`p6+HKxe8|>&RYuTs{2!H?xfB*=900?+Xpj11W<|)v4G|6QckG`>A zA`rI}hczYT_1}q$O05Z=b>q=AZ$(%9pvI0SPBf23cRkWU00ck)1V8`;KmY{%MPTA~ zv}fy{ud6BcF7|WG6X276-81ZdPudL%1pyEM0T2KI5CDN{B~Yr}PxH5F{G8-6jGvn) zBs^jNi`!OY{M>Cm_kiPfb!pt3IAQ#}T0a4(7YKj=2!H?xfB*=*9Rb_^FY7yYZ@9nf z@3qg4oqhQH!lz#?<@>)J4=uOt|8nk0c<i$?4P!h0{Ox4>qaTM2_QlpI4Y@+&>AQu! O;|GTfHuG`K=l=mQ+`uOQ diff --git a/bob/learn/misc/data/means.hdf5 b/bob/learn/misc/data/means.hdf5 deleted file mode 100644 index 060afde0fb2777065d02c85baf8a34ec1d509fea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 zcmeHGYfM{J96z@$tS?Fn1<GSkA}YQB3G$M04hTz;LJ2R6CKCn<(?}E|vkMIN3MFd_ zRY#VM$rzw)ldO!1&<*dEN34l#Y;={a7+9FX5OAbOTR@Pm_kM66{jkKyxykvze*fP& z=bzuLlO*kSVf(OweKDDU0r-zxYTG1N4abq8Vyd1`Iv8n{r0t+N91Pe$07PV7K=MD1 z%g#(r23tsqpR!~d2xB-rCY9K>|Emc|k`prQ50;a!rc|mYbw&-NpscJwu@z8ylu(6# zX))mJ;35ez5d4S<qd5}P@!=%@<1u|p`F5m041q(t2t;r|#3tR*;Ix&s*J(5dA(O<@ zv3yeMViM`VyOAvR9%-~l20)3U@PziPbXk)9k0vh%{&~A6bcyX_wkNPXf&at=l+|jM ztH}e!)P27C;vRRjdLSOOT@a$08NsuI3LTXG=r0~S0uZ>?{7P|5E0nmURO+(UaFPGp zv#GJZsC1Aw_<i>dLVIq+6hiwIS5*i6z$*7dKQ-MC@X2yUm;4IlH`<+v4*f~p!HkEH z&A!>rw}_C|@Rnik)fqUYp8ckHY5*6G)IA+GMk8+23cT1xK5FnRi+3$zAzjR&CF`68 zSN?Kz`1-kJsEzFDZwVU475DB|H*swECx2YbHw8E$dHq^((>oq0A}q)Mw*o7iipjjM z9kxOu#vh8JJ&<~Vd913Fi*(<<yyltWgR)DfA4oA9WCkjNj>fOUTd&p<NpT#+Piy?R z@0Ks}PM(=-={DoE`n1mSJP%aSs$43|=Aq?{56V-7929AqPygM^8;KiRqrnb3I-B~M zM!xQg+OjcvM1%-|eLFKF{mrl;yrr8KK8gFyOBdaSL};|PtITCDKy8Kes-8<0n13Ns zU<)_H)oD>$`XB>Y2Tsff8z%6uz})Yo<FnA(e8+OH*A*4*53L<K&PAiAuFcFHzKtJj zpOo&eVG@ffbSLg>9wB+*x&9Cr26Fe59{WPcB34%>_3vvK#1&E1$W)U6HS}Jr`^eiJ zP2~h7cx@W-lij=fy}$eumdKUdo0>(aRDi)y$qYUknX-Old>U$_I@mi;o1y9{-J8$2 znW3?AK~|CHgtWnIvFeHq&+SsX3nl^4#cS+~o#zo}qqM8%3+}=U!>;OJ!U8>guIGH^ z%Oxg4-%xkTEchs^PWGO04EE-ge;Ql71RD&uU*f*I2*p=3O8E<$P^DisA2#t(d?8B{ zKj)4vD^4UH>TyBlzQ5!li7v$YE?A$7m`Gx4Zt2vF;vMV+Q=nlT_UeUkwx%`6E}FRP zXLUoo4+n;1D^}dH5p<sMIz~LN&_$imn{n=gibVB+CAdcr?zOKUpkd?j6*(Ov+NG|u e!f}icR$Af1k`27Z$ocGNjVscnii<l=G11>gW2_$l diff --git a/bob/learn/misc/data/meansAfterKMeans.hdf5 b/bob/learn/misc/data/meansAfterKMeans.hdf5 deleted file mode 100644 index 9552dd832998ee19062e4c0b28b335691af25269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3044 zcmeHGYfw{16uu!uL&OoRKm;pM1jT1TTL!}JLK753l&Uxu3ndk2@PSf@4?v)nhk*`0 z>KluwHOM$vM5ut|o-IW|YhkK!I!#ItK|l+l)YnidmLxYn>d*dg#wq8{>~|jDes}lG z+1z0H!m%P}5o0u=kg;a$Os-{l#o4_v=8Pq_)MGe@$DxYD5-YRAV~iieh`GEyr~f){ z<?^5)W|(Qww;;ETdC%JH2`z~c{9kn-I4CgOc;VIDtu0e}jhiz|GZcx5isa$IGLONQ z!hb{_Gs>*R3G$d3CMBMgIU(S5=WzIX%pab7Bhy~uI{dbbCSja}j8lfmXBYt^G}W!F z%z{FW&*#N(qn^d*s3sUc%r}}*v)Wg@jA7zT@tay!EL|oyzG&`njO1UZdsC+v`OioP zMmq2|bildzCawFk73-`T@rOUR61s0H4p?7>?Hp35h_Ays#VDHIvmaC;ZuF;F0wTy* zOlST2F_{^e3GJl^*m%?r8ZnRPyK+END<YcH{bWa8G4a%XL4(pqliodrw8UmER2K`W z$95U3NLAyqv07N<EkMp4^T;E=3Nq=6FD<T|MTPo6+Ng{`u8(W*wZV4iQ0nk8!FtfX zM3}$Az&`P4gEc4*rqnc3$E8bXrMicPFMC95*uAJP@G?#jK0x^aYSi$ZjIQ?UBJ;B| zsrZHq3C*4U!)^3Eh$If=>iS5M^x|*-Be!><`$KZ9xzG<`MdJd_N-`;J)x*WS3DS*Q zY;k$~J*t}QL!Q`e1<|HZlG0j0B=V!Mpo-8FN?Y>i+%YQLu$k;uItT2Pci`lTHrjh- zI(ZrwMY|6Klk-nbQP&5Ph|F3+z7jLUAex2;29ofSzzz6#%Op6{ScdgCr(^9?d)!jq z%x3udvPtJ(N#&cbpvb5$HnN}(xvD(DR+Yy3{1FE2KHez7=2q?VI3M=mFN@LItaJ$7 z^E=zP-2-$>*RYirI+1@)30ilW0AIF}y*Aq&Ce%M><5f+_i#2GN8gFnk#NZRjWvqAF zaZPP`J(>_53br;{Y1e`r^w+zmku3HYniEmyKX2CukQ~^cDZ1~0)IOtWX;&7z^~)Jl zCOt$Ig<?9GP>Y@1mXkWq$*gnGLRc^~hM=fy7~~@&y^~1tZFZ2pyY;v?p3t53H}Pz( z3vshn0=#bzmz>7q+QwMYeJ})1yp)GmC#vzFOFl&0@}gR06Kska2L;g$keDzATI&4B zl<Q8^;Ay}E<va1dPuy{dS0riqC>*`>Z9c1gv6fa}?8NZ76t63-!P_@9LF&mq|LOn% z?NCpnaobMfPVo>lw|oO3DM!JOLZG|25XY`Mh_YWEhR^VBynJIR9MQXhDn10Z<kjP} zTs1yB|1h-eKf?B`a)+};bMbT0*KEe2i+HZ;IO{Q0&(0KPf$VSqId#1kS48m0wt3z7 z=(@XX*VQu3M8l`>EczK+B?`g1jvXl6>oS~6cfnz2qEN=e&2YnE5x!H_3<asS;F$Is JuK)26{s-)Q@elw2 diff --git a/bob/learn/misc/data/meansAfterMAP.hdf5 b/bob/learn/misc/data/meansAfterMAP.hdf5 deleted file mode 100644 index ac4cb9383d10c223b26d16d686910c430cf71197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6336 zcmeH{eNYu;6vp4ny~s^8!SN$CaFuJL&G=D+jxy?9O^m6DP#MP=L>ERUC9^`wj|N@o zOB_THLsOAWp{|w!3V1c>zJiKhSb~aH>K2uf&_oblX|~VV-DdQ!rtzQZUS|01^PKaZ z_uaE+H#K6~^q$=Zc4zq6?aamk=+gXm&-n4jbjQ?YTrw^!2G<*O`RErGhCjxP<t)&s z|6pG9%<yogWt#O(8s*p+n|@_C4KM#!9f$~@5``O{W8AelrKgNJGn)~Ym>9Q86XrZd zn1O#t3+txWG74JQc&cQv>V~<GuTg)bL34f|^sU;PfHi@Flj*Z8vQU2(de5pa^wnI% zeXKrI+Rg;hRv+6+qZWKzVynMihu+2|f=k+hA{nE0Y3kwrW<|a@4R5r$v0$A0;qLO^ zuZHg(`e@FHNxR?QyLWfs{dqJjn)Tqkna}C|Y_IZmz}o?D2fQ8dcEH;KZwI^`@OHr4 zfqz*C)XMoAMD5J{WZI8ToPEoT0noyxgHIDX!b;%FL!$$r#o>ELaOf2S+dN=8Zw7_p z3jy#Y|KcY>aba`=d}Z8IM1H-DL-V>%o19=+;!#knYNmaqC*JZCHO+))dxGNXBWDp8 zZY=iU(C%e={bl~gY5n!+;~vdtCFcf-h{spBsoooxPQq7*Bz+F8zPykqA87iJ@-2=O zP^$mRmuuw0#YSk}V@?$)Rt|QPPM_J~)U;ZdO!ukopSl6Q+VqTGzk78Fw46S@5P6ET ztO}IZ&AS3J<|sm(r#2se<{@>R&{9RJ-j~wlccIx&4Mf%5UW7b#QbZl7^cqr5?Bgm1 zrK?G|JcvJ6bqAW~zxE3>k6%?!@e$27u4#7U<IC`6OWt?z#qlrPrnoIP7gRTe>F2$c zdkR|aKkm8*c?~TVQKQgj0o9f3V!npY<1^zauW{oskd<z{17EsOPtQ#V-hCcgSocZ; z;>s5>EufrYuZ1t(Y`Y2atn_c;tFdESpk-$@&4HQ`X%!LASo96z^3r}(pXGFXPda%2 zZRAVIz4iJ@lUt#ckQ};iF;!?po)BnNK~cI!>lCFMCmp^oALR3+^m+0BqtK&imXb*G zB{>dNBhIFMM$eOH&;5wjo#^@!l#aSCAfI;?6_8)!C?%d*L-QoM&d@qx!cGM~zxsO~ z@sR^dK$h<+^T3a4%mmfoT28FEy_?vPy%iMR49x&}{lXJYjnc$8nlpKJ^4rkj#?gBz z&oMZU@=m`?`^bF;Z>PAmv<8%}w9|RSga#M+*?kX#Jaekz(a2h6(>mohTPA$v{QHOC z^U+z<7iFT2=9R5!mJwGYR_J}1KXeu}&-sD+s4U3549ylzpywmZD@cQu!k*s@%4&YO zN27AGQ~y2$y?zRsO&qGfCu7Q~|MIzVs;3UJ??+sAoxX(iQqSOgTHh312`#5iq4O)l z66pTbcWxX;oTasuATD&Q=aip0jwm`VQop3tzfvEC&KbqXQ@71?gK~Qi?JM5uTLdj8 z%sqkia`p#AKDtL7w7Ty6OQ2BGRY8opOV39R8Bk66VUMnKYH?{(Ybmtomrz7`{T5SS zh59mmUREzz4xf)Y8%q=-DPQRJs^ZjqdF-Se<fjBvzonYl^nNN!V`#m6?B_Gc6DIek z`&aUomqGK^=`@E@$vx_)a;;sTpR`cDU)#68NA>-hT&OR#AE)_d(QEfW^PE;XC#$V5 zfEL$YIfQ)0*R}(ctN~ldcMs2k=93y%LGxLU?}BC{)AjjL(rC`*!kB&VCG{4~rLt=j zJr5RFu!q(MG;Ae0LiO+SjmCW*Enkdm*7r;9l?5$?<W_>pwjlj{ox_e`ow_DvCwytR xFYP1N3UppU@lgN7tNk}4E`Jhx5aeBq&LPDmQ9Y?;{4vzwzOhtCY05q5{1fCXo>~9^ diff --git a/bob/learn/misc/data/meansAfterML.hdf5 b/bob/learn/misc/data/meansAfterML.hdf5 deleted file mode 100644 index 857bbe39c29cbb76f18aed3798ce484ed2bcb67d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3944 zcmeH{eNa?Y7{<@Ci*A~sj-RD?6P&ST6sJ~FM%`<Pt(ic{I2ob`$Bf9V9G%2Qy)s!c z0|HX0C~`v3l~P0mL8ZOmCw^dpsZ5$TDRpycLQp=^Y@heuooW2D8UJWvnc;Vz=Y7w6 z&Ux><o9vh}wO5a)doX;gR%T(n>CyM^q49|i&>f%l#kuidGPus5(@%deG5j$$$ng6Z z^&icPelt9rc{6?WeKeM_F&6#F>NC3dzv_S^d~y^n{FZTR-;|y-=FHcOxFt*C61~DV zj}BkpU(&?7>9vf4CN`2Pnf!Fa->5sv;G^2?oqS~Wk?c&LU76W>GTTG5zQEt>BJSs> z7qlArW)n9?-P+wKP3UV>!5UlGph(8z{~3Pl&od(;r{EiH9F9rGJs$hUT^n?DpsNG_ z#SUmS{D#YWaB20KBX(S%qI?&~=hWweV)mUXP=0;$N%DtmIp>0YJ~9@R)=jShdHBtP z<f{#*?9lOY4YV@NaR^#@r9G3_d?6jal$uir%F||SCqKwh49%l^(K*EXSN6b{l3Qti zp1AdUXnyzHUgRkY))M*7yQP#@`E~`xJ$ZScoE^CaR6;yOpjQ1-nafLcQz_;17r%8u zD=7`NlxJRe2%23Vyq@w>d+Y|~g{MnMN4nGOh!+RYx%l$g)zGpnb_e1-bo4QbZwuWI z&0ZMbBz^Q%x|bSsse|&Wlii>wTl#?VesdGG^0s2+YZD!pKoRh4C9$7#Kgb)F-EtxR z+KKznYQaZ;K&$f;8!7%=vqkl4R<ZLUe8rT19lktn#%+pQa&ti~Eo?6+uIAGFR0f9r z<U*di#Uy(v^;<x7l}j-{!dK^K%tyZBNu~F|%2Myc=jR)5z?TB^YN4eyAGo2#xtJDE zNwU_%mv7#?396ave}=Ecj%|Tf>}Q)ur$?A&#M9%iKr4#}P<@uu{tM~A-M5j?SN7HG zFPqc~ErN3B-g2_!L7vpdtbsDWO6!E^rjiaXECAJcQAb@~vYvm@+_0o2r{VM9lCvP2 za;Ow>HEYfeX!%&DK5qw|=gIFZra6-9g3Bm=YSq{9W#=hcCyn1K;HwRP()UJvV$ULI zR^U90JT=Ob0cwHuDzW-@9<e=ZBPe}pO9$1)cW93Igt+6-%B+>2*}argLv~SK@UVQ! ztNEPvQTh$brntGR4&;~H=sa?Qo90i>>VE*fn(?y0I@U6a)``284EUn<s}lHXNGA0~ zOt8>=vsKLs;+o?Vy)W~I&xBTUex*K&1sNBiS^Ri<KhoTy6lfkceFLay1(hx@#qo}2 zP#XI2Nsvt#euCm-Dyjd<nM$gsJ!7Tso8qkb0dd|dumJg@DVlx{l;p{Dela3}?ys%A zc7W=o+$%-C)V@xo{ESed9DITL#aG;+K1v;L>_?uqX>K{Fv<;<w<y-xWq2+`*$FN?> z+DueKo{WRm*3`ZWN_Cyp#Ha`Kew3iWXDL7IspWQWoTs(Y?~B|$p_uXpyhnYN8V~F9 zvSQIv`0D7>u|z3?@}+Jc3anSgPTWF%QXuu4*Uh5ur&t_A>y@hC>33C{G?4Bu@|PaQ zI<<8w%^@#+Nc|L7+w}QKvFZKF&i;bxcW-i{K5sip^Ub1HZ>RloTIrmuzOe{eUVXU) z`NH3_1?1-5Uy@%wG80;z=t+cDXAap0%|@-)=SQT_oGW`{3gL6@7R{yDHk#fCi!0hr z>wCL55`%5uf!Z}sq037-qFLW>Wk4ph6qI`e6q|<X=j#|zLHVnaw!-Hl{b?V$UZV3# p!bSa)8wPGbT=^z;AE<URItPziM)i2hxGL09{bQ+)Xv*DZ{~Jnafj|HN diff --git a/bob/learn/misc/data/new_adapted_mean.hdf5 b/bob/learn/misc/data/new_adapted_mean.hdf5 deleted file mode 100644 index fc4a8ee30af0d8531302133b2bd2595df07139b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf(CAg2#gPtPk=HQp>zk7Ucm%mFfxE31A_!q zTo7tLy1I}cS62q0N|^aD8mf)KfCa+hfC-G!BPs+uTpa^I9*%(e8kR~=K+_p4FcOQ3 z5-WimSbFq;Nsvi1GO$6+f*Q!kpaC|CkqIJT1T`1t40Jv-Fy(_(3M$w$K+>)Qg9$f- z$$w^uMpmFGNS=uaVju@pJu_nhG^r~<RYKGYK}`Ya$+D90XJE*HNYIH4_VafE<!Gqm z7*JhDCr6B0Ga3S;AuuFDz}!1z@qs*HhaZQgzR|dHXaBXp#<Fh-JPrnmVf%b;ys$sC zugIdqPSD}U{F~n&?%;PQIG<*``0T#@Ddqa@N4j|&7EQ0xs|f#Te___1=dYTs?iaXn zN8542@%?p6@B5TDa2#lGpCkE0`0f68Jq|Z**6<zJs?5%{>yo5{hqmTkJzf?Ejbi7E z2CIJV7Z&qro!7y6psG+#rc&n7{$JnjpU9rba-iU8cy`WbVTUaewPzp95p)p!<mRP$ zm&akkj@6xolEMxyT>OjsAN}0_AXLRs{QtH6X`dz@-goh{{fy0SdnK2BwO>BTHTmv6 zVTX)}4xWn>-`US&YH;Ct`_sOolHstv$MgL^?uY%1zW&Vqf|=)^<{OXgzleFnx9oeo ze}nl7F4@_i?N1yldc*roz@bNZSCpF2XM5@VR;!+W><-sz-ujnCvN~{@9MxdF_<a8c z4K9VAEkE}=L}WgE68_XaY-69W;C+Sz<_kLvY9G9}-^e#@r_~$21N*I1w4P7?v44U2 zhF>caZ`pr;E}0^*?vH)I72A4^1K;h7SOTx47Kl2CNu3K_F3od5`RSv`1(!bC-_Z~6 zTkHRQ|7sI6pDvA0_7^xi{j;uJwpUJ>z9u41)L}<t@g%GCkM@VkW;coiusTe*a#fcn z?VUX%!+xcxG;s%o-2r(5Z~xm@oYj&I%wTcoIq~Il(`^BVszsl*Lh8TU+a+^Ow0kA& z;9Xby_?8}r!=}oqPL11mf${xMPxpY7!{?oUBlMhj59kQze@Jloy8n-@eSeq(hl8zQ znzH^z5eJW-^B1n2cwzq)aY5~W8#x?Sa5>&qyz<AMZ&NnAwhoWOjuRp_Kj-|m-&osl z@OXuU16RtOO)@`(9OhZv4|}|u$$_un&=LP{KlbbNf9;yISj6G`Kb4g%UW^CkY|l1- zp)cZ~Rk_Q2?upO)8LkMX#K_;a=XqJ?)K~S<eumk!do1c#_s0nuiD&L*aA-QObEq&% z)Zys0?r#yyj0cYG>{5L-<G=k<AO062Hy95@CLVX0`|6#&NX-xX4;laV2ktC**d+Sg ezTq18<m(gp9dzcnT@!L(a@ggqkiKFThXVk8lCf(5 diff --git a/bob/learn/misc/data/samplesFrom2G_f64.hdf5 b/bob/learn/misc/data/samplesFrom2G_f64.hdf5 deleted file mode 100644 index 9ef47fd649fde13d36a15a6ebde122c31047b31b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18576 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 diff --git a/bob/learn/misc/data/stats.hdf5 b/bob/learn/misc/data/stats.hdf5 deleted file mode 100644 index c4a13700ec20079fdaacbd3841e8289910e9dd82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22635 zcmeI4Ur19?9LLYy)mqMMY7ff{)=O#ipk=jQbPKJK%%ptiZO%X0a!q3zgI?;PGJ<?H zLWFt=La?ZZz#xjCFfa%yh7UyqK9)fwQFhOt-yp}`z4!+<`cCfoopXM_^SgJSon3yv zbI-gUY&^2DsG^ARm($4#m|Ik-SX8gxQ?iHJq;FRhP01l8?>S^eWBiXXkLoW~{+HUd zooH%eh9&tYsfMwd0$FRN4#@wCK(HwwKKcpuuGMs8a}Ba1nYt05DzAUs`QSz5a_HLU zH^r5A_l)j3xNUUq>xJQkqhnw0++_3PB`=ey+n&wyv*VL9pQ6o+&u{IU_RS6zy-y5R z_t*UX(LTN9N~nan4!L(qzZzRF=C3UH46PCh%^_zz&3lqGZ>g;t^PSh-PUGt(M*2lr zXta30Lzj+R%q!ZO8mI}q#=5#s$07sWY=aoZeRzbO?$DEkvX778hj3peh3Ke#^e)6$ zP>oz2akAxjBWL1O?tWHe_v=^c5B1sY=>9OVDZ8Cy$e35pZdaw${vFxvd`dl3o86A? zJ8zF=x3jC|_d9-Pr1?V9W#M2qO?+jiri=Kzc^C1qa04|6fB*=900@8p2!KGI5U`t% zsPsD>Us79F`9rC<LB)!GR_9`Miz=R8g}mgMTe9S#DL<_UNi*{jzqDFmX%<IQK4Iqm zfJq!poDfHwkwZTSfB*=900@8p2;?ULyKywFuhRM~wbyW6-&rY<@>B7{Bz_LADtNOv zy4d0@VUswTI3bR<00=b*fB*=900@8p2;>=o9FC(~(_46QAda@$*WpDRoo6#2mkR<Q z00JNY0w4eaD<hB@NBe|BO_wXFw4O@)6G+m!G_^^t-98VwPhEEujO>+fnO_<|EkDxB zy_x$xs-(5e(ri7t+UEFg1VY)H@k?K@O}{V$0T2KI5C8!X009sH0T9SN0-5=g%s=e^ zZdd-!b`AH*kN71vo|^DOq#~Jlld_VwD=y>Vp2%P#5skzX!dF~*Y*R8Gj>h{32c**I zOAMZCO&T)R*AtFKdt=cveSKZjZzw3QTJrcpd0W0P%l}F(T(&H^5V}5+$oDJ&LJa~S z00JNY0w4eac}5^J?)Qmzki*YWJ~m6nJVed8=P0l693{`b0k~Wc009sH0T2KI5C8!X zSU!Pds<Y#gG2FxSf2#K<COiK4_D=-@XP+KEe|1b}zJ+z$lc`@9zt2CM3G|jQw)J)4 RlVqyAy^9(DTWFY-{RJE@c(MQh diff --git a/bob/learn/misc/data/variances.hdf5 b/bob/learn/misc/data/variances.hdf5 deleted file mode 100644 index c9d6d17bcf73be3bb7800d14604a0201b16f4ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 zcmeHGYfO_@82&D_)RuA)9Yhx{VxWpTrf4OI@9PA{C=LaLx`hF5ph5xyDoP}FfJO%s z<W68}Ho}S%H*jIZZ8*_6o2fJ`fUJTmZVL#uR7wZE&{6yK$Nae;Cd)Wqa^BnXKIfb_ z&vzywG@Q>}#w9F^!y)Vl=jX0%Gc!xVvu13ut)9#{Bx6rAR!UhNlCXRP;m+h;82%S= zaWP?G#5~f*Z?jAr5nyNaIJU%s{a;NWB5d1E%Y((tt8FU1!|2R5jFg<5lw<ROO^*?_ z!oRd6!M1WSgd`z&&O}nygzfnC4F8KUJ+FKV(!~o1t9FqH<Pm{p+S<UH&sypfWhLY= zc$!RRr0&Hat@y<Zi=`)OvwJi_?6($P(jNPEbg1QzW-dqk^L8)k5(~#HOkiOG|A`3{ ze^v9;*HI4-&Ka9}<s_;(UzZwg(O7rlol1Q^fuG$K`)5{6!CCt>XDZhoUHZN-Y#Y$P z)Ehezj_lI{-5IQj%Q3=)Ki6wZoCz8er+s`C_UKR?B$OLTEUfxq`iD{qH-5vt_N<de zx+bY=S-KA5*R+ld3a6pI_Res7G7AHH!Va9h!a`BJA>}oN4pgE#(OLzG0S1WG{X$}K zL>kvGi@;k{pKL`JfvTfFmwf&)fz{V$rg4tI&{+Pk#)F03m&19@>nObN$(rho{(nK) zpRA0dO*9UQ3+=T<cDO0er0(rv<Bs>b0_qN%AoHH=_TW+qbGIH(b*f^c%ZAlgxsQwx zSeKXDnm7&KirnE7Vlz0n7O)ZoGawc_8k^4RVQ$0npXy}>&}H}U{+&Z%vfuVY#~;$T zvS{;YN0=6NrjDyTZp=a&d;GR?KZUOpxL!IW(!<*Op(R0GG?q*_g?s#Jgo^RUH<DOv zth=}?SY@1o{=Fwd3KTrNslD={T)@XTsbodSB#C}AI8pOJ1FKz=&GiR)DBJp7N4Ina zGU&2PE#^tc?}^;QA7bIb&R9=LsUF;#I}Y%E9D`G18E+<d&qC11_pO|7HBjj_b$<zO z1{&@Blv2eaTs0Z;zVGW=h|#*G@ek8zu5{?^qI8gyB}kY}8HE7lx=bIv3G%O>FCXwz zf+TzIk)kCd5HsO>S0p2_F>5ZpS7L%*x4>@Ig-Iayh_ee7PB`);YHZA32lpygeH5?e z;>976;+Wh4-%8*wm-eV(C4J88QTaH;J>2p*K=%aNJo{Z*hIDW>npjLp$6;LP7`?QN zj}5hSw{m0-D%1k8hubqyjw-!dgug-WDW4d(P7-TBRgATj+M!(7AS_g~ao6^Or_Qt! zo|GA;<f&%pt9})uDp-iYg2X(53O3bx2M(0~0lVEBzHA>hL3>eT_ae_pSg(6G>GVwv Uq&w4X*P9*ja-<}6XrBrG2LAP`#Q*>R diff --git a/bob/learn/misc/data/variancesAfterKMeans.hdf5 b/bob/learn/misc/data/variancesAfterKMeans.hdf5 deleted file mode 100644 index 2aee23c0ef021e383d34ef2ca47175ecf165a6e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3044 zcmeHGYfzL`82)y-xWg?FVgZ5O<T?cm5ac54c@6>_f?QUJOEW5{8JU3~qK&EC94?X~ ztO{Zvmr2qb6^95UXSt{hra>4H5rray#4I2~xJD8S-~Py-{cxs<_nSG-dwI_Do%7Cn z@&f%O`Z^XmjLLXCMw2mIbk)l|Ys0!r8Fj3#$FUBF#atF^xl0a*QGE<!#^#M!{TF$W z8v_EE1*TeGjqEnYRddPXsT0fizv@6>fN!|!!ZGZv)l=HR&Y8Ly@hK_sA1?&zc??t+ z{v~o4?IkT%ki$4GDsi|=2`yIFnZ*}ljfKfqF^z<Rg}0?LA;ae}{KJbr!)P(Q#X6U} zB*<g=8k{(G)U!2M>LRRM;Hylf`OwQOjA0TM<CnEWgogR6UNn0+M);4@y{uC#|7W=a z%N_VHbYSbrEI23=@yPxZ(&OL2u}^)Vo!mpp4!WQrzZQ{OeBpHeI)a}Rq0rBOR+LzP z=b{hSAF3c4DML=(3=y@);;_k0+}6{hlHxBAZfQ=HsT*jdq!ANVC75QKNrBxg@s-BG zPuhr7uiweYIvz&n?;xm8i+a>&z^p}+%GV3%%n?4F3NobYCK#%4>PCN&DgCmo5?R9p z{$87)v+{EYIsIbSH&2N>uJ@APb|w(p)AmGmwnpr6^{LpV)RJU39K*zO4jtbirMXQ4 za;~nO47L=IwV^IV*jpifXdx$_H_wyFq9k(Vnv%%sZ$n{UNz-RE5iG9~GdI={`dY8p zdR|U$glIs{*+H7=XGFl4AZq(G()`>=$AwIiv+V%x@=9pJfo*isSPqvbpOE2K1~BUS z9y<6Rka0JLZs-~#SAUrx%7f9E_*owTMgfot1u(60hvQaVNPiXJalQn0EwP}+d(lpV zP<UB{rcOsh2+R@RZio}fe0UG*;X&ow(2UrRyWEcu+iC`7y8~h-EO2i&25BZXFp2a9 zH^UUgUHv3=PcJb&YL2LAYbaAf(Iz)W>6Uj;mf?nr$<B!A_Qs*a)!2SA49{dDeA~{) zT(cWGjSNv5vI?uK6~w^!87a6&XwFZkQBu={dHZS%_f8@ItR~HMD1)`<Bm&BcAR7Dz z5>HF|wD>WKoOS8`y*5<weHcx%GN5DModL~khHOs<27AhI3th-eI|mJ!kpB7HgpOR8 zf@RPc(!6bHwf7^uW&A2VF+GnK=LRI)Uqzi0cyxDACw4u^#Ko+yF;K05sQE`k?R%Zd zuC?O4)hK)iLa5C~9&IZPr?f5<DH>Af+zLbOyKYdpJEC!@AKByOm{sOsP15_2UG{-{ z%x3f*w}rReF32785I>Xw_s(Dpwlt$^=n|B1#t5d`D9<v5&mCJdCR-wUg(*t@O2S-n z1<uSC!~9S?B-}xKHFpUyM|;q(NQeIVZZcoPg-(4I`l9y1EagKKNj<P)d?(sAc_DH4 UaX1+iV)Gy6xU#kqL82=B4Vfgb#{d8T diff --git a/bob/learn/misc/data/variancesAfterMAP.hdf5 b/bob/learn/misc/data/variancesAfterMAP.hdf5 deleted file mode 100644 index 47bd4d5f823882eb7de61f3b67946c81acc0e82f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6336 zcmeHHeN0wW7(eg(qFq6pFBX{7yb>03TG*K45;-Q=yId50G+<7Te-KeB#s+>g^R}Ad z$gOnw5ump<mBgVTN?_T^5EN~h=2t3S1U1t9zzGH}y3g<2+opfD=0DZ@vhlmmbDr~i zp7VR2b5;bBCx?d)3T5=uG#0}8<J0}u<NV}6<#BCyT{s^e2MZl6^QsRIqd&%+?ac4+ z-yb)9YDx;TBVB$M9Xb{lqP{fO5ybzM0)do?FVlh3om0D0dcc`8SByD%d2<%qhC7b| zci|tRhxJxm4xxu7fXU-i4mVFPhkulV?)={G_t`gr_W1QAre>M5_%IgV<5L@Z*<M=r z`n;glm=4?L4O!%Hk)J*()nC^k!uh1dxgA4N8G~H5^<aO~QeR4@8|^06ow^@vmj6B* zy?3OeJ0~t`5B<Hff9bzB4#Q%*?w>cePxnR#t)K!y1%e6$6$mO2R3NB8P=TNVK?VM8 z3dDC@PqJ&4nH!r4MO)x5up!LD=`4r0bdk-pSx11)V@?tBJ-cqhuKMB+LMwbd<2JH_ zgI+?TE#5~c*5!iFjM#XC;>@&>$YY#cW?^4P<W)kRl>9r^zexg*75yvnn^7W!c+7Dv zUP68QMP+9v0QD_*kl!5K2p(B{_X_y7t@)Wy6y>!NvY1-r)nh_0z<+5Y>epW%=H>RX zeC;Xl@uHK+EAzOjf8}8K<&KYGTis6s`7?>wXH6Q=LwtH(NjrGi&=x{oRCA5coNY7_ zvN*m6m{VT~TzC@ovGnlo$+lXL))5-3R#y@7Cn9YnY<u|X?+E3M6E|U>Q~I!`k)fR8 z(mJuu($}CbY{I%95m$e3KOw8{+KK(Md|0>j`U(D7?Z_+h$DBueRmUCpn_?a&UbbTc z`osIAqaG$Z>#-hFSBv=8q2M#Ca}dYI%ERzSmK`IMt^0mKe9>I=$Cw|h_Giw(9Pxs= zm^*8rX8`ie%k4`jmw8nkfek-k|J`@G3H2eH(O=dXjk<YaZ#8dWnYJSK`tEL^Rnc&U zY_aIF($fl8eMoFUJ~k{%<==mL1H~CLc9s%a(Mu(8?C2AOa_gBkLY+6OIbHgqI;U2R zb8@*HebloCe}aA6Qc4KTI|=33-{jv%Xm}<ZhpoL0J>;aZYA&@L%%e3S3bw3iK;PJf z%H0&NZ|bTBu3hmNcq+<FLY~?He)im|?eL#}19e!*dl4^}9sP>@Y;@gG#Mjhc0`?t` zxtCfw=F=>n4cm;GqWa%F3VLz>TFj}aXoVhZ_>CIcucuBy9^<VyH<4`)k4F7`yy(qs zTf}52U5;z$4@>U3MRCR>tI=1hdOZ59hqdB<8KcJh2A-^)XMq_D)jSnH4*m71X?QR6 zTZv)B&ra=&AT*c90Y%2jeq<Z#%JIJNh3&Zaq97lA(y!MlJv(1LN>eM;`skO04r; z#p=CDDAb6@ydc#4<<3|07?tlQzfAF~ywkV#C!3$mR_{~XW2n!HErouv?gi+<VvjXa zJ~1f!5Fr~~rTQ>nGx8hlPhuYByK6dVT_0D9_r*Fe6a0FKhI=g{(p28quP;*^uef~? ze8+OoKbgItfov<i1nXvT2K3`w3vq8`+Y-Ec;@Ujbr|tsWKk-rBx7cTVi2AH@20kPI z)6?WPuN{JJdT9xCvl31L*_2xF>934{exhu_0g4w%mAeSpiU3ePI&Uxhd6|l*<s9k~ zGoM8sUfEyu=TH`O5l5!sJ<{KARCexF++)%4xvJ~pRJ<o<pCy<t@!sTv#BWV}9`h)> r3e|k}OT>K>BLb@LTNY!Vi2MNWuXVE;^KOVboKrStK^Mz9aXjfyS2|QV diff --git a/bob/learn/misc/data/variancesAfterML.hdf5 b/bob/learn/misc/data/variancesAfterML.hdf5 deleted file mode 100644 index 472229290b53eb34728dac334a7addb635d314a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3944 zcmeHHeN0wW7(efe+7-kE3(Q$w35z)`XiTs~jtTZImWCe<nA77Qgp`P}foU^us~L{m zN|#!E-PTkRhlVHv%T9(MXv-uO6Y(OTk%ov93|MrZ-?{JB{IktJTD)xh?(_9~p7T7< zIa@q&^Zk7%`ZD@y8XLjJ;nVwX$oZ{$SZTbn*Djn7mxH+umblf2i_srr6C8bj!+*cu zl11_H%=Yy1d(jDF;Um<S=2Z;i|EdF?__?prfs>q5d$;tYvuECBtjx+<x!xAM`{?l+ z{w2EDD8=Ovx>y*PTyCWp>F~~Q@P66H-hA>5&|{g}UCtu?Smcn83K(f?$?kS5Le25_ zaS3PDwTB#PK%m1yF_F(tSjgC_f0`fo_u>T$<LE{^#WCGE#{*A1oM5;E!yWifb|A9% zR;*pPOet<96rG+yV4a_f(}7O!?I)RO%g+E?XEqV?qlfQ8uK4;dLd*X%#%*Ld^=?9= zGt!4p?8*e68Ccv+erDoy<T08zS%~Wmx=F}m<Nk#GyIAm8A-^NP87xK+k2$N&O{gE} zP;y!{P~UqG`OQfU;F0-*H^8@l$FGDUFRPu9g;pc49_o7)`fJ6gUw>nYo7-l&>KX9y zybH)Hv$(2%>m=yq!A~Ju1J45ab1{gs=8YdBK0T|T2fS=@8zIlD>LN5(7%hY>oF4_I z*Omj<T|j*-$^S=^t@g7ugvPe*6@>h$AiEQ`JazjIgtGhmZOE5Ze^|?OUrv6BeXz5n z9heK7v+HO0)z+UNWVQW=5Wn09cDrA{K)<{Pd1dy@EAX%Ay$5|u=p)3-4i;fPd~_1( zVY06l_RyMY__t36pIMm>KNclVLmyPqNGRKn{|5iO)tHa5CQQYrEX5x2oYmMnYl3S$ z@?~U>A(Wfkst!-lPlz9UZ-7vLd=KW!`a)1Qj~S)*%`e67h;2VI0JO^LE|DzWzOMRd z`Kvj^v>_jxlB)8bxL8Df#?nKDgjUE#35<$3Pbl|Y>Lk>8tJ>3zuc&isl{hDtn=wZ{ zb<*dE+aF&*Xx@u1MSM%ZaYDm2=Nx41UGziFi&A^3rDGqhIl+)+RUPKWu9hDme|>j< zC2;4KFTqn*ViNKNb>L?&ZaV<|l{Zm`6?Y8&a?{ywNY5f_&ceT{_8M@^Z0x<%O0l12 z=?chZaDtkD>kRaZ2kgY2in4a}gH7$OqIi8l0`eH|ytSKTb7~0c=d;BqZp$JxS@q?d zhWW6#p*!SfJh~lowJK+0&bnVa?w2uR<{#imJ=6?LUZ?gc|4H;;UzCXVLcbH^NBpem zcp#y<IUFdGw~i&**j0-6g|F+uy%#yzn3I01TJ^K<^$Wx=Lv-ZPZ)}B~AI?|rO?0kC zJmyuQ_Ahgd+Q;DR0Mg6&0F`&izHub;<}~#_g+GD%tgu4#Pu9GQez35{2FfQUrkx^W z5fy3<<M$xH(epI+QNF*Um+bniLcA~5$z|Zz3pCto5tyj*hJAaT{CL^j4)8UmV}3Gi zZ5_#0QUUB{elq&U_vPZ=$j%LT_e58Qn$tiI?w|Oi=6l2$AEQ32l!4F4{^BC(&8}1E zn_gIezFE;tK$cJqKK-?6=$|NAdy@P`Z24hAw#5UKk7XQ#J}X7>v|UDBV%ZDG!^_91 z`J75cU&NWkc#rfC8<d=R6Zcs3ex>T_ScLb)9K8YiB|ey6PyE*0m#~krKUeMN*cjY5 kG0mgqzIQ$1M9@cgf34e<*mpzJ;GD7{6@9U+^XFp!2G>bAY5)KL diff --git a/bob/learn/misc/data/weights.hdf5 b/bob/learn/misc/data/weights.hdf5 deleted file mode 100644 index 41b22801f28b4afc8b3a81daf5e594e85100f29f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2160 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf&vbR2#gPtPk=HQp>zk7Ucm%mFfxE31A_!q zTo7tLy1I}cS62q0N|^aD8mf)KfCa*WIs+y=N{^5b@Njhu0C_b6>R(tYJpoN;uwY0m zDoU&ba$xDv113Qx&B(w8F$-!SBQzy5GC~Ak*28FKpgc%MP{E!7l2#oUOt=|L{xd@y zzzP%v$uluAfeqk*s%K_QfF^C2&miiBpr(KnKQou`XJDv+NDL4e?C0+S%F(cVr~viX i06AyW+R+dg4S_)%0&>e=c<B9qZ?Eet^ZJpQlsy1qtvL+< diff --git a/bob/learn/misc/data/weightsAfterKMeans.hdf5 b/bob/learn/misc/data/weightsAfterKMeans.hdf5 deleted file mode 100644 index b241207eac61c8f47dcb0fafed293748108ba6d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2164 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf)Wmh2#gPtPk=HQp>zk7Ucm%mFfxE31A_!q zTo7tLy1I}cS62q0N|^aD8mf)KfCa*WIs+y=N{^5b@Njhu0C_b6>R(tYJpoN;uwY0m zDoU&ba$xDv113Qx&B(w8F$-!SBQzy5GC~Acq2|J9W}rMsMo>W>n3q66fkB*uLA)N! zW?*1t-~h`rF)@J+;DD-UW=w!4Z4szS2qgqm4+0>?k1Zwq85k<S{DC5Z{rp`(IU1G^ p6_^LgC8PF^hQMeD4E7LcW%M}^G{5+Og6HmiCj>YTOnAt000424I!pin diff --git a/bob/learn/misc/data/weightsAfterMAP.hdf5 b/bob/learn/misc/data/weightsAfterMAP.hdf5 deleted file mode 100644 index b6e1f0497f91dfc26e137fc021f02431023db1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4056 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf*br05f~pPp8#brLg@}Dy@CnCU}OM61_lYJ zxFFPgbaf#?uC5F~l`!*RG*lad0Sko10TURdM^p%SxH<-aJRAY_H7u2$fTlB8U?dh5 zB~}7Cu=MBwlOU63WMG4s1vQY7K?7_OBNIdbW)CaWd|0}L@tJ`sAEZW5!JYw<b{!Z@ zxEW0TGeb160!2acOw14iIiTv9nV2h}W`LwYOt5w#s3{=9rXR9?3=A1S7X3i5pT7$z zM??I=z@Py22mM?yJZu7$cc5^Dr56~jLBM+(pye=387Liq04%-1;sqi)N{)uWXb6mk zz-S1JhQMeDjE2By2n_WQcq@5bEu!wSJ;%*;uP-<@*zaHr3fQ4|#$K|I@%1w4BlfH1 Ly@FmoxNHvq$uwW! diff --git a/bob/learn/misc/data/weightsAfterML.hdf5 b/bob/learn/misc/data/weightsAfterML.hdf5 deleted file mode 100644 index 0b3fc2551fc9d1eff310c7cd7c0a5e33d926f0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2184 zcmeD5aB<`1lHy_j0S*oZ76t(@6Gr@pf({Od2#gPtPk=HQp>zk7Ucm%mFfxE31A_!q zTo7tLy1I}cS62q0N|^aD8mf)KfCa*WIs+y=N{^5b@Njhu0C_b6>R(tYJpoN;uwY0m zDoU&ba$xDv113Qx&B(w8F$-!SBQzy5GC~Acq2|J9W}rMsMo__?0g_f77)-bsO#U-N z6tV(ELGnyYOke{zpz4_!6QD_318O3K5`vlnQfy)+;m^QOfg(?DPOzW93n)iJ9m}8q z^%uR}F>2pv2#kin;17YflGoKD>Mq-J++6qif@6dI4#uE>9g1h{CHoj(FOxoEzgpfa J=;edU_5flOL}&m2 diff --git a/bob/learn/misc/data/ztnorm_eval_eval.hdf5 b/bob/learn/misc/data/ztnorm_eval_eval.hdf5 deleted file mode 100644 index bc5771861bd444b1ba3d89c6c949e91e912136cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569984 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%0Acj};RV>6?l^#^<s zyt3~-PaTX?vG6?p*a?d<=>`?uE#PvHdH;3oS~xC3RUm3u1Khfw9-5&qJpO#$n>Vjp zVf2vB<zL@h;A5GreV=L_WG&^9GaRdifZJ2|2dS$eKK;23iz((;hsv6ow6MqCyM5^o z@;Ur^8QsM`cY}w<Vw=VN0odLciEPOogWjuD_bX9j4_N*YarrpTi34K0n6NkO0rx(o zHA?gc?1iYE`VQ!4BtII&)dL4Fno3<#X$RYw8WX>uCYVv_iZ2N5fJm|08-;r?chAf5 z;WYNEH|$W9UjG04Vc#6M<=p|V-jh^Xh#kl)tE}!gKM7ke2GX92%mDeHy{Au(V@~tp z0Wk_y>?<&>ooTu;3F~|1kGyy2f!E^gQD-riqOg9NULEJFW*3_7AA5v8vc4i3Zl?j{ zyB$^|nGk_+FTYF`=Q#|tS%QK%AKUj&p-2mLSMyVS2R@5ULiBsvI?0Gp==#{_6p8(r zBM#S7+|hR;Epcb5N_Q5<pXZ$_#dF!S_UpQ~7l;s7B>c0y5$92q9R_F7Kl@JnZ!B5O z6qJOqWV}%x1)a(x=jimYkLd2Rgw)|Fco@x~@RtE|g6s!WkNS<kv`X<tGjiPwJ`ntk zO$MRT#FF4Qi2Jkaqw%}+*jvA(8R6791!@Dw%L<gR2i`8}lilwDcx(BPFQBpue7A1Y zZ&jdQ(bmyKyrmnS|D9x&WbTCo@vjaEAsKM*c!rRZLo0Yu$1IDUErs=see~RP-y!+v zX62M$9bDSUmHP4{88X94uYHLxfuG)7e0%b$KubYV@=O=@R%z80%$r8R(WLrtJxedR z`cb{mO|}!RG?1SP8N|HU_WcOD`&ID4Xx#T8bs2;@nhQj1)&t`S(ptD>EsRN6<hA^2 zh8PnQPR{-sP?g^-I;39!_HKorUz{$7+|!j^Gc|c2d(O~T?@<`&rHFYxpvQfNU_E_D zq8e71{N>b;zq@k%(KVJO?A@ZgC}4l%2fV!(PQQ7t9)ztg4ohOs+S)#um#Pn<fj89i z*QS3CyzJF?=IhRYvcCr2qN)YZ`iDV-zPA7z{#Dz=ZC8L=?EGmN+^6qf^%5$R7=j&- z*P*q@1-fNADa(VL^{8$2MNY9sVCbj$=&gYM>Fw!}C!e~&M$D}8FMhs9(r*(3ked~E zB}GwM8vU=nk}~2qyWxfMYwjWBz^6~_eLLCJ3U+T?U-p`HLVTbdM_6Jbunj(;q=@MQ z`pb)zpQSs1Eql-RLlHy3b?!}Cn|crQ&!wz<&cZ%s!%lNW<l-~LtMzlTbimc)%aWd} zJ#eLnJi!Ck^H!cj!Oh4T_`O`WU})M6xz~QtB@DL#jr)_iQL<k6Mc31uUfd1ZZhQwE z@VQYfzxTWEGwQF;1XL9S{(sM+`)~8>1kiLd>fN)O0W0(K4qBU|@WN#A`qbG8u#?*m zI)%Of^?OGZub}?J^(s2dJsSNmmLIo|<>GT)zO}wth5Blx(w9T#6JU1a^zHQjuy@rv zsD4}n=a><Rs^3LM;lWqR@s~5`pWgA2SJ4^=TeE9&JIMX|*!1|~-ov9HK6@aF<`w3w z$aUr<NaIknFfuIs1o=jLO#S)syk=g-#&>-hdl-Vkw-mfckl}mf@GVXJexl=b7VE=M zsXF<%rgs8<mrDN??;Hk`LplMWwCI;H7}`lhUuGd&o)HJ0@0U4UtA_9%%HHhX`Cf(u zk6xZkdj9e!^bHcuwaTXfy9RYvs%0V2Ft|SOrOyN2petAED1*T;q><S)9r;J{ahYr; zdC-zqGC0=W0)ly3iFCi4P$!S8RZm8L@CV`Yzr__W?3ryg(p3(511p~KrDbsZLmtoQ zz6v;br=B{Lyad*3qnuuTi~+gwl=bk5GR&c77r!$63F8CI7YEVr8TGHPs81Amo1}I3 z`#ee5mqaK0Ot%7nU|ksSq!5lBel3<;Qv&iK`7wRQb#U}`$5!?j&VfVrOn%3?t{$mz z>3eGzFgl$*#$SQ&eL<nQ!i5${ro9!eBvAp=BYV$UXLkY*#gXsJm2D6fM`fYzP!B_K zkIBB#mH=Drha(Ku^>DkO;i==v=Mb_dqU3T*5d>B3>}aU{fU}RJXlfN=fihBK<c&}r z@MV@1*(fvtjoJ}GVqq=F7d%=JyO0a#Tp!fF4laam66Z=O2mJ_{>UzI_O1Oi|{RjEp zULNp`+H|N^Ivf0koV6QUa|kvj$8sMB;rjHBb!F-+_QP;0?l*1C0@{J<>}=;`aI(Ae zqtP%2v?<<Q?fP8|2LH1Acx#Gbz2s{_@u?~ZlAdU^4laVERx8a~?I?oF=M@?0SJ-P2 z|MX1C4a_CvbzPB?>IR3pvPT^FUWPO#JqR&rg^XY^nY!&FFbtX%i%kCs+kJ-Y4~y%8 z)M>2O{iqr~c>nO#Y3K!t%0Dk;kQ4Sropn1Rbp|-N^JPPZX5fO~ihQWt4Dhb1ov)Ig zg)i^+Tx-*vMx2|vZ+F%ra)yTt=j5>;e9zr09S@g)Oyb)gHHIbF8l?6d_&yH_cAqWR zOPAobrvrr5EI@|Cjj}qHW$-)ZebpcH8LhvD<zJ%?oI1*H=DHtwb}M<m_c)C~<`t7| z(>?hAtA<EguPnoXNu>~PE8I73#!8ud9ERiExBA48BYDc9`xi-R1)9$1vPry}fr9IG zgdeEuRG)J>`$7SI2@fb4%+)3#$Z@l1!wP%RBpz%lcTU2W^wmSGG!vjo_C|j{>OX>a zFZl0Cn1Xl2{cMU^Bw&A^DVWwng2C5zH31RhAoz+xTUrO_kDb<m?{F@8OGMVj7IROh zE#wSZaX$2rx4qz{_bA*mb2)cGe*!rS*Ng?FCLuYphpR|v78WbB4O0rRKg&fWY0PdI zO5&c9+izh1nT(7*BXX5q^O8j*e42nT&At60n45_EoIY*bI*z_`6aIAUN3hjtEN6W@ z0%zvv2JWQcy7BJk+&Jd1JXD&a-5-(Q#_*JxM*R>hy?eqb&PRk<vd?>$Vh3UV&o!s` zY9id!>`B=_*bcwCd=_o6moE4fe+>oCC?sw-L~&ojK8v}qAa(TtFs`FfpWH-$yr!~B zDfXD~tB2GzRgA#)Jz4oX7Y0FpjpKeuYA;kRT6NnTM_(Bwzu>LKK~UdI^s5%=gfGNH z^3+UiFjIZ>O~6_=*m!ZzFumyj+m`e&bIg;y%BVN{FKYnoN>$fA#M>co=E9MD+DbS* ze6N5(q!wKMol_4X8-yFX`JI{A|EF_=El-ZM0-nmOKe_Ta71$%$#p0<(V1q>c@xIR> z9Lai;A@l(IUC%4!7?fg<Alc2HJE#ZaRHxSGcQZ`$o|B;_HN$S?@GI)u%^>ul<QLiT z7P#G@ZAwMe3Ca<rL+j{|hzmbZ$NQ%Tj{L5oiE*g}@z4x-i2av=35r?H&oYpgofmC5 zkG<cgN=r1*Z+^zBKL6%&7aX<jImVUP1oQ=UVd<P*pmXx9*C($5aQJ!T(C5uQC>`YG zzpmX67bgnkZVdH;yhW|D@#r9EI}>fL93;ZDTqk2??Kqqd-~8LrH4a2t(ua)OBXCn| z(vOIGO4p<6Z*xs!pf~61dh7lKaAp{CF6fRy{$TQ*C5urAuBhG5C4jtL4bj~%`|*A) z^u6=Nw=Rfp+vVGb{x^fNWhp9}Rv@#V)%b^8;x&p3d{1o$;nmWU(dP9oFyen!VaSN< zs*zG`>})r9X0=?nhVzumRwwI3@8CUN^oqzq<XBXHIYrl3I|2p5?&r)fCmH=#{ZmA1 zKd5$u5e@beL3vI~)%*zR*U*xffX|@=vw(>U>Y%Qn8HozXU65HOuDM}UMF=HdUDPfq zAS5KH6ZUh&5dK^1eHu{|ML3c7-p)TXk`O?=*8Ntcj4&~AK6`HZ6JequEFtG!7QFfI zqwj{`dk8PjD2X;nCv4fM&Db2SAbgT=kyr7`24}@*N{`2L2|kNn98qV|;NPLlj@`m6 zf+?1~nqfc3k|~u=ZiF?g2|9c>oc~T}Ax7#h{Fj0HM7=q|DU$$?*B>?hDIrh?$r;JN z%_q?8m-QU`lZE?><hb|oNP^5J)!fN>%q86Ny7PjfkYJ}=GC_MQj-YTSQhzwLme93v zXHi?Xju1$9W8@THK7sG9^O~__Hbni>Olc%V0n0ufDW`W11Od(>n@f|KgjowqzIaYc zc&K<Qgl?XQJ%*o6MCk@#Q;}9FO%mrDj@B1T_BH``{50(h`rp(P4&BqS>VV<W%>2*c zwea|chxva@IWY8}@%6xcU4R$uE02!%f#B5bbOtHpw;mPUyZRk@af;$x(X0)i+f}_V zFi;FLO^uGh9oYA!e${XH=_n{%7B;orXn+kSn*BCMG4IBDVeFw^GyL(kG3ws!haOx0 z+Ae?ed0PE)UrZi^@uc~1mZ!sTgHAZyAsu`2EY3`N@(hEJ!;d(5Jh%J!d)_$Oo(Fr> z&aF#iSHX5`o;i(0EBG>HFVRPrfyeP{Le7lC@L!R@=hNkFknUJeSC748msVEauA#p? zY~|b23C}i|R5|5BgL+Nr<&8IzO7kFBd5YZk`8-JWT5fz5nud`JaRba&xWCYP34arx z1G)I8uP*5<!;Ue74L|zu@0PqQ{rYnO#&uu1UK~K~hIMD{w%9B<R}fCWu3Lt&7dK>E z%rHmZVS3N_+7g(R<lR!ZJP&a}*3Nx=vv5^n*{T(}2pREH)HL_!;QW@SlvwTzOnJ6= z(NQkJ(hX5De)m}jtJ0z^dNL31BNh0c-&+9w4W^&vigWPvp_gNz_8gRIwkQ_OPXN3< z`+P@v9z4OAaZzjzn%g-QEDqot(9Br5t%d~T&nCZjDwE)#&Bt!38^~K^bypC0hy9Bl z5BQJGOu?7wX=4ro-n;hY%CMkM(J03L(mT}4Y6XUkI>vCFu(T+=VMBy>_k5F$kmGD2 z9Vhmkjs(q38tX;1sDHG)TReFc_ld$*_3wD^e0$PZ(HJ?2J{pS29{ohf{JxwZ%7b$b z-ZM3mwz&U2a;S5Yn*{o(c$uSWqd>!Eb&z{<3<_>FD5?#Uz+TEI!ov&wx8L((U-zT_ zuq0Nvh2KZ!_%iR3ED5e(%iDN@ex1zM(@EDZATL6{GHb<s3g&<AUU)V>3SV9a8XQIc z?px<i)O>iKINF?=CV}&`HtOWC&{WI?AOi6v_QWOZtS_DF8H2clE7?w;#v$4#tW^X1 zXiwHs)LKQOPxQ0i=zr+jYb*I@*M0>3=CQLT?^Z}~`OVRs1=ItVb?@fvB_UU1hxq*L zGwe;gW=AbXGX(;I<X71Sr(xn1e-Fnr_Qm-zF*kV40q2P-wg{aCP%BpvQU8OSW)nHK zlrJP06H6lMn9PFt7h&pGZ>C{8A@)S^!YrJ~?K2RFM7=soq{B*c8k9I=YRz_LAyMX+ zjJDY{DBsn1ZLvHDfl{{?s*v*>lFj(#IOemwoqt~<MG(PK|FVm1GWze^%J{-hOoR5B zd`TINN$}{o&2kL$@S?1;2RwgHz^ZO5lhsZ1CBHd0N{i<cv7<FU(TvkD<IH~fkIp=N zkiYZp-!J5ONWE{qM~QuL4=$*DjUEG??=9Td(BCk#6=ptx=b*ikCDV<&BLIzF(|xO> zkh7$<-)v_L#`!++TyjHy^Q!ZULF7ex{EB>d^$Pll=2)(fll8$wo|5O;<3r#m({B6# za}7DM+uTZV<6s>^l{<)Y<O}~YZN=m#f&YR^vENyot7xtn`G=sMV@W?lCNPFNxYoYr z`}lm?@Cd~j4+Dd9JrxQ4DDoG6nH(rZUV2S~xg+XB`7D2)kZREXownQjvv3;JFFEQa z;-AOar^~G!9f8ph7PitiL%?{2)5G6t9F$#s`#f>Z@%-9z%?sA!FqzzVtO9v0=RViD zUO=CqiQYAeQ#06q>G7a{rxWjE{Qv&jiJbsyZ;}hev3fY>vvK?xu0MXO%$<!YEl{UO zep3kZPG*L>Ua1}BKzqLBKG(5EP;uInX;G+zjwekIp5c9Gk!yK0#UmFS@+tq-h3A2g z!D%k<&sAXbVeEB&KpU*PH4nz56+@<O{ONydg|P8=;jZB2a!7Z+^xZV7750YI_{ya= zf`EfQ@qzXisHtp``*=JZTuz<V4$bf&*wa>habc<jj-l$CVuls)xG6Ad<a#c|-%>uS zHd+L~kKHw~eA@)3e}wMY`_==G?TAi7b0u)>9&BHciG@Vhgi$rFT)1cBw&gWe2y`kl zu_vf2;Vh#|vtmy@d}6X#ZW^x!1s@J)icjUx=in#&kqP~p)vX2<m~#?(@r0I#6X!z3 zwVTXq{UCYf#pvKX^1k)OrDQj|fx>c>QgnO-f>p?7{2Yg1`qC1mKw3W-lCkc1$MnPG zmBvF6VO=nLM{QE?B<7zE6{NZ;3_(q>O|vXB5pHu)U8~>U0}g^8D_rrtv=Lp1t9yda z(IFG*G2}!Th;e6M^1)oz!-S|Rn>Kj-O9TW^KcHkVu#lid-Qr}qxdl}h3_o+1FS{`W ztA8K6F-Z4=z3k&JDk;b}51FYrP}u{~tl~1M$Wfqi4~`C4X$Q^&Zx$@5+QBT9uX;DJ z4XjD$!~6zty{V*PF_RvI<=32E&rAoQmzW&9wu=3)n}+hc>exrU?MV|xhCK*+l((2V z(GRI+vDe063MexcE4i*rK%i5p)LWc0gbPR_(i`7{3JG79L=x2a?k`>cI1btL=l<zP zAXk7vONkNlsyg%nEN{O}L0aHY(M1{(d<>%GdEkn<SBKPJ42zS%YvA2Y936(KOSWs& z(rw_prKc*f7kj`HC2XE3j)EEInv(hy`tJ&4haQUb1G`CVdNTT-GEAwi{CYkCj~t?p zw&FZQMDnUm^}jJNBTPDa;yuxBG^6(V9_%Tp4m?D_p40YEH8hrKlc3L}fAlQt0`Np0 z_>@VD>u6HOFAMBt*u1JN+@OVdhBuMyNAc%M(p?NX$~_NZmoyF;+?{}L-KXB44k-Xn z|EW`7b1ERPkgS#H*a&@{P8I%1I6tVBb39L$0bPw2^eNwp;c7YWlj4>agk`RHD~112 zbl%}yzHJycB19q;QmI5nC8dE}R)bVlw2Z7Gn<T$%DI?iYWQ54ho{zov-h1yILhtqd z*>O~d`aa+1zOVB-&(9fO2r?JcwmPS)A@cz3O$)VP&=uS=;xzdMGah#*!s$w2FKxc5 zUwS17$X%D4W{rn43E`&MTRy;4Z1KqGX)E3bLa*6lF6>^n`)-e03+8!~_L$vlN1oR) zI{ueUaQ>*U)pI)JAZ*vU+UYbx>%hFi#$qE#P6@dys<eS(vgXf!8jbMfyhzp&%L<sy z5$f}!D1`PG<Bz3?M))A8Sv&Z)7%1n~Mq=OKUWxIc^M2c#M3t*|E64G22sRBq9GTw) z-^n#E<vgwiep44;hF0Wiv5whsVqVyAS~Mr(T_3cHDHsvu12Ap7s`?cD3EzezG~W1( z0qN2u#+j}*ICk8tw!@(bs4lVZ8=<U%H<<N5fj;^&%lnU#Nm@Xg&xR}hcnkdTs-Y_T zQVydV{8W?Y(U*3;c6WoK2A-8Dxg4vhgq8<Ce0T8uoS|(v755kCG@t(*9fC3E<9bEY z;ngUx8OO|xp^qyj|CU=Na!xpZ=5%s4cf!&|fj+F%0VWUqw!;-I5OpNS?i~f@T~AG3 zv_{`we$bS$+R+a1KW#W>cBUPQ8Dy@n6g7i<>EFG=jt%Iy7?nCXR1FL9z6$F-=qsr{ zSITj{2DUOD`P5_oY~RvcUr>Dq^sXInk2L6p_6zO#O~?<TWH_1ZDT_Wx|8|CT<cg=% zjq1i>E{<R4++A&<VXz<W?_^uY^V}fGmwaUe67S}=Qy~BT$>(>2(h=ALt1A$7i*y<m za#=dG?Z@Elb!C&WAoS^Y+Z|PL8HezaPpc8=_soKwv9urE@YE{x%RkhixoM)mkf48K z55=dIJ#zi9G^Q~ehCQ0f*58;GK4L%7pi1xq3hbva+4z15kgK?US|_k|1Qhp}sS6EY z?(Xpj(>rSHH3~ZO);|q-NoVJMq8+E9k@lctOwc$y<jv?-vqHYf*$KaK<Z9JCZ0$8d z9k7Wd!TjTE<W?)3DXPStaBo)e*n>w$K<4XXKla*4__`dEuRqlUvU?n3rqGXY{PWt8 z-IYdA-xfMw(%1-FTK95P|KeVAF-*Xrq#Pbrhlld6Hv^vwC$oq|GniJ8k%rK=zzJdH zs86GfaOv2LPqjcPBnQ5DV_jSa1KLJZ1|i+>KxDLAV!H+&Rh*GK+f<5r6eeVGuNq=# zA*pEC1%7s~`1SIz2XAIa;0^kPb0e%*F87y!f74U`>{o>#c1a@T#qVUe`l<ewi9rjH zaqpj`#pjex@HUxGP(Da&akuIG2mtPrV~m>j(Vt|+_V5tChtC{$e058-1)4+h>GZuz zfh^{+;gUFV;n-F$eX{6)gUq>;3&E|hm}#t`c&;6Uoc}#rlIwz=ojd&@UR^M2JzH#d zy&Hzw2i1De-$^h3Im<D)8zx6rJHO@h19O)Ly&~o<(;_Qa<ldm(d_%AtQoG;{OS6~O z&k3+lQ7on@!dwV5VLp>Q4CdM?vwcIIKvASb&pO-+6IOdNXs}O;j9GuTJskVs9_#%S z#&d|xJlapv8v9-ny0`<d?_;~=@jjinA;{Z2^7^&pJjk}~W%~AR9A1bdJUHMr4pdS; zt-seN;iiufmx${){I=c76>`RXE>|ygb9WtlbhmmDdZrurNabAb+(jN{?}@94*gxmT zP(7LZr5{o%eMU6u`XKI5=z~{<*fX*0&-pyM6^2u4Lf+MMLy+SBTs}=IF}^NEE#Y@m zVo&WFo$Usw#m@1EjN9<hh;337#?LtH6?4cShNC=|!T;%Pzdet4fr>Y1$aU`y@VIau zQ<~fa{!e}?z0rRGyleK!{M&&M%>&6NLw2$6&~iY(aud3Py;6-!w!lMmuJ7$r5;1ML zi|X}3n{bm>Y0-#g1InWY1p{)|L8+DLh|Qf1_(46dCEWQ3e2Da05xXm3wXgbujN2NV zQ7N*^3fX|F0prb{xfSSc|CR5;y8+Ahe*}GewguS%eH1#6cHve=TG@EXE}VPu{-BoA z7VIw;`)l#_F9gEXOQnx@pz-|mW#)_9(EIAy8~3NAVl(f;H6C)4im`ta%lK=w3nZ6< zBK~7&hUp={8_mkdPainvr6k-2*-!P^oR=_<S@Q7)LuL{D-nYE<8hzq2+<Uu~6lUSw z;-{oy)Zuuv*h?~%k@KxRXWkSz0&ki0$k;Z~PiQ4?V0~vC65DHDluPvC{IYP*yrv6& z#>vaH;5<?eAvw>{Z<COBI^ra64+P~O7#+g=<l)U9w9h?9fcjq4K-hESvAoE+w%OGT zJ8gTe31_y0oZ?gdCxPgrJ<rtOl+p=rMlRQ}>JCHZ$*~HHtC*wr4)&etL%#)Sj>Qn( zvum8ysnzkl!7;nhTZH`%Ss^a(@{w!*R=LxxnG$;mm8FIKiu)lTs$Kmh`ZE*qwgUHJ z{~#YZ*U|@QK~Cm(K7N-*@Eg+V5kwBF?+a<uzx1s@TYtu*?qU^C+@QRxaibP`<=6cV zO7}sb+{<7~^i4b8P(4>JgFf=>l83I~{ruV=d7<&|ouD-O{=yLYN4qaLgpik_-Y!v? zK8^QV9X7R%%Lci4AGOS7-iv&!TfdWkK11E}Qr^X%m8esAo-h3?)&^$#_Wv0?*$lxU zzZuxO`#}EZ_n1Fl2Vvi#3A-{&?A_b*?&Cu;^jp`r5oX;zpdGH_==TeGwbm+cjBpR@ zcUsYnT(bpasBs;wj_1ztVVg<CE+CH3_sK^OL5l?k%P8iPjE4h-cyA1VYqVWaJl@~v z1x}|=p?~yulwxTv`jl%}g7?K?&lI7mwJ(Z(7Io^`U`^RYP$CiK8@aUriqekEe~!+= zqdl4LUk5IL=__l4rxgoO8bqtL>5Y6<5)y_VrPDAt5RlHOgL*j!u7Ip(!K~Dis}^%F z+2;D;0eP5b)_5(rF*Oc!tfv}8F@MARB6%zfb%*Pj8vQrcra?c~!1i(?`g?3$)#s77 zlTo+&Aa!X5VgvU{`!~%1gE_m<`ByU_x6ecHpW!r^vEQ7a<eY|Y?N<+a<{<Y-M;Xtg z36Oh!`ZISv{yQwPZ~YCK0Nc{|2%WVVa8FotU&cJiy>R;;wfo2~jXhZT9(jOo>FzmY z8%)BgYhC@sz$E-PQfI%s5BY?zHDnLrUb%ufFF}C>&taBv(wnFo{d2E*CDn~No+hD= zM>E4voRnZdZ!`v#&AeoMGuVgWwxRa`{r@!KIbF$k{~UL|{OH*P^8L6P4~^mT)aep9 zujzvQY-;SIe7JvzP0IYag88ecEB9)yG+<9t+_CF|e@Ea?(@WC>FEE$V!0xse@BLrN zIl2|T4}<4H^*<$p$bC#LC2Pme^Z3Tw6OZw^>`jY!^9p&=UvkMjzY7lmcUA4}XQY!r z8hFCI+za*iv?Z-Kc_R=cGfb+C^QnNhaQTYO5G?$fQEf~fg9i(O*IK%;zuv9rNH}sI zeBunndysP(=$v}d{p%R$PtnqKaZZ3?j)j84*)h1rEs+2JJp0C!>i{R?G>i^Ey~wdX z29e&}5%cy7koC=)w}f&Lc2ZVpE;%eh<|FUq;cVo|ItVBR@h@R7lcV}$>Ls8atd|!` zL>|)RgQb3$yL#vDaX@-|0S?>mm(vZw{f4`k*@KQ*@Ybd#zY{PG{DwcS<uzmf=IiQa z4>tT<k7Oif%wvA86lT)@|NJy+>^4|WLwsX`sJ7`GkTFzswTR6_*z2n&MUhijA6+te zG-?bKUv9O^R1d&P)uaJ|`CZnX8H2l4y&yn){Q76pUZCm-_N)xUJkz#~pWs{{+?8IN zqL;&-5E&w#QMn6FwHAu)V&3w;=9Jehnm%}wdh$q^!4S;!*>itG{b;KG$?J>*$dTha zwc9U-oXt1c^#28SLVFG0_yj%|ju*LOMA3&s_ECei8FlUJw<Au?Ucj78H`As6`*O|C z(>=0~83D-obV|5n0NBJf8u#Z8!PtdAH9NMb-~4xsLPBL2j-(?^9(@bC;im>4KIwxj z2IotsHIT1xf#9)z+y#*bi?>()jlkJuWlzI%!*EZtWCDr8z(4WDk^}SO?w9?^MBj{o z#&5P8KmB?kJiq4SukStJOCs(hEi(jfZrWUN=bwO-J`?#l=TRuMeK@oxHVEot7w9I? zKcra%Vf%bBPrl&H>y(W86i3xdcjYlintgh}KJ5!cevQ!2P%na;|JL=(^2)(wPQ_s( zAPvrn4*el-s0D*p`ziZ$s$fdHNkP-80sNCrrU<6iz{-qv`hJyK5Kip#g$osMz&~5v z5_28@RjN+z<tT^KKO&Zby~{yJlgXk-Ef*Mh!!sQ37r~aOTUs1P51fs0PAlOo0{0g* z3_Qq5iy#Z$Zbe_`SC2^EaGg?^vKPD>iku7j!uL#V<n_SmY09TzR1VUe46#?Nn&A## znfjid9&qP!r3jCx08Pb$+~1#?VJ+wEPSjKdWZU_c+1ph>n9*p24szR-pQwb#v!Tu) zzk9_Zs2GX_l#JkU9kj)r46Qny4N+pt4MMruAVL1&O5NQt`0dbKwuS%R%470P1p4mm z5A<^nWB$K%CtUu4;xK%&q;?7u>4S3~9d;YHn}JAdkN)yu2pqeO<iGjUzzI(pG254| zK&Nn((Kx3YjMf7b2VeHU>D$4~B$=I%qjw$+#~tvNZ|<VWpGx?3^HJ?+OcMmyXNhO? z4S-7~k(!IXohy@alM@R$P^FweSwhtaO-rBLVv(y-JYH6AT~-H7=8eIppI|<)<Sm<7 zHRdN+Qd;&-H$o_%o>U5HE3DGQ$~#sz0>dYfo{}$k&r>N=RX`51D1G4T!t!Rg%36C` zoT(9*vO_~ng4*CRAB$Kx_I&LmpF8rEx(T=wR<8wl7GvL0nE9#|_8EnmO_`n<0%jZg zbY|H>2y9McxO-&;GM|#!T*7<G(o<idzsO~<{PiqZigW~4a;QhlLh$$fdUt+s-w3ph zNHCfSBY!7quhPnE<day*jQ?Bj1U7Z1i_g$+lOrfQ`>7JYKQ>&q>@YVMS}QHufH|8T z1Br7XcSnI)@_S}LH})TX=0EG*JOUIK%MU7AA%{3R*O3zY%Pvhi-V)%%Ue*0k$K;1F zKPM3X;b;r`+W+irtds5nHq|q05eM2JXSD6l;_)8rho)n#KwYNi$b9+nJKa#(&orQp zIY>d0S0SdZeei7SWiSW!sr(ySx?f?5{wx<3?aZP!@Q#(T3f&lh&?Zq*;Y0rsBh3Ym z0(@&QCo*#T>xXI}Kltw}E6ESYxjc41;aNJ|*XrKw-CGE@nTiJXA;zFe!J_rJsu<SW zoTR5C%OEYhzM3;2gSciqe0XNA7;?{thgxc3UwZY6#Q2Fa5bKb(oV?}+LYeoKmr{$6 z4;<~AC6Nm3W*tw$tE$0!JhVf)vI!iH9o&{X)(F>?I>Xk<>tL=t?lk3(a<H1G&AUNU zhxy|AwS`Umyv6C(Qm%eR983Zg@9!Tl`mCR(f)x8u8T36fWEz1n^q6T}XBnuuJ$2Rp zW)26I%f<MT62U3{duugiA*dCo+L!OEgEjjv=a`XSZ6lO;&uR8IQ9I+Rb}ZU}a0$@} zxcfZ@lpEig=A++1@<81(pLi`;nGO{+p#MA~@HV3v`pqks;^un`;y`4PXn9%m6WV^s z@bCGZ2U@pmwbL=zp*hjtds+s4++vmbRgXRpA$P`2s^6Evi)zPFDeT*d9sI{=+TH@O zYMh1z`)a{qo6hjPXAX=}-~7*|%!^p}V++fQ{X#5Q_~<mJg@LDUEeX{)=0auH88Z)8 zz>n3KCtewOK+iAvn{C=3LWzG*Y6o4R_iEIwYrREqxVma%inb6uhxc>Ict^s&+ZGS0 z&@?7aaY@s_suA?DdGN-mHkjz@_+k1t3z~0>f20gAgW@8#JSCnMh#&J~TB&G*@7E4| zk$(4+IDbn0l;&Cs*coxhjwSa)?#Hm0vd#{WOlf!_u7o~mVc%5}%ugoeesHCt9t29~ z(t4UNsF$5Lj<Ztig~Zv@vxoG$;iCVB^Lxw%yXDQyRbr3OWpnDlU_2icOjN2_a4&K@ z#Ub?>^2W<~WIb0fr<%tZAig?T2X5c1KkK0nuv1jN;dKz+j~Vron0s+AmtDX!{Sf^c zr6pbuMXI6Gxi(t*DRRe`{m+INbU<*+W6l@WZBYGBPih`@WV6+P?oGNT+_Rd}^3k?} z=9|U8>}l=rQ#w6vF{2-P9@2{LK^;PFK8V%>^R1P4%kRC3#NO2_6M<frP}irwYI{0h z04m;!j;t6CfPS*-#*wZvu$1V&T6Mn|M&l|3N^g~d@rRS`Ii2~)A<yc0=2Q;Ht3O*0 zf35_rh2zH2Nw{CNvy<_y<s`<lBl8aZ`a)bw1a8y8Vxs@oBUO)lU!vFl)4I<}9^uoG z^ZU)uBI27`sk2UNA;HXa`Mr7*K@1j2Z6%H55^>iFC3(dHAQ|~j_r;$?&`3GZ?cNv* z3$ez#fp>Btj!NL4YJxwJVmKb=Qd$7a*Wdi+NW;GGcI&5}W5LAL&E?XM+IfWk)~F9n zP!t45@1(uDk_&Dw3s1&={)V{UPmakLhePa>rQXE00z#;BmTzD&4QLHC#!g5fSN`c| z(n+dt5DR#%Ru>rn+MD-0TG=9rJ;TEGl#CsaGw}Q7H`jJJc0(cF9Ce6uH1*6|H(EjL zYHL)}KshjWMOJ@j!9J_TiQ`8#+JXFLTADukiIn}?RnC}oLc!7Vw6DJ7zC`PD0XzB^ z{SMdoDsS|HTWBJ|;?fI4cmK<eGHQX^@Z(?ZEO)|%n8v2{v_|kfENU#{rw8ZaGE^uO z@?mf&hT3MV1XlLv<T;n3{x8*dqXGLRW}Zx3IwqC{-+5d%l?-#hK**ZY$f^SNo_Lo_ zRbC6+Y*gj%?&Lrs9FrB`$%O*lD8tyc8lW$J-omgao!GhV!v(d!p@(YU5pBf^xb|*C z(tH_pqNlI2hS;jWi;B$mv~e0_#Jn6(;tm3)SaJ&4Sj=Iyb7bpy_W^N6VDsYt^@*BE zod<7`2fojF$wPP$GLP3^%Ex<k)eplE%Te67oeYaCdWgSH-dCzVjXe#5U&YCPPJ$-1 zb$aF@H|BZTr2y1l>{G{@GSSa6_G<XTheqW0=)hWrUIRSu({Xgc{FlRdTTce$8lEIm zz4^o*dHqCGeKz`1i=LIAa#9@v`Q8g6HfQm^uo}jq&pH72u3y|=tThNnQk|z5e|5p( zKcUWv_t8)9A$;&tKmI;)?bf-NA!v9IZ|*!f2nJ-c()q2u@Pm=g>_T@p^rZg#`Y3%A z7K}1o$HTE_J(|+HJ!}{ZZdtVd^%{mc^SpQV=kb1e=U%Yg?<QcbO9-6eX#zFT-Mocg z4Iq`^SiN1|0v%$JxTNoZK-;pJO1^Y(FWNKyS&jhK`U9!-PDQ|_)fMF*><zKO#uI5( zUN9wDIdh((1-8sZK8F<41Ao5+=a<wb;1wZVPf{-?1X;!>nU57gvCK2Ayim+*(j{5% zoNt7R-d-b<tL<P=Wszga(f~!4c@%(s!2Wa0V$C8guy?IvJg>hM{2C{(e7c4DtK(<B zH)6;wI9YjZ?J4?y?{P%+BkxJ5-tV22izksZd(0@NtQ>rA2h68%r@=stuEk154M=-S z{&v1v0xws(Sr~8RfMY>J?PvcIh&^1aSn$3cYB>Haafa1EV(kkN7ktiB8W>(v;#?IN zzcFyGcnHSZMk=bGV88rMY{elYwG{e|wdh^x2C5l>u4T-Fx9&alH%q${c*3Q5#%8+U zfpMJ7*9_#ASX4@F%JxCFA`SYChT&R)spdpyC$Jn}qQB_Y3#N-q<U`mqJiK}SfRGsG z*KLE{-t7*+vF9>7-v`@J&-`KWLlSivkLY8?==1rt|8a#<cRN5GZ|%=<+;e#pW(2-L zoyLU!EU)Dt{9-i}O7$54f+WnV8S~j>%}Y-buC>91H~Z5qmpZ|%_ww%E=63imzA?qB zyA!@Yv}PQ_-iLbLBKx53UNBTIncXmI2T$Y8AfAq9h_Z0<^+vxMlfy+C*;&*F896l7 zaX!~?q;~tcFo}HpL-Nrk)1bi-;1pax2~o}>P94bUY#v>1R5f3KwDDh@*BxhIIZ0N0 z@#G8~x~E%XkGyNY&k?ND&*nib_MX~}=g1r8l-s{uGmV^XZQJ7J30OV%QNL<o9_YO6 zgAcG`Zc_NX%Bf2e&^<!+ZRrYf3W`pB1#!%A&$F+-lN>_dW8c1V{Jv4Glb!u0JC6BZ zq!SC{&zUk!DW};FA^kTmms5?y(1tjfGxm4-?L<iPp+5G7$#L}InNfIEKrQpRc?bfy z{`FXjjDoD)(U)(?FlVII)xm>dyAm<;8ToUlx1}#AAJ|5IP{Jb#sp>HZIzoOTd<XY2 z+?_IADoyZKuBJc$`vwav8(-9I*TRpBY<zahb>P)4bg|=F8i*X(2{gfbl>5zd5;R3o zpzeJo^ssm-EDt(*+g$kt_629V3Ja~FR)T@eX@4`s@AZ9`SCtB59j{We#B$*$4P9o6 zN-=!vArx<8-%y9czsVfV7MO}Q0&co8xPM>pU~xe)@UcI5s%2IW^z|DV32(xQtB*RB zEbMHF;5&J!QDs5U8P5~B6bZmS(<$<u={sS|U8k!oLlDcy63qUrl@e<SvEHIWCB$Df znSz+LGQx|>O1}MX1>sr}aW;s<1k{FxHDo0#2qD48?mtgf5~s5UkLDXR5}%7Bc3rPl z5X+WNwjbU?-Pz?}>=mg2_(NzP;~-E!abYsFeAx*lSNE<|R`vn&%#D-u{OI?WDvGni zoXzncH#rsYbNrxZIeGj#`tW1(U5R+~hgirwsY-9f=f^ub0R0wkLIljnkZZE$M9KLm zz7fv66F53f*#gEK=P9yG&~L`Hxk*QgKD~eZItR15!P6qfl7||f|MeW+l_SU-*cdMu zdsGE)S8s;rxHN!GOpmtAW;Ja6W7b%x!Q7sYWY<Lsyoc1Y2^8q!oZuv5(2G2tEC-#t zfjK>}aE6vebAJU~;T|i|m#BdTru51CksVOQ&9$)Z+l~3232si@(>yV{Lz(E+0cSJl zhm35H3vSK&Wu~D4B#b`4r_5`GDhJYWpQRR1U+XlY!`u+VH$f7XT=cg)Ik7zu$3CKu zPahar4S_^YJ9USAH&766yBA+$PYd_$*;|6h5#eJind<C;6C9_*U$PEDiU0Z22IIr9 zdm+<4QFRb5q_lDO`{4KE@<_=~<U<PnAXZ*}?ScK)eV>JqgIE4xc%rKq_bJ1*KjO=g z%gK=^mP(3#OA=mjs>FT>rf4Tz@cbwHA$fw{y&HU|OZ!<k`$0bber^EzG(%m4?adz{ z2g#`S&Y1HASg}PND#`5z_SbPsv9rC9P=4Tg@0}4~Vmk4fwR9AS2mv|Q;$i3!Q}hZb z8;1Myw#y1^=m!ixJn9>nMGT%d9_=BoAgV1nf@Qeth%lQ9<B7Aa#O&q3ny+8NL2GQG z>Q-?aLE<qhHFmj*SULIB^7wgI;)CLq1)S^&n!-BoZyqiLIkpn=;{9!xBFrq@KaM!{ zLbO`S{XO=pM}Fi|&mb=GzliA0C?{Bdy$tIusUpPWu21V9CWwO*mpc6)L=Z1~#cT)q z2;!W!+e;psDuS`3`t;~^D?-kMVqZMzFM|J>+g4yfJUC_E><V^CBF6NWW7r(>hzO>R zX{pFa!bRRvGqN*{sQmKTpk=9;Ac+gEVehCSh*A;j3`~K}nEvr1bx(kv3ifrMM=8Kw z{Q(5>uEOjiVN%Iqg5ZeTrw&*BfX8y_+3L4uAV0EBVJln(TVc1o)h)_E_WC6e=Tl{1 zY&1D`Ap-dY*~63H2C5+R<`4Jh-;xR09lHxdmpzFKa=#f>#FK%X*6roq2tPt-CAZLb ztp^xX^^=&o8$s{l@rp~ERgn0dD@8LR9MUEx12QIl1Ib$H&phKs_)E@r;pcie99S1= zJvUyCoN(teZ8gQPaj}N(xJflM(Hxz&yxRb23qS0tkCuQehb3{<0`I2}O!j?AtA+FD zvN*2deeuD2`=gf{aBj5BZLqJ+1~D<_FId0;!*uPNZRk6ZixE@MP%4IBbTYnf>^ZP~ z(1eL2R|mAFn>I@=n<4ao8yEj8<mK1WO)UGAf@a`h=9kgf$3gqv_`M+VhEApRxBR~+ zb%S|Yj0Cwug`R(Nul1sjAy9<#?I0YCX^{=S)(?z~Y#z$Oy<qd5rL*B>KlMZH@ zE<d}JT;AUU^#3u;D2?>N1F!xA^7!7^&mmGCrH0?9caKCRPme(@_v1Z3)JEZwvBmRy zbb|o%KKG>X?-#psw_F~-Ke?YCCsd+tE405e>U$b~-^DIxm>_Q%r^py*)CCXI=GB}H z$DZoiUS+cv*jFR>h3Blx5LD}0YgZeMfa?7-<DSEV&|k{T!hpHu8{Z1PnPab@-S``& zanw^LMqMv#MWLQu&S&eOiRWUH(TVf_kRR~1qT78O|6H`sHES1Z&{;AdXfD5ovRYOL z^{sruh0c1jbx#I-eJP?>qMZU@Fv|Jzm^VZR9`zo66al-D&o%t=KY++F*?Q^KRQOhR zP&dvd5Te)Oj{gk_C45iNnC+;z5KBFhN5maMi9I2wuB_Q+g2&N!Nw17PL%XB+)1)Uw zP#voy;}e|>nqo;y`KpC*HAc&5mA)49>lFU<8g+1w>n6(ur%ZVGP4e(3gM8crz7)5` z98ZCemUH8^Dkwf!F!HXu8hh}x`U2Y8K)s2a?dR<RNSPm0CLR=m4_Ao!f_g15sT%mH za#lc+TWI#3F9p#4oHV~_I}5nfOf*@!%V8{SY9y_{8j>Bq2p-`^eS^O1zk>g2z+=_p z*lnRkc&pjEvvNBPIy&~porp_=E5}z8UoW?U;f*E-pSpJR%{-8-+H3(!;plxNlwGhY zpQ}rT{AV+!#bt+}M!0Wx@P%kwH7G9LseUM24+Z@>MSnY5AdWfm@ZSTNAJ;u(thTQW z`5X<B&!?=2Q|=9&0@qR3=xm7*ag2nhj+SWF69nD^{+%xW-3&4^cCsOuXFuy^SU<ko z0zn)BwcXEK;L8x{EpyzbztA&}q`}_XOZRtddS@D-SL8pNc=RXG&^kT<W8|AKq?kMx zXoN^!g<^HbIyf7}QuqBu1Kdg3*d6#)2fOQMb?FXQLw)@<N$sst@L;^RM=~%E!ki~H zYBVu-6mWa6e|Q?XIUIFDdgD-OP`I1bl)TnbokOn?^quEANyahNobG1m5-hK_3P zos-_!?=Y(Ea1?zYAG6n=t#F_pNZ5kj823g=cSH2&?I+;)s{b=D<Xq~tdsA7hjKZl$ zJJ-+M#C|HT!o7xt$fXXBrgXvmjMd$VQ>AZlUunDSuSquoy~pBcn@vaI`qOL4Ei+@t z?>N7x-iJQPL+TxGUyp;mZUj@^ol%I@kaygVdzN2rJr4Y+t3F*V?UJ&XfB?bZ-Ye$^ z;EoROQVW5-EZ@U<4{MLXzt`_+58}PC{|r~wf1CrLF?Q6kAN?iEBxZhLcpg<5oGww3 z9){N%?0s6V+ClNq_)#A0o#ZXf^Vh~Xg_Xa&gZ5Q3WDbnHecyre^5a+GpHOe<Z!<WQ z>V-M#Bo@tgxWA(>o_|P#Twdw3;tc}GGl*z#8yre(1CQH%i;}2kee!5{ag(|WF5eTg zGeK_bij7uz>s_4V()_MmC2s;wiDD^F?B%Y=dENn!JE7N*P3CA5>e-&JIh`rG;hwsM zsqvR4I42?yE-8onncoHn<9R!Q(`I;+xvCHNBZ^blNc%zcQR#J7u?k4_FiD8UJiC?t zS4|iF78vXk_`*_%T+#@xp%8c6(+<-q%+_WB|JU$RqOTqECdAE7wmzr{a5vk{M}6w6 zl7BQW@*$R3v)>O-K#6&Wx$o_9IC8qgbewY-R(CnsSdjmBy!e+F?F#mlKK*kc@AwF; z7Z<AXFb%;9zgkSS(J&CvZDR?@Su6Ii`4jgQeg7npqL~H*pgL7;S<gBI4=wd>Bw=sC z8TGDG+k0KWL(Z@OZ^wYH@j$cY*bwmje&bbRivG!oyUKsiXII7EM?Z&sD|ZJz@6klA zsbCXfP$)A7yi0fFP9N+AE3W!381Dq{!MzbP<O8rzbzU^z9sO)i_Fk{tgFe`Jzme$| zBfy%#xR9MY3Zlb@NzRFl1BbzRPd2kL0Jh_sny5#!*IG9>Eer!=Z}e#!uMy}F{a59G z47t2?>C3B_^M31K>B@-t(S={^O6O2#e!i05_~i<6TSIS~rZ{46ycN%4oc<tme9}7D zq&^Jd7YrMAF((l!_Ra9>YA+0K4D3m@?}6sQjPG%b{ZQdB&~a!Ub%uZ3p%Oa%aBhCz z#{M$wL+|jiT8=;tn4p0)1=Apy+vNv2sZPQA&#?W#H3ih4#P({o&jPo=M$e21@@8e4 zZYZQo026O}$<f$Rm>iSSzrZ>I&N~0a&10`xv*cgBjw{Fq8Wj<yet<k{`frY6TNCh2 zQ_MWz-Uy5eJ*3rPn*iAp4vKy_AFVy8*moy-2u1?f-gvl-L0q8oCzE%>P^qD;y@0&7 z+^U?xL7cbLUk%@$X&C|mMt+FL{ikKc$;0~2ZBSUMM^njzdycpV0(x24&!#E##CNz6 zHu*Dup6hLZP19%zuc2b#{Wj`WkG&zyWa2&FoEzZrejl&2!?nOFC-gfdzZql=-pjj` zR)GoiycHStX7hPDj*jOwf&Au2*|X}6P#(a)kl9oXxmVI{8n?>e?171%b+cNS-Z7Kh zX|9H$*MDe@!%%N6Vk#u$a)4lZs<ow617WuU%9<bN!r@BSOcu{lSV~Phd_pS%US5Pj z8N)_c*liGaKT`|y9D18pUt)pr-V5Klqh7?e?WZq{QyDNS9mBr<qy(VsVrqC>F%Z>^ z!=x{3G5<9b%!B?<?+<G|HWDSkXw!aO&twb?$%OK+V$QRwP{NtE2f5R()FM%zk#Er8 zwY!bn?A`lzX_4Ps;WQtsIp^;-u)bPptj62|ROi;M8pc{7IJB*4`e!n9OkDhIi(J}^ zOs{s-F~@TLyXP&RYnZR(_&gp=KMo0rgt7L4ad<K<`7gJ<3H*2!=ZDXB0b`!<Mpu40 zIC%%%Vtd^T=?5|!sMs5!<rd4`0OY*gDE?#8WH5~T_v^Q^F^_fW+QRO9X9>K~aZkE& zxdeP#OX(8WyP>U2K*o2g2GmD+DV^Un!oDNiS-#dyaEQ~q)40AGe2t`Dzg<LLvKi~l z&(KZ~8j}&PjI096?-o}zkgxY3wzcZ<=Wh7xMG|Sijs63EX)$tE%)R!u+P<#9zA3pN zMw@dJAhq!M?<(?!HqWwlZ3rOGl5Y?FZM8n=vr`Su!M?%|H>w?CeTN`%;&kgV{N8a~ z{MRLibLT)5$I0d`)Q_va$G9NBFjb=C#y|A!$*!Cw_MmT9>3G?wdif;0H@arLwKxkO zJ&M=LvFGQmKEu)i{yf}=nacyP_h6setv^hdU)6dMF4OCY9NVCQgC`G-qb`1PsFwwM zTvn?^o+9r{eRbl~YEvs@wZm!sPaV+l^!Y+0-6&jJU=ZU)elt&hn(R>R5S;g@5Pg8> zj8Mm^m&d*ifh9wo@FMzDGxO9&LzIyhdUtn!Z#|x`w`|n|KUcwHXO-7EsLRRn{j1<c zUB^L>^jW=dJDk-q{jcAl56Y`P=4y-$!u}WAPiCJX4><po?Vj9WuzG)Uqf~YTtip@t zSG798OFYk^mJ)qtmpr=r20CFeZA;&bW)NN&uWubIMgPtXr7NYkhaoAGY=T7=_gQRn zej&+SAe-QvSd9BEsVn0uw)~wiPni<;`e+YG-JZ9)4qfo#+?6vl0zEL~ElJv&)CJKT z^c(-IF_)!i79C#H2i^%U>OSDleW$Llhvy!03LJa6t#~To2hYjEEF<J>v*-(#qF&7@ zF`V6v{-QxsPV0o{bubyY$iqV31<O)TTXwiRK=DM|+q~IUFx9Q}PI}M*WtUjOyV(Yz zP+CajOwkC0S?!LK;QX$9bg=2L(in(bqcr5j_Z;<7zZxgrM;Q0ou+D6cfwB+f@MGlc zP3?_uuM8N4M?t6Sm2nSY*Cna^SOfRu!s2J%v5de(zSfIY<lP?po_0TZ0O$IgZDG}D ze4mGIEnVB&4{XAsCm*5TxhCSnpOcsuu+aanWfOIS``)6LJKv3g{i~0($sQwM;<NHe z<u<+-%Skw$&f@1}aOS6_=P+pexW73YiFue3@!V{8%!_Q8Z1bNO0v6WIMJX11Z};5L zCAAp^$tFeB<lCb_`8n)8Mb9Ak1#@M@dSSka-J&=j`PprM<s7zAPrhi#Jp3#b`y)2> zOce%t;M4I3BjQ9q<_tdT&fxccgCG$iUBUCk&+E2M68fRGvnQUJBTr?vi+8863mmKt z2g%3cb8?i|Lg!vPL_SVw6?Pkd1A+HNir@9ZM8kHE=80aYR}uc3sM-M(E$MGe6woK{ zc|s~ne*j1yG__u7?1FRr8_9HX%}~PR6upyx{TG>c^5iadLKB}oL)<6in8+}#mSXNV z#O+u8b(>C@xJ_=~j9iPXBI#$a*#O>Zd^3vC$e$EFpv22O0wNjDzyG7_gVSC6U-}_O z|7~mD5IO1`Wk>dGRAYZnqmJn93GzYgDZeU_>417jm>y}MTo0H8opM$~e|=uLbKI5m zbU5BpC8`#X0SBAw<ln9Z!}(EtS7QGgVtpi<Rpx3A$diTtYPE@hf;q7uGq*_C{*-Fz zC+!2g+9y3eDu)pQ9magxRhdL{QC;7<<5xnB$H9cx!~=$(SdELlNF*d!tF_wR+Y?gj zw8P7}-h@)tV+H&8dbnaYk@x}q3AfY|gr?)F;jsK{Q>src*nO&K+Re^~WsS4+fpo2K zGAks2YOw~a4^{s64|zi8&1a&Wk^dF)p0_sfFZPMcT)Xv3<tL;H@O~?n%px`l{%aW6 z^o3iVA$wm2XMp?xnwt-p(g~M{7&QvEET~eGpJ(DJhMQa;E55X45K}agLoq{9#Ni8! zwdaQ836e8Z4i&;3z%ZXCq~}-#8OL8(J`-++Jj!=8Bx`=iCwi$KPg@4}zIi{UAnOEm zzAy>DFW3|ABE868j(XaGtT_J{&9E#f6IIbw4zWdL)s2yLFyAvUK!yHz?o9Kg`G<Aj zIz8-s0N?jwyZz_#E|<Zpi31Gtbaikuz_dsgec=wZA+WKFJv?;ne+ln=;4kAZ2+2Zz z#i?!zUFAwROq$Gf_(&5(=H~G5;68GDInA~HZyM2hx2DQ!s}eZF{5<E#nn3k9$5X?_ zS~w9)aZvzuHR+H<&3$!EkP@RDf8j0i|Fny_@?*PUUfjd%elqS=PjbXg(6mFk2kcs{ z;v9EjFtW{{3&`3J<a2P~`*`YR(Uus_GaXs6Y3Rdwr|<Aoq-`8x-4t?M$|oSYR8a35 z=C|d`0#7Jlj+~x?IW-b}PD6p>jn6u#QTO~TRbxL5f~TKY<YGSBq)%zrLtq+?>ZKYT z4#NJh{wNY2>}?QLxKpo+Tz&a;fA%w$<De~NLh9AO2qbThP`GssgI*(T%`x0ZO<2+@ zuzAmcExm-G>lSjJOk-;*vL+!QJ=9%zcN8kA7fzhMJ_fn#Ib89mTijCZw>ygGX}V;f z#WvFz^mT6xHL#3>@@<{!>@Sm$+wYf7^$dCa+vg~(@E&{X>P>eUuSvLIpLzc{`srpb z1>Ro4bE$%x$1oB5A$}?U`LnE=4F?Y9j&)~NLp<?7v}>va_l+#YK0k_}Ki~SI?uka^ zJsNVJ!Tk#V11jF$8JwrfuU=e|?|_Mo_C(ce+#}n?x0T=O1_t(Hv?{gj*!v}U;3J+3 z?ITl~{@Rsr%uA3w<X8txMhN`QV?ut~Qpwntl2&-}Xpl#XtrbKIXpigrw*!re(fIxg zUGREPv-OBi4=7Z#&ovF=ocH=u(e!RV?7yujbWk3BR3K`rhWQvy>h{21<_<W2@m;+! zH~Kikdb@01b%K6zl&~D0bCg3r*!tVM;b5uc842=UXw%N<*w@nn?7b;#<=4>%J|jLl zfc*J{h8twX8Mx0TZ+vp+2=)ZoX*%vH7=%Z(lF2K$cXU?TRS>+1b899cei-N5?_Q5J zr^Lr0KEB>PpXC3!&P(eW$lJ^+J#?`ycK|$v65e(r*S+q?+<@2OFvNw5m?dAvKkrtZ zbE0_+sGcvMG}gzwyN3Gh0pv&V+`q=~Ab%8o3pn{3%#6a|&B&vMdSgJ791>0uHx7$8 z*xH46rZAV+H7JOCnx<RPoVv%cNBJDvSuxfz$eHTTHE_rCPnVkV=bLGeKDJJ^>N5eM z!<<9(c>g#%u_vYtxqJINlTtai2jO??Uj^?Ce13FOc}LL4*up4UZi6|65tkEna-*Y= zPrd)kJlPa<eYK5~HJpO{CW(Va=p+7{u)1{#_3#{$>k<jbI~^aOX+JJJ4XM4#<v9$P zLzE}Gz;JaMD0;eGZ1R_YAx&fRNAxO`GQO7_=U9fl%@HwtX3N0KXeeDUungOlTAZA5 ztH35zbDgw$865Tc;vCJ_K+lG!zN%ymNNYYxMz_sD)|`qov&I~-XZbR}A!guv)Q95~ zPRp2gYGqq3Scb2ZPh8h$mcT}7VWzxd9vIH|kxLjaf@^`cfX0($_?LF)>4ew{JdnC` z#;R)xdV;o>N6_c^AZ4?%4*O8vw{O=k=Ptkir_R<7-zhkmv3`#yVII7^$e3BgmVoia z8z&OhB~UK+8fEWZ1b!N`4YL2|FfZ8I`1{X;Rmgwa3NNs)gFNQF)ZPKu^I7eVI_671 zrUp#1>Z6~tu9M3=vJ|#{NXF9R+$OA6_IA_~`!u8uUgv0;0{>jfwH3J;sJVY=y+d&l z&X(IP*e_ylT?Oy>6vYJGEaQ0f>@fPGs{Z;(driR&pS{2RSto&dtuXUC&VP5sf2}@# zF#)7z_nQo{Ka1>N%Y16jG?2(pryMC7hI!ps1sVMQ&t1vMc;z(;PA?Z9iXA{7A?XhB z*mo3lk$qFHTewHa+OR4mseoOjP}#)Rb|AL<gR0Ei(Vz3~)19(*5Vi{a_Q<UbVvSGq zd?l#`zh;Z#ovtQm@A0>@!+AitgpYl$rvvWVwV1N+w!&XRFvUD*5E2y)T|Nq6j<!FV z;}YtutmTxY`x`qUCO!3Nf=e3=E>hfjC^P|e9%9ikA^1JeTbv0U8v~LoP9?7JNswW! zvkpBp0j{yp-DLP29#F3lW9k`)kkz_La(r&T@P1g?xPkNi?ze>I(i!-9qKq#V-@ngj z)&8tqn+Ar+kRu*#=v)5^25!&`L@b>*v(*?}B~6>3!G4j&7Pn_AfylGDt}G>ooGR)& zo2PWzyWost-gGQ-qZguP4*MaOG5qZ#>v2W&--=VFBnOT|idoDjEk^8#(7p6ujNv5q zU*2<jTRjiGrKc)~+NVHQLB8y@D}FAT65>^5<Ir)lw6!&C3RL2?Qyu>-0H^(SOV(lJ zTrL~*3t05Sw&^J|ev?7yxkyr_*gF6oo-FA~)Af)yQX%warw){>1mu!)n&AE;U-sZH z^&sHo6!jMQ<)Ov58u#Y3fvfR(*%<CdST^fRp#M+<_nT7sWbO`vnexr86DPZX^%jNl z<n}mN5ac`LBXhtd?tCV%YaG5B{UDqZF+W)<tY3opl+<wlw?@L4Yt0<a<M@ENy@Y)Q zGni9S?@Ov}5E}-MyMM&?qwa2*E-sR0H-z))WLp289{9_3BwSdy7U&noCFILn;X!0# z(dE1}P#E(k;ynA|!=7g0oJ!;ZXT&w_^=|@O=cS?4Jq_@XF~<B4azReiX;w);Z3o@+ z=X#iGdcn3mBseQ*6m@>8vE8tKh&x8(;%Cza+9vOu4&a`gH1V|I^@Cl=*O)iZMlR&Q zN*1$g_7Dtyy)?y+ev1D(u4mDNw19+ZYx;#i^c}9pxEUR5hc(~512#`OK}LN$vv;!_ z#v|e;n6QUes{N()%$reIHEcO$?>`8=lD@{7gTo-w#CTdLx*ztsFg}{R(hJh=oH7qN z2Z8>{``wrB=nr}Mu|NU!5hZ^vSA}obGxNxh_22I@kdr6U7m@v`p`$UHMwJOs3$Ig} z>Ik&Z-pxFeRSZr8*>Th{$Qu~xP1{N<h66Vwo@MPI_sgudTIzl~=&W-j9%1W*+Acn_ zM$C=o3f{hct-Bff0Zvu8=(Yk^{@IaL_D<MepI(`T`OB_c<yZX_s0XOGhw&)ofe`CT z+mEycp#DudZko{mDRYkw?F`hwaiQSf?`6B-)`0iNPsnGGd-C*YyID81e*G0Fj6CKg z(GaVh-6D9@N*$PvJ?nY41w~G&1(4(K{i4Ushj0lCbp9G&4E8E<yytmw@BPYRDMix- zl&tIbndGO!Wd((vCu=33nsnIVDBc@1_~nI&qGCdOn%v+*J@&R6?-@8+-VXFdwQ`Qw zJ0^MYkm+rD^uyBFnc8dAfX=^vfrf!YaKru_OAGcvaydVGdhK%~#Gc9(+J77KQO<VT z88=%Xqlr{!<^l43XQ=43ReGUPHX|c{tq8#AhOHFl9(PLQdT-db!I_bgjJqyVaNn?L zSmG$oN#rL2SJV69azqg;_rL_$Z~5=$h?PNAbAX_Y685_7z9aE88ihYm|7_>7#-WGj zV5(Rc-p39<Y<nX$3Uo%#X~%`?VI`sTWclb2F#c2`4L>#rUnQK>|6ralXqk*!=*$=- ztIU`9RbpO?((gw@$`FvcsJ45R^uioX{g0GrJm-734jD`$pP)$QYO>QP7={z4yiM9c zHd5xs9O}_4uV2zcv-e?sKr4RQa1;(!uRV)<g1iHZ%EEf)aqzz;M(+3<`CNA*$lGoX zfIpQ@;1w$5Zwrf^jM=OMzc7w_K95R4&vdNjbBZsNj65$2y;%f2+;V@Yd#YfcZf6rF zc0lrud8W+XdT?<VYY_=;gCiv)t^3Q-PhB+-uDFl{*?h`LGpB07eU*3l56<t+gB9W= zH!8t6?6VR1^B#D5=!k<O@(L~2e+P|?^+86bV{9twA`<M4GX7+BFutefi@#DABrkL5 zJ6=M6kbRoEPF)vNCTV`)W5@o>9gd3>0d4U9_0hV$9R;AWq#%)|@B^eezXzW~4x^up z-dbU3739nr*0CiZ2V8dkXxrsRC_VOMSqJw!Y=xnJ;?0Xd^`$>!M+f%MQF{N)JlO#) zFZ|jokPBbo;8RqL^B8BMURn~KUoN90{jD^Zzi#Gk8K^A-?xU44_7V8}<W=s^WUEBo zQT(B<SOa`#CSgjQeGj4DhCAYJPQ>>6wS!ss|4I`nIy3iQA^4|9|5P!p0p@)MzOqx{ zpi1_MGT<_S_r*+2_V60;o;GgrTB(MhCI2zE<SMZJ*I?eyT@04IWEIMr<>)_mqMJ}I zgNH-Kxd&aE;gHXdhadKp0==c0$$738*u!2IWis-f@Y=aDm8IDX!Viq-s?|}KT;XhK zovVP+-5eW}p*r}dTBhHqo(ut>8G>A;Qo#MGLebWjVi2_ZPoVQ;H$3^%V3Pi?1Zee7 zeSW%L52p=Ov(M${L&!@J8wSc6xFUY?U_JUfrL5v>k{Vke?c{d;5xZ6xk;-A5Ht&IF z9brd<%WFW_NZHepz7uBtn~=9yFM^ZeQujsh^H`{m=&oTd1`@in1=HdLc+4iXD^O>G z)Xw<a?blV{xI2(7fjs`x5)a9OuQh<h$cG<KIm^LP$|^*~t_?OnQ?8{(Bj1(h;6Q&5 z@&lfi)Y{{|yT$NIrtF0r2&*~7Zt}ALvO6c04bWFHZCEUsi(KYYchp#zEUG}OIN@~y zSr_u}MYtY6!M*Ms-F3!8jqpS5QT;sy?7tK*EzCjgrisFh+Iy(8Y=?Y%$(D@!0$qXI z<u>i`@s!w+hv+}!Xvz<pwW@;`F0Vs|+xmfY&UW#$)DSc#X5Q38?n$9f<a|ZWIJ}uX zt?=s82)M~PKTbm)5heS_$%n%^gh(cZnMp+l!Nz!D(7&^V_+oG|rpuy@*jm%=P#g1w zgEPGXj$CyFZT-WTU#-~$FZVq@8mmU4c-UdKm9mO(zPbBf$y@=Ev};}=wjDt*7gUgk z2AIQX-LN`1RZmn$Kd;o}Dkf4gj<J*&#SxCSxyM_%A_!?mKlV3VnM7yIlf!;0^@NGG z-b0F*W@6Po_05;P#l)w4-yq$|Z~$K|*Hboy@bXMolOy^r_I~U?>wUJEs0?R{wc3+S z3|HIr+{>yWetn#)VD-!;1Pc=O^a#`uq%|&ro~Ig#{i_4D^))4gvLv}+9(MxJo>Zf| zu@OMTRDKD2%$Wt!joe=^On4D2FBGc;^wPn)I#1Mcm;j<IH{r<5V)*#*njn9Z4?+4L zotEgWOyIEeThLo51UAq&XU(br&%2k&Ih>HUI21OVwUGp?%+qjptpXnZ%Auu4-|V@C z994C*NRUxu>OCG62i@Dt0{4dF!MmBs{kd!|3@1i%HADo!qIB&CW`-KzVs_a7axR@% zlU9P3ph9S_C|szSONG71xJ=5oT?rl!(nD^0QV6CGbm=Wr`Na7VPfa>aE8_3<*NdCl zpW&UfzUzEMFfm1#_s{4S6Ah(*^jK&T;G@%JC#kEBFi=sO+Q0h&8bXe7H?W67f{4Tj z-T6^Sqgte;lp6y!dBz<9UECu%^HS2OV6JD;-su$jX-K~I`n(zL0zQ_ZCl66qmQoj2 zVpi#ZN1>^vl)u}7o89u{%rxc>pX&SEqekvo_UEfs=+}w#EF>AR8UVc%H|Ko`gJ3cd zK5lgsdBs7V8y|3ASKu?GH-<f18!`hU-;4$znMiUti1!y^%11}nc=~{p%KEqwDf%uq zY7Et|zoqE@NtgPw;~?@(B;hFfQCTnRiu#9R5BXgCH}m37a6iy;51ghTSe>cYAMbfo zF9q8#`St*JVTm7kY8wQ#x|(%i4okF5cWSY#8~7EiX1`t?1&{fR*O!QK=r(PSmaRp< zR;X@P>UX?{e3+AnMt`gHk_hL-63*SVt+FSEI^Y)tH}w$F10O3W9+!0YKuE~5&(;s7 z!8^*I^62_7a3B1T+gsWVe*{)uTB5(+SZc}kv;p>>9c-|==8OAG$wHQ<|F9=lxKbw% zbII&0)tokhHSnaG@_RNzH{88(XFf0reT~WtMu&fo!P(8fGpcyr<iF6<OP=Y4`Rg4X ze^kd|dw-f+i`M|qOt;H163C5JGLl?a?11T9h02xqc9;+s+`SRk3TMpNZ|DAOLSI9r zqTdkq+du3Jjr!OH<R+Ku{qX*B=7)FEL-HPI-IAqxRf{~m;?+F@!#E$E(I~mXG6>4G zgMG(NVgCF=;(zO%-spE>`+dDXpAZ<}_W1fTi%7Dwqlh(%A-<pIv3+e*LfpAEG|?LR z3o64?V^7o}pYq|e4=p4)Fw4_9@@K{mTJ$-TMc!u<hNp&ytX)Fj$UvIf|M|*$s#)kL zebTXqHfbo9x`^Os;UW9}vywP8_w^Txc^W(~U4HtSDS|NNeD+A{+%KZdo9O|IZ8}lI zs;g2>_z@ie*8)~1vWOpJ*|02v{Di$emw&1KgtUMfkC+(jd3cqo_)RGmehk+(CL%vy zAW}=p@o+XY9pCk95X>dcZ8dz<Gf#yC*L?Q}ZplP#`Iopy7qVbBQ(Rr9%Z^}h^lA9m z9ZtB63jP<k^b1HN-8sL1O(QJD=lH)V55pUELC^TYAt=gXV(zCwJ>6-Ec>Q=1XzF)@ z(lGaUzKn_bDe}e|+YiT3UhaY0q|TQe3b3c4-@2{+B=$GFZPlFG8OMG_HS0sTubzrH zSvZD$9A(QkYVP_o&|S1Kz@0n}f1cOyJNz31w~<LQ=ComWe#h${*+2AkH%Be;p?)G# zy<_#;1buJY?o14*^UNA@JsFVff;js>Q&Xt#sO$Q$m>N$&lg<N~_I&i4J4CQ+@#9?Q zGj&@eV-#w~xOFX>(C0WM@ooqGKsydzoj#}!8S<YW@7_NFirw9(?+&AXu5ILd`iUW^ zJ#_B<_bK!ZQBkdoAI1CRCK>&s=0P|mI+krGSO^Q^eQqY`ACozj>6;VU0#aeG^(5Xm z0`v+7P2cJSOGd%scJ)?poN{L7#QR-AFQZN}8T!xCKK<dKXaHvI|Kx3HTA<XO%Xql8 z5GEcUf2CQ~h@8D7#y9B0k4~R>LTi}@qt7!<zTU}#?!Wi1art+HyGm5Pn+5hdg>L1{ zqTfkL;5pXtc0qQ}xLP~<8_7(fccmM#uc~&H`s)_%hl3-vDtUUK^Yqt7119v1iug5? ziw;5v>8Ywd5A++{A!FQn(+|cT4-L*yH-p)Hkxug7R=DVJ?q<nq7i{%FZ{`|ur(JJK z6j_gfjFSw#iz4;_>jfrhDB?VLHb6rW`8oS7D6e@RNFu1Y=p$6C%Lv*7GOj6B$;2e1 z-eFqWGJ>!C)JeAkWyGD2p8UMgB}8ys$L3o+mt)@evW~|$6K=|T=3Fc*35HXbwjT<% z5=X0RIWmp9h&^|nWo9jQ61T=UPG3?PB(8ZHv32G(6ZLE*ygn-3gtdL1E<a-#QF_Fz zE-)#SkTvz+YNdJ)nt$mW#7I(sluneh)I5bqB#BiZ{Z>R=T24t9wfsR`y`t!(wq8O! z{62n`OuB{`{JnqU{nQzvWi@agyHh9;(dfFZi@w$wtA&cD_$CNS`>d6$;0-Fqu9szh zR{&?T4tlL>KuP9#zf43C`sXA#Z|KCM-%Mq=XZjoP^||Ei9f%@Mi-|BEmsx~CL&+|( zjYVLvyMLppdI?<LrZ;^5vIHtO{yX<Siq1Qb%J&W9Mk4h^WTiqjr4*8NA4F7&C@Q-l z5sE~}OjZ;bp{(qN?0t;vz4zXGm(1V&`>Q`3a*p?XpXa&m>-t=53d^u!`y_!^a2l?W zq)`@WOhP$XyW>dDBrv69(b6W4!_ePDSCi1s9i;Xw$8H?YEfME3rcX?Qn{^(0HtOej z#2Pb)#z~;R9etza`6Nh$bIG1pn*%DX@T4G|cQu<<Uvq?UxEUvT+OB6Dw47P;g=43H zV$-PVzR)Oys<w#-m?3BERd{@}#2gs^82`Sehy69Ds)jT($Ki)&jD^?I1awUv)HxPB ziJaFn_5`0v;EdmF*$$e9)m!W%JX)x?43GZ&ZGig9)6tg=TzKDBF7A?hPr_~IZ(nBb zV&Ck?{w<ZUDKJgC^)DKAqzWOz;NLLp&1kMCC;vVTKQmhNzG1Gy+;C%_%wQDPvC9XV z*paI*mOb$fxykFAv!&VSgGnnPXMGkq0-g~Y$36BBgAhOYmR?ye9C@wdCYOhLTM%Es zH@bdcsQtI~NN5NGS3=@<1ja!!^kid~;V`Uao?fUB9|IDnz5E688TdEz#``4Z{WGX| zKK;h^HlJ52KO23CDf8L;88GL)WV>}N=@sh0fkXA}iIXsBb0p5~#vJB%S_-eCPPgmQ zv%83WDo^V<4}~(}_gVhP)Q;<h`F)EP&Nb~|X)(NyaS8pK^8-C{-UDD=^Zp`ZW<O9m zt-Z7oM1JY)a)Os^53~;Hc=BY`f!6r-H%cEGps+~qxBOTQ%wKw0!-jq3aqah(!Y~I% z7L(X`5xEI9=#!7;Y=hOm;a>#5Vn5+|>O_yR7NA^oRSfNJg(lLIq_bvCFz0EZ`fafr zj2u#LKWJ!!+AodSCm<g=#P3!EK9{49BB)))z6XLYm1=$ciGHrF)Y3W6UWmA4AEfwq z2;%gP{uuq;3+H%sUKtv9!5<}yJj;6I2FYvZ<iF{K-iy2|cdR>LI8K80ANrd)d6u>P zYtVl~c8Al`ybi2B8A|rOZv(c+6xx)p+dx8{WhNheCFj-Hgq|Gkg4ozy_biV==$kO! z=bSPO3?6nb_=wFQ8Ll_<#J?N9zY4nk)o}#04iuTTg-wG;2<zpv$T3LC5WV(Bz6;zh zvirwm&O=k?iq}#<>Z{AaX+1kLz_O&KWPsdVC5ztkCC8V5crv6$fMN*R3>fzx$(V&7 z_Sx&)czrgLJXTG3JqcL{Qldn@PJo;*nd(05q4KVJ6!Re#uamFY#1OtoAoohrnU|f1 z3sFqeWTP|CE}ndX0q5RFqy*3VqTeJop_GE&4|UHeTW&!D_8Mz^qnO{f1R}kh5PTiE z2o<dB>6qi47cr&ca_a$2-hTmM)W{oIIDE;9a}?P2OXm9vPl0jTFO3(-7a4hS_s!!S zyg#W~4&1>0=VJ|b3%EvS!Cu0%fdBj;u*-QcO31c?m;Us$@HBFt1st)24EG7@%DnNo zKEy0plv>zh9!$kbERVMfSkCLV<RSkeJ@Ln%Si5>CGiclUQC9_j48paJ2WNt3Tj;~H z0j*H>-?Oyd_&zwSes=IP_7N(}Ykv3pgnpSn*DT)rz@FYI%YA*A!|Y_Nzs2r40Izo4 z);-4tLE}V!3>lv9+QYgUs;z6m?V`|gJC1rdz9xQTSR3d4Y|<&WuMVRxRymmz@5?wr zmh>O!L-l;E(z>=>1tDMlt9LtJ2=-rs;wZ1#!{>9qR&cfl^ORPngcqvd5kr)kw`V&D zaSLADmBDlCIpagQ2fJbY;gNxBc{m^4?0+HSfIerX<o$-YpN@J*zFMl>1RU4){kWcj zzD_6JY~?6i=Y|XDrf^;wFpx8wLD~wnrHnQ+Dy{HCWHLCbtpeV-y^8ZvD1m$thu_Pe zLqJ8z`TU3KW=PD{oVkJf)}e5c@6H*maIR;>yRoPcEEJ4p`$};?nNNASmp%{fe54K_ zb7_MQA-n%%YRZ6SoZ-*z<pwyOObGGIEGIe}z+ysdHRghSeCItHAhw0Q>C8edREtmf zL{ZhliF;0GlT4C{e{N?cq-$b+`#7JO-2E=>&&uc}J2nVLJksX5ZH;iGW#-ul9_+(7 zP;OMa)D7&WYAQx=u%EJYiM|&5Cp9f+_*wB>ZWKy9ZAPpBvbrdR=!q3bSlzUq8Cru& zDeh^}?CU`PCH{8W!Bx1W*|>5@Wd$m>eAb>lSp(X~k@oX~YY<z;#*&t@0Al+F?mU%U z!Mv*1mQK?su=4ST+6b+IK4sAE0@*t7rg&19maM_rHd%L4$SQbD6uMlyunI#DKW|bp zufXLX4rVRuMTmcB?@cwn1b#ISh8gLWz-aMF_g3U8=#%t2FfFdYN$!jnjo6FS?%l59 z^llaNj>e5*OUq!;OWBd-zlvN`Zk0dA%Wy)F;oRNgWz0vCaj~#3gACt+`lW#tm`+~w zlQ^&f)Z30H=Z#judilRyQ`;37b|?78>Mw&!D(C%s)+-R4oy9?e?>j-;BK{KcJZZnu zL}$iK0_Eel{zR{Fh<*5oh0SRaSdD|6`Hpsjn$Su!2loWn1-@FdxQl%ugy+QD=F<>( zbVlr5@B(tN0`zaOO@aUVT01NHp7;%-?fLLI^^Yu1-1N#6P__y4Ov@t|Dm(Dpw}M$n zsYrQAe*x#t&UNlH_SoZGyr0YK(ge(ZqA!ecM9vAviELZ^J{td|ph4kL<N$~SS7BfK zKIO`p+H;do3&~&qpnrFTl;Nbl^dxcsINHP5a2^$;lp#tOhN(V>V`4a0xRlm?dW#<Y z^{GeZJ?;&|nco~zhj0$=f4X(i_4yd)|1wQ;`H)A}Xx-vZG7e%qEIqnb$gwbZqxQ;X z4tvGCx_9xs`=4M`XhHB0yjnVE#!EW_J6V#uYv^w}XcCt#dT|Q+HuRswT^R$vHok1< z)F!y9=^kn%fw?b^;&MI3X*edzY}#ar+`yOYu3s$1KqK?7gzRZ7VbhJLQuLaETlYMM z)z-%0v902{$f0S-AnTNVZ9EQ>Iak;Bp?>_~!_TDFtZ{f<%StCEHwB-r&fUCm2j_kX zS?7sQ#vtt5`OgKozi*zE?x_izfUn9Xsx3Y^pL&2HHRN`f>vb~bC8N)!xQCCwYzS6a z+}!UnPC;H;SQ$V1&Q9%)zEGIKbL#ZI#3LEVuTAR;`HueSGHyNSz?{$J?bU*u3nMVX zU29#0{nWZNrp2V`$c-@_7eA^r07|wBwj!AOIk_fa;EWtz&T6SlgNkub<j5>Mg!?OT zrPdQ}!RQB*&=jm<#9s4Km(H}dQBW6ValB&NkGy3f7a#Tn3OU+Z#5GQUPFLMe`-%y$ zpME}a6MeMTk`KQrL|(8a$)&$4oYT-svg0oM5A(Foo{PRhUa+oDu5a35?C<8-tlUG6 zP0NSyxv`#E=+9TG%9ld^(Be%gj_x^-eVIe&CpHCpO=hivPNNWXJ!tEd!8p9hxtV!{ zi1W{ZEhQE7X*qxQ;S#`~_uoFMLvzcMkfKasniD(?W;R#(&g1{b@$L-!!J-)m9nYN; zt)GD_cm0!9lSW~&^QyGyb?ohX>nj$B*T?hMLLY6>pU$vdt0pTx2-=}kM;po8;L%jJ z*r%>WP#EfY9r&piQq=VaReB4FzwJ%0Rv+zvQ(Mv2Kau05q{;d37ILE)4rvD@#Wlg> zEml%l&Pr%@x#K)dk3M{dhT_H>?Qs5_TvTyV8+8BCu;}4Jf4H8EZ7b@PGG89w=1;7_ zzI2jz)w-Bhix``*$G)!SFy77Wxh4n=;gY9Z>V*-dh&2SW!P%fAp7+E0;B&>`m-wU2 zP+1+~f8D<noO<I0&J{PpoBKjX<TpyeLhQ<ZHuTL=&Rn-hCu@g>ty@u9Y&F0p`8@hC z>fTgGqZ9VNBoj;GL{G`R$No<BJ4fn$2H~2EKOGtBqI)EUdXLa2H`aakl{oq`PP+|8 z9X*BpS{gxC1FC&sG99}Al0h$oH=8g<Sd0Uq%CAPyq7%YwUD>j#M!@TRfV5**Ke%oF z7nFiMy<g+LDIP3o1Ah7E;ntZgz-&)__ynHIkG-*uqu?F_&(YL*Hk`X`>~6*dsQiNU z-YcJfe@cgvE0V$|(TBVc(982o3wcb6RD4k>-C$3XHQi3p2}yO6>SQ?AJABCIeWGtG z*lq{J4p#Pn7_HgMOLeWFY?DxZiMJ2*x^Eq(#2y$)<5``GeckZbgJ$;+&L`L`+~;%E zQSTD2J@o*6@eCy@e;35j&nRm2vrVW6bM?e??)dvv3iJE^p6Ubkzi0ZBF1EvUX8Ncd zmUei5ylSJC6FF{?v*W6GC=EJL{`{62&SzXn^CVk`pzcEBNjcnC=DA<c76>1N1M2%X zXk$izclxSo{LL<Ks*w;XNgV=8`gjNtX$4)`uNLof@$a-_y#M;aRyYvv78AWP0O!eW z*@@CMfRAgs6)$p*MR_a7DKe3F$?>=+im4sCDyRCqb#boR{Mq_neLl>(DC|>{sDbZd z&Z!S*2cgX{b9?3u@}O2e+~Pk!3?y^40-R!)D~R_wNmLqxP9D<FN5nfpKK5(85}vEn zg$xdcgkf*H1DQ!VemzW)u*JEFbJ}8eL8*mUqI}?gXKkv#fXwaN8ndHyFc#XgA^8(? zTN(ik^~Tvmavv6>e8=y^O07GSG`-J>6NZ1r3z&)_X7$MI-G)q9Ij%f@!6XaxtvAL4 zXT5;1Q7dRTBurFWRKGOAXi9uReaw*gW;S%J6+gSsnLs@Mn<nase>pf-Gutk{s0FVW znT5clY9R6G*-AVW34cYLjrbSRK>sO|m!G~X(XOp`{P1c#=uY;S4ZY98&&kW7_{47* zDxVJdSCayshn~qVoR0>(5iTAI<5YN~>cv+6Hi0PEJ(kj&l}U`b`uO1d?l<D88y9BZ zzAc99p{}X&AAZBv;$Rmc=O}z0`d4lr`v`9YCIhzZ8bFWi(G9DE6;LI$Z~xK9k>F5s zv-R$)3?TUQ?ES8nhrqnlw0zp%a4X4Lu$n88=u)lr$p1_$F~40(yOOPmNLAEH8#voa zJXIXJrFXN9n7$LWex>az=<K{LKdO6)DD34Bvj^40<6Oh{JlI=_Ikt+wY8HMIX9sER zo9Ms5tb&d$MNKF8ZH$~Poh$)%COVN3mTxeo)Z974Tnht|?*HO5l3}iU#c*)07@j<w zUU(hc1gHN|NhrFM!1tyc$wJ*0P|WZeF8KDHnB(we^y2kG;{E+}guLoBV$|8|zTt{_ z#FplJ7A~7*#7l93UkGO-AnMJ_<u->5;`a;RTgkUGA$otFaaB|;ac-&aehf_{NT$qg zevhAoCZFAgmg93!`}p`OrT!w+T)I|w-e?+zzXboy%b0^-1RR&_Er7TY=>&cJG8hd$ zG*3>PgZs<x<OOc5!pKt&1?$XJ_@3&%eS>WUPXCHXS72O*=QrD!x)RnQ;pEzJVX77Q zb2sa}m&y|Qf};jS_D@0`#dIC_k2$y=cc$q*a^4?~S<pR4U(fOAyGPmA&=;pBw{}Nn z8kWCTEU)1?t+doD-70GiM88*f&Ea`!`AUi382XG7q#0EeijWH_!cO$*Tn6&@y$?3R zSAdy5xO}$q59qBNZ`r0_1l>>`n-JV@b}G7NlCZ9UNYqE$1g{kk_W!hhv3(A5dBywR zmM%lIMLiP<&XsB&@JzYHp-!<%xLl9xSb>FQp@hH!9K5qsyri)N_x4S-b@-zX(Zu{_ zeeeW$JuH^;Y@deF7xUdO@O2Y(Qd!pg(?I%BGAN;X40sPKcyFNZ=cQYck2%L8bTJg$ z6m!kNyYtbc8Yy!yb5foVm4i8~*^hJw-sAdMV`)|W|9%0jh)3lwkiT#JvrPWt4D3-R zCYr}#|CFXHp9T8@Xo?9uyrnY=4;LM%ZadC`XRo=<<SFb?@4w$DJvj>0&qmVRn)@MY zP{FB~Wfq=md@$x(n1Jk1XfJp(1CMVW(5D03uSV~Re!sQ=#;=N1pEb{ewbJq&7xOd( zG;--#i!Ffbcf+H?!RSAe>uK3bnFR_`zJaS0<3J2Af1S~WI*D>oVG(lNZAC65meGws z0lnfjD?XpPzt(au#*aW$UsSg}=K2F&UfxT<`~<hQd*MIi1u(r|<v!Ij4KIF1J@|lr zpbb^746B7Pkc#}*Pdkh}UAwl=FRUivTvvJ2d6zjzjJhrJmK!<K&W8M615*&tm-3$# z`X?XPRL0kzLvCwzkXU`rB*?QaZVTh*|15TN&{ze1JfFHZRYr#(Iy^ar56{0djYXmS zr;tzQljxYVJPNtK6BV`W_<rvelV+1mz^oyA{H^;_FrY(h4z$O)(359B!un7jE*o^? z!u|JzSW3dZl~HKS2niKRTY#6%zh{CNmLUJm_O&GBGgk0RIbA!w1ZR>tU+~f{fZQ5` zEI%!BhRu&r{|U!^eIgrG1T*H8Ug#<5Tg}5WI<;Wu<MY5?=q@gge!-h*ABlgJr@(yo z-D7o!DM%y;KBd^6fzn(5eNFu~2eEB2Cr$p&!oZD^#@!_3Z*OoP(kGh%F7p?(ip6-{ zzCXuYoi+;w4z<E#o0vlnv2+kLTLJ@9^7+|&6Y%z9cHJoQXy0oeQlCeEW3=FpyAZhq z2U3M=Y$~wFsf()nWYskK?!`D6ix<FXPm^%OZ3YY{Jf9?KEQ9R8#K2SKdHC*sS96JU z6**kDK6dCWgTDBaF!QJdXx!nW;aTf|!&j@8=$VmMN-X`A7Z?q^fA24yT|)j<F<A`7 zsV~F}SKn7Olp<H`B8`w1>L$^lkCSyDk0I~k*5=&z4qy(K;#I)>7caF$?|2#Rmqm!v zHnfv)+TbvC;Q?G1_j$6J4ORhz{~@|E%$r5I=tO^!>4by^^2Zm)o1wUSE}?h60@BQA zxdd~|!J0YNH>$G+zAi3ZWi6_Q;_`>Z1Jpe*DSX-d%CTNB5Tf}I`5H&JvN@%nXxl-P zmbIT-qyfT>??{&N)WTJvu{>dyA_(!B`!c1G1cjTbrSA0kP!k8$`s_cTtxDY1fxZN+ zhHvqWzDD1M(P76Xqbm5AHc(po0r}*1N)Bb5KcVhf&Haku2Sk$Fa}1k24#c!mH*dWR zeh(6Cy+WEF(AQpbb+*5*1fKR~8;C0WfIB5iuYH8ViC14=-xT{;N>o1`w^~;F4f%f@ zG({`r$i;rRb1Cr`oVgk^J!yn}X*vao)HxqPMxXlU1L{O#OBTyd8{O~VT4}CD`#Ksd zWM!mt3M`2UjFu%|-ep6{B<Xx4Pc(!QHm$f%{DiOXn&?JNeTl9O5o0$5t%xOqXZX1$ zb710)F@x2IEJ%{lr4tPxf>Gg7TdlZS2=Z>Go0>@lh7f6S3St#h_eC9Je9-`}DhZ0G z|20F6vcW#(efgjndzn=xt_&33Cv_cPOom9==Iu9*6;Na+R71GJKqx#X-$VP2o?vq5 znML(+I>Lp%;P&A#dO{?3uhBt=!vwNMpJq<M{|JXlnpvl>(Gc{H-;ivmry-p9D#A>R zqay(Qg$Jt7=m^FNnK$KD4-tw?!zn7&4ic7fSxK(WA0kAmaX6DZ9U$Bp>S5Siq#`_s zdv|G;kAlES)UZpop&&3gv8Cio?IRFXUZ<FOk`fMID!UwPKtZTP%-2I6a)Pk&ME8#` zWCW6|D<<<K`v|H-X^$8`lM%QZ8fgNz$q9|_l-YStDGA<GiaWiclmxRzV6!`PfMCeP zdy)DN1)=Vuf6ns?YJ%VXJC!TVlms2KvlCe#s0hr;gJ+-r+fQhBh_{P8w~t_1tA0@L zBL!hazdVJvWE1jEshuKzS%J@|8!~TDZ9)0LZxZV^f1zM#y>#EeUr?dixBlxB3Bhgh zXMy7x62i~gCW>fL62ckjhA$G+dk{@HWM&giN|?Vwy1;gE55z92IqW>!gvut)r2>~t z^ue&;Gj0p0=dwi8`8I(eSc@r;ZX2jyMvEMA+5lN)VgH8DTVVEZLBd#l8)kxndb3J) z;jhA|c?0SyAz%F2b-8!22cfkrtZ@h4^aac+t!$&7^zO3X>MrO^UgctN--4z;HVv&^ z8$e>K@krp*9#E}KYq|^X0B3_POU>jaG$>ay8cc7&!?+i3Ta0(Wje1mWux|^(Y!(db z%(fw`^QN%PYZ8LKfZf4Z!)Yjy%1|BXpMV1`c54@eFbAu|9`Y__1|;S<Kh%-Ufu8zs zl8EzP$iG0xH^Q|D6YpQEORg@$iC^F3WBKR7j>G1M=8<`5kX6ec?Vf};yXonohep6n zxA0-Q(>O4{sJpTG4)bFwPCDsYlMuQuuOgUp0nR6Cz1<@$!Mv1Skao&E$f)F8%THJU zvtTF1c!epDrvF}8f%A?xPvy!i`ln&z^H&Rjuh>hJIQZ{C{~SCuEMASqeT~=&(@%a( zxIPFdv@tj0b2Pv8Y0JY^aQB!#J)F7-l~O0IuAW$dHT{$8yQpU!_pD@)y0Z)=ge$%e zMwh_n*d3xjKJPsX61q;}b5wxW-z!XH8jhzM`_JGxmRgMLTDo30Fem*U@jEmQM>&M^ zk73?=Iu#l83A13UO3Uy^dmQNY3qH}#n}lZ@93CwH#^6U4r*%}=D8%116%NT*gdY~2 zWdA1S;Za7>iheKZG93Erb5ct{75+df^)corLM-MkZw<qU9xd@q(;`H?zb0qLu>`^d z`Xz^NOAzG8G}@(wdfbAa;GOVgxRK7ZCUapKE>gAru*9E}`b+PDhtLuLi^&83volbm z??3bfd#bP4^a*|790$RYA4;nXlQ8vF$E!|h9x|WjO<ZbNfuk$@_P>#%e2l3*LCb$0 zh7L@4O4rZ9iqVA;9-SqSVxCg%bX)|M0l|2ILG0O7F<dxfKM1kkGX6PSMK0;rUmrwk zx<EI5`U)HBXIZtZ`QtXD@L%e>uZIAB4i!4O=Y9=9Pb_KD70hLE2pS%!#ys@OB^l~= zn-PGg?>Xmh48frF5QQ8KN=8?6Ptm;}MUL&WvvmX5`^@!~_KXVhgZtErLU7JJ`Pyvk zuQAS-2_cjd50Jk{PO=xfe*(;M-9|o!Pl8OD^Ro(E|CZ;ohyFu8OXv7$<EPjYI;Q%X z<V!O4kKTHZK9&KHlCRnEaOj4xCn4guu-CpV_H<9~^*%^8Tdm)#%7t<lYoQ#f1~?e{ z$SoAl!xl;0ZiSdPY>j{L>CCk<h`Tv0y?VD2JO-yKCd%xI1DW4_&at!rQAL}v_h}oD zqzjTue{F?ooeUkHpe&I8%5>xBpC)iR^_}4#a_v3Z7Audi4Z*#s+vm+*4?&bPd!I!I zasxl+`YY7-V?Wmw^?M_~LC);JqtWx_P!bg>aNl$cY`-`b(P|@aw?6h_R(2<tZaD{y zZMTC$jCr7=YBzk5el^H?_b1GGEryF<?}vx2S0*a%_rP)T*t;>)y-@uze8FA07t+s` zWTj(XD6PzTa~1u-)UA<GYq)>N9?>aG{egK)(YbF_7cr0TB}f#~$Nq=D(Njyu1|Wf~ zG*9SY54>u%ocph+0@_6LzH2oP!lQ00$(>2`1(()e&&B@LgTLO8(4R$pcJa?6riUw# z8#YL1aeE1F=-s(CLAQeacelj2Zs2|RkaeJ*W)_0pR~B8nI0vg|W^y|Jtbs&qWKzW8 zWk~LlFK0M94X4@K-0N>FL57Wof3Ej3w7KS{T)?k?5~!XJK(76|(C!P1kww^TJrQm| zF#$4UAMX8$8He{9am;^HXFz1yKv(MAB3QLlO)Rr4fs>+$xz*Yz5dRDOeEh@|WUu{G zFczN!w&PchH99XqMu4Q0*bvTXM2&w`UPBHN_0AWyWaMrQcUsvpA^#*G;{Ml?VVF;w z9N{}W0-_1`YzB@ZZ|&gP;^+zNyVNAz%))br`<;{LtyR&75j}J|8*^K7$~v#;SbHGf z{-duja{XA_2W#$M7zClJo=bfBL%`bRc&yeQd29ESy9BYXP}pFUM~E4DNQ(4(2NwG= zN28<4kkbXJ%DcNXn16iV<9)9tq77^lW!~SqH3C814jpQ~$PFtu^E_sS+yY+##mrFj zVQ?w34VYl>PJ$j&&{Ncp-|+k8o*jcHB975S=!FRlA92mEU2xi6(%A@exC3gNn@$&p z;31<#%A*S81>SSvepP^TJnh4G5AAh=ln3RtfuSy__cWMFh{JvGy1EJJCh}}PEAO?l zSHZR8hxfNXX#=gIcM1(Oc->xWe6S@k0`bEQkxBSEOM|Z(<^RQi(rcIJM^f<mi(?6K zx%UH(U3Tf!ZfFG(KmETv2ioy@%!8`|`n~JCzi5240eRi*N1tAy@7wofl}21AoZ^0F zv>V$2Y`-b*ZY~so2hR$DR2B2s<HAFv$bnSkVDlD5|8d9}8M3ZPPdIo>;dYu!45WrA zT%X8pf{Cz$NiK$YpqzS|@$P{l2=F{^_8j>{GyAs+sk~9&3evt(6xoS=!gnuv%7((V z#3K?DqeR%7PnO{C3Wc|9lV8b`3W(1Wf?E0wen9|}mh@HhZEdV}2^^ro{k61Bp2tuL z@Vq-1EGmcolne4P=Goma(?B!+UD*{5oUIBCPc4PNt<Rdr5_92`l59Xzg)fmlFMf%N zqMrDS>Ef|zu1?@2uN(g7jJ!rImq&)!XYl^p5z(NqNoeDZ6;<_^fMhA6+R3B|h)i>3 z*z3a{mQ!Xy;cYk%IpJoJ<uwN~_jD{-kRRMP-+Uw#uM=-Gi!hrr6JXHa7V`7h1c<P) zN6;S|gC-LBkHqKGu=~-DbAzS};?mFe?@<qf!s&HwS*1~Moqcgb4|Vw-cWe==#@yw@ z3VVMU<n3<1DZPf=#DBZG1JTUL`za2le<0Ee&7rCC4<Gb{xM~}(^yy*vcX{?NvqdjB zzU|?Z5}$=54!=(v$2>;p*_S4};g}!mB|N%{IwSYC<-}M9av&$fSNUIK{&&Ck9UVo? z9XopFrRrm!0H3gdcvcyd<$3JRh%`ZV7Ekwqq&yHR);T;Vjohadk}@F%{Qab3q`F@s zzaZq!CI|ATXMYPee}B^go&P<^H`T@-(y^M;akh<c6nVF4;SIpX5&T<$t_k)@75kmK zTn?#H{i%$|6QnfQDRU3N9<fi$s-&2^&upirAeTe_W~b0)dYLZF+XR&zHSB?TVIk{L z<XjBU>8VX*l)!V7xtYL0<QeW-fkSyOJT+H;@<zEEw%dyXKi<MzuZ7I-kg0ai;gU*o zDsBP;7ZR!?X<cw6;-GFQeH#d7+6Y=>UrbpL6P>9+Gnm+R@0DnDf$Lr3*<-aWkaAh5 zedRXxo`tnaQ!uo`&tai}v2#tB&&SaGLNOfj_}iTKx(41JrjOg%M6Qtbtvj@(#n7d> zL7r*RLj05TNYc8jideIm!TLiehiK{N7xc%3NX*=E$s)*?6F(L<kJ9}tC+?I?^*%*E zwMYNPiC@Uq7HN8*!_w{xWf${ZB6w2a(s8w&_6Mm%?i_o}@i#(K>Wg20-&TV`>8PyH zsRmG75R#4V%Oh$BPc9aDKLzLIc)`=l21Jun)mK-d(tw<1ri8@55)}K#Y1TV`fz|4u zuhF+35GMI7`3ug0T~Bh$eD^GXn+CG`@2`9%{-Wuc{e2-7WMhmQv~;70j9On`N6p89 zmrkE@Tk$U<NviE3oB2OQH}l)NzaET&oOAtbbKh5BqC#J-?(8D=GJamCq{TUDgGSU~ z{1WI@6q(+>w*YION=xF<kMm=<!8lKN2B<F=iLK$fun|eh$lyE=(Y-F|7q2gXR-M); zDei~uJ}PqN56ogOnNlGw{X8hT$f)Pi%z->ZcE(eNMv(dt+xmiX8M>;HN}rJ|LA{e| zkSz8O7`BE;cjsb`&VJPCDE0#I7!8kp$Go7##l<OKpCvHdz3C$#whVo?vfs#4SHQU~ zDc1GQBJA%Ll4ZsHqkJF5lGFSwxM!8!>iIDRA2VB|te!1F1eKTE@DW_^^kvicJI#ZU zfW0@*qd9Qd@Y%n70G}6n`caNHlR(?~EM(=}ES%l%G<wZu3=;B7b@rpa;<<8_z*{;B zFNCA~_UjG9w}W~KwH)J65nd@;w|@XU($wV&r^i5TVB(41_6T?s;k(A1(MF}5*b(fR zcQEjlwEi~)!cXTuU13E1Orzq%A@s-6JQQ&Dc~ym<OR1W)Qy(P!Wiy%nfqCMTojJ<% zDIi)zGzg&%wP+lf7&JHyXBF9aBLcDa!|A%EFX<Hg(7*a~+hr2_e+Y9GE!gvZh)d%s z_HwkFX4DKd&Oz_tqT_0+m=EKu7q8#*A#$?rrL>v{LC>8N?dv9PKzFQ_m!%&0s$Du? zhOA;??Y3H;;ZZk;SGqvEGagPHzoXYA|FaZ^$$neEY{K*Sfzbvf<c|49`7}lw{04#d zIVyk9H+bxuoZQjED4^n@&7r#fjHt;$RqUM{04>j!KmX(^15ZCyTC%+y;IuqveLN~0 z=8iD2el93OKi@}zdfj?3JgJmZWKs`7Ozj3Y1`A+5w1MHosRT$p)392D-2TFmd%cWu zwQxf>s6u<O3eqE=aK=ki0jF#IQ28wC-@`8tyH2NpS=;N)aLg$eZd~p!GW!kJm0990 zUMhxf>(_Ko1f{|#_uY@f%&l<J@y3htf;yPcrk9zJt_02u60i8lO3>Cj)L(&o1MTGy zlR%XgxJw9IXvnCCVL?T+fg;SQ++sBR#n=pntZpA=uC{?`*C!5vscz6rVy$G{hvyUq zA7wG-5%_%3&iM}JbzkPR4}8Y?{Tan-`da)uvG0z=9CkxrX+2f5kr(!g7$qNIR3Czy zZ*8_{us@YOHfg6XX$<_0T7yryU{6||Kr=VRFsL$2$j!<P!(ia+wV5UCPoc?IyoCO; zV_)p~rlflDTp%O*2f403GMmrU(wpE6`0Psx?1z1x@)}e((JviFEBDW`5Bz`c_N1F4 ze|F;_mrWSvpPpy^%(*=ROD)7>u1dIX;<+{~LEi%>na6zYs$(9n@csaGdLM8Mj1Kyu ze?|M~uJ986n;OwKIM{-HVwsej7X*i)>*V>a8svc(^l%Afenwr^%~|eU-!P2L)!Nc~ zRYKtN%|!>xR`58z-I5s70I%=+)I|suK*We+?ybH`Ab6>dlJez(_qzj@N1v3zuc@~4 z-k!hV@GpDQ-s@$sq4P~;>sk)n6<<=*epv^V(-MuJ9NNJ8hs?eUcz&3XA=%~|FM&mp zZF8Q;7RcJ}609R&PqeLDb2sMUp6=DloW;CST+cD7D{&p*9urcnq=Q`C_rd9_$C1bL zUu~c7u{KDs=PF%!*$rD=HI+Z^_5#KAEpC<$+}ByNBy;^N1bVRt7p@vKLElHmm4AEf zaGG!7W$AbeB#E>haLTL!t20MCv$L~d@hCTYD|ZY0G-#jD_wEEG^<N@0TrD6zc}3mN zpc5=9h0ChEPC_cf)hEr3VIbwKal+w#4%E#55&dLri@oMN+65L-M3VH|yl3Y#A%SVL ztc10aXzED+Z#Br1sJWd<<?ECMBM;JvXE<L$pOf#GY}GvCFF)hEKGze7ZRH2o^Nyqv z>2J6Cd6WNyOj_wcXN@|re^ur;Oqxo(P5L$BP+JCZ&aJ@y;7$fnsdQ$^!oQOE-{Z^x zlkEngxNmeTE&9YKvI=9<mrIDYv|BgC?^h6YCnWx!Z6y*}&lV}LXcZ7=(j>^UE=7Q* zA&u86|1YR83vAoHRY&|b2>r!M#Y9JSiMM`o$;9p+73M+ma-v1i9dGu>Rm8cSvw8n^ zD~X)8_w^@SYKcNJjq^Et$*8v&(h2;;UY5=$k(RT_5sUw5{~7t$-(tf5-NEbXh<v-Q z$4%rBC9AL4iMGK^aoB_b&gD~n4wf$Ab#r38!nR+y3jTBGOL!@U`L_lZUP{*%aIs_E zuVLQ;YPlk3Ncp><n&(G_ZD=d<W~o$3i`s$nm>RwPE!-D(*O2zOpkL+otAr2ucOA}u zGUh|s2oXCRS#QnSp>8tcs3HmWNqpy?=Wl5O(H}Vvl7$-K#c&b%;`J8bqU$S{Inxef zrXtVn(0}bi(zseF-2u*ObcPyngXqudx#Dpf`{QjcwbUPuAx5+u)sDP51Xp8u1^))1 zP9WIvh~r}!RDG?w`^g;pR<_1&Kbmd=bGM#Bk?XCXu2^8Id&QbK8{NvRqLDz<7%ODR zNGK%^ODQ>LeoH1gkMnzos1M>kn40%}RS7IJqzqB37Q;g>-<bR^>}BE2c21i94X(dd z-L3F>D!MJ?I%ePjFIGiUr|~`=<i4}A6cP?B3%jO;BI)2O#;@?lG#5hjPu(J8!rYjd zz^<NU9aK@C;J0zf2X?N;F{+$mP;|d;@gH*!jOo7pm4dkp_l~?1j>r>XlFa{2g*~C( zbV)RK%R3>rn2DE>p&v|W53i1WMgHRX8EIv!E*O2xr2Av11In*_@LRL5h6Q>BiKBSl z|7kAq*x>CDsD0Xr4fSdV!xCLR-Pm4ubKy(phDIlxZOtk@AkzzEX*s?Nd_}+;!E>4u zISzcmJm1u5D<NUXO#4T12YfsfdM{=jc_4>E@}KG=e_p!r58u^dxMr@s!nd1?^QQQ~ z%Q-F3t;=%#w)!u4;5ZW+T2KY7PQoSbtab3xnB`%ELmr$NxR%7u*aED%vAKq*OBfgb zM_YBW5ei&4DVS(d!9DYP^vZpl4>xy4Z3ljaTMxH4YlHCmDyNF`?CAs<JMkpPv$)QM zCwJuN=K<GiL$8&s0{A8?e9NK%`(55$p{VDsh9prvMKAqwxDhg;vK!U}`&o`$OA)RG z!V60Vx%z78xnE&aeKG;6n@SyJwpw6IV9|f`Y%@e25H!ye>3}0(B3<l&Tm$LuPmkm= zH*fITl{;e@e!E<>{nj)GRsQFubLr97yz@%Afn*v8<sp(0v$N1E)-D*#yZ|A5w#+Hx z%V5?eSN-|r7}U!sS?VI+ghb%0W>d)&ln#gHjY=;;o?bY;(XUmw`7OGCWoro*znd88 zE-nI>_E^Rx@+C+-u+THpwFHGdOf8(+)6nOruW60?S<wvBjLjS58NAc4B9}#9s+ddT z3!Ozc?|mSE&^8BGb8dQHE|`b=DPC88X^p|e^(S4AzfAzOc2BB71#(TCWq64p3&3r4 zdo<$b61-B?rF>nF`q5~&x72IoMJb6^N(jxu$I7<Fk2E-k+$eTEm^F)~NS#fd=-VM9 zGb7S#w1L^tl2A_1R+yy-2(Juif$*G^UycmOF^LZ<ZRhWR)dXfqA>3yhDhN@!U21_P z%f)vKJ{|B{@w)vWUN48XT*66odmw6O$dG!y8C1<ra~#)f0qXT*<U`JwgOxdaZdAA* zF5BDe-#F0<JvDabx6zk+<e{aqk`C$%n~cZOF&EVk!AkK`t{47Oiyz$)9s=vHsSH9r z?Lbamq^!H!14nCFY?(HYvoh&jmsQgXdw*W&eMZg+A&~;@6v(?-@;jRN4teu_SI)by zcEF7oz0)pzJ@AN7sk7@g2)EptHNEn?;XjoG(pOdJXK~Ie*TbCDr4nyjHSEdkNR53} zDAESfLP;E7`C1_}mqblpu?WK0rQ{E`)Pkq;72eQ8^}st-aMU%i1^9PLMSh7OPvw>t z8~p_KPMjDd20ZMAFQp2w`?d#6X73(-B|iwAWPAc8wY@;k7V+fyZS)1xoRjy#yseC@ zShs69^1cE~_d^QyE=x8p_$J|blw`a<>mfd;g6AZs{uP6!S$nS(e+iM@h{@`|4(zuw zCY=^K6OR2}53ts^9Nu>nmeQa51)kR*k=+=x0`0T&dHsinU_`}rhMph&JeH4|ddl0O zwV-}JA$kD37`M3EU6A(~9U&S?iG4;Z7hZCzb-`8h(<TXf4RGM-s{<|4&9FRjJN`p> zHM}jFF7xV|2Y<hX%|PURD2b52qV$~u`m)*cbARyqzZ7-$wCo~yY;T6AUB>I+jbl`F z`4G&uEGXXjzklju2mM9N4?W@=KH`eJEh>rSzSfix80Q}qQRN*4&8NFbYh9yYvqh5T z%!s|sPrUT0LVKWPlv<YU$OIVqCDc>}Pr*2CnWTQqAShn3C_i6@xu9awe#!sFK=E99 zuHd~fcq#qqzsGr~bGR6+(c`?~Q>BWBxW+6jYX^RQcx)8s+O3aoyG_Do;)@|(7vv}` zf4xq}JO(9i19YPC{<vPo7s+&F3>JKqL=QilMBiA3i2AiD_^j}8`(^Mfkn$Yh>^nM( zzTkg}FFs5{T7ydF{NxC173A1%_zi<q(Am;E`q(dg`VoP*r4#1c_NJ{kdLT8}n~;wA zeOMH{P=S8O`7T20#rRG*ci6K<68&atHL~Yv&h)^$)0|p^fBT>_W^Z5DxgMBZ+TJ)7 zF$7)TFD<Ri^uq=XkJ__K-N0v4tIDm0I+pmc{$DgWYq+u(IH);}e2P6H6TYvF$-ex_ z1K880dC$y1Xao+8FLRq>Z{%T@+cSm~9l%}uGC}g-5NNm=J8C8M!n3)eY%%0<oZxyG z(*3IoS|oTzZuX4AaWAiTuW^2Vb5DArgbe$ultoggn#RE>aa3Q;b^u;>M)}-N9YKA+ z^+O|aw$@iEf6<>C2H!ibi5$aiFrEMM=J~WHkYzEayMUb74>p?>UY$*lDHs;1#esbi zYAYLxsH;3vaQEje=!d|2%9@p7gTO$}ZW#2n5$NQFJIl?wplPOHV3xZbb6w|EC#XAs z<M=)?&CO2GKj6>BG+zeV&8f%TkfZM`5og34+ySDy;|7;3E5U1nJo`^a8wAIjGg|+| zKHkcX8?}X~gC7bqUzzBGE0N`-<^f&sY@gqHg=HHE_4BbGL2j(o)ijwzh8`Ho?pyWx zg*>^Hd+GIx-Qf7SORFqy7>qZ2l!q^MVejvMG|v?WphUksdC#O5ehzYs#dmhV`FGLY z1~teNJe3_ci#dzw*mPks?5B7a<h_;ChV!Sp=8QR6>%jF!Mm~9a9h%<cy;$g51^G7W zcKL)Qpi^}D=^?xXFO{E1{6jx=c9B5xb@biz6KD_Ct*?Te&=XBzy1%e+?xow6uo<|g zdVyeE@)v$_wgg#btig>t@lw}RR$zr8SY43%54;@TvtTlsfGl^nby>4z2$PXW%|U;0 zY)-S*aPthb_OkTf;~s^&K0m96VY6UzlI-5d-FZ;B@m0G#8s~hC=8<PR=RjJwJd@sU z3EFNrzbRy%g99He=j2zGq5r&egF6HIxkY1YCxe$^sloD@`k6J5`+2!nVR{BKG`Yt< zi!DKK;eyr~?FH~qJoWsV$pX-hn7_P^oFc)YM&VA+W=MEjt|62(4*rpcrk7DSU*KLM zKN>RzH>gH*<uU(~IQ8jtZu|^%HR&na{Tu`88zNjea_D~@5T44%9(PXPfeR<2v3GGz zESU%W(q1#o9XDbzA7wm~Qtmzrw^J7+A4g4q-$K)q@o41w2Xy(7oo$Dn(!9*B|K}Qg z<;pK}jDRNPs~u7Fby(^uu=~nP!BEmGfAxV{VC~zIxr6zk<b)#$>3kjFP~|M7q0tTr zyvZ*7^S!{yD6u+7(gOiBv!7Y+U|*_3w1h}m3$Xl*X<@|syFYeXP1mgp?4!v8BRP8^ z<BCAxCZ21zu3R)z&1r*O(YCC!&B*`Tt$e?Sd89<sQ(AVJWpKeMYPdh66B4^MLMlZ2 zAf_^8v(}*#=pU5n>Cf~*X6T!6>a$sp6*ire@C17eW|JbqXpsX)Ypba`*bRT^hVKL^ zq5l4TV_Ai&5^4_9n&=d|K?v`zM|N)#anX;uj{l@9G10jus!F#4IzuW-ca3{s<{+mo zBOu3fsQ8@jsYb9X7t}g4PzQ6*%$%f28$pvffW4tE8WJM97N+A0An<nryIEB+oS9a< z!GXQ!Q#p@D_7_yZu^WRLDHOlqF2}t$rd7Ql{Xs+HA98b#c0D?rpD+m5i_YHA!}mS; zY|*xVy8#whYWxgjE8y}OnV>cn<X7ZNGqfRBms>{Ukxak{B!uvMn_tDA5_&0h8FTcT z$6qIiJNH3xNu*^C&LI>pr|$?z{$Fop%Fo9BONzkmM|#8kkV;NU;>^|t!t6a-9Dh5& zvWjEy0ro}xm&U!)l-3Px3-Nqp2FN{lXg951jnAF`lFUm3Ti`qk&1M$f@5LWlb?nG7 zXFGIyc{vL8h>I2}4W9jQMju<m$+0i*qFl7;LKi6JHl%#V>+@<vr@bxDButY&bvWEP z1PRBg^ltYI!lFTIf$e?d^?bOTQR_Ge_peR<m^4IA&Z4ip4Eki&Vh8_R*}`-BFLEOW zSA6|Aa}uS`DE8;22(UBYeDlpEYK3b9z?bT@x>!68#gZ*YOpo?L)V_okHL6<7g?T>~ zJz5Ld*3I8^k+aBVkTdh(ZwnZ_iJ3e80{ccZde}bz_Eelp^tz~m{l}JDLuxqpDM)vi zelF1tuTSc}s(xJrQzPFiGTx3sd;k8~P|W-N^tw3u_de#0On&d3kR5=%6y1lcVaU0p zfB&#LANyuce8>!F90Cc#)tn~sRxlIP<hk<=`8jsW(g$gWA<{QfF|B+U6e;#e8qZ;# zhqHWq^IkL1ZXY<dM}oZM^5hkU>N+5|qe&0{&;n5pnuorjFMT)6B0irDd-?1MoFC8E z!r}4zp9eN7;Vys5CcQJ}Y5KJz!_GBhZ!I;vWkAm9O@YhWY&e&#rackl)BqoIk10!? zZiS~`{)#pruPB3-wAlGhFZiB)wEQf)1Iqdsp9mmV&#}Zt^60-NNTx5IEYWBMas`8% z5^HTBYU0_xcLq6po98t~T3TUc*0tw4`i6C-Mrs+pw1Uy0OUG-AdqEk*>EcYVUvA)n z)&b<m4(@im&Gy5&arrLSq1r)UYdqE$hkYhgA6AP~ai1V59(1j#Z2<PaD$h&`9E3lg zw#8f<@p+INvR(1650p-E7q=bm1Fd=bGpos+knWuqR3U<SiS-Y&>gZ!$8sn1$739=1 z)<h5CzIb)jX_gXm1|8kje`t}rdgh+HK1XXW2$OOiIf(g+Y0eX7w`lr-GvSx8I_^W# z`KuGPyOzO5@`|0R<_aA8=RzT~umYJII&2jBD`1@L%y^7u83xslcgkUY{CeO&jqZ*m z7(9BLT!MWGwg$3N-?*&7I|B6yaibMz$Y2Xv-Cc$vi;q7ao?M09b$jI$%T*9}lIl72 zXC3BVZf9AhtiyNFcZ9F#7raLlGq}S$4b7v@R~3EdVLU1!PnBi~a!AU?O^8b{z0}3; z5jBpS#f}}0#A&!_c%+HGVjg>X&dKgK#@Brgc>jld9v-YW=kS&+!`_p}lHcF1Kog_o zujQ6SII1<|=TW-?jtAqzv~*XYVtt<VEcFun^hjzr$F>UmFLsIw$5%kl|2g@g%gbP8 z6Zg1Obq)51u1T)tVqZYV>(GtZ8F<%w$D*+jdBe4j*LT8)!8GSdp5062PnXZIR-zuc zM{_9H5a;3Zk1hmX$wz+A+eo{8KZn4BiE-b8e*^f>SC3JtV9(}L+2iZDpNRHB4gmIW z{uw%0!`gv!_<$gT`=<xMu(b7t0cRVKx>3027$8siMQzL4H103LBFKBv@cxPz^>WG{ z18zlM)3BW$;3=1hJR#l<t@_7k1ICfpRUWHB_P!sqzick;VvgrtAnOIkhGBS+M065E z-fw~O$c=lLV~Oq1$%#FHJ*7jPZP7l+r{}uO+;1=mb~d>~g?PTS(0j*3tQ-NS^x!6I z^lLcumMtc*i~^Y=#ro>u0Z4owUh@r~!vQ5l$4GF_EG%pOI)q~Y90!lnE{06Nlb64R z1R1+w*!UFtbL7Z(ths+5b3)xC&Ei}6$uY2ID3^PGt_w~rHy1y~`_`W{;(`BWA2_5| zEQNIA=SzN4<q72w%oymhcJmG+my*#WQV+QmmwzrSaE-vKK_YV~>dh~xN<ESm3*pCR zn!{A$AdJV%vm4nDf#iH-&DZz6AXCjI=%LvP50mc&bk{Y*mzO@1sZ3)a`n#K;r-y#q z@}$grr4yh%|DXE<S)7}yM-nLy4uWN_WZ=NsAOyai%2C}N0r94=mC~1kKnyzhpC9`O zd^9kB;yQ`^_bGb2E$m~+zWqEIo{z%JKW0bfKX_f!i}C;KLB7ZY+a2czJzytyO!nCS zdBYM}8T-11p<={0sOAE4y?=49SxgSXFViq)yKjBKW>#MO9`&4kC*N)4#31kZ!~2Lg z4!uCEc+9MT9IbLBXAw>!AHRBE>6lGFyjMJN-q{!VB=s3**O0T$w&ByJEYlCKD+4!v zyLCbw!&t>S@=O#8Uyf4Y`|r~25W|Nh+^4<7W4(b~HR5m^-QpnBQ4U|2#Jn$<xAH~^ zjDo)7O=%O&Q7~-!EAs~XlEm+S;)h}Exp;N%v8FQiL5s6qA@GfW#!l3K(Og4da+EWZ zS_^Z=^sh&r-WY;$J2k$CI0xOkbHn|GcLnnAN1dN$HbVp1=lKqyVjx;gJzB!vj|FaS z&Xd-yAne^;$$NPev|?||kl)8V<r|Hm#_~~IXN-QZpsr3%ub^fWhCX2>b4Rb<A@I4n zStUz83h!9_3mm@n!qM}70>){09(pj(+PZHD3ZqlXOmY9XZRlKJ8-N^BMw18v=2F=A zzv`}8ZNWY{zxTJ;d*LEQsS@Q#A5`+2Me3a#1`DRxGf$MqpwW*)gf6oiSO+W4{E%yh zh`(13R~7WYW=2HH@<2CGI!_8#p$-?w5`5|f=HW)$ls50bKu-C|k^yzgc8Ho1e)7O| z1PH&$yrj!If%Njg3~{|56!popG`umlNA}|4+b5{6UC6MG)4}V%TjR;a&T^o8J+2?< z&<KKuN4Y+>SAn3cS>3lkrEvN}mtQdMlcu~ncui6F=ig5sk&S=fHm9(@&wuKH{&3mB zGxw~)l$8#&?zh9&ZOdkI*H$3BG^cv>t^)>^YenpE|48RO(=nBV{iZD0_h`<3h3<9N zXnV^tC?I3h5k&sqziN`_YuMjG_YCblk|9KrB=%6AktE3N=<*IYUJ8`)JF`!p^up^T zhUik{S41$$P|0!Bg5j(*G4$Yj82a*ITB^1LLR9`5&9yZ{gk65qd}$ZHo>O)|uA9z% ztmpW!|Ii@L=imjBc8GuEBz1GJ2f`*o19y4x+$EDA7QkE%mzGZ54f)jqVjdq%7<O@f z?lE+en_>X&rI&l92X=y-)orn#c)vzFnib7%O+ewrYd23gkHOm)+`>$r$fJ$7(uwRE zfge+}F|GKzm{5&Y@gDS1si<u|EbRx^H#F0=Ej>{8PK<g|eiRse?uea0T|G<v@D^j@ z5L_#7s~p;x1T--(3<x4u;jc%iKdwJN0$%M5;d*rL`o#2wpHpyk<*ZyE=RCCRB^_9Q zGyz&K^k{8erXe9%u#U$ZefA+CzJm>;$eWXpx{0~I-Tr~ZG#G_en~UUfmuBGFo71z4 z*uN?4u(js2g516%4+^+mjKN*2Kl^i6N8xh2kjZm=fBi1ILS6xN@QsRAfkY<(0vSgx z4tbS8`9Gnq;xCmDXILgHwfY-=Qq$$VBrk)Qx3Nu6_qRj(iO%<1zgwY7;eu2K`T{b| z5}K_&Tfi<OLs8rix%(V#R@%rvJjLOX=2lV-J6!@6R@a+B_HgKzf5^8fZ(I{D<S2!+ z*X)c)M9Y9VnVy1uz8w5_-7n9cYJneFr*qvfcgNIq*X%KU4UFEBzsp}!2P^HuGEFM= zuq31{WA2ANrZy`!39@A{sP|~<%I!k1m2j5XeE1yfRSsTMUGpGj^N{vTOl3oRZ0f$a z<2k_kJKntwokza<0V-+lYCy-~g_yX16@*SXzyI+d4T?uvQ@^F915#hU4t^Sh09OXd z-p~=)XRDW3f_n6PoO`~k`VjJEZCMsDZ_T2vEnn%=0`#+e!h=c3B^*sKxQsg5gUz;G zYUId_ol;&?U+RHye*gIC*LdEczf65qU<B@KIHuJ;#Qv1<A-<<41|Z1P<)jw&aWxQ~ zHr$X?=&Zu*A`^@H#~p7IC)r^L$?`Z(!1-BUz<lF##vu?l(=@q-Jp(@?N}9MH;Chi! zcu5X9E>|=JI5g?%;D^xF@1e+5PL>b3^$>Z5?>=`6T*o=-skdX{rxY=_snNRRmf8pO zOK$}z=WyNN`klZhfj&p-)&c755okMbGh*r17zo@8e)Q}H@~EtTA6!E2vEe^E?|0Jp zyfjrG7z%3!3a;vlFOYxJI{4rB_t;OI>%q;Nh0l507Wqg0XX-$a>eG>7%)P&R<;_TC zTma2G{L5q8n0seSiix{l2v#|xG(|bccejs-7|TWO+;>x9bM11l_bh$#Pp$@%+0qM= zSBv1?QIShg$RoKQLq!<ET)`vhS=xQ5AKiV-M3Q)K9HOYGjC$>cVK$>bv(pfDJ?HX? z5tC5}j=6WYP;vwW6UqHOb;dyD+D&<4)-W(7_OpnhPj%8Nw&c$|elEhT$AVGcreLQO zh}A{jiu;#<G}QaPbpIYZgFGVtC>hUq^w$zy`N!9^CLsQU)+$@_6et^APh~iQd=MKL zquTF9{7^UeT!<x_xbN)S4<~Pj66c7QJ_g1Ag4cJGEIrqYi2LQ1;2h2s46BaQ@ueV7 z=+cFm2L2}aehPRf&8p%0$%dz<y8rjN_&*5us|Ak4{?fMt4e)_<Vm6<v1O8^GMXenx zhkJVb&&J5g;H=q=HYSToc+@$;AX8BdO*Y@|epzURUtxVklxNyN=UuD7@$eE*(0Cei zL^}&wHV5)prfOi$_}eo*yB463yH(5|*AAmr4HG8ss(|^^!WxsaGtsIo{wuBAC!#RV zo~h|QA2>^4xv%LX|NkgD?|7`+HV$V~W}-q!MyZI%NS#QeAtR*h6+)DfEkwf>ifo=x zX7;-6z4zXGlaWfj=liG6Q=UHD_x-!B^Zb5~gJ6Ai&u31=hp>2W{lEH(Ji>>LWm{Iu z5W-SVYnxV9HYmOKk$xhW1GdA?GeOm_z@YIcCxo=aO-tSC^pXIAy)IXNDqjZSME#$F zG}1I!zVNbCATyuPO3xobhTNzwU7zjet9{_nL*Xm0kNyLV4SH_zGI(`5r*#YWOT(re zWej*fmXH=+s(+7rqX2D*dy73Vd9-e%a<3BXk9?_S3hxFw#q?m2?m~zS2zBgwhrEZ* zCu|PsT~Kj0`1INMdboKmqATE6F+i=h|6$uMsQkWp_ta_;D6=@mm77*V^=41)VbW%B zAA3nZ!O{oHb3^-UHMj?*NTDnmL62WDS?bl-l|WV!WD#du2s+QQf2`iC2gfsJcix7h z|8=Z;xwo|%PCrUMs?!+=7Wc1JkuzmOnQDPij2`xkxf(s*<W53W#%!wH(Gj4X-*=Wl zK1}G_?xr_oli-};N%V4K8VW5q*zPT2-sQ!iA(<O9kiG0Z<eZFrQsR4^3STkj9lRac zM%0e?f;DM2<T0AblvY&COu^?P4mNyx*cUdj-TfCZ2~38PCuI{Rz+?L{SzpO880)wd z^<a+j?ybY@HyV&<;#RvT7&;C{VH!+drA9#1u7_ctd=|v1IEdfjej`Ngxt?JGK5zPG z6(o_5e`qMZC<r}hgD&50hD720ukY>1tltFCG`X*wLT-;!tl6h6{P&TOy4~xFz<o=3 zh|M{C{-Bq1`;-}S1vvICrWMCQ!pi^5N8u?@vtn2jbH*HR>Uwv%9RYORQhdmQYhk=V zqnT)|3uxjRR=Em$fhvnWtck4yjL+sz{~B_Jlge2x{%^{`qm`HVV_yqAcuh`ZtX2TO z@@!K^xvRmNcjeu8rx@r>{(Z@wvmSt(;nc+V7a)7^K$H4?C3*y0$#eJ%plzg8|5HUZ zWb=*;oT15udMo2R7f}U*&3}5YM#yqN(&gRmsXKLW#b)00o=y=#`MmB^t=tM=Qw&g- zMDB{Y)5^myCu`ts_QRq?<drR^aZP!l?{tBgGI>#?7W%v1`7mIf!2LCo3-e?%Bp$gg z>P_+$45DIm?xR1L`^~91pMT9TOhWyHmZ1Xv4E#{zkEj6o+l-<Lo~7{XNL7MGa2|}_ zyWaoxbQOeg9wm1VtA?{x?h2#By>MNfv-!(^___LwI{lBEHzW`3o}6FE1dW2R=1WX@ zpr3!Ak8Kxww{Y0rRlpB&o*uG%YElQ+=5{<ikC#C?`L_rCKHs3-R<Vh)x(s4Jer))U zqXDEDtnxp2s1u%B1v1QtWkct!!FY>|KxjGxKjxilVCcNi;V9&_2$9f8JZo|xOlQ7G zqn~+4u*eqn_TsY#uV`xPhh5&_I^g}>eZK-GV~E*pe?$@76_c`=i*kV0IN;*KOfp>e zn3kn`@)#1Ha%S+f#R1<Jca{pd3d9Rr85pk>6T&#Z3P>@1hWc>^5!LQY(CyhBP`gqN zS3dq$S3QUGR9Q1Ocih($IKl1#I`oeD>fP5&#n(NP!q>V`d~OqF=S37Se>UIG{l{Su zq~sD_TkXyOS#;)qw_eUd*FtT|s?a1P36ykiVvdN<!*M~d2YFGs9oJS~qDQ8mR6vLg zdwTm6mMSXKP{KdK5~qQ_<YR1wH(lnT^B7TF+=oSA64apho4EkL6?&((E0>|>AWgs3 zalFqG3U6GXK+Yl-H3N=gPH)ET!^6fU`1PlYAy|6`K93W9dOkS|rk^f8IE=YEivtO( zFZ(f%_F;vo1NTZ*)ahws8Y{qWz(iG-j$Flo&4C%ad3fG-L2z#p?}su^pPajk_iusd z_72<sbMu}Yq8%MXZc{J&m%9y+oO&waYfw8({`~8}Pt^sy7i_N|7w?95GuEY-Tx%eg z%2GIOs|X6(7?K;H4t+1)dQ-lwP%Y~4LOiJfB)W;@T`pFDJ#~fVQ>z{@Kesyi=`#UV z_>%4!+-L#~HioynljwImLMQBtyhhG{k}G_yc;3@~qpV7bd-D=yn!9_AuwLvR_z(T3 znH`ny9W3$R5q|5n*4q}KtqLDB#`{KI-Z{N<&pPm4_$DLodOHkUe@YS+ihh$5ZBY-t zwjifXBwo|78W>ab=g-sQ`)a$!?qXpE%#B(X*W)?U`cgqX14}173aa|%QCSC_wQHs3 z+U+1bw=-*1*bdtH4a8jQoybe#c`w0-?>F8a5&q3CkeaZno}}pkW*&}YORp|4|MBr4 zl{wByDb757H9iQpJ1lirYS34DK$*4<d1KYP<GxJ?@H{5A+4Y{iAMC1k{k1V)P^4og z^U9_lB<?AxI3(fs>2|-7z1a!vPif*OfA)gik9fb39~1CyGL&C)su!dJPUf4VpDmwL z%}MI&7|i{6CgO5q0!mh&t4RGD0#d$j<5l^CAmYq)@Xf+7P+!g6Sid_4Ucc5x+i;FE z{^jtwbsxNs^KhG-y@WpK$2<&?s+iwUFJAtg(+}NqH@)IXCgJLNsg|`f-Jlva<|c;w zVs@c`O=`?<jZ$;WrHUX2yOqu|1p7BWM{>g1udKp5=7;|F=xwN3EG3YxuVD|ZG_eWy zodGv(o?Fw;f|%yKkXPL-m@Q6w(Irkm{x9~uHs(cmCBG?m>QOIn#GcZ-)HepyOLD(m zj-$`@@!=SMJV$A|WQ3~mpf{nl&3x?d40uRbKHh;5Sp6$0q}5Riv`6hmxZN?Q^N)jF zn`9h3v-^cDq$a@n<5Q{H{c(8v_m0TO?g(@}Prj1!AM#<2R8~?l%>rL#fT=A0_a%+E z?T?W?U{#=4;JJnKo*Jr!RUYKg$!!WRpod($G1yMJXA%~p*me1K`(TrpZp_|z6k<oa z+81#yck$2o&>r?Dp5GhoJvBHF#zk||#lG#(YsnIEhocjkI93>o!upYC9mRSDdqpM} zKFJ=(J_qA$PVMQ|dXT5@5I2>t1f{6&JF;yZa6g}zA%S}o*omTJYy{8;=T1!(i9Q~# zo1rr?I42cpEAuSq!2O-rUiy2SFLlaHr3lpz!*OnzZTABmP-|yxNa9-#=TbjZ5w9UH zI=Fee_Te}f(wyBL^X&kqV~;*>{b~U*5qIOo%ns-~ANS@!YZug{Kekfat%VBeaQQD) zy)fXa@SBMq?^S&d2foiX0;T99M)86!5Vt*@=emu5J~r~^W3ML2AW-U;Tr2^@h###L znBx%eV!0K0trfOY*L(?E^^oP<3cr?{u#Y6`%-~W5CIZ!#Wbb3Zn*H^sPU#BBxxy>A zig_^M6Q?g+*R4Pfa-}^ZD{^$gW-|G3u5V&UY4J)H^BF3KQ*v(4fx)v~(F8m%eLqF? zBouRhGK+6+72|%(;e1X?B<`1IRzvl~k+&t%u*N0x5OWV+v%ACSr7{w~c_t5icHf)& zhrVQ?A5zH9pU^x8jmJl|FJfQd{lX!sv*<A@mbf0u!HyoBVbNCNH<<T)@bKUx{CvDK zbLm(v&dm;L-%xmbuOCue%RKtEQGH1qcKgZd02su%dG_BKf@x**r)wI6K>Xsr)C=vy z;2tiZY~k1o8~Uny1D7U%=_$$K2;>;{7o~EB{Tc^Nd2%Xi>}wgDJ=3KL833CD<kYe_ ze~eIY@A`Uk00tE)e|{;)yaa;|okjctkT~`Y=`}1s7$5DsZq`|7Pr0xWr-C_C)qtaR z$B<uGYWHp21HF-}vN}iICP1wyJAm!f1RPunWnRU-<;6o>E(U**d-%q8*GP66a-|(y z^>d~{X5pZv)U7EPoQTT5gkBV}ef>r6t#K$h{_0^F8~Oq13do80=i%L&)?WSYH0Yf? z5%~57`qMj8t1tLYK<2JB6F>fbwmdRzJgAXRC0(>ga2f(Jvk}H}%0UR{?g>sb8i3@W z2a~Osb5b8>x>1om4pS@^MM2jl;E0VerQY8$cqMuF&H20m@J`zbC9N0$ot9oshvhyf z6McSK4bOGwHNMG3^Wo=c#5=B-s9xYxP!^eai{7A_&<PdlZWv{bmsc+wgzq0*CFgZV zk>`KBX*_-k<nG^!CADh@4xb@5ZQfq&w>kNIkHUH7E^~wUk!~2GVRT499?fr=BprV* z<j*^IFm4j{KpD%b;5qIt=u(XjzIwa`wCQC7gVFy{;_&$w1P{VlD~_-1Y89|k)6l}1 z_5}{`#|8u&xIp;N=A~7Veh4sFpZSJ;ijk$}?}UVAD4C4pv&m?LuJdPp?g@0mO(AE4 za-0j^e>6f&WI6y}PD!laW~_y~jm08Nn152&HR$VQZh%MEiE48(hofvw<G-cc4)&kN zK$0>aaxBw%$K2bYB97@qDfT8v@4Sy2U+;xS3?<{bm^&^hnU>Fd84RcA_3YB0e1()( zf+=o$X<$eDg+J|f2;q@ZrFl(LJCs@XykO+V`HTtMyY1*K*g5B4<#@UlEGTMhMmfJj z`k#M->Fo8;a;-CQOQQ$OOo$}}j8zEdKBep*!+D4Tty?;+aXGk26jJFaw}Hf6(xgj1 zJs^D9f;*wJ74+^VRk5VEgT}KKWqr{uP<rCo*Lo}jcz+)ePc<upzf{+SEuAZ2j`4h_ z?6Ma@-9kX<Oj9#xabIR?h!_Mr3B~iSIOk#4O1t^ex*GiL&Z?XUC<DERJQofMln`cU zLMs27qtBtCw=)Dewy7s1DNOI9XPDxKl`QrUS%kN~-Fk-{P!`iDmKU>7ok$ixhxa5x z-MH}_zW){1s_yQY;a+jlNhJR}dRAB%GTM(||ES2>K2QifuCaw(pVIMub=3T7_S<O) z>RN6m<644Q?=chM>>2RgYkepFdK{>d_Z!UCkUyzCao2ca1qKU-DSzlJLrT=O2MsSK zq54{KYzA^6c+58|=Q9>z=$RZxpu#HLP&u<XZ~(a-otBZQ^2l>NvzKyKXa?fTZsq$L z&LLlCojufY7B20OUC^3F4x0L|!b7h~5RGo$2^5`$>qi>ibd=42w~S~E1@hyzj;^J8 z&>|o1m<?rk3+@wthLr#MuNR_wJvL5t4nVWEJ}0Lp&N++qd!OFyhn}w#c{K&?AT?wo zIH)=dN7Vh}tXeRiPTVL=iF~R@JBI^HGDh(A>Rq5(+lf8hUk(REk$3d;0lOCF4K#P2 zxeojp152vdu`p@$e>NG=ZvMvk%hjLnM@VNNap=!E(yPcvp}6ZYp*RI;lY^8BxTk&Z zSVlvNbI3IXLgLA*3qU6^XY>qvc<$+E;tt@xM@@6Woch-k=x=T>(N&_C^2MLV%K|+B zGVh({a`F7+!c_hl{Vr6R-zV?kUS7ISvw9#3eTgmHQ|~cXA0sJH<SI4>asO$&_=ou= zKf>7(HDB!U4sSFF#2`mZ<T)eD`!4WkUNR8+&<kM)8udd~Cm<=uRkI1_yd4eS;(AvG zV5w4szXbWoVo&&@k3Aj+N1r=Xme}_bifz1Fj_1AE<uUDO-!WJzm`G&)hxc0>0bSOc zBfy&zIB}i74uV^_t{<vHzxdOzKtt+Ih@vSEQz&bPxe4OqyBFIam67+Md&v-7JrQ(4 zJ8cw(wz~7q{^^J8$o9=X<W^>H_wa<hM2~rOv3nrpFi1v;hFjpColE#_!u6^VSdu?0 z=mb4bW3K-<5cjGM!SWm7{|126Xh5dVp$k&&9h6lHkxPH8x?!IfJy4IgYFN1XVE3_F zOAr45d<dnGl)H}id%oCQdOWYj2dvAmW{tqyyvAlXJ`cUV>D7I3=mTT=6u}#0xF=$g zIb*1T`OzPr*un^N;5$l25E@0laq`Xi1Gt|DuR?J8JPQirQ#CvdQ$XobD(Z?HF^l^z zu88K&!S5?SJOB7&FZH@#X3ih<$;AICrNI3$d6u=#Y|$`?OEDg``G#{$-nsTK2FU5j zeCS8oHw|>rpA8bwGc>DZd_gCB7%m;M%|Cn@_kf`t|9bHCVi7VX$fh|3zYN~y8)_l1 zm*?DxurB1tJU*$EgPy8Om6AVIFb8pR$-AT%xyj8DZQBdub1>xI*q$#s1%{;8Y7>5= zk5BAZd{yE+#0n)<%n}yBK}5%qbS|HebUr0zJUEUZCK3AeRAnVJ6+iEP^fV8q)ciOn zxthQ>o_?D4L=XJ4k|CdSZ3UK>PXF|5u=nzQQ{byyE4ZEiY5CZ(3;1It99AuxfUAXq z;e<y!SpG^P62-YDodZSh26{tuzmnB(AYa;^Aa<eSfIdOz$Mg|f{XF0l_EjIhbPP&e zt`v4YOoqU7_CgZjDFi#?wsT_rMg*M!?OVrODuAy>o&V`%6il+07tqmGfTP!oQ|DRZ z2nK>r*Jr6K;48oS_cr<*c-fMae|qH`VS<}g!tYNyq0K*5VF3L^g?!Z1+zbhz|Kh&o zEvH&=GoT%mq-y}rN9i;H_mc?;qY2MSZHquw>12QSWDlGow+njyxf6tBKK8L-Zlw8( z)0yw@2k_^Z6MYYTQ*zHJUa}n+2PWyRPZ|3iu)nc=B`9qW`sg)cX4iV4MPov}ZJ`qs z21#4>@wuMpFm#YkxEI9AbH33b4>iK~t6V95{mbzjvzy@n$nJjpu)j3|eYJ-gj~yF< z_2%fC1@}gvL5f*hdZ`t;v{et=4zyvv+WX)={t@Unq%O#S9wK=5QK_<H5FRUVO0<yl zg0*6Ajm9W){<en5tZ>dm?j4)A;fejm(&P_%0qyW$;%lR~O$X5bTYmY9s203tZM8J} zS|RzwoxqL$AqaZ^vXBmaRuNSpWV7grSZ+Hv%--DqZ0>p=Hi(CTo@7<dynPyEx0HUe z7LCLCBt;Rz?huq~Q^=cO|2oM^+n1ze6vQjCY;rIs=E`w)UfFX5;*3v^?T=v|lt#-T zQfmN&{1%>0SYyAr<?9kF^5l-FIi-~Jj=|se2Tr{}PI0l;(;Ht-;dy!gJ5{X2D5Thy znqD#=hOr{MgSW+ofo_`B&yczYnEEybXR`)@AY@qEjpwKwkCTIr_<YS4Vzhiajhtu7 z8@pNfT)cQB>*VV1aY&n5zsK_(d)QKImzy=lq1rScR+4@kc3gIn9A8erfLDr{iueS$ zJ`KN<bzvB2sUzpTao!g{X0DnNjpyB&*i-isM!-TbeDem^6a>-_J{-Zm!yzpLn<ZQH zkT(r{$Wi_RO6ev+f?q3P)$dx}mUl5Yf3H<<Rjq?a;{+e4(yySkqv>dK|2-s}71DW3 z>I;QmEj3SHEe9~#Klre|4qh)-gkE`C1IL0qU3z|dK$Y;kf&ES!tn8Th3I(S@apjHe z$Jf5Ymii9|wv6`#D~Z_CbzLchw86*8=NzI4RS~>RcStMYO!h|;yT@6OJI<#Ytr11w zA3Bnoc`gJl4(GMsV)Q4x8j5CQs|dwhjBtId>1#rFH);A@Uj-q0)+X6PH4_--iP}4V zeF7}HMmFWu!l7d~cdQH&fHdOmPi@&uLSS-ZQ|?9-VI%*2a}H5CFe*(4yb;QT>nEzs z=W45wN2{i85`nqC=xSkW^j#7R1pLlfAfLa3$!)cz6;x{N@1%d|0n#N^&C@Q}v(l#u zd5HaG_i|_LZ0btT3iQ#F4C#lhhFjj^;{CvKUY=V|v=w49XxCoL_CU#rOtOpB6|k(t zsgcV=6qnMHW6{`1b_m(Ig_&`S`y6F=AnpA<ZMT1ML8Grg#Ztp&dRdQP9eJdL?~ z;Zw;QLEUgTIG*z$=Eqjs!rU6K_JN4!+w;tA=+o7Cm*n|h1I(@G@+$i`f{JAH0P)#w zsB){Sj;zOf>up+Qo^jkW^sq3AWp{y~(ohz!To=UL;<e~Vs7F5S>)WrV8-VJ#!gg?6 zJ9rBflYPD14|M;S{?!EFbDY%w2SeL1TrfS)b^YWB><dk^mto$*fGb_p-gF3xKHX>K z{m=*AKaA9+Klg)@k~6Uv_F$rZi&}?_U@ops;dv>=03^gx`f+~mhcn|rFMI>~fg(G& z{Lo-O@)BH}zhZ7dtNR+U`aQhIjrtXx#GF<IvC^;jV}mg9;`N<yuU<&qS6AgDn}E<0 z{ZVfCedsAeZn9#ID&D$?s1WlO3G3<a{Hr?PbnjiY71;s!cq#RQZBZ}i-@A60?FxFE z|6It+`Z5SR!$<F@#bXa)A>VFCun*#yBOd_X_Zn84{2qFBK+aTJT{ZS)3~l6L3j63< zQpcL_|7?f&d#=Y6@H|ZP_nK_^3*5_Jkz|&^{X<;%T18fI6LjkS*%)JMgp^O>MSgg% zrJ{9qP!erHo~86NE$v|ttBKc1j;@8@Oli|rHydz|m~4_N*$d?nM~M$AjslH(^m?@f z&XM{#Y3;A~fU3n4C7n2&V?Ewsd}P}W@86z|{DQd+sc&+owK(r6a+LlXnNx-5huZ$1 z$(3MEE$(obyAJwapJ?sQEQ5>?w`T`(2jM<5`L7dA*ehy#bes)+*lW*4)s4Ea*A;nW zY0MjQoYM2n0b`X=JG3}Yw$=)SlegYW;k|(*Vp=o$_z*C#MKm0;Lyp(I2}(VKeqg?1 zOq7nj-t$+F)RN~{1FM@<`h(sfNTUvZ=mfQpo=Pv%G>H9%L|a$h)gDNTOAVy5!##e& z^4hB7AP6?bD-L^iL!QgdrbsFF2PH`5bkJWRbD@r!)3poE*>X(>kzx-%QL~d!*am@a zRVObK;hZY#!(<dY=J8ZnS#s3}AZBPlbI=fZs;Yjmw*s2M!s`v&g{%&k5L`cB{$v=e zduHgz4^Du>^LuAPefojt%%-%*?G6yol6fPz*$1uZrIz=&`{4@Fh12GF!ywyP-5!X3 zZ=V=(e=Lf@x5QxiS-ig&UG7X0!an4)iTCOPBh8@tDWxJMd>ACaRBI1?i{lzHb&`n# zpeDodcMfw6C7g$tpP%aoN0PF`v)GG<6&V|8>M_u8P^Oid9tYDpt-$us0T7-FSG?1J z{fI@G-yg(~gAwrR#oKN47yCTar3+m{Ug<ei9rHEld)WTr1m+A_t-po)AP2Frzk*zN zei?$sB_br<7NO>yjJYP$3VgV6USIq?dbsFmZ}2}@ghOkJbdN7?fTPEbPEzVBFghNo zzLT*6-+CsvXEHW`t||1CkOj`mZ`~C8qKLj)if{YA$OqbbWVz;caS0CFUM1rsUxoV6 z-TmK3=YWBx?VZ=sBINzn)hzwI4rEE&nfsOt$W7sPvEf_=`8S2dT5r(<d{UyDoC5bx zzU(vQCy=A3+O5i;k6b;8&55Qt%;hZ9^6vWJUT}uxmI=OJ$r%*N_$>QC!ZmYK9OvIO zrzIjO@b^4fC-=(TzZT4u?ikWuNQY966RS1Ho8Ze6&O6-uHLw&|bB*b4IdJ#ge&QC1 z`=mF-#%!1ma+si>T<Ylou{dh;Pu1B_$MfP&0&y<9doiQxTZBD<quI8%Vuq22%3t^Z ze_s()e%v}FJ<w*kO5<~;9zH!E4@jEBUd?;2NWYhjFsLRYsrvzaFMAcHg~+co4LMbL z`)f4>8&(8FA<slL;Pc!5kTyJT_$1ob_5e2>@18EjC~P^KJxs=&mcDRIe(rnRTb=X^ z_#jgSi>nlDslGiBEt4uV{$CIFprXn166?Wi#Ledm8}?=2tX%2G`w(CD-OQ?*E+nw% z;tsM8RGf-<#AcddknsXz@ZTH|Inyk_)r))Db5lty(Gdi43HetsZ$1K#sVQH6TRwbt zjlG-U(gf+D;&r7L{{!A@Jeg&dNpKbfJ|Mdd!tJE(tDYr5#jOnL>W~UBVR)ua8`J{L zRN-^0=)W_4FqULnR|1yN`jti44>cZA)m6j!qrf3`-I~y9SU%qNGckGy=+Bg#;kw-g zjhx%nF=d?)XS+sDCr}I?q$$Nux|`v}i!Zq*dieVi@%CMdsDg5(pE=s9Rq)?ghZ(CV z>`~L7EIVmj3rV#*S<7|kZ#isZAs>|hXG;^JImSAmo1<u6q!4*YZ@!$L!g-)|rn4c1 zSU*VC5?t40yWsI@PJ)<n7bw@rNV&32z-!G96vC06!1mz44)0zc&QpXu5~T*<pS;{7 zwMgu(zSkPOj@}$Ems0MvdOTOD72Y<%Tm{G3dnc~M4nc2{(0^@s|C)V6FIHMU4F2_D z0UTw`@bl^Vm3zfK;8~|2N{TsthdJ(#B3IkMI!Hi>9`lVs6|e4p?CgPq2d)cFVBe}B zwr#azx)+uY%<Z4B?EnrxlWSBA`1$+Her^conNt%aE>16y6XG}1Jr;<2pk=mPLG=3! zUKb%LR2qi^TMD@!@m@1qXw8#<0QVDxyO-S$b%5R0W}H}LKQQt8zcENE2MsDK<C^1@ z$X~yIK-91j7Q<S)U&&{~n<fg*`=g#vOH?UTzxNG23uaMhZ~-0hxyr2da(JzvJN%nC z3)Ui!c`8VDz_3g(rIK446syPuOJPoo+t+l?gt!J&#S)$T0^0C%j7QL$q6=KAwA{nr z)Ptnhn`Nq}6<{H|#2!1}0&A0%Co-!sXIU+wCO}jJYd!%NmHJ!3p1+oRxUv>j%oX$A z@#6Es<d2=hyB0|M8`eUEyl~q4$G=@-$$`N;W|^E#9|+k$DRRAczXE?<fMpY76HtGQ zcs2I70E`ZA7GE)Ig!rYQ0~!ZAAnKt&;zoWm{1xM58TnWRd)JdRS1B67I$lJK8qWnC zs+z<?K?CSbnJxLoKMQ(py0^^w@pGxvp|DUG`+MHTx^LbTz%$jR^3djfSd91juwvf{ z-u=tfgjwWcA7!B!F~WS{Va3TaPuhXrIna!3rXQ-LOpNc9_JLLmlVdUV5OW!hcaq@V zJ7alijt~2kOr2fYSE2@>(NiIi6S-U0Jy@dr@b%K?Flh8rZV2wK?$K=F-e~@Io8D+s z2Ndm}z4Upz8wR=Vm$qP!N<?KV@8>e^YX-iOwb<cY@um=$>@V~c^T=P?_|gq7syr7j z^LBus`uW?tMV&DJ$R!#g`XM?|JLett8ahtwHc_4)Lm$>Z-maNGpuQmX%!s`Q{9`^@ zcYR(0w#y#uKe(`$<9tHdJbw;!^{01(u^;3xPdAdRGz-U%zg``T8iAdk#Z?4ayiaAP zIJ)&<PxiY0{Q~rXJ?rJ+JbQi`ZqC0_;YAO0#GT_~L@HBoZav5~HE#+%cm^7phbMtT zc|CtkV+JPJj~RTzJ=j&}H79e-H+WgAR)4gg2i0UYsw#mM2sS_H$>D~4u@Do%=lLUW zyGLQW;n5_xY@RLJshS4E4?(Gg$bb88uR(geb{+(&7bE>Rrr^rM*wIwX$@v!Nac5({ z@Y~Orrz!#HpZ01rnUtLYpLVXePW*a<1({9Z$jk4qpg$o!1NOJaJq<CZ)Fl3L%_R@# zIc=1Wi_N>y1F~*2esX{ydhE4ZP);@B)6k-@VfA+c)xXWmjIM6N0W*2s-*<5DUKG2Z zWz+&wa}Uke=G)<(zzfgR&zTTS_fqjAdmgOa)`(_!QVt3OKXHGD=f&yQok;5diwlo6 zW)xEhh6{Nnp2|5ObdW_+Pr#WV)*57~y^%|J+3@{>+(;98<vJbi?$!X^qb-Mr>zQDq zu2}xfu$&-RQ+_Z~Fq`0(-4twcG#NxnwL0o&K7p}OmP(;q5uw*K=kSW_SNOfc<)By+ z2lV|{BwOOTAo=hEDk1~qwQB6&-aCDdus;|?JS$lSnbX1NoetC>cbLa2lA;NmjmmXD zR~8Y*_y$9Zi7UY89*qvCRx5ZEWmM(lSHd4>I}wwva<H!8)p)Mh3-we!K^9NTVcFes z#pXdb=&_NO%&v{W8BJ2UT-#2(hfB3-4&mJY<EWW)J^E<+PW@MRss;uQSvvXFV19Iq zqo~lP5A#4bM}N)tf#&TuHv-%nq1GeIw88>;Aa9R6duNZmIwjvwdh`x0RWi@$;6ARl zj%j6Upc3*mw-4IWppPeX@}ICl4Sb;>s*Zm$2%{M{&I;k{=v7$Cy0%3r3`@Dxy<i~_ zti+w3>#t`LGPTeAK3Sg%)N$(Rkybf`ySErdCgs8a%9rv=(|TYu#$}1_NHIi{Jc$%C z`VVtiI+22p%AiA;$)K~m5>(Hf7LD7$KFjsnQw?SlP#|(uBD{JMY;q}e$eAaBOI+<- z!l^0PuqOM{erg(C1t^iq5>3HCL^nsC-ZW%Bj{9!ugt@qtKRPS;`c+MCYYR$4F5zNK zIszA<@eaS`579ZuP#M2FM}j>A4pr0h`1%dm@iltnwg3$`Z~l&|oQLUzQ1(0MH42G| zqxyGq6$UvE%Vy#GNk!jaDCFEC5F&ikOPc3FHe&e(vG+VUPB;u!l`VmmNm+KP(h|HI zuPE2TdAoPMy0}Oza{0`;X;QEk@XP6^K<O-c&hMrFcRCvVSx%g@Gu^W=X7b}uKlwcL zhEuO);dxawP3b6$#2h?1pr&GreNkz@x8<Tz&2U~wyME34GZ>Q3X4i7pzz1^uLZkm` zK+ot;!BSEUTyE8(-6O(1gSwk)L>lsgJNC?(OOT_}II}I6*9^irz7-DVanDcsPWFaX z6-cvfD84?|3x&bQwY-ow!gtO;(dcbEFdVnZ90|tWX*Zp&quzJ8<-*-vk6aA1s}p6m zdTpShbmpV{za}V`5jP*b*9hG?@tmq6{Sasy$YQKl2syMFr01o|;a|s3TDkSF1atE$ z4Q=O4xS42^QkGT?t4`~?cQlJ}|73kVYqA`g><Z0%9u>nB8_A77%w>>5G~mL^o(lUj zwh{y}0u)+v?d(S6gY#jKiQ#F6u&0$gR;D>XfA-)&h!=iNo%}}Bc6%Bagd?_y(0>@> zmv4EgaspE7Pu?2hoI&q8vuZKR6x6pQSiV`o_tBSY`AL{dxlMEawo&*5)To~E$dbWc z<l^B1^3+jy_tL}t)id0Wx`gcHqklf*E!(SsFwD0KYh6^uev?^L)W~!Eoa{cYs~m&- zR1GJ2o<QUj`dwCWeC0I{e~*4nIPh{D*mc^XJlN1vee5R7#9%M*GRpH^#6H2pDVpT$ z^jU}>Y|j7HKLLM-bwkS*J3xL|-6><F57tz#C8WOWgS(v0HkD%IKwPFwT$V5Zj4R&{ ztxDqkJ1G79qAT_nLiVHj?hHf0($fb`4tUQO8y>Mo?%@xiSm8E#a_I(rO(COpI_W^} z4=EyM^wRVTHluVi<kCv*;VVqSG}4ELlG>!q$fa+n?5z$2QA^*?clJ?#NhAH0+G^JO zAF1^6u)g;(K62>|+PYLRppvF|?eov>D7iFgbWQY0A1djf!nOueO%mzZeTlejIbvzs z8&|ul4SpeSG2-k`zu(Z*BeEfIg;+XLg-q&?5Ro)L^S7Ah%S6&930Du%X#D}of0q6i zGl->?e%`B&VJ4L(F7Z}bBqfvn=VSI(u$e^qSX^Gq5jj%n%fv!w%cKrU*V=>)(GO8c zGrXo5={QIt?Q>owj$xHl+T65rb;}hw#nfGvJ>Q9?O+#-kk13N#7d_S}&)*@EKB`(t z6--PfO*GklH*9eMX4;NXczUfuDYsrW@7xU7OmiROM-Jbel!Gac<mMqH`@^wXtvSe% zKU<i+y$+}O7j^hBH%n=gaDm)q6&BNVU+CfU*_UlVOzr+G{9~9NFLGZ4H_gKr^9kr3 zILIv+rHk`@mc>(tcV@wsgnl&k_%xm$8JrVs){&2}A--+043!K|u1I!I10`E!3CrUZ z5RQNHz{_zCG*3o^$@I*E9P=&CvzU9zvtT|b@L(NY@y%Zvdocqg52}>7)z_ejE4<D1 z=PD@koG4W3SOfJMFH`U4WsrHtrLZ!-2L3%~)h?N@!<(Q1leCdF@Vv37{EK4~p5H!w zNmgVYni)UZFug&(@7SYUtA=d|p=^9Nk3HnNLm%y%zivWMu{6asopE^1>CJa>Wdm3f zf6mc%?SQbf4a17e3S1>~v9>1p0UL>eM~KEYAk8f6mN@SUq`u`iY{9q;qO#}e1FW|o zI?AkMnP&rL#AbtcPyK+L-%RzRlN;bo9NoV7XbTRo-M#1q8<5T_#oCPLNOrmH`0n-@ zP&|FC*LZgex=tE$?IF*1HqO95?E3=roJgR5=(GlYuPDR^9milZL-e!$A^hBKAW0&5 zw+we4r4>3CEko<CGY<s+&mp!rB%Rv63T&VFmkj`a{tM>{KBFh=a7Vvd3)L>1yZ`U? z9lIUi^yP~9>bC>xJHl%Alz5My(4B8iTY(y%?*h@7PuotolplW$&qtZ_;eLu^P{wi9 z)Z1niy}}~8Z>`rr)JQ+$fzK*Dex}Kw`2Rjr;m=#VTGL>{cjZb_@+@rT+z#i$TmkpE z@(0Q8A*f{{-EupId)wLP+hWoSp!1oyQK)zUl)ZAtb~5q%eHJ^;ySfB6Kb{UpXs&>O z8=W2N;xddsTa%46Sb~*%?(Od)mm#K!waZy{4SX(A-#z(b3Di^jN%`yMfomlp*B5^t zE;ZjI4&17T=l=G2%Qz=(&hviYd}<O@y_S`ik4-~LnXmDo67=1Z#Wu8vw!y0rDhYnf ztuC{bSCP`<p3z!$|8Xeh<2mw=Y+RfJk>$(OmjZk79Q5>*z;WbU-6f&Z7wd)g?akls z@auo1H+3DXM}acUhS0V)h+L(iC*7DE;ZN1|8+U01B02Hx<K2}YEC1_)jyfjp%qev^ zEqdU6W1whUODD)?>BQwdXoZun&%e#etOoIFMd?pnT~K(6LMD|1d0~f}&lWL{!AYZw zZ~1Ufz4a?4j0yLYB$MC%nh<awrNeacWkeV5Gx*$%-{UR+2_q9Z?n9i+$ac)^TR^z= zMdZQ99mt*Wz9dgk1m%aK8d4i7;O?bIg*q>D;F;g3&rjY;Fph~*(fr$rc?0s-4x|K# zDcz`8yMR98pQ|k#;{H&gS#g8$eh0)^!;>;}PW&JzCKm5{0;OcY;-o|3?~8ws4V z;I3jzv;A)xjMXA1g2rCMmB@ZiRXXe?3iU)=NTcVp_zipbmsy~8WHf2Q^JLY$U;x$S zD##B_7{40O0JJx``!9Bmz^_wkdCEA?T+?#m6MtL|Tv;#F&L3NbI_uQQI;JK#c7w%d z@9qesYI-(Kwe>;8!jR%C=LtCVCr;AB0`oK5Oc#$wkHN3Q9j8SP%z}iFqnCsl&dI#) za*42De?OAkzxGKyp=aFVS4m$jd^a!Sc4zDauB8g?r`T(zozJEBlfeEWy{nJE?-aD? zi4UB^eop_M8l9mlazA1=s-mv;0Il4MW|7ba7@g8l7{XjrH)FqFb^bc+XK#vy=B$Il z?QdhjLo4vRmaOGq>>}uI|F=Ga-jd66-&G#=Vejbl73Y*f>>)%xatfGTge${i`|N?! z;8Yj<AOxl%>yw=U0lAN-o%PfxiB{m=+4&lA%Xv7dPTaxmyaX)rv#fJ5$TNR;L1P|s zu(^EKzxLv}j^<k9P0B^gBN!i%%_*4xs`PR$N-NBLA5RRwmplP|gu;U?(u=@*JP~>@ z-)boDy#0QE0k)$WUOj)X43|s1GE=%1AW*JT;wl08hYt=NtH->m-pw?<PXY4)+aj*X zeN*t{&nQjx>LM_^Sf<Ta%)wsLoz_I;Cj{{Dn;Q-;!kOI*g3p;}ppZ!V%S9XXT87XX z@m$D-kFlSZ<<#OKEM>RM8?xa$HLZ)VT^*cyax$)!C6D09ZqP7)HJmUnD8N1OBn23> z2(KeqO9=x?yb`I4xr79UrvtX<;$f_9#PZCgaKc5_`c6f&Si&t?`PI723W8vnvwoaF zEx|a4=7K42If&&J3BS0T0xNGg*=H>Zpp@pon$_F~g4AUq#b>_~@!raQ$>w1h>={yu zKhKCFw33S)db9Q)VK>yaJKa8wFzLe0KcrAWFb%tKa-PcpvK&!9$D9Y((@2_wt`-sa z=PcgLCR!1k5GS2CR7=oq($2kV7)r2zf1iwhF@xY!Q!el!5q&`l5?`yg@(DRZ@-3V1 z>IlL*pGsCt`eCIq?Thhu%%yz{Q+L|#0g?B$dm$H*e`NWcrntQv*dKi?o50>&%|yx3 zV}AJidh&8bBMj%zFUr*y6wrGuddXlBIRG52_Q$3QhhgGFtp61w^n)Bcm3zx+5ll7t zm3ggZLHXPLkN#ncu<yupL^2)w0R|MYVNzAd)fYZ(V3rJXrji}6^E#p7ZDyrTX$B!q zN{rc5t`}B{P9*1_!hLmTkdw)K7kDj{!nikB1Lq^ebaXb_phx{grryh8s7z8`7+I+W zZqg5thO<Us(I;*Hiu)Vk&}WUmeFN2mjT#}Hb9aY<Ywx6R7v%&{|KuaS{j-{2@+jL( zKC&7te?<IR;wS^7Khpe?e#@YJ=j4WR@*<R6VNHVx^!I!_L)XDK0WuRh90o?S@IGHl zUR7!nGRf}qxFoGZ^L+|YcbiSn`LQQ8Keh?eQaAhc0@uMTRX6j6>ju258&4ja--KtL zy4?}3n-D5AtaY1d6Mm9#RxYkBLUV?G;5+Ljm_8(vIelXdls_h<vY0Qzvl_qU0~(nB z8S>2TxW5L}8v{bDWQ(9dQ?jcgu>d?r;{Ut$Z~=K@Z9OI`b5Q#9wZ$Eq1*pBVz_BK{ z2v$^O`JW|MAgcTJDChV*Jebi>GI_WJDPmzZoVRcuKX+42N?{3ty#5u;1)%3yD0yAr z?<&~NUpX)-v<en4!|W*V{f-mjzsd>aaLI+<eU_~p{<Jg(HCq=$EIZky8Gi!U8wov2 z;BN(ACStiu$btG9{%xJ4uoEt%c=4xW@6kSG;H3(6E9f88cJ{~piO=(w$<0@XfJmO| z<Rv}aW6)~}Sw6)4+cS%7O?Lw5ucd9S3Ae**qL8PQm~)dH6I9I3!si>4>Sjty8w}08 z;U@63L3M^zS@}i}TwsaY^TXbH+~Kr;#6$nVF-?8b(efI25YSE$iSt&Tu}JshOI<L# zL3wv>VFrqRB#ik`V!lb5hE_5Pxkayf>Uny4q0w5q=FAP;#~oScm~H=mj&$z0uG|>d zYo6t#!JgWc&JH?7d+b@}x4)>w{dUEkU57y^dj4{=*{3rm!QWr+LWBA!*#1-e^$~NZ z9_j<rwXHp{BuKC`pqRqvFzqg@HF^tr8Re^sun%S*wSVx!C=}JqM}422!~UY4kh>Q0 zjI;)&DK4RJVm4Q@v2O<ZfQbYZwPDCGA|n3cjl8W;vV7|4X*ex?#g!TJ-m|w0T6W2& zKv(v#HLJ=Dq;gchO<bFRRC$`LX6z@2DGB{7u)!P?8(FfR<^)`%yDxZ8X&9dV(PfO@ z8G`r{;-Asj^K*Yz&%uQ~pD<^wfL_*V7;c<r8U8qq{O<3n<CoB9T%+0g7QGAmoa}0k zT5<1UwPmn0Fb}I`R-^4s6VTR{pq+mS^O~0)h!Q?-!QSM}{AYn%u+yqL{Py`a+^6wh z7%16-L;MPqwTW9$>#R)g@L~-%@Agq?yx)LF-!#4C1{Z)U|CN5R$Pz4DmNDE4KtD3u zbCM3^?J(@Wx1@4d1)`UNBySDTXLT*@^*sGDtR6k^YXi?|Peffq`sFv^l=}Gi2hUC5 zCSp_&JhusAhlGv}AeY}QR<VS=X&t<##6Fc(twC#DTrHpKI{3EAC{>!F=g9Nk@a~fp zc=dMR&R>I7^iPP$CfY55bis=ap(E=sb<vmNgT^YPoVay_<k1Ek>A0{yUAP9plqcSB zJzWAxlheolL!V{y^{*p_CHQ{olP062TZVtVp6h1l(YT)PXcrZW-1NnuLEmq^a5{dV zkUqZ$h($a{2iU9N0cl7A5oI$t9DJt09gew|KZBc>Z`VWWYwo4@)>)uxv#vLYJycq< z%V%Hy#W^yYhm(qG8|>YX6a+lKeUe+syE|SD_bfii`qp*AV-Fco39b>~kP;8ER;Y%7 zD!s@GyGC$cI;!rjhdtM##xa`Xp3r-Um0Byb8F;MjN1w$U`XdXw7yVY9FynecvQ4EL z%sv(*Xnkk`m)+f;k3_oRKaW24A9F3R`Ah7yCidh5EY8%wN;V+~cg)mf$5erp-|O#< zv6Td!w!06*b<u-Nljlb>n2SDF@!3Z;g}^;UpWx|X2(=k+y|^Ru;PttyX?f@cNLp8W z642fYRvI%c?3XK{ax&5FSb8ZG8U1&o;^i28v@0`l8$r&}4;889m~r57UG#T9GX!Oi zR=E?_CgFarU012eIIzsrmOETS&eG*p^SpPM_e$JZki;AShdD*=)zxwA@sFup5txGf z)pt~LxNmu(a^*ZzUJLRdvpkPjG(hhG#=CUaM<FaUZ$*@994c4zE_G!0!P1RRg3+Zm zI9*xZa2RvO-A<OGGm>KvO*UU+j`NEyFiKYxodl1`qlL^5M_}W~(cX(Ux<NXh?{lqd z1Ei1r8rYet2cGMOL|>4TFr|1SyU}w1)SvE!@V>_Vj=uTR9qflZ_hv5$#6H|Qvr^_& z6U>tj(JE1|kAWsPtNFS*&Lb*v3=(#c*Y^AJyp!K7B%ivWX)8Yq4CnS(<<JNFx|2Lj z$_Kq*!K+QZXc{PJ)nSlApB!Jx+|klA^Z0yAYSsIM=hH9anlI23wmPAiazq$?cfL2L zE##I!^}}1$72P?wcWm6zNOl%JzZuS@UYUp6PYhO#56?lu$$_cHgY%%2vk-I9Y8^!Q zRx2X$xpPuoB*R~K0o;3P7^|xm&~LgJUiV`WDnjob&c^%YV?vH;arOq@qY9b-9NGXD zQ%R#}8tlm?f3|1I$9}}!nmR`8AJVuw*>z!$-NgFg@-o8$yi4*6`~O~7ieki=>ggJE zb_~#-{98xprr?iv6-kDkW=IfTF9lWO<&>>g8HDfYkAm7x6~JDdVWPr=Ecn*$F~+aj z2b74_c)>J?b0EtjA9uTe)HnWk*)!ayUu${%t-T(Ocqrd@|1kjVc9W6aulgW*oIGaN zc^v+6P}ZK#tp>ixZ>LJpGnz=gFf5Jt5^o~aov@1&U?|jkjMr`gs`e7resv83KlO+M zvs)G1Xq9&Dd{PVrJAZ5!=<;CDz)E!Tay6u`?Duo8Rs)9%(e^=(D%k(sX3+a68oX9$ zNUwYjB8W869$|R;1*8~ne&EJE;(_Q(T`pvqFih@N?V^xJ2<H0m?weKscv^h&<M6J5 zEu+({o`=gJgY}PN6XrpVt{q}KkW~pmEj5a9Vr_6W@PKo{MmtdJ*-C3*9>A;h?6IG? zU!Eb56RBv`KsKwA{a?2_&^4@9jPhxRXZ~~6MH@vxZhil-`t@Fz@1K(}!yKFN^(u|D zH1xLm5Hl55)WGn%jO5H=0x)E!#N18K1H&|aFM&_F(2yg(V(ZujDZEeWO*fk0e%-s` z5oYAw>m{UzGnGOB*>YAIa#GvE>xJgKze3DDvmfhhGf-!UWHLFAfb^|xwN@qcrD^#W zz##h7xf^L-J*kAUqAw{dWxhb}HJQ+y77W!@Wrs6z%0cxF?Zx8uR7lX|BIY@i4^C%t zdOn^Qfcyr-OflpE@TEP;8T8r!>34S**#<UXC1JeprN#!_ll&d#mc9WkOK(@C-fqH= z#J?w=w5-CW`QuRSvLB$+Up6gDx&;af#Wkiq+i>ARz?_TtCd^kjCOI(TJiyTV^-YN% zK)Sk|yc4qtls=>?Sr(h1ci)x}U-JWAy!ROFpqmEf?`LXRkzaq~41<2qz!LUMv$^^I zTL!g)&6Y2m8_-T?wE6qX9DM%0+d?zD1d6mrh6nSJ=UN_Y?)-Wl>IlZ(3!}^Mb?|uI zHS{A#zX+lb!a0|@m5z*0+6Jh|sk8<LtpVkW_l~^Fn@}V2_D+1+BKG#5lMs`w<DBD_ zR}236A&!F6OrGm-qDJIEkNr9vzq{GQ>|X-!@{&hCe<Z;5%KW6Q-cGQM7H51SguNh_ z)EV2S#qd^w*7SV>@=TW_NbWWFLA6_b_XKh>*wxw!4qm~1-j8YH&oeEMz)F)uR)YB> zzTWm}ydR%@`O~cb`4C)Eijn6w>V=yW-)?$l^g^V)%qs5!=EtL+Uboa809xkao~Jlh zr+BNhNAPI_Cpmf3$yD^tpQK#Nrp26v@7WJzQRwZRjP<R@o`~SJ2QgIGOV6?;p?LhO z0|riaYDEU&--~Z&n7E6t-)h<eohL8{bl%J3#D#7c>kU+<VHkqtOLs>2JiEYo{@{_H zzq%l9z5kP*bQSc)(dhZ<_u%tHesRII4qhnrJF~x=fojdZLHW>mc)PxNKA#Ht{N0!7 zBbw%6<7>FB7xp#DF4wC>TP*_RwtISK{4$US-Xi(OvI^A?OR6e)H$bc4+%;Ov!Hgdb z+}7Dy0PQ6S{XT_dm}{(5Q;=SRM~Ur-d|QMErBA$B(f7!)LC%&WFaehhem@pP?wYdV zZO?1h#zE`1^Dd*)AmpyTJra!lN0J@MJKY)RV<GdVJeQ04C7pY33Qf^7vgYy4fD-v& zwtQj!nm7;VZ!9Imj)D1{N&ITa5YR<1kQ*akNXc-NvV&|AE|&rgFUbVlvb8&Z@6Hs2 z+&sLN5;p^s;jKI!C#N96IbOBzBKC@&pFaEA4WE~^lQ)@)`(R+*-jt!E9iH~_KeyrN zhN#-PnWl$*u-_=2e3~22r)4H3UwQiBWYXkp-nA}ZvbY*KgS^<0-2CvayN&R0LE<cj zYzG8`UV#aDE3^wnq!v52zz~ldlYU4im}Rs)Pe0TPg0Bp?E_hYKOWEb5N%Bs(Z0z|i z7WZ<C#;?7Xqx&G^>vs*3dCXnq2Os~aFbsq%t>XJ<`hn8Bk(Z6J7ZhfRv=bKxV4F3q z+LRRYDlJWlubyF#=ga9JlB8ZRVIG00W9W4VYL$O|v>V@lalD!dols|`)e?aJpT@G| zvL#V%&?w#CJpHi~T*Lf%^cdP8FEPU67I`<kr48=8LWz6&YYTOrf{8HF;{GD*&v($f zddc3W_yeI|%a|%iF9%poKR8nzlMb{Yy2a;$YT%M`QqiDN0o)C~@-ale5+1AS=?kak zf<QXs;{z_`P?BWO`c(8gL~$l*e03o}Tu0QMuLSJj2d>!YzQnwP>&zuH`fT9(&s6FP z$A4gY^qWG0(--(GNUNcX9-rU3JLhP{YQRx)ts`u;4QTt+m!JF>3p@MmM+35}A?y1C z|8(*~$kkcvee|~l98`T@nyIzJ1?BF%_Ji>t^)V!AM!}K5bWI~PjXn<|>g6|+O3Q(> zzhmLYkSXELgJ-v@pBIDQsUpRw9rQMul22Z3FNVKEi~{V5|G_|bU(G(|Wx_{_llBhP zz-Cw0n&V0A2k}+<)-P1RLW*SB;lw~lWRGR!eOv&~?L(fB)?zRCNqGGa<h)F+a3oW` zKpyJz!>$=uOF&svwo>(T3s|!51y|$yeg6)z#GGy?SkXR|okL!EW>j)BZ!^vhf9NxR zebxvy<i?&|BE>Lp*7<I6eHEOixE`G&(E&HbuG8Drwt%y3;*Hur=#4qlN0IcY9QGcs ziF91AfzXaOKFgXFFm^&m@}q1wgvMvvmJ!Nfn=V~b6ghg?w$$Sx)U{9;_uFou9eaqA zGfxVoM&X6L4EsECqlHP+jA%Z00k=EX^~aJm5WO-f@X9e0>PcN6pFo~b$JSsKqYd(8 zdYoQ*1g^jX=Z!1lVawRV^B}E9-#2qxCJ}M;Jaqhy>3>|k40I)8mLF@;=hwKZH59)B zCnA`NC1a;y?X8FLpbPdF>$5y1@b#N`g#CPx19E#jPF=4*ItvY1k$IlDcg<A)UUCA@ zgS!;bk2-E3M^x#H&dS*zkg;BJ<htt??xjylaUu6RR^cM+`{r%9D-vi*j~u$bF{&x= z_Dx71FjAu#+Ju~PwY#M1>tHRZqr=F9^MU@h2+ohlopWI|vK`+7lX$xH8-LIPV{lEn zRC@_{_?>GmYOTYcLsRNAxZh<?mr%R)VI7WgR>*y4`hlPSmOTB6Kfrb4zT+Or1~@&u z$eggZ0oTXr#isCHZ>TMF%2s>;g3ZL~%D)T%Q*r%S%5n4tkU!>RrN^AqH_qff%yBc& zUj28rrwt}MmgkIQ+MzDum)B+cd}uXgsbsM3fh&K4zW6xh5Q1yT3i=zW;qdi)A%}lG z2FJgNnhIybK#IL>ug|Uup8qZ!iEG9Ckad7CbMOe9`A$uc`Z@t0PP7xH|DJ$o0ga8L zw}wHR%39@CWjBz}q#L*NV-GXRGLc(i0$44i>d#D#Lm#}}kjlb-=Y~;1L~1)E%4_$e zQ4Pbw87iLt=a}!kH?SbZbLBazbeg#C9#H;bT6)&52~O)@-XTYhFT+H%&I!$0Ah|e5 zE6;`;=KWbQvs1|J(h2j}!O#08N9)kfOqg#pDhVT{K;LzpM_srF`ff(u$*HWCp|qrH z$Ixg31Oo<2lJBe`uPeFNzI*{Zew=@xhx6}SJ<}&vQzk)7?S$u?AkMK_rX0x@XJPWY zl51Q)_N-Eqbl0EH12^Nj=qFckzADBd5z{sU$0ia~jH72^nO9>VnR*;JpCwP!+(+I( z*EeXzd9qazv3V)_9_TNw+)Vg91*T{Iy*hPg9+J{u8Vp*ZH^uY-7nRKt{I1$7al$#p zgh`GfIo?}DLtMNHu*cO%?pw4~Gzoge#6L2pagI`*-Tu=bx!N{?H1T`5M@g+4Rx@3I zY0`tGx>skxjqe-zo6cG2A(_|?!@2l<BI^SAV4OR|_Hg@Vp~u?fEZgrn<i^)KF|g(= z08{d>%nh$0kO`8Dslz<;?^C^9%V$R6SJJm{fAIJArZ7HW1$~aazs0U(RSp4#!7=^k z)abWL92+@XFbe(Gcq~PAMnGz-oa(nsKfKjV*!>?x=N%5z--dBnksU=!GE162S&4^8 zXo!lUBqO8{QBhfumF%rVh>)Fq?7jEid+)OHKJQ;HT;%GU^F7bF@6S!XG7OZLvguiF zPlEhV)zv?kzkN}PoLZK55WGnZ>nLB1!&V4J?4l28&-)?E$Ux*kCfvWEfpefI-voS< zb;jV)m1*6(=!dc_W&1#Z{wdp!Cqv&d4Z^ut`f+LGL#=(9JM#nmi9^A2!?UFWkV>8` zOHiYZeC_)`G1YNkGr2GQQfU|x>um(XY({}~O<}YFxt!{vmA~AkszD&6uA5b}0Zw(# zozkgof$zQB3k4?{fcyM<WAaipNVxW7renU>30lUplc<+}-DdS7qXhTi)lUn9!cd12 z1_zQ2n}N^$@mW{DE_hW{w{y3+7cA3RlTEOXb~s{Q^Z@6+d67({ugkjOi=O%sn$%Wc zygoX{jp|R*kA6Y-*pa8gWLauafpaoG@jZj+Bed^J+WLq3cn6ZlPkh*rtM$;l`Q~-x zX+Qk)=nqE~SgsmdUY17XQJ&oW&;K>R(&H0<1EN|XFmHdyFbn#e-oDVTFs%fc#Zc|L zhby5g%^*Yw=KvXxP6)<KbOW{sJB2(0Aayus@rzF*PzNkJa3<kALwnwX4s~TCZ(c{g zjO>O)8m~DY<Qt^_8lF$A>4JC>dzQbX{jeoOdV8->AN0k(PHIf;hcm)!<Tv;9fx6#= zfM3DL(~)_~_L92?_;qS$WSlY2nmBEI?qMfH9#cR6g0=^&4;MeN!a7Nw%Z>A89_sa% zXa^$Rqo3J1QjedZ6LkOB-Ey19d^1%)ABN}cKt<FGMT{U%&->uA2hI(f?Y+qi^wEE< zKQj}GbvKK3^>MWd<nK=%?ii761!o(x*RJ!Zx2L0fa1r@LhZf4HSw3_@NkLIcFXkkU zCtA`{L}35?UjDnD4{{FfCtqfHiFubfRq`&lC%>`%c5=vQ6!sVG-aANifXg~#ph?yu zyjJk*-*;gVl$NIV%4;sc>4%J~g@Oz4*>K18km)Sy<fqjsm!?3GuB7Y26U?3EX_bE; zy#P`Tuhz-imcjJwkx)gA71U$1wQrony|Bo`_5$W5__rd<$cyu}T_Kj!s<DgE|5!LH z@%1VYw;q=o7tesxW|_<JKJ0I{?NUA4ao<YXJSTE@7W>dwdS>lYKzXd4&k%Xvv;UFR z9im(W_Ad#NBK?bC$Hskx^z;%$T0JQ|Ld?M5?NG=?p1*~K3|m^s9BjnUmImVIBS{y& zrByBhGiR-hw%RldB(gR?#60pUruzJhyal*pQf{JMKL<9Q660sEe%~<Xo|&+pfy?Zh z9isJ3Fn5tMHsV$ZK$WE1HgzG$Q}jLGNB0X3?$YMnDX0N>!}$DiJnDQ{ScC>~ZrAZB zQEngRh3^`$<>Vv3-Q{KW1*IpLGvcFvDxI_uQtz<s9j@qs)a&Kn-1>Xq)^>)*9Qrl+ zc{a~Jlg55mk(Jz)rXNPco$m=e>x0Rh$P50D8=&(`P%QI@R`~8K$@%Oq`n`WYj66v> z2+sqw8KV|4kAS!Ly;aBn9Gc;36++$P&9vat-u8VE#?x?w*<uh5kEi`ttvCeQUt@03 z@DGBUTKVBr@<9l7i>p4#SPqTC-aMDE-{AYJrdan6bv48HqIG(^fZ|OlhwL==QBQu~ zV#U2~=C*CB9o|3VwDYbmI0tdbRP(9AdE^JbhFAaIw&MIw{WAM|%sF049g3eU$Gro) z<euFkDDUd!j;XAH(c4PTPZ<}$x+mk-ucZXAPk0=AGp!1wwsPJi`DKAsW?}W0W3>>@ zol*3*vkpE5NxVDr&Jk=g1no^NE1<<qsZ7GO4E+V?_fcL8ggdU`sltzZK;6m6Q>3{F zcxB4P&yaM$_XAp6KWob&=ABKO_73I<nB3kz<Xi!K;jOj?KX7l&BUzQ&KLCGJdaT^l zT0v~A+;D2J7=k>{w12m41<#+wtE|_s&ek6Jku}@_hOUgNx6qGL&ih#0IHw$>TP%d4 ztt+5LGmY#w?j=EaSSVb43}PyhU5amF{_?SlH?44=@3w8qTa7$wM($^FtHEQyO#gU# zb$kwH4;FhzYR^Ifx8?p|QsnW>S=hL*&VX1#xI^mN43OB+NH<$ef$ukxlN;W1ushv- zbj@TA-no@mUCf>ZE`N=#)0yKyXZ?wy3OUC=YRPYMq@#}F<4M_h<Y#H+&|UjRIt<Ag zGE&>P$KmoPzu9|n6rOo<O~s51!;h@BDIo>)gBR(D1uo%x^#P$gP&W#*4ow{UDp4Qn zW*9i(HUa~!W5uKB%eGk=w`0fp!u^5W5!O?<$KY$RZF)F{I%5Yd%ghPXyETOdp?)>7 zQT4!msxkQG^nvA);xGiw&D(2Aq!PKF|5@<x+5kcMD}7e51h^`sik3Z7Aj@lS+@15N z+q|*r{_W0B@Exsmo1ZO!WtWrxdS(kjPTA6fzN{FYX)MrFYT!AY$2>@CRS0j+7V35( zXJF|NqLY=2p?09}S>h7r9M67z!*U!s2=2$VQgU+OTfZX1oO20O)NQK1TkM20_7x;Q z@Eo09?AZ+5(*(IZkVesqzN`$Q^K2^UHZv$T&EgOzBx>p@cFfp+BkHVrgG@3Oke z^A{O#o`$XV!<S}IGm0|(aS8cDjIv>~$XOW!an|lN^ml$~XE3LzgaWC~>S)Ir=rCef zU_gF(*dgDZxVjFAWgI;F;A0nDQU=vc+6h?h4oTeGHVHiHA)PiEgD^OoI5u;00z6q- zrh=SC!O<|3Dxz%^3Ub}U&&tlhxsSbP1TIZN!Y!*$kT?l<Ki_z|v5fhs_RrM)kZaJO z5WQ!jehO;*_nzy=eS7N=o7EGYNg%Jw|Fryk3LX#iTxw)MjtQmVyMMU17d<LcW{>xu z`v(%&u7qiDxwQL=_x>~lILwmwR1Cw$)TNtRxSs;C@1x~PlW@ey`RlPCa}bs0@OI+p zG|p{vLT3I91EWH&$|~xooR8@pTzoMK$LW>=PR5TyTK#b*Tht%i=O3>t3K$2Hwx?wG z4^08d2;bHJW^u19;q<C~-yG1-a@%M-je`VlY?n!JD3K_7YLjgz8y4xURQ#_;LTC1C zH+H2$DE_5>F62!<Oj2t}pJ+oJV93QquQ#ZtefxGW?jZ6-UiAC@MZIF(uxWVa5Z05Y z3h({i7y`x<Z;lRkVJ^ujdgCiXBOqv@5H7}vx}g?bl{_cpNi!60j)`}|WQL$P?}JWI z47@@wI)nb1p<T$DZGqfVs{;>px?w7D)O<8~5FWpZ6)II50?u=nAIB@<{C6vnoDSz6 z*J?=9v?ehJmGSb)cX*C^`UTyJX>9<$o4Yd8fi-v@X4VW?*T5&)jcpF7gAdGCV%}%e zfbPvsn*&(?__=#hC8iN@x%}+P<d+OctkM4G5LW~Ggp2+=^wkSY7_~Qwbi#l6it!SH zsN*q`>Trug|32O1&BKnt#6h_;H~i4|V(p`Q;*MQ26clP5{eH6vQrU}6e)wDtfsWIk z*6Q<NN_2)x5btkV^@?-iYT3A-2)G>;SPFOfL?flqC-L6%`3nV6%n$CJo~}dg)SQD) zdyhgJeBA1Mcbl^v9yeJsTtdEm*JCoqZMJGSX7=_XGv>Z>PmY+G-Dm|H?Y1J<0~Pq% zjQYE)ihje>lLn#{4KU+4)E!{d2d~;~oxIrkL9k)jI}Cl8vJrAGr!YrJJ;?6d>6SrI zlpH>?`Uv}(Eqk&g<SQ6cH42LS?S&O;Av?vcHoWfnpOWzBRwA5Fv#A!rqUC?E-B|^H zy14Y&rO{V-Rym;VR5qBtaIxRoQw3_9gXO||<A_FP)od}k0>Vjsla0zJi^!ok*T>^o zMHr>Lns3M}CsL^*)1$Ur;QV#(*TjWV;&q$<hqv8D#Oh>sD(llSqQEHc^YX1qqFMK$ z9386@5g(zWJzd~KoZ{uN*J&yzR$c#%gnuk0&QY)xUWrM9ECacN4Pswl)_z;-fyqzc zZXCNvDwjztYo{t&u$5vSvZ|_9LNq)q-1^*P{F~qt{5W8#hWx*@n*Vy}q6tpV{m)Xa zS`q#6%QG_vOo+n$|5cih1OioF<2w_F-w=1%*-ZC(Dhyn`SNozYg{V#&d(izifvApr zSf&0E>xYH1?vV41FxFmiZ#e?}ls~Jli;widL9zT4o>RDgTq+HHD~WZ5k+b6m$}aGf zy#6sEw+iz1NY7lu`{vsFw?FccD@oJVDsrA5xqWmKHPomIaMRm&YK^}hI)peT){!^O zIhwT`YgY$r%Hn6a4-Udzb_E?7_YSzS^Q_kZ=a!M7riUHGTVP*`E)W0JKKMjhFund3 z=f(W>M+Prc!B1_K9{I9b_&6ob_SC!!lFT1HEQ{)dN?PvpW60Th<q{&Mq1gouvLolh zf8g^tefb-sNgr6(91&UNY=evRWvmR?|8)CYWm;hD0k<b_hP#JRZ}Nk=H--UoI$Vbd z<Aq+(_1wPx1^x7!Q=?xeY>|(@Q(F@&IS4VQ-VQk38-#Gt)5@V(hkH?O)UG`qf|~uZ zI#HMp%KBsA#Zoisn(_}z$<GdgRMoiLOUrJ!(OwMv-o0>JqwK229^~yhUpoB>`_k|K z<r2JQ{itU<l5vL)xiVFEq(5Q5IQzTiN}|Ce=(5?}uS^&QHJ{dsuLD!ClVEW<ANdhe zLFXpa#l~U(@p9hO+Ht5p&OPCMej2>eTrWRC-=bWRCwafwG;FQDY-ILn1yORIS`TmJ z9(i%ZGG6ZnH+!)&`8Yov?+=L&x!VKFcer+E2YX=O4^xFCoU_wvH`4I!!MwG!w8&5B zGv(iIIv(281(}yJhI|)t!OU-ul)2|kaFVU#_L$8i%->zL?D#Jb-uBO}uQx@)c;f-L z6Q)JrYFqjFQi3mGt|}VtK815jH#!T>>|C(ak5A$m%mc9kF|)x_7BH?g{mX>yE2JbI z-%E$}^9yI0`92Qx`Sr&z$eE(=neVgVs8kNzUM^$%{j~(7PRXdQpf581`$aOI3r!H9 zklZI%RShgBoAg}2xx;Uoyy?U9zhTCs)~$Lto_MxcWHmAxg*ta?mP*C%kSh|)K4ex5 zR03{C!!nB@DlzzRb5=2oO&t;0dQ=XH*Y>#`$V~<Ns-*r%ttJ@r{%38eivEtbiq7^O zWw3VaBaQx{W)LS6nW6Yu3&RX%bc4usi4p5iwR_kF-*a-KtF&r?h>5H)LB6d|T-!?p z^yQ|=eLb=*+W}G&FYZXiw!yP_einD+NHr>t#Bfev4rzOIw91Qe*yGUOkcWKzo|4mD z^cw%KH!f(r`P>4ZCS{VZd$xcOsc=eLN+XzsCET9Hxgp%3JHvmt4K$8Uhy^mCAMb@O zH9O9~drSOh=4P6q>Fdln-FF?JWIg7zScm!)1A(7%G@Vd;{q4@^?`H6r9k{H7`Gu#h z^ISSv)(cmI$XR00kE!2Wav}!%(;Va0FK@Nu;NHe;h<SP=1WMWcSHIZ?xkb0VYWeW_ zP3>Y0p|62@J^uOYHkDxD8B{IsyauWinhpNj907w@3SYM{hlGDcf@wnl``p{!f(OiS zezT93iVA&Kb?@@YK8=jQ>HA@z5`*)M=M|<4mLo8HvYOHw`75clWdcU1XK5C<Nzz9C z#$@-Jw58?<kcgkEFh%ZlC);t)RmKtM{AwHeL<YGQd+630Vy9rCkGiYE5$AJ?VNu1k zeL!1!+r@x$2&!)?#Rc6*-dJ(f;+6Cv__d&~mTZdi6OKKXm|{jCa5b$^en0ARWqy3U zzT6Mba^&ynk|Br0yg~BHbIdgfQ<}f!jrtkYaCaTl`?DzXxdcBMfDF|D?+Wi02neZ> z(2>9#98n+9Z>S&2zQwKS!956<{VYjnext9Zw#oU|*9f@SHbLR>@G)V0wo#SAIT=LF z<<z=m^I`G1hPVFD0{DDn1V^JKK&<_q<gJXr>lX8(RX>Q(rn9)?|DX&;J$%ZjILm># zt2tX?*&FU=)Q6w&NF^#C9XtQt{Rfau^b8HoMS<~P8>{l(I2d?0Uai>}POv7-#jfiV z5v&$79z5q0iBc8YqX{Q9K!uy+@!XXZxWjL9vcc~gynU&6LGefpEbBKc?#1^YrR$wO z7RzXGPEPt~`&$dSy;nTGZ^yy1TFIlucn5;r@xR#Yydokm=6HnPuXrM*P5iPj#1KzI zDcsDnT4An3!S2_I?>JY|acI^0h<n71kC~ZwfXV9pzjod4;5fUqhZZ>iSKfrEevYYy zA)y7j!Py4LU&xXbX+VE^;gyjBNz9#!(q6C)se_w`e9zCf6~ZCXr*R9CEij*9^7Q!4 zMtCXZ?JJKTPtusHKUvL&!ml26o(tiG!3+7&fARUSv03<9<x2&)Hz*JKoy&#o<33Br zFxOLp`RevmQZ`mxtP_8Zl*3!6_Ju0sSoxnkrTl#fIhQOd!2)JE0F=v5wtI5HBtX4z zf~*i4LIph@J#B#Hug2E@-Aw^r<>DL$)a@FTZ|WC6z<F_l6w85r<i<psR~H>ZZcXeO zy<Kk`jODnx4@%;5S#?cQfu$QB&DESX&ToPio?@X4=?3trsf<&?ec8bt->bGnEBrLR zZ4<Ma28%NM?<A3PX0|C1{F5Oc)=$Jxy~)K~>qo1%=)#B5hkVtxNw*c6eInvXa6WvD z!_xFfM+^FrQWF$|sv(E%u3HH5)H+mLrwmb7Lb(!=`W4Tqc02X%vi5H9lXjPw!1vM7 zz#A90unwLRXdMzkUcc#G+57f4M_~0VZSe#2SKY|`*zbk;9_Rm@&9Uqr0rN)Lv(fiP z!MOXdP>t>&m{gugCPRHaW!_cZGst1IsjF$=zA_3^^!GO#(mH_m;-{MDuZKZ}EV_F@ zW)ON0a_CU>4npcbo)~7-Lls_UyTg7BIkW6fbsw%`pYeP04k0lNeDTJiBTq+xqCs5M z9Q~_#NBr_;NJ_w1xUjxsDFjCLN+o89W4%WxuWdj+TvU^+^<V!<j9#lsBJcc7>@kx# zS!7>Ia49aNJ@?Nb-jt|uy|zz>D7we|mRnwgUjC7Te%+a{ck$G8K|VpK%UiQjBHyU9 zo;3gSha`fhEk}5p5%ot0GaPrDQV7dqhgX&Mqo1*(`uDt8CS*BHT~GR51oscPrT<aP zhOgV+j5iMz5t}O)45lZOL6-G73t4j@LG}JgPm+5UtShqdACoHv^5RDwoTa}B^HRA( zuoOm=%PaQmdyq%4CQ}rDyZHl{nl^3+H>bd+e9rkF#>FsueT9vBA`=eT7*3Ik6oOej z?@km)Hbn6~EVEdh1c46m_ao7`ugy<a^0UM}@{O$CP1KDlS!y&5Qek~_y101FA_=w^ zzhr&d=LlMrmA;eL(x6N(BK*)?Brzu2Y46#K9Nqa<K}zI3*)&z<*$()^fkV>w6J5)I zU867j@#$}H?JP~ZeRUl0H@W$-L>57SwxI;u^=v5WRn$zv{YBBk@%ppXv6z=$T+jMn zDUiB~7%2A@L0Vnb_{@AII0WpUO4+G~(lOS-r>L_!Ua><+1(pM2f3pxNw+#eYQcvv_ z!ko4El7$1`6Tvqv?!~~7Wbhwu6uevf6ErDH)ML2<p)~Hxjca-Md?qFj`B7)X%Up`J z_}vOnx*x7y9h?j6-CA69mF1YHv=Za1TMZ<!Vt2xE4)D2G8%nrv&ndU}`p~yFNTo0k zzKI;$je(mkrF$nKqtr_B<M04D202a(AXkmbV#R9@>hd~LLZi$0hTygT%R>S9ciU)% z6(vwr0w=HYe^>E&6xyL4|AM@<`f}x@P2^OHIUZw;!W@Io38z2pA0LPJR3}CMxD0~- z(#m*q=nx2}cAVQff!sc(z2l}YCV<WVd?XX<pH4|zw><led|4WsmEi#7$6gH_eZVvZ zqXj>H24g)J)5Vs)(A5VXPW!T$vEMZ&^^Wt%Yy<y{zk!sfHxm~aj7nD>g%yPhy*sKS z!1B|*<OFh<Hd%5P#G8>n%NbNR!J7>2w+w!^a262D&yD@5b)8`(Rmi3=D}@**&O9-C z6o=gS1M=kmiXckv$jtrxRLC%SZSmT@7}6sSJu0_uh2_T%jnC_fVeL+^hnsmC^ouE; z+&o+jy%&nBy{K_7!u+AcXFLunWsd%gAI}AS2IJ4i1j<11CI8`L$GqT$O-c|0O$ofP zoFN_z<pO!M)D?a%ALQfiPw6=A2M>w@LMa?EucbiPL#N*fK5IOmjSNZ0{L`uO`I1;j z{awOyq7CPsE2#~74^u%c$~;$&I~!uz_`F(IQo%jtUV5o^J}ljpp1kp_5LgPRBG=b5 zA?D+a2-!WA@a-<SYPwP*aQC@R{}w9*z1*`37j5RC+Bth4JtxjpgbHuni(CMmwpx0s z*m>}qT2@XjScHv03$3%`=ub4h!16#2b+jtg5e0MTH`n=Ey$^lkm1@F73GUH^MOKRB zFHXYyEH))RF7y%2@)v#8o(DVOe|+8Ylfb$%-K>FrRNMaL+H%~tC9U1DUB!BY<~YO7 z!1fqyR2wR!tc(Ip@9nZne~^ctGhsjzGXyE8eMYrtF!zqVf6x?pkHQL6H|}E}aN~Z{ z^$c$0dZ+09qJ;_AUr6f=f>WUX?V*OK#uOa$ma%#oHVu7rk7X9*79ise)rTfLcPAM} z9aqFAp>ZbWwPP=GTq_{#3HBYlw`7J4SVn<Qx8Zc9C-M$gs(3X>v44^iUuZ&|+g>`l zjgebJ(ER?L$<{&SLA3oIV9LdQF_PjHN8c!PsNR#F6&-=%5JyG1rBTRX;i`>w8i7}* zL}!YU2BFgAS8QYTFxEx)i?neL)Eas+TeoNo{LI#kW9x^(`tgU)iJAjovrmz%vUe1I zO`m7l{x%F$o%ap~a}0sweu>BDXU71}cO1yU+}MNKN5qEKu-`K^)j#2nejf)@$31)c zfV@Xb;;l92h#3<{y(K!~m4zgqWzhhrsG8po$9||J?TygLW-AP_6<%|aAAkzqn7e>_ zZrWQ+i|v^M5I?VytiI9%2lt*$c`@1trVjEBztIQI$29iZR<s`M*2PNMZzmDYgw94x zx3qzAhv_-b{8H#I@U6T3ya6tbd{(j;&jBf)D!az)c!KsaNi~7zVR&BPIg^G`piJKL zHkP9Vt_x*~p5Up1Us{y<Z6~YXy-up%*}tVAqE?k7j(M}5%*LW_so1xBCyOvrWB~cI zbmN%vC@?J_<`L`51)2E}kvz<qX|)$iQOhiY#!T60s-!?*iZd4Ry_XL+pU%kA<z>S; zn+31Q^k0y<@u$z~74lP^x4kR^2;`sc&kD96K<%Z5y&m#vnqN-8`of(DYA14MSyl@{ zN!l(m=3zFt7H*s_J(P%fS%*U{Z>IuFNm01WZU!*+*57VCno5}P9w5Ku*9k|&M=0cQ ze@aT55bVs~2ZD{s6z@y>fj6|8K@jV2&340<`&P)Kd(U>38F@5p`_3=2=%cRZS?juN z339Wjsa{r;c7kZoJLB8xJ@C}Qp_O8%6N2tN<@<nr$Tz>fET6u1SakVrMRE!KX*8pa zN9~4S|33?9xqGM=p$SgxLOw~4lnTX+LLG#BFL_~&e59K*?pph2d*GUk#A5qUIe_=& z=4e*jWBxMN`+2hm+|!!}FRNp2hU9F$9qNcEZ_LjaqR#o}tKA!{I?ZrVmQN^A5A!I$ zX7s*VY=&%M7v+*0$ZukFZ5s3X1^+R|`Gl61!m0(M95dE$S3|2}`KTJ<wN&mCk{ifJ zIZ7@sa&i!srL4<3JUhW~eRul$sSXIfUTbAljdK&0#Sh&jn431|HZDlt1w#E~EhMN@ zP0*9rw(!QfvYylYph`RX#XdUn*x>h*Mq}>c_XlgXbQO`iqjoiwVoe0Oimc_izBsqc z(6lw`;28pa&Om!P%y-O<Fkwx==jVLngOJGUgV0@O*;C^)09^+L6#o6}hd)#vE`(Yi z%syGD&`j<FF=4_$at!myexCX#7l^r!IRe%d=H1{z@k2!b{h(K5+A1=UYa#9RXZ}6z zg+a1R;!|!vc-j>e26c2mzSGyg!^l%UZ!mTybQkjjc4bfhbVHpL{%HOG_X&Td4wLFX zCFa97BMq5T31{iO&lD`v2x;TRJ8GB%@$dqx^+CflLc=fZO1rij5DRn`+7}X_gN>V6 zSThAubvKhP6r01j_%mW9^XYKnZsg7C;S_j2{5V0oDF>9Ir*>#_Qh-^)dtdf(H$vxW z`<da;G~lFpYiqw+O4w+BEx5%|3M|6W5f=9fVE@4GNydUSxc_gEn*3Z1JP?SlbY*gZ zY8u*)^Zv;o_H5SB(4Yw1{k-fhF!;kIwV&q?v{!+cC`*l|ZYVKNX(Z4U6iXz2i1~3) z{u}0NP6@t?Nh2ul39?EYvxB$ls>YfQ9z@o&6TaO)(!q?4BQXDSGL%2n9L!|%A*uq@ zjNUTD5li=@#!n&NgVe<H>;mem-6)yud-qJk5m(OFa{XiQP3+yA$kSQS@D@o{-a>s( z(|Wb#g>f*Ci}NL`ngqt0Pc4@nXTbLagC+gDaTr$|_{5Lg?^kT%lH7O>|C6C&ker-= zB#UMv5|$x2?I+X}nmYk+Mb|7otB-<+<Gis-7w)mrDh}$9jzGc<92VT2f`b;v6l^hf zJ7T(DthEYrVlGWxYTuZGP36|k{b$D^yE~~y3;l#qp*tQF%E%k%)QoJzy}@A;&-hBL zPyXb6;5y_y3T4O7aLrW?!)22@+2a33!NYZh&KULV#@WflncZPHxAsCXYj+IDc0C#7 zwx?j3V?5Sac?6Ef_>%EYBWEjNwtL<U=PyY!>&Y$XqviItPDg#G1Oq!oF7o&6o*c_w ze%T4}4W!K8Shoq&q=ctyv_rxsyRTkOJM4(<V=^jif~!2_;Wtd1;h&9+*1LZ6UzYk? z(i9-aJABpm81i&3n@LNJV6L3Ok*wEd_FcfR>99QQ)C%S=s5q0a^@A7x-O?=DF39k| z{<uD-8N8NO_Vwg<1LySks=PPe=e)ds=pB*M{V4J0kVGGBl$^22z0(1H`aNFCx4Ynm z%9DVL$oKyh?y16noI1+zPZV;7SVxN6Bz(>31nN~c7U{G$XlD8JYK{|qw(>v!F+`w` z(I`apXawfV%Y-%O;khw%tAqAiZ#lf&@!0p^c0K0G^J^O)@P+x1scUODec|xdqW`8u zCTOsGuZ!8V0}E63Chrh(JMY?9Jxswp)!&_`qL`c8vISDhv-#kWYW$-0ay6VVI#&2- zuot=h7V>P%T~KeLloy=W0l!0EyncxMdK9Q-$>a5SyPA@u7=`(ojX?^>LwbR1OGqQx zs2}|H#l;sR@A-)w%b*eJSDe-|4v7;(_<ro2TRGbak8Yd2MiB_KTu%JG8jHI0Zr<g? zOf5kFui}feO$+X?ubmh`&Wf#ym3q5c6G+&fZ_SRxoQ_nXx%PoJ7!WxTX+ny;qql|c zk0FQYxBcU@E4YvNnk9F#gbumkGyH7IO8qe8{^+ew`!I|q7`GejPJlz_xd+!!^GWxq z@1r8>jBNJSuI#;ld1x8n{CEWGDCKL5aWq4)B53=$|0?>4uYZ}ao$SYRR+hueats(s zW0uoTkHNGChr(Ul=LRZi8#6J^LyK){j#AG62$J$ZO2GuYOY(Q%pTqvO#gX*b0nD@b zGb!Cjjn9dJRecxoQd07#^_vPt!Sl#*rM;IXz+OB#Z>tb}Rr4Q&$&sIMh$)cSNp22Q z4HxTG(Z_L)JSH<xV*;41?s5Gy7zV}t5BekPCqV7870cEhe7*y&QHQ^nhK_}_<rvN} z_!`NQG0KNIe5$#Rxlu2*b>z&p=G$42cjx$?Gco`H9Fz4u=ZAp9*zkeL(@scidt3IP zXBhpS%YIJCj~s~cZIZ%y7ODC~ctvR!Op&yXri=H2t>VT$_U&OvU$ZYgiuI-<x9#D0 zw@Ext?o)}64#04toP@XeAl&;(o3n)6kbnKM#~pFbJ~?3ipbh!pC#u9@Wugya3<4fg zZS=s^BF@G#oKG;YH+;^f9)@<O)~+)4LEM7`=zPVzH`PUPKAJe(JC(W4yGsnfUydry ze><3Cvbgc!6LJZI$jf9WJX>Lde(rL(KDuw>(z)K{_Q9V6FWyB6cY&w_mF;un2G7Y_ zb1_eL!mY$k<yzxGXv>;Y)cb>ew@)$2XHY*AD1Yj<hD#~LGOS&xG|z+LBg2YI>rwES z{9xOmf>hY+VivS4gZCxnr*BH1>VRa)a(djf8j20;t`&^9!h^K78pY%)&~YQ_YhA7d zpNc;!A9SmL#JNHG>G4uXpZPfSVyO%~Q-v0TswyGGwa7^CPcg_{p2^y7DuIv#<xv&% zxW^7JS*GGI#W|sc<cEhTF!_eOhQcNnlza@GZk~^ZXXT|7!nj}YI~|aA#iAGv406_d z-Y5s9ziKm#6$NliI5laXOD)`>d3<w}zYLfxDqN|M3;5M)*HR;`1U{E#N8LwVE61&W z$y9X}=sW6tUZh_N##a2#FJ4WD(H@$D5MJaz3ARrhHpl(ha-9U9`yg;1P7wGnY!r&` zbr{u7V4kIm$f*$QPhQ;K9H4nH3VS!FIU0Ws0LPoq`bSk=5U?uvoDXwGEMl~W1(A2| z`fD~Y;#&u3SYNv5+<^5l-Lv<vn2;yVA0%o=48Wz^Ay0qfIgwljqTlxn0xS7jnrrBf z9Mq>iI5UUys7D+pJl7}S@}raQUJVRF_K95Qu=GJtOaIT{J}>T<9bUf+a>RV4Z|a2u zQ8<@n6cc=2G7RAzDV0C0hrx;awuuDZzun~)ZuNRS5EZqvGlTclFtdo`bG~kfq>}1K zA~$HJzItSiby~2-UAAWAy6SgbWDdKJdDFW=bP@Re+swXF<dlFsnvaDmO!TNjGphU5 zJX#G_d^&n0rIqkZ)Bhs1Z3Fxg9K2rhxe?Now9ZK0Z-V}(E_XsVk(;VXFi)Y*OPWT; z&F)SyB&k1@b$Ez=hU_yg;)kjs#g0f~iEo2{4jXy-xEJ{uNb>G&S_On#tE6_MmO~fC z9Ho_E512RHy_u@t0jcpTv+HEdpd5Bomho{TXts`h9k8i~CnOt*nhvP1xBgdkVyz3l zg?(H1ecuWzHLWIj$gLl<w0Em3M}523s0z;-`e5lNOJguk30)*=l236y`HNp!i5_!l zI#w_DBd4&iIJM*Qe^@7W-ZG2Q?}gQ{Z91win9tb%K_b}&d9HLk*GF*PIvIR|bkn36 zLTn>nw9=<T+8a9ZaxLs57vAY>AV1cqZ2REptP0TNKI-~isT>9<{!9GJi+s9j`pn3I zQgBwy>V1XzG8Ni~eQ#@)fJl{(2K9|v*oxUh3?Wxyn6-96X$kuhdyP}Kbqb+S;qZYy z29+SJmBb?au?Al5ZS$SFS_kI`W@sz&+Tga){kpD01ia;vq&j%103KB=-FW}H1<YJ5 z+n7c$7tv_$)y2<E@cgqj0~7xHmwt8;uh*NPGP(Z7)!|kcGhdodqr#kb&N%)h$~xfA zCMupgH^YaM3h$iBYN1sz*`$TF5!}{nUglO8!}o4?heWYdP<rpdD#(r3oBzo^-ttQD zSuEoEj`PwRpKM8~(I*&YH>*n)*a>nGN7vL2A}6zv>(szhKQMHvRYM=XFCIkn<w{ON zjl@Fv)7VKkn)UM@oAxAp_uy$GTbPCSd%s<Yzl?f`&;C8_w&*i$784lD#LtVE^TgJs zAS~m?D<RB%rOm7#O(M{z+;sT$t^;zvh9&38Ci@`ueapZa`w)B%rgME2I|jzg@k))K zMsR;POdC8f1mCJiq>s{!VE(T8ZVu}Z=4R&o&Bwo=R_U$Y)i|u@IkGe(7}0+`JWxo9 zoP54^i)d2R@lN_r{!XTvhWek)^f6}rV03#t?C14Ku-g2~n2EY4Qr0u}S6-tIq%d8` zn|~0_?ichil4*j3J-WSrP9a~B)jIIw<sSIS#7jhp_Ca&{8;WD-AB!{f)@{RcBsW`D z{Pxi<;InhlFdyj!uAQ}knd>89c5Zl8qGJSny!`}i{tZB})uex;C+ertvK!b@7o+o2 zs$^mq^R~o~@O23EK@i=<#^Ocf%e1<HoqZ2*Rh_)a)`vL)#|{OnDvg1hEmvaDr%@m= z<aHE&*9XHIguv!<AF$h2op`<24=X1F%X|vQp|?$WmB2dUamTngJ!3NvG>v?R$Xa3X z&pub}UwuG~i9LFC4Rv?UhN14J*ay?x?kaCbf4shP>zZm8xH|V$W?bul(CUk?8{2XJ zTvoJi-lP|tH(B_-7V<Gi();vzzEGfzeE!nvQxT}Mr#>QgasZ2sO1g31?{M!8;k;Q> z2~E!plygIWK;MHa{!O8IaN?}{;(Sjs*f})DDMX7A>nAiHalWd8#Z9A>U6*Q*D)rSe zk*onPJyzE4(E_+LW)B-(k)WquQL{r@4#b-~r_bq>fn{Ofg4Gz#13EuUgi43P!NpIn z5)&~mP$I#BM?MekWsNxoYnFoMZ?bgpYq+;}BtPxAQ4bblH&~e)s=y(V&g|MVFIX6_ zi<82=Zku*Z!Z7;&o|TR==Ko0py*l#R7Q+O%O8bRQ=wS&I*gq@M7k&v&ZIhv0;x(XH zS06UTgIvyn#KH~D3JBh7Efi}#2LAma`@YnTL(eJF!BE;USfHdU(WW1Rb6yoJOnb+m zp;x@nZE6BCbwdt&eZzV@L1N)QoU3a8X#L#3GYPxr|L{x*OhNn&1!^XI&h+2D*WBMW z1?(LTrPOccfc4au$m7U)oGRDY=f#Tod7>)^4cU<+#A#<8in*@l*5mJgKEmfQXu<A5 z#5gPk^?%Y&9tBQG;{C-O%(YdoFeQr^hVOw>8L^EMuvUpm2Yh~e&&E0obB#iwef8_3 z&+)l-2zbyaJ_(bu5`H7N|5PBU`1kL@B>HD|@;OjXu3R7fArAkJ+t=l`<M&U%f6?uv zbW3=jzeziB^1?7Q+oV{uMUKK<^{Ei6vlB3WTcs`k&nV<~#YwnMjeyCY*ZV7@$Ki22 z?Z)a?{5prU%F6dasQr6Nfc)18jGvtN6^{ASP0js}BC#)AU3f+L1bv9xG%A5M{-f}x z`v8N=#wfHuSM|-oea!BL_BzM+aWJVDr@lco0Tl~wqVA|O44Y{gR3ycHYDy?GUE(<S ze*A6y8~K&?BWAu|3?^WuspN21`xr<V6RSN;;{b6PQGZGYfLyfY+ydJKoF?Te`$0Ml zW(soeHkXkTBf!BVF*6KXQwit(9vp_{C(98r3s@hwW^+arkE5Q_>*{{bQLwgapFKv0 zb;x1uH)Jo6%d~E&Jg+wfw32nTWO@@|)wwFH%GU^14s51!nCD<n+xx4a2;Z;wqutI- z*Msx;i&gK}$l>W>oU^-z`djgf3x6Y;fQn_ZM9QcEgx*E}y^K0RQ##(bp|oJ=E_sst z75Cz<H}n~<U@poH#sITL!!9^@`KS2B%gF8S)2uOT?*N;rc%P>@umA9@f}ih37sy0P zKCMH&*0lbM6N;E0pY+_ou*$d@M9a(f?8W(l5yR29JQS#-`f$nl%|sh4s+^z|C#{B9 z`*M!8FwE_(IqA)}Pzs?kX`aa>JuufLp7Z2y6BK=VVC9OxpY+MP%O}inI$$UjvnezH z+ss#59K?Fz+qw7}ugHFAdGJuZ4mqn4c3sb3Uh4t9CAJ%*c-^ng{Aaf8H-J1L_92qL zL$LNmLc00@&UbHqp&r{Fg{m7Z&)u&Vg55ITp_PM$AmwY*d1s>qdd0(K;wCHM)rlCv z%3SoLEgia|atU*))oy=g-A13v{`(u+w8(+lA2=J~P!Bz^Hw`-RTok(&=XaM5>$2gn zyMr8kaBb=%t?l7Kn5UC2??*q1^RsY|GY>~#u*K>7)b)P2&hlu#e&PsJnGQTT>OKH% z1C0av$c>Fs;jt`2KcVX7g7Zyw9ne<vWPbq@>N}}76-#ix;8C`x>9h#}5oG7M=t%P6 za9L-G*SQApKVmSI&Q%T5BQaf9k<T*~F`OPyT@PC4y~CV7y27WVG9@GFA$Zg$I65hU z^9#GGu#3#dWnw)CuCGSHRb%1KaC9TYKVNeA7S#o+yK{RD>DyrS75)B~e>x#$XDL-G z_c0tF;or%?->arcvpj&l)vtHCtgo*lUw!d&P&Vd^zNyh>>r4zG_)AZnaQ#0&$G%Z^ zuy794IQT;>ke@T{5jOA5ISru}p3m0R(P#YjOupCf95nq=3;&1QmV_~%Jo(uv(9!I9 ze!z7Wo*q!x^u_n(l*A=kk=hv;n;0^s&6)x2y}UH%>1RMClJk%V&QV0;+tpX^jls>U zOB?JTXF$WoGEoD4_Owy6r5$@FAmvbvt?KLud|Q7rbpAm*RI%9<Ng>CRDZ9y^1@i$9 zT+ci1f^!DyL9+;>p&vxDNA$g5#(W4kTjHK*T?JF;58UedRtwtN>l0>Y2)v&Br=p&w z!q>!llMd9q+$CiTn_k0u>phF0KihA3DR<-BbdNL<!O3*%g{eEJe^477*@;9>!BG<e z>w$;2xVGaT;C*hb;@u}x17-msDhH@4u<l9cRc8!<|KOFkM^GmG`Cu++I}rxPw@q@U zL@HocqIj7sHjsG7s+XkW<^ln?)1-et^dve8=`4NSN}=RpmqkDNVl>&0OH%XJ!=>sM z8k#xP;HqHrGG?_FSow;qW2qC6S0ErZih7%DEq(H`&Pr%L8Ml6{v=OR=Pcjp-rQj5z z;!1&aR|Fk3s30dK{PCN+&If0JdFR`O=TlgRS+MXeqYufjqtEDh?ktc+%E#~~&BGx9 z8A<_C<YnnSbs9zgFFVyu4IktjXtj14i=a=u{+IoMugJH0zK4~PQ+g7znGNoQ;hw}G zZ}iG(vk6cc);TARy6@`GWvLn8(N}ah+D&c@=L?p^ez~?`DEse3vSaxqXqoI?r_!4O zv!_*arkKwzRBRr8`R4>Y^83-X@AEL!*7k1a24g;1&c>M-pDCc59olA(odI5<O)=Uf z^qFra<`yrE1JS`UlbC|{Ra$C_a|!yP2hE>)<cveGg;>KynNip-Vqjv68HI@8+~$XB z6JYT~o^KXEhQDBZ6SR&z4CixWQuyAar79OM!}r<fQlo{7GV)_+_$^NrV%}1pT#+mK z9l2CpqKAaXKxuo}GgTKktqP7;-`_*db7<N567*er#!%Y%f182^&(NXc-D8-a^OLW; zegquGCbXjb$Kj+<PxVpEQ+qa@W%o0D93DKpp}kXvoTQtpXL!$#L*DJ+w4VEu$ZIwl zVRu39^PUwuK7Hicma@j3i9?Q@bShmW{vI}`+a=ogzO^|uFW?z63P&aExtB7Bf#cbr z^}5b5>`=vjWXHUz_o9z<{9Q2zN`6;t`RE9c?_S{kNQ^>HhonoO#wY}DYs99^Oo5fl zBMVBKaoD!$yz<xKIpGks{p3~67lO&=+CwXb55!i$-5;vNcZjcjz1kp`4f9Whx+|oM zh^PC6xD2|Z3A^$;*%zZziQufG)O>s535jog8Q=3$hz>))?7)M+2_r8<H`%c-L~h<C zLpLIk$W`{Kv=2=riY#xAxEf{<S>#{zujSSfzYGOtE{#+Y?7Dkdwi2TV_QtoJrJP^z z|I6Uz4aWq6dVfAiq)a|R)wM4~lRb;5=v<JOJ5@?tVOVrA@+u~LQ<Sg98{`mYBX~(a zoh%2grl~4!rb6KV((X}xHxEAK{i)0s{Q+FQPtJe29t%Nlc=t-lR>OZQ<ZJmqGogT9 zDP3x+29{*(%(EqJ2rtLEt}oAA;hlxd=?&jmcq4m_jV=NGd@)We*7#mJ`?2cdohamy z@W;z+t4zY{;mkoD$yv~glwl=94%U@9{X6WKkGz=7-Nx!R2WS0?t{BN<KJut?<nNey za1{6?(IB}5s|QyN0%LLhC3Ar0NB9J^$C?iB+AN~K;M9@q5}YHaE3_IL%>j`*d#RCf z0SvE-(_Z<E^<nGxM<oZ4Kf)TLewTCx7UtzwwoIo{uc}*dXlNcHmuNTInr9*R<tqw3 z$4S`tT{(yvbIbzg-W9%~UIYQ2DO%a61=uQbs(Z6{8T6GjG(G%R;2)ecrRrM*3?{gN z8B4I3Waj=Ec_{mrzxb(TE&-jl__^=V%h1PBr=N@Sz?@d`cWnp9Aj##!zS4b||F@x* z_3^?4=FOT;lxyPo?Cm3#uZ})M`adeyUM)d`K>vOL$u7_yY}z(0LqCS)s}EEP$hX{U z&Fzl90O|+IV*c14Ca@b!UPWGC%#!}pqZe~P*}!o2X89bPa{nOQhI}P+mHkc2KA0zc zCfxcw?#Y*$zW*mMGY7$9%dKxXrog}aVsrn*Jo*MN7jueZ-PL0otBO8@%LC0(EM1Gh z`^)22Q3Cp_oFpvYG|fY(NlA4Ia{319wVWEZ#^At`YvVh7zAw^yIPtWP;QV?I%|%Dt zFYs^p1`Od`wkGp#wjt&;?sty3)qxy@z_Mc;Rzt|+`3(`X`9$G(uu(EE>Pse1x%Q&p zkx|Jjm-bc#(Gbs1IcG!=W~wjN)*n<un5m7@$J9<Jh;?|`y43`J#g^%R%W#g&$VECX zItWWAYVJGi>4Xcl_tu_V%Y&pxFCXgtOozrA3-Ju$Ay6Yd^+RVF^NianbC*{-fo7lm z#S7y7uzjuTXqsyUbp5#$QTHer3S8}f<OH|CD__mp-riOy+e(`#$nFJ_&H;*>qTRrg zkZq(}*9aFsesfWeMh?(=q+1gD_5M3>)-oJ9GzCf7YCWfscUE3wq=|W3^X!t;)`4|! zQ7r6Q3hJ=a$T!!GG-~1U%ZC?ckh{cVdf9pe_nYK;#&a|0S|H^$%Tt{-8tKqW)=$XT z7^T(qXSkkP(Mu2Ji)VSX(?};V3Q$WcGDsWu{ClkQmP|TyJm}3cOET$m<4Xx$zI4*> zYZqwm-=df9xN`H`uOf2k(ke0SAt@^9qrC5hGnw{D`)ehRynoCf9Y^z!_6!4~w1L*5 zYLq3Fv=n#QG;;{4bhb}-d2kAebj%GU(W6hOq;E&N>5VT^Nvp8Z_xXROmUbT}X_KKO zl_s11qeCveSK2G&Z5b~ae!a}=p;0)M^w(s&Yv-I-kq3TFkEU!H;?p=Ly*#$y&F<y8 z>|?tS{w<!gzGVj#Dv}j<<hPImG!w0pvH}egg8?N6H=xv6_jh%`4jg-MG19tm2Y#%$ z$RGc>37Su4oxNk$p<Q(1+&8Vi@KNIZDK?KkFz@M=yHm3PS50hVU%LN+Zga_gYx}=& z?^?(92hKlG#b-GrFtiG0zC)BWsq3)RjX5LCe_)@5q?RMoD)gqx48HSRhv0RwTc2ZA zp)7y@w<-5k<cWWxE&8<qQ*E+$f5!g>tu+z<6{a0nHsN+vuqTnG+p86)>$eNkOIs2L z7dK%56-2-D|A6lJzR+1;66vL?4_O}jci|c1`7Jl=4bY{oQEH{!0y;tG#ouz<uxGVm zB=Xo6kpH)+;%oL77%#IkLFYEO4`<r7CXh&T{r7TnuyhCHD2s>(8Gm8-m`MK-z74ol zAWF*lY6pJr6YslvWd|(F-XAu<(1rKsmU6xE3WVwC+dD8VL&+7_oP#|Jpy#c^b6+9_ z7$41#2y(9jcczxNeD)gbVQmxic)yHw=fp_@b8%yIYBoG8R$$ia^qW)Rf57v&R&gTp zGN{t=<OU~qgL?eXngcXKM56H9E3giGcCVPN+#i95M~?WC@GU}Xbq&9(`Vu&5j{f^A zwFZKblh;hV7h&q{m*;#H3jhbr_@a7Nz;`nymS<uGE@*1oUY<o?r_I^jTQf}n3kx(d z$mvma@-{NTobcB?7A9LB6R=n*&757j4Fc)C97T9tZ;;RvDZ{hyI)Gw;<OFgTHeye9 zApde}h~|*KViqXwBfDKl*$p`&_bt@-EJ1l#xX4H_@^d6ymCEIoa9(;K(ST+d_&AIH z3g2Ib9WT8?WQoGlnk0X>gk`Asof{(*yapH8j7X>jmSOmx^M!KVW$+!)k!dho1E$ZO zG~&mXq5l2RUsl=36*|%697MkgPfFT$PM%$Z?8WzaI{_=m0cjpRerXZ>m8dvoI~QTH zX>E;H8TmpJV=o=<FQVRYk4JXH5(Ln3eE^CjFx5vw3-2OG^=%5<n<1yJs%)P?-xBPE znUq-CuYfg$&4Gt^@bAqZW9AlE0Ws3^X%jh1P^(U1zb|DTSXh#|-G3vmCerv{P}c&U zbDKx^pgt`m#q}8mVF6#O((_KoSt!$0lg^`?h8CK4%GZ1*ply4|@zRND&{LjeDsP?w zwbquitjHCTrsy`AM;*~{*W??q7M#!VL|Ez?jKfOY?tz9r^ojl1+IL8^2LfFG7{oWB z{x0Nb$c-h;DE{_!E;Dlwe4=DCKIIQUIp3%<)BSExNbs21-a*|{{s+UsGnhNTM;9j> zJq)2n@%uz~hhV{-kA@TX1mBt3mB`G{mnEY!y!IP8Vj>FX1PU;pK%sAMYr_bv+$g`L zjJXCCipm`)GseM5rRA^L#WB#)`sl{JG7j2eDjvcaV{l2RXkyrH0BRKET^dU!K(@S5 zP`(~@U98a$icn|QBWspOgMC_2hV6hU@<(lr)?Eg6T42wAe9B3uksrq_MpE*(0nVRn zWn{ygiPB{%_L})RNHElwsnK{(T-Z_MNFyyH#4lc`%{`q;gw;Lc*x*SgY(Cz1I`uh@ z82H3-R5+*<-oH6+`pc@AICzqC!s>ehp;zgA?3QaRL2}29Vocl$UcX&9?-&;f16uMw z1U5^c^_dH^=DTEw|96C@i1Qs>PG=IQyyORm`qQT3dyu2#m$BCV=o>6U?F5%n3AiO( z_1Nb74Mxo4_p)cwp!UGEcOtQv_hocmoB9dvMUH)as=SMSu{-@=a`jLr`u$Dwq2va5 z>>*~XY>htiRaIdr(=p6Xe=i!qfqB!5^wgh*%i+-1ZDAACQU0S{yfChZ-161P2gmsr zLGq(Ak80Wy2tU2{Q}QwLK$zv}t^AR@IKhwW+$G?opN;dsIRmuIx{~KI(YL5Bn-z&Z zSo#ji^~4kNkbd7L!E$mQ*k1_w32n>)mA>HgO!Ok$r)PNg?BF8MHT4W%<?4pQf}N<b zu@$gkdf~OHvjTpqqM{$qu0l$s)KOOSp9?p>Btu65q)R_t<TF`?mkLu+5f<npA6`iF zkzNKdv>(zuSca&Btf7fy%ec>8$JOQ{s6+=R>Ji9kH|nZ68@CK^t4`5q<t)P`8K=u( z=%4rBuaPS$xCD>fN<Y!qEJ3)#ZnXsJGNx8rZG#x+;QqOwFM1+NF!R!uaYJ|kdZx$7 zUKq?_KA$7A^`jYBa^}zD9h$~@c&LdY%)rz;?*L2lIe7NCKSR)D9?a=e;w~V6{I+#g z6pz9L91x7Z@+ooxjP=iddx$>vj!QKsHU3)!@zbg?lXn(DqEc1+a5(xvZ!PlFMNh*1 zB!AuU0OV+j9I$STTY@z!_ZQz~7J=KuN8{PmC7`A7+P%uY1iQS26kbut7hCj267Ld- zTffxNa9;*@wuXXs&t)*Ls|mYPiT?iZIn^@MC-QUmE4o|uLMUnWgu{^$IBKPn8xW8B zzIL)pt&>v_NF_-tkc{W<9peo(+=Cx@<o)Fgo)12mRyVm&pHfxH8dmas6x<{i?tb%) zgIZBS^=5w*;dN~)kaIf&Tu*N`>Ye>c_<d+>?aE08*5F^PS_Mtu`2AO^BIYq^CW-9w zRMdk^p_AFMz15IGJIX>SUkk74??nk(cfmtN4zD+uPi6URx9}rdFvut0JAN3sL|W4c z^l^Np5Yg!pU9cDP36GP|UESLOS>%0W6TwwrZ#pBOe7q6jWW|R5lm7yrzb@NJ$)oNo zZ+6|>)R*Y{F_PRhS4!A>UiLqx841qwCca~Guh0*@dz)#i0y$<*7w>K~f|$><mM(=B zxbZ8AR@}c7gr1K*mZ<DRy?HcSD=FrBc<6>G8Z^MZ<27nGGE3n)r&3THZ!`KHoam@C zF$XihVKfZ;>5umUBTacHfQNti;n8!WpfSi*XVfwdyR?e3JZ~l;wr0;=g*NOTq|?+A z!tlMx*it5`un5t&xd#g0&EXvGl2a7L0)(yjZut4nK<w3kzCK&z!KG6eTHtk-uu3gI zQ@8{}ukv*xHs|5ar8mtU>!V=Sy0fHy7X3RCMcW(+*f$&z)7VC?>6wFvtIX^s;oj2y zUj;&w@b{a*c0Tq$*ONIJ6G^bXU$~qbegWqi<vPQz$e-CxrWQ!Jjs95K4v_}aPH3*L zWIoE)39m`QnglRsclF3s@$0_b@XNYAH#K?yysk`fdGE(_r0cUuj4E<5^rmL%9u5QR z!Fx(yk%#8xGxfzoI~AgBd(MaS`oX6`u0TiEWQgRYt18>=g%Ms#PpbpH@cso?*}I}f zh@EU(&OzUV2u0^P8{EG&Z`!Z%k$1zBJMTU#74(5>`gIPTG4vaitaaI67=nws%Xb(5 zVXn@NZHF~()PV#_9)5y)7o9U<zx8i+;2fS(=~o8sfjNFOH>7j`k@&sfUqdlmT-f-p z7X9K`@|?n?xX&J;@cQx$eVElUX`gw#+TcV&na+o-E-3w?H+<wf^4d;J#OgWr!4H+Y z!MEx<VTy}=|1A#WnF#&iC}wDc3rc@mEqRf@vfZ;;WYGm>QkB)a9ZkR`I4J6Ow-ff$ ze<=z-)(oe7qK$%)f8{pTC~!@&6!-Sg_n!VLfM(Nzky_OGc+~vG)P)El_4u^#eO(XY zUj191wAWQcY4r?=J&i9>_%^C{?r{PUO>P%Q^|YC&f9dzz_Cg1td;OKFQ%EIou5`(E zX-^AbcZoXuYjqjHB&pi3`ze9=H?Fd$Gbax?*#Ae-dB$V?wqcwoB|=kVW)(t2A!mc^ zNYRjtB89(5RurX_krA1hk(9kNe)e9sz4zW*h@SI#)hj+e-CWms9p`a;5A}*w$~cIN z&~l~^s)T?q51w4NF9ZIsraM<|BoWoZFD`pOwufCac8WJ%ltKr2IBn9V3SpA*OCj-g zG}xZIW3BuRd0CPJLL|lv!Ypm8+fpwFHnZN?4XQVS5BO@F7EObF3FL+hed&<iK5P1} zstnjm%uEf&BM5Op-X|vxB*CaqBJ=CS5aN--aNJdkA0WJOgk{{K3KV_!gfbqUg{1fF zDNni=z#`J8wH5E9&x>{&<<2<ot@cu=YmI^iy_xH=gYyud>%ObtFZLPnKX+zlKu-1( zem(Q1DUdDvpzMcyoKtJeul*8no{?YDeQP}g0$<3izY;wVmtZ!w@wXY4FZ~Da+85vp zF(aXly&AR;>%$ZU7NA}7bWybjzLVoiu2~w7!TPXp+FSJdJ4C&@xRo{oM5|4|Q}zUm z?P8Ta|9lh}c*7^-aIfV*G-}(HF%I;BeC=iUcdM86ipI!$4q~?7H(ok31EzW*N7~%* z`|)@N&vfB_sFeMv$~5v;Wr8D?<Q71JJ<ad{>QNMitM*n*lhDt;&)|M7^0~APOyu$= z;92%Zs?OP2c)!*xyWe&mZi+|gur=a2vwWHEO$GA(F1uvW*5jUwWktqPAAKRv%DhcB z4hj(#H{XX$fz=3o;0XG&Ymfapc>(uE;S2X<B#<{iUgu$$^a*n*2ZsNS>5jr^^x*wT z{sFjHEbyG^;t)I%n;Lp&G6KRLe{7V72H|mxohCoSAbe{VjM*bG0p)|;s)u!PA5m2` z_Td5cWa_A7t=t=cvC_C>RJ;>#QDbj%N8kwL_^F7Uz;iHH=$^?5yCK-+SY;^CIf6MP z;eFTXM}c2P{kf~mIGiZ47;;e^h0gP2qt1T^V1x2*%QpI4^w_!NrqEZFv)M)~jXB-z z*NaGO8-|ZFPN7Nl13-Izm1iINllE&jH(f`L(aU?q;l2W>Hx4Mpx@xsU+va0I2FwXK zDtxz?&>jNM?aJnx9YgS2+W5&8lRlW@d`x@%QvvXQySVV@Nejf+nJer^U!7ZuRDlEX zfDc5iviC0z0O?Z<-)4Uw@YVc#crLCNc9C)K$oq7IW1(h~z}Eo?6E+I{8PX1y&IK7$ z;J#(&s$}~1@*r$;Q?~xXJXeW6-^oRshix)?>91^{ugd;N^HJ|U*hg7C^3ih;tOIYX z<i+*FK_(d+U-VP`l$POZ!LL_0i#&B4eNvNb#y`m2+QI3kHE+T80DKe`-yMrNE#Zrv zPrUPRA6M7Fa{lQO<Y|92t<jwaH3vzf@2pGUQu;C>r2^+L3h`5_rsz*?y>6nzjPJ>z z-?cBI7eVqUMY_4l5~v3#+~hG_gdpd<lwCL%E@oJ%TuEI5{^LTVwFG>B2r%wFZL$P! zTC*8e29|;1alCZpuUYv0j3<@2GzY^Bw8VV<5-^!;bT4EsLF@=c(OCH$#2#UZB2h1a zKC4xMw(C5!KK$*HfI5~Y%UeZetwj*q({a&6eGXnES|+J%E`p+MdT~JbG_*>5^)XAH zMn9VUbgk_SFs}}qs{EY?;m*R1u(1UQ{TxX?^#8eQ@1Wj!vUy0RePLOF{5y$)>l}~e z=Rn)**C~?2JaT%fbT-C^VfURghH0AU|2z6JtMYh1OzrHs?z1%lCEA1An{3#RVUkoU zcLnF%?Jk;wwzF`!^EX`;_6$5}c)ec=bKpI~QdX(@$Wgw-*A&4q2fr?|hdjVOj?3b% z`**9N@0Lcrf9uv1H1!PU>(5Vt*rUB1|Di9qY0G$Lq!lS7PTHBb_su|^w8?NS_Ng(B zH`mTzp8`Q*@yLY-$mh!_C7-ICgpALu1}pn!;hpY}Icem21UP#wdQwcl?|&~F%&cdC zMTukkX2b+M$sO;eXh0o(eZBH%(*$%dv*xRzPRpAowDK{3271SzkXNycLCx-0=KE03 z_mtoEDSM7Q+rn!KpL?eu=9QA6=ZiKNocMN*#-tu7^v=<&3dg}A9eyhKQwx46BP>rl zQ6FeAo&5Te1dM*{Q#RN~=C%+fW42QZR!4=?T}ARBPW_I$5Bh=vI|VO9;QQp)&qxia zuu`~ScSyTYr~-)k@hbMBOrWrsav-&qL;Yp{eHyCmz%b9Z>2|CZsx;L1KKN1&w+(qu zwz^<X?yem}?Wt5KucH1!CXRin`MLe1`0qfW?9}qXhy?68Hup_Os(^{Pz%j<95XAHo z+OPKFd$cwE&R(i6IF_Eu?h;uK|NL$JiKjh~NMlnrsoV^uF=yy>*KwaYZgG7!c?gE} ztv41Z+rWG5CZ>*X58A({w+4O3=@V}KX55p|9$_58>oWukib?D&r9*I9T#_Q$W)z;k z3ZZ0C9s?Q4tiOEALlBhcc~;aNdjy8(WoZHjA-6x|^!WKfQ0e(e%^WlcpMDqLEJHnK zE%v{}G1ES1D7csV#<~;ALwrRt?he6I{X2!ESAC$vsooKLaTt<0grpW0(SJG`(W}8Q z0xM1>mGd~iS2NkWR(>0X_S1J5W%`GJ$@X(J%bO7}b8C3yy*vz7%ArFvE<>=)Lg%Kl zItU~(i4}hHK`<BV@#?o62BGHisq1)7^ig?IAJiNMZfgJYQg4Uh>y_+}KLv)sK}~TW zlNg54^T*|~YlmQh*?v+|0drJ5!k;xS4Fg5UKI;(cZb)<;J5XlY4ri0I^7>maZ#19z zmrSe|?v0Q0*fw^7(nTQ=n(r-OAd^M^yRQ?NJ<T5bGq;1Xa=J*{^L}8TrMmG_qzT^L zql!|^Y6kj>k%a2*cF3(i&((&y>9y+h!^e}`fb|!*uGD+vv>9C{b3i?a{j}P4<O{qH zu3h`Gi1)+Q=Bpeh)Nn4e8;ISHd8p$b43<3yI)GP1Yu^>`0q{E4d`lt<{f>89g}i>Y z!{dQJ&mViW!!t7WifcI6J~%V`D)mu2EO>HpdNp>ydE>tp&fIN~FlX|)75h-0^}aJy zdEEw%Ps<v+?~&ku$Ms#3L2bZnGLU`;{X_I#+DBJLko)rcnG0E~Km6Cl@+#}6AJN@e zyXjCJ3v|*iOvW%5$xm`sCkxO9rLEPs!WtQ1<b3TI8L}y=vX2Lz7Hxz-3P;tt;}StO z*<R7{ToH7iyhy3Qfcx8{r~D487sAA%qh)Q_7nnM%#Xdju9c<_CCX2ku0X?aM<5st2 zV7h|WAkWPmoVa*D&W#h$=T>pA&$|qMtjsdp+gAXSbicZ#UiuLQGI63|&M`1utH|j- z{u%j+rV62$?;O>f*Y}<H4)!j+yS9|Gfi8Phd3GlqctdN%rAkn@=nA;ARa*p)_C}h$ zimbqMVZ*+z*pR55-@ibE^IqSN@;f@(!9-ou!FL1vc|baq-~8c3It)LgCu=TVhaBgk zuEaxI@LKlz<k`$WI5*^IRg%`=0YwYfz3nyd-KO((GF$~qubQeuOKT9`RWWtB8~Z5& z#i#_&uY&hs+K39*WsuBFnGN`{400oL?E(k!`@Z^nNcrtLsCdTuU!YxsymRIUKU`Ra zgvs#xw{XwLWIACINwokETqcK`uFpb^4QB%FKir=*LfIVo0@O@O&QPC3-5~T;6$$k> zG3DPcDUK|n&Yk=_czhB2jzc_LeU_m>{N16#vrE{cky>3Uy$0Q^97P}HR^gBBA{V*O zD*QFhx3fh3G^NELl^wa`E`Q6$|1qzCtD(#cJ?b1yQEyVo4zEF64{=>*c?D{c3i90O zrXkJ#po;j$D70}aXI!b62E)0Obx$75X_T-XD~iK+BW1#(iRL2IC>rouFJSI5V2^^* z!$s($F)sP_82c+)pHZA~UxaL5;_8V1IH)QWQao^+f}R6Mc#8wZpmZ0R(nH?~pld$3 zI;uDY5{lFFce;?bwrgkCDEb*!HJJBYti^qmqWD;vANFxxB<rx;n1F`312(Uyah@?Y zc97+sg3gMQ&*CM<;gqad-5BbN?mBKqZ2PBS<+GA_@CNRmwJaW5|HC=c%W8;obp*zf z`pWR6gPo^T+{(hE5O|C04Wr#CEKinl1!PRZc*&%dvg{Q4tJNPwHcr53`@YFBnhA*g z>%MpYPBlT<b*z8sUL%A>&1dh_RUp@M|Ap;}PB3(nwB41{3J|}(|HYADLjAM{Z$v=^ zvC!;4azrT$IQ>4UM<Ul%E9P9g%}>ld(E2Y8{%#=ZMwKqW);9=v8Cox#KoI1FsmmqD zWTME5yZBH<6ft=|`j{ut2W$J($2m^o{5L5p*m|u48l>;KQUqZC(a+kmGT2j)?Ct9N zaygw4Vx{_4`#u?1zC7D)&{qqUFU_ZPEPr4>0WA@;gsnX4&m7iXSb$txL9PX!e;jU0 zpS_Z?zg@rCS?L3wlSh2xqF1org>l+PP$`9IRL;Yjw+q5wD$DyG$NYoXFBJ~`X4vN| z_(IUJ8xH5@4ZOCih2s@_hJ)>zAg-b&>c|2K5)Agnyg1zqz1%`ey^YBCjJ-r-NnHum zVUo`dF*Sm{d$~bLSviC;FjU|6s0E9sQU^SgYM{mYDCe!5Mi?YIM_-pU!_)XqiRt`W zSXIt@E_=TesLXiXDZ0_Gp&ytWaI^)2AMvm|3b%ucxNufbOdU9zt{-n4M2_yb&Vx(X zPh}-f@>oHRO_b~Yh8E1Xxu{xbZEBD}S9$41tUC7Suq3;_MgGFkH#be^+e<;ODtEWB zLNSaN3nyvQRKwu9s>i%t85|R)nVx2>1P{C8^&?4@@Rg^b;=%|CLexxtew=K8f45$! z)R4CW&$Yh~9fBJnv@U$eZlw*}=t3)3XWKxdi{VU*KMC%fRQnTD&<G*NnL1n!bb$3K zY4h+;z3}j^Z|{-gT`(M}v%nsU`H48krz$L6P@EqUm&M!!hSoL=^mzmD>}6QpKzcV& zMsr%6OvJum6>TyDjV|!fXFZi7-j11d+YD88<h}v*{n6b+5O!kZfo@S3tfqElNyIjT zsiea)Z{#R2_v?jKc=bY!Ii12T&Spq>-F#klx(&!HnOBqX^UE7Lw7wOQ1trwgDIub5 z5Sz^>xRBQY*E(Dtx?5t;w&LIJshD<PYOenJ0{Nsj<XK$*^Xr3ml8L(8_c3Qw{33T- zw+j^goV|H^J77R4z9aNZH}H$S-H>1@0`;Lsi@*J9(06sQA;!2IF7!}3Nr+T{e-$0) zQ7DJKW~|$PGpaBrqtwYbSqsV4%TNA$Pz&l4VOOS9^1zHEfnrOg26$S^I7M>_=w@&K zctqwi2m~DazOI`F*+KjgHV1NHkbdtmMS&u4;XcK|PTmOW!(<*EKPq5Pk;m4qo@x-S zIp162R0vt^=T5zeNA9?dWW>P=5*QC`=$p`$L!S4<@2i&zf#Sp+Dn_AVc$gAn)~{6q z(aQPzdyHG)zyMEBgL^$}c6!)}`4qulowqw27Ilzfl%q7Sf_&UlC!2+Dv;e<JBwrr# z#h$V4r8$oIjZ^e`StZ=X@L~A*iMEU75X11g;2`!zb`Lo|8Z(-M+?%YM|LsDqX>UWb zHSXcB*W7?I681kJaPCn6^11hZPhjbo0W)JMIWF`GF*DV+*LuxD-QLp2KaWoX`K41g zL?aeJSmZj%!V-IuzOp&}R$PE*m6uJrT~U{gI$L6LWeIeHm#HgLvH$A}-?EIyG}L?2 zeY$&m7LMDfY;E!3p6&hg;}=8o@L$+cD#h{)-1gjj#7#Z}{r41}6_(?B$+22n;pzf} zUH-yGLR}b^ItsEA7lBOcj9uS}CAcNuDH(zPmQ_(&H|<`6;os5CwVsQx_#ulZ#y(R^ z(R8M~#$|9MB6R!k-NqPYU&>6m1P5H7Wg#F560UnLcX-Z2;CQ9b9rRmVNw?=E?B?O{ zeXFrIEb}0*qp*?v41E>yf6oicjlqlX;RSkc+`HVL?hWf01tZ^%^SbDZGnjX&sZbbz zsey%RU-SjNS^84Eergm%INFXpaUO*$-n0E&u9FbbCBv@~J`8IP)wNDh*c*H0-!);( zRT|P>w(7yW`s)FQt$$@xFig=HFSs-T-QFyRBr(_j+@{@~f_54X-;tzxa&{VIZ%!!N z${`n9%>Sm1_$-Ka69@Obz<a(ierzCR7UpXYn2zE9r<&CHO+oDSsCl)nd*vkhc72Sp zTh3u`z1-06s-`*kuc9T5^l1{*IKNamNz6cBVANK9>lBEXvUkf%cR?b3yY!zE{h(5p z%@pk40X5aDx29>(|B#oE^MCHJsN?MViH=@qEBL^5<H!I|?a|$qxrV(%fu*067P?_V zrA<umIO;Vb-zhzj6BvHP;K7f<Zg}J2Z{R0~913BlD$lq5aA?;?rp`X((Wrf>J6$;d zEt`kr!+kKn)nsAFg}$gxx_hY%Dm~zT%4Fk55%Sm1=7{IwUM_2TSRnM+FicP66q$S; zhsDU#r!QGyUQT&l>%7V!q}Qmw7)i!_05!ejxlrU_Q{4`!y3qx6hpzwCJKGBq0Sk1y zZx7*~T91ufydOk2EN9&JBR`20qEgG*4VRvfKNZ8zWuqw6=(N)qBqomuq@Bfc(*2ac zjvey<?z?e4LjMFDztH=59{KzeduOSRcK|^y!za+%4~=tL#zq%gz<YRKR~J<)#7?F3 z@nX)%lrhv*D!2s-d|x}&oJIaO<(Z6ujUFhNx!h51IS8Tql8#Bnx4=bie?A|a>n%9S z)8C`dbat<ck0$0t_I+bn?2mJSsTJmu8=g(zrLl3w3j6BP#gmwV3+mx3O<&Q?M@?Xp zvcaQlk2!|jE$bA$mEiw&UGol}CvOJRUJm`Kg71D20xa=OuvDPAyMwY9lDUR`4&EAo zADr?`eW)+nbN|XyS}ld?<Mhcg`mG?7w6Gdc)CW~Vx;I0;v9DU5fj`@!4IIdi1^R__ zf<g}M&Pv=6WY%peT*W=SpDJzSDs+K_l)-YXMjLD-?V)M+!(7Ku{k1u7^tHwcOJ`!9 zBTV<B{=M_4XDeSTmvbJ2Gat97`Yw*Z$$Pu&tHZFzJ)}!#9QCvPb*o~b9hh7ATz%a& zWe_|H64t2dJAf4ZSmer97bLT3*C}T=gE+a(uHZ*?keq6;_hVZL#GaEFq`>#=%HpKd z*(XE5mr229fVr2OB?m|CMjN2$nna=c-g<cJ9N_0lF$`e_wr%Q<I)J%qLGPwQ8~BOO za&o-sf*;B2iSB&J+m?3g;i4D;K^3Vz=a7TJvNFab8{G##2e*wFFrRsD$^L@|3x2NG znZljy3L%x(emc{l8g|+?%sDa|p-F=M##PxOXtDjKSFTeH{y);RIPMifP)xakAb$f$ zyjPL6DlGxBcLlVcUlxMZ?n15XoCNsxF|e+C?G4a*k86CH&I3+Si=H8+Vh~NUNb^2i z13Awf9)>J6!hI<Gw)3eHCf?R08fb@sTv+Siq5Wx4lg&hWm6?XU9sii)zZV0wbI1^< zI{|@4@$%H$*n4(<$Dr$GDQsx6c^}npf~il#scB!!VfsJq?fcTHP$4^h|H8XuSoV=o zem)rrk3OZQ%-G~Yp^FJw;Vx$w@cyIDB9jk8x5Uf3)Jj16;tZFoKo+Qtr|$?S#z5ng zZOd!3ObDHGxmSO*5lsHGFYCsfg6R8VTN_W*U2l)=qpm^@o3V)41NmWaIg<dUpRqr^ zDP?wC5Bd3~A2wq#Z!oF8f9PY&D9j0q_mof%!_E0d;V(R6P?2zme80meyzybPbQ8m# zUD1L1<Cw!3H~kV2gTBzK=e0TxRiLhQ<=|JN+DY`8y3PCcjDS#5sh1hfE#70Le6^mF za8E4Gz@BCrc7GhKR~ny$Y4JUhq0N(Uv$>R->&!Ti$3OGow;hMItpBQYJ`MrZS?QDs z$_c2}KM=voFb-Syzrj((aUhF{`t|h>p1X?MR4F$Xfc(al=Vz%Vq4<@rOn~Y<h_)ZD z-Gx5gmsQU!i_!n_W80Q2^?d{MO~kmoyM{d`O8XaI@mE9j8}ju>Y-tcZe1VZ~8ut;S zS4gYsO;9iY*Qq>>1aT));&bEcp`f^mgN!W|BJO9dfAXmY+k4(-$GWS*{?pf~_Rb_I zEncRU7%hg<!Xu-lrnOKf-nl;JQ3E2Q=U#j2p{}~18JuT=`@|Bi^N~FR;4DaYo=<%M zcE2x=_7X=<Z2L{FQ&OGqzT@(4w(H$+derL-XL~c~?QIAUb!rBWH{ZlEhiie0owrBg z+64LlWnMde83d;xb)z{~%x`^Zj?cvV&9`2RE#GelxHz;OWJIxtHSa*bd0r2kSzJ5* zmU0-PQg$y#PW6F75;Bjr$Dos$lJcQS2JHX!_Qy2#JJBJ5^z0z=G%8biUp&R0utl=C zC2?=~(ADg6N`!>_I-6=A*LtXSFc+Lbj)$w#dJ7fyEa-9Dw6QRb!S-DfXCs_qrDsC# zzQOsulHrZdLUI$N)F(T5s87LV((vO?4<|s3#_Fm|b`J<q<d0lL4yV3y>ZA~<2V&({ zoqrAX1E=H6+whxBP<HftoIlwxoTZAh+^NEx<{xi=ZRBQT>&ldU%jyMorzbsMrLYf0 zgjN3Yn`Yp)zjcpPh5LXEm3H5#E)WP>Y<iI24vphPS>VTR+{5lLzE~TDE+Q&r7Iil7 zXBAJMKOcssuxI>1gT2skfV%Mq?gbTYG5AVUFN0QG(}=F#1pH@s(BhN_`cD*B-S0Bu ze6fAdovCmRA~vd1GBLMsl<jUE_u2p);<@_dqVoi>^*i#@?;nF7(`o@c0t4{e@ACDM z;6aG~LsiOCjXVz1O3fb)m@`U()6Tbs;bjxqTP3mqIM>dusqqW_IlMqqOfe6PUlTRx zA5Vd0&>EK~>YxG{&L_?Ehk(+pHt%N0FmO!haOGU>hx}*M=N9qzU{&yj_t-=y{N5Fu zUoVJ#Bn<tX?xz<Za`k|6ZNLb0N=>+*#r&IkTeDmi>V#Bue%!~<-~BKtgrPHQ0nE%l z6iVZ~n$a~T?Y(yrq^DMGxsXF-=JlkY!EzkpH|wKQf>MCeKbg8`I2U?uK9;ptQv;`- ziu8=S7zh&npztvH6Tu}eSz2?A07HEX^Ro4PuxoaC>%mk8kr#{Iczsg9@n<&U^Kb&L z+jfcdh(*E9?WNu#YJWn?+c@MJ=CjKkx@EFhv*1(Bptbm|OgMIqhkR<M8=fa6-?x9* z16g#rN!PLWE_#vSkKlS8$a*+#l*-n^)n}0!T9_Bvz4<g^@j?MuTxmO#aH<K~l%q$Y zRT?1XgwRnY%q{q><z!S`Zh{3%yDR1IuqRw^WXkeK1K5v}1r?&6R~Pko;RNn&uaA{G zk)pdn+M3Hr%clb>7+6-so;5=EihJ|PDH7O*bd^Ol<NK}1*7yH;cJU8;p9avhz+u51 zz5_2BA)B}D=0)V%qy#(3N(tA&rSthqZO9?Ze7whAlMMCt%#dd;QzIaAY(kH88Fl2) zYpL{xy&!&3$@q}qJSeJYlv3Lxchi!?{W*SJRY>*5Io!ulFq&)W+l|0+^$QtpMyM|a zdkJLfwZnW*$J~p3_zt=g{Z=6q=d5!tTzM61KwLKR-bKtG2EX?@w419RKA6Sr^x_^< z>z?V|P4xeB?)kU26j%XdyEtmJZ;v4V^5`R(ujrSf|JI)1QVUE&>fH1G$m^7KTRSp4 z3f2QdhsQ2YL&hWTSTUSGKDqJzJU3nkrw<IsHvDLX%VaB~Eu8IeQ6xU>Uhoj~RMWlR zgF5Zs=dYz0YI8wxCUQ!{9p9%@hN?rao1tHI-_D=PaS;Ai&J&2aBsclm$$_*EcrO#U z*%dbc89t}uRbrB$s$EAU*JKPbBAc_E&=;|EOGq+9dJ^t5(3*e6`I2%u>5tXnK6n$s zYE6!NGz<Q<tJ#g^KxI`<&U_2`7fdOEoye;&_Hwu~iTb|CS&EZq{`P_Ek&_&zKZXFd zeU6Z2mV@9W_pbwEc)wBI-uG*7Gx$vddm#2IY-<QTaLH^2sS7)q<=7jN9raV4C8z~d zr4)rk)4RabRUj-RbpU4gD5;O?j)T!x7M6qTs1r2PN3mwKL9s#l0}^8otnY9~6(fgJ zGxu(hv|S_d<Zg=b^NA+n_`Q+u!pQ9o&sJLVJ0Fd@kH%DiZW>{+^+%@TZVS;sr+h?1 zIg?=WB9t8GKf=<Le**N@LBu8h;FY4u8p3`!zpb|+pAf3K&Ri|tO!zkjyj>kGCr;Cq zp4t(qB&_WIDR^eo!lT|TeH%7ixFht)KQ6e8C<(kK=@n5yh{@DXO&zTveli&cNrsca z{BB2DPHhn}a_`3<vGFvb@8_(+yWZbK$N4CK+fsZNQ@uP?+}ubs96DHZx~7Xb(0(zX z>V6B6>|7XRpU^;z1k-ig&dVka+SG(N|1LpJJonWh;YQ+_+r?kJ3Hb9q5(&Q*UQGyY z@*h==Aqc65lf%u#7s4sJJpG2-PhzUomU7J38r;Usl}h8W7cxE2^PX}AoEbUV;8Bj; zUN@!8AeJOzA*!0clp&ee(TS3{+wKCo6X&dbsI!TB*WQjv*AN((b<g-);77b{xw<ln zJn&%A8Iie%AK_J0BdP=V{@=&JUDs}heI=i2{z@kkJPsYpCpsfwv2y*hm~=4=9C7Tf zT6#eoxE91#p752(Cbzv)zM28IZhQRs$R9-fj&2Y=J)KH;hyCqj=PQEFTBpm@8Zp33 zp&zzeE}zKe2_C-Dokz@UDypwWrx1(D)aI@C>xeDhQ+k8HE5PLEFRS}R0H`z+O0jH) z0B<#iQ@V5kalmxl%+M&FxbyNr(Zo_Q^e%m*b-RS;*X(Dj-LkpBWp%`8WuXS>Lr$15 ztu}xOZ{4~#>mZ!IF>d39y@<ihw8zh)U)(#x+~L->Mz|zOnwvUR2jh|tg8L+k!LU^G znxAAnQ0MnLCnprc=?im>61Wd5Qx49j*%Jf%Bq>kkqo3y)NvUp16Z;zvS(zAM@1XIu z7FKgV<QU(6-`+*h4Du4Pq|$Wk(__o=>wPr|hu2v`bLiT^Jx}PuXR;w!^g8G%EZhQ0 z)dB-!s<@Z@G$d62xCs>QNEFF_7zcLEV~6xokQ;Vfp(XkDF#P<b*2*%|54+M&BpN-y z`;4naeXObnk|!jY+9}%LR_R!6oI3VQrdbHpo97dA@mw0ZM#<158yS+Bm`vDw>7cZ> zXeI)v3OMBlbBPtlstaUVnS{Nf<o7wILSnRJBTcHmi5Q=kVf;%;BI1Ydj%c5*Bnn+r z{><g%66}90lW8Zl30sX6_qwchg8D|7N5zL~;^n31`xoeIh_#18BEB!bfn}BB?iGb3 z2naL(tVsV2x%lT#NIiCgKn-p8nR*k<Ertd^Yp92tI|tOC<>bJHcHy?4_0h00_TjVn zR5Zwn+SdPz48k1B4xgabFW^k`=1>hPBy>%>zgYFh6Wp!pt2@#JLChU%d^8*fzdxTb zKL0!x4xjWL{p;>TP;TAM&;JnvbYJv}89LlSqaw1O&Nz@Ly2W}^g|8c)oIIg<gE<Z4 zuF)pgyl;fVLwr<;;sx-rO6fkwn_3v)qaEm~!+n{Eq}IPjHTaI;O+U`u46<iHY&TmS zP-yz--QoHMab=I*c<K(pHCGw&wa_N8$_x(U_?r)A3Hu~FC-8F|6;wFkUj_aR<7{C& z9Y98RQ*h`_D=^(xe&{%i`fL8zR4to&WcHVa`gCAF+Mi8f1MI(g7UZhjF5LooY-6`X zu&3+F>_n{b-c~48y<awVsST1xub;VkvJZ}X^35jgX@u+arB~l=CBq@-XKat!ihyjL z!7dNq?`>kLj(fkOze4UXT`Xe>JpG!d5Q+R{uEDp{SN>*#BGcMsqpm85dQh_Aa$*E~ zzXkI8lrZ<tK4-=H6mw!9N7eOh2Eg{VdZCy{2aJT;{%Z{%g^;47>)JDe!1z>KLLL3g zKMU(##$cYs-@36SBee@C%xA?*a)y9YbGKA3@`ZLx2EvrT;5+^HJ}ptqQ9E-rw(O%A z0=wu-G)DLyFMlC+^JZ5E9Brca5lSC~XU}p~Tamw&T3DL!FARI<cX5`#LY~$7<*&cL zZy~27aPDWt$8oUX2%Y_l{+oXp+gq3Z3_$ODWp^E`7BHm>NV`%#4tx0ht91AWVN>6W zCHfQcNz<A5Z%_|GJS%N#wdVlr>2-Y7Yk<6gcR%u8*rAVfVVCILQ)6KDD@}^(b|3ox zQl4g`{vBi7$HdK44F@ml2Jl?Kck2B*Jx^-vW87p_%U&YjF7tDfQJNm0KCs+yCkOXA zEi7%1^^gnmu-%3d^(Z6Ju*4Kc<n5doKeBps46bQ!Hf=k#LXabiR?0&X*oVQ{CDb!W zD{cuxbX9P==>19p?zv|&1J1?o!5-H6-lE>AVGwK54^lF2h1>ph6+HM3)bQ2#nbkK0 z%Cv!vDeD8E%_iubNHYXO?dl9m<U{Zz;ZRkQ!vJ{xEM1X7zt)ZKHS!#@s2k1*Sw1Rk z0Uo=$57W5UtsIW2NRGrka!TxzTPB^5{?@ZX8+}Mxq?NM&()z&i5rwPZpAksUFAJeS z{`<j@qP)<u9AK$w&Wy+2TQA<<))h}0;i_Q&!l^s8z|s^$Qd4Sx+CcrKQ=F|ZJpHdJ zjI|zy&c`3LVZ=TEp01-ClK8IqBlM<%rx7In8+*e0Um93mVR=iUZ35|I3^c~bCoGTU zx!ruR5PXwuwr+o|1TyaTIL&rI@i?t*^Vt@dUXRvELVluEn-k}5?0Jr(;M}i=y$T<T zo(mPe#q&F=@AAJ5?Ddm-Be!>VJzUuQJ|=*=()zK@4{X@q^i=NEK5FEGG)c6~cFZ@z zZo!cMQdTezebH-Q3p4sKP2W6!t$}^gEwSn;tc4KKAg$?yIrGNtg)sNdCb%BoNjk`n zocZf2B&QziCp)k}J+?9j40`wGg7413)Lt>3Pgcv|?r7Q*mxjLT8_%zC%PoVi&>PP? z!-FvO$4=!)RyXvGetUe*v=`ck6qWa*j(D;BBclxZxGBX0|NH1a3~vn;Ur2l%0p`uP zUU97vAZ+e5m>La2#nVGux>VS&99mK!pEL?#j~&ixJ;a{Fw}TLHXb$*~$lmG39xwBk zyXon*C%|D?BGnD`tJym@&-I|+hQl#QR0sWhaV*yZR5<6ro9&cbmg@q9@R&2pDNVv6 z^&!P9FU+CsA1xZgcWiR{FS^UfdvIAjk^9MS7I{czD~_WRz%DGYnO-x6oa)25hTkXQ z$Jn6J80JuV)efZkotc8%h5Lmx{|!T&@~gaey9a???&(UROfUAj98%KE=!KO_Y4Ji! zLy$FQ!HAUvxQ9_Ny_qlyH>yXKDx-&i)}pTelPz-ee8RXCQjzbK!*^1Q4}BV{@|h9H z-;+FhN-cQ-IkKLT=(8DuP)8AyYW^{3h+N%1DA)qzzgop6&?mMl`QLM!z5PJNFM3<f zv>w*J|9$gOqaXHHDlqBjw1K&kGs#1}8U0JU!++eZ0LfDfN3KwmLg0v+rj1-T1b%l@ zXhxmoSfuc#QuY`G7pDr1@{YkLsuLdL$eSn_eP4dKX&l<y#jA>r4+Hswa{?ZuNjR8L zZrEHt3_ax=udgD1V<ltdH|sy_o%^6NI-MH_EaX!AuOMGLo8=r2Kk^gW#ZFugbgcr_ zeCuW2?nc-fWFl8k>Icc(<XkoOdc+$uWwW;z!jW?U28ov|VJ2ZUwmUTy_!qjr(>?SC z=~nu+n`*&?Q(OMu`i55^7H=r?{zejP{nozdC{YMD$|La_)Qw<M|1QxF_ke%yjx!9b z#Sj+da{Uv3>p_D#<_r;B1pAX>=Op?YfJLg(u*0?;MtuX=9ek0;>VJ9L`48S(q4ytt zn`j0n*B{$a2^FyNy=*qE2f3HG#ikPPB6s<*k+8t&LKs-{HTwRp3UV#OIPU2-11I}} zZ9+^FJY>=~r2bBTpQT&1gIzjoG^Jg9K$#CTb%ST*9NQq}$;U|!JSV6R`>U%~^@Dq< z&fI<04iJu@+&0v11^3WcwX4XLijuhLV#QGdtxYiuj`?_ggh=1J?cD^Wk{)}RO*??= z+IE-ou?kTBr2USgjRfC>I4_-+Zw6sANwzuUP+Z~;qLM?7L~YXYU3LfL5eV1p+GfCW zuS13RANrC%efvqNh#akW{S*rGtS%U05EL&F>xUHSI}s{gn2*`1`zdf^5R^t$XjS#Q zAuHJPS-;#M_^uk0Yvnb=`C}KaXL+M8_V?`C+yntE4n|X7K2`uloKU|Io}1w>?wR#! zG=lEa&9g5LB0u8Y1?waa%+<{9@^9j4hrn)1{m4e-Hs6lB{_#vXBxXG#{k15D!i>X8 z`A(Ifc)IJ`f=e237(6}p?i&HDCmGzy`x3$PP~RuU7xnPkvr22fXgTaluhnoQs|8VO zVt3r-MqqpQLUQO~Fr>4Ro@#DI!a`Budwu^v+>3CnKQ=7~7B;2A69!da@_Fg%PwYkK zX!=_puHOiHSp9bMRRd^Mrzd3I!CX!8Nq@Z$CD1JucD`@625gMndpjnofIju;V!d$< za)*^nJ|Pe6_tm*YBb8L3q4$3>bs`fq#+W0{XcoY0k(X89#gairmV0u$F9Q_Bh&IO? zvGD3vS4zvC6d+y&T;tZs0ZxO`m5GXUF!>F~gmxp(w6U6<M<NAgvtrnDVzYqe$_H<Y zv0})yAj$(0NpPGcqTthLIcQv+UlV1|g1qrPXC*sI;B=ckcbGYH>;ghH{jOF)(eBKI zpr$yO9Pza%nT#a39@EHYwKqZ9{<$(%$4JQRoVv9!RR!wKrq?-l<OmT)jo=ujWP((2 zBKBV#37Sq?=(N78fPLou<hK(_p`nJ!C!0AFBHn%)-8+GNQ^^jo+t<rMZ6RN0BeN1L z2E+CT{Y)in=_AHR|AiB$v#9Agc>{>r#sy1(0_<~gTQ{YnMy}=T$&Ue9)!?jhkS1y- z09MUkGfjy2z_B|t)dSs4;H*C4nYCFAuV2289&#^$=Y`!a?+uXG_jM|KVd67Dx&7G# zimSi|Isd{VXW*C)wbj7C1(+Yb2{gg;s4wZ9`M|XVkB%H)E^1tb$J~Brt@o|M`}p0o z8&ONZ%Kz57gdFojN5i&)iWlMLB)4w3%`yx}vy`RLufppN&7I-I6?pN9XTMzEGMKli zKa4!Q40C(9GIV;D@$**kXgjkC<Fjwb1Wv6$ZEo{nU&=L*GZeW?iGH2lhg}Vf+l%nK zHDNX|d<8-&6Hmu;twPIQj^_(_Px99Le6>r%T&Uc;QaY+lcw3)j_+xt=dhcd-&M2+H z!}!Z5i^ey=k6vD2;`bUHnmkAKpYIwl#yn-F8QOp*_3y&F?APIRl!LG2kxl4e2==n? z-T*JDF3!Q+AD~^ke!JpjClvlxV_;nCM*TZKnuK$^#;Rb{S%G@Er#+^sn_LOfnPOMe zQrh4~+^5&Pg{|;JpN#crZ5t3GrKjr8_Ji(7u>AyCHH6nMaxniS0d-In&9|^dICV-e zyKS@`-iAG*3%^~59GOK;#iBNd(VeLCNo)m;)Y4<GJDMS@V}$MW(^hz9`&&uF4s+J| zt>PVb5gr@f~g4%NakA`K9mN0$%S)ear5Ra5g$L+Usi%(6W90>u@82;MSJU;y0-v z7^L5i7-|)Q!3bygm0#{e`eu_W<GoVinAsJweB)x`)eA?usIWBR$WG<^GWVZEF_$|6 zJ&U12bH!t8>MblC`LjUVoD47hsY6QdWr4`C-A^x-X2SBxU14UIei6HMa+1>%-HCrg zuS@q!w?jnQs6FF+8(eE1EZ3xN2k|I!v0D@^prZeJ<gVyP)MK4qRO7jM_ynit*2*B% z>+);ZjCR3y>29VIsJoq#>>=r4?^6Cc7uT!5I4=jAL|eyC0Z61t?M*}8@5G(M+rEQv zt(IahhieBI6@^{DfxM6}3_Eqq>=W?A<1dq_Za)}#s9NTr4#>KkK~trJ_s{XDmuXhW zm5pbcBQRg(sJs87D)!&;*2%QKiy8uh@PgY7uQ3<ZcWQ|n=e{6YJ#9*ylU-A^s-|$> zc`ER{;}*U@hQr;Gn7C3vbhP0`Jo-u8_Bil03-rSYt3ThxP)C&eEHPq*eDo|oMw6QA zZdg4tsq_DN{0d2ix7TU_{`{mW3Uk9=JSu^G-|G8dhozx1PqZCa(?RD>By#i><s8gN z?GQWbu1Crk0Mqe@ipSdrVecUt$N$I&pdy`yB{88BbPYNf7ZD!qE&Me7>El5dn_~?P zMNX@CJG*MOT@N@oFW*1U(GQQzD)n<Q_wXZLwetktdu_`Dal57mfblg0!**mZ$oky3 zmc@PdaaI=vj<hbg7+CR;#T0eQAO+%w#ULzB9_a1#MIY(z;{Q~M7H~Ciu>Q$_9AIOK zt~X~pAY^mU{C!wE4D53hbs56>nA7K(HQuKjmuJW1dD=iW&pn@GpbVUgwQgu}V87$& z-(+{T3K$U+=+04Xglh$BHverj!osaGIv+0VvvM;n;)*DS2VEIgv%Om2olB@_9V_ba zQra$-$TxQR5y|L{I&H}*E?qu$e5aq=&yn}46$}sl@m|cRBO>~*xtmEg5!bfTCbqv- z5jR#dUcalVCQR@-7w()2d?O2-FP`TRes@(rgvpl?<44zA544sLDu;gz1Wc0%YPtLT zKQX_?s8|>DajS|Lw!QyN_GLYh{i3_}!i_kB>@Z1MAS;ewJExg&t00BYT~^^;sHh@# zeJtH6*xN)jc5zz1c5Nc)&)jkAmX9LN82+^PHz_4l%#74DL<6AV0nLV#U?VW9@T-Zi zdBAiwm15ccd=MMHBGa)|2eI(uk1}$WpLwMV{&VgE3uV^bF-=9lM{?z6eS>@clirf{ zD%gv>Q`=vR=SAX}edr>8BcyDRobqFu;am%k=G)>9Aa7Zen_X`QgW}6+I_j-p>B9CQ z;YKTD#r`d>d(sN#CT!}1+&KRToG{gX*a7l30;-XTb>MGldFQu$7d(E_c1j$5-d+h; zSxuB%z_+D%=kwPppw;gkF#lHrz04U*<#F|xcl|OFG~5h#)_BDC;JoY+t=*mJ(+YwN zCM$VIQ2$+9zqXOv3I~JtEgB*h%J#?h{%s(E;=-v0+#bL%pRUTG=RI(vm*mj>tP|*; z$!iZ$Ajkdgy}-Tr{T?T9zL3m9->@Z_ZaTh~nK~XCT|<4vg;u2CF5L*Y9H*^3V>bvP zH(&4Cdu13F&1c8PaW0)q?VK`F>;VC8ef2l&$kW<;W?#~uept%h<YB!(hCNfU4|nD< zZ!a8l=A{ev_D=cKJ0qvVRGgP>i4Xa}<uM)?u>X5&>i!K?%-M82D=0eqq65xlyYap` z&=2p2-X~l^UGG8jR>Y;Ke$WUpenN9#5YEssl)Pr{!}qUs(sXA(jIs8N+55LZ&3iKG z9^|YkEO5S3!JL59$Kvq*pgyR4>a^n+-V2uX4at&6+Tajx8pl_YYRK_Fk>FAm4b+Cd zR7vHZi6zw}G0NxpkZV$)d9$N{80RFBJQU+VMAX49dd!w!Fk;M8uXzJ)2evAYer|-f zqFkiFx+-|r@j9DiLcqOTaU;QX^rbzOX%fLXUynoVfwXEX=)IIa-1M{zEaFMUn|9?; z#3M*ahd#TNEn#10<WSC@)jzG~Q2{!8UP~O7DTDM>Xi(En2TloJ0~wtdXsxI(Aiekq z*1|lOUZS6^NoCNg7k!(dvcuhR2RlF{-RAabx;#+&;paGRSqntvQaS6T8aVdudxC8< z`mdd$=_ru9$alar<1qeSUs;{;ls$<4MmvVZxwtaW(>BW4^`Q#PHf5e3@aX~rL8_VV zcSW#QhNkOKZ5H%8NZ07zs(|k;jGHq!M<qv`HP*)-9S#wBt*?)=K*cZdmTPPoG|l-X z4p`U0x5&F9Oisu%<$OnC&Z&jF|8DP`aLR=?yHXKa8_cV}Rnr(jo$Y(RGM^|-GbGKm zF{KOEL4LnlJ>?TTcP<a6nxIcl$-kI<8GUaeM30z>KsB^p9jhpP*9t!<t_nK@Hp0;( z;>)IM*t>aI(~5to7QS)MZM{HF+yv*Hwf5VM5H0oL`7d95H^jZxtcYxdUjLkm9r0!` z)D)k*)7}7;@d;1pBM7Lw`&fKO9R2u)Q)xdxw7|2%xn$$I2ACsbXSSlm{<%ZP3sxOV zVJ@9w_>J8n=niC@KA5}!QQBHvLNg0+(BQPqFWgf`(X5)AeprT4w_p16iGP6G-+RQN zZyja?-qpkiZGbCd>D!ovHE0o6`ZiR$1jo9$Pwjl)fcU2iT!!B_A<JE@!<uUiZoV=< z|7>v`;>I!$$GI$nkMI|8$en=w@?Mi~F&F+-q=Vtl8urEHA8yh^e#PoH+82s9R$x+A z+~7eZ=Ac?)LSh0IK>G}X;V~1;Wv`~q_2ZscYwxK3FYRggxnsS3reG1mZ!-SskXVAP ztJJ@bVUFsrBfHGj+#H-GOJVLhvI2QeV%#K+mf@b&EERjk63o^*R<Tnqf}g((#oXm3 z2r_=t_2(k?JO4W}+<@oieqol>;E@^#xM8ejg!^=Y{77w<NEaM1{}Dz0ss--X#kwvS zwLtO2i;3(5m~*~!>(z>IH*9b1Ox9Uq?}a@1<|ytvEe;f^ygSndb!-PN?DEFmjw27- zn&>;h-OM5_6nWQo<`T?}1CSrOA>1K-qz^*ZeWF}(Pkue&LrfP<KV-`Cu)g5$MZZO; zniKNrj(%lQPN8Xsyx1_yqt3`Jyq&mhP}~F6WvaZ5=ZBD+-S_J#<}*q(KGAYxkN63X zbK|+VNBhsj>#}za&MWf-@g=Vhoa=2h>nsLf!s?Qos$d_en>;^!p$z?V?03hF@1w6O z;rrkR$!-W*?TpZy=z#_k#ntHh?O-0x9WL#F@7{j$B$F!aKjdWJdOT1Hzn(=^hE+F$ z_fF>A#D`y?-rHZp?wJQP32X5;!cw48B;WI5fHx6yxV$LPBMmO-)m}APs)pL?$Gq3j zKNPspH(XwL17cNw{uYn_K)Bb6-gF)!;BVP?Z_m62*mKnSdRbW`aJ85J(>~n|mu0_G zzxOJEi3Cd?o&WlvTjRKKK~)Fji%Ska&1i<illt>vf7;+92b|M!sR0Lh*(AT>0SK^3 zqkJ)&j(uw8Uy3~N@BFzwOSn!YT-?uDCPS45W13T0p+iMr$~jGDL~4L-wOs-Cv9Itz z)AR{pdgPabgp+qrJwybs*)(*c4iNiALIZPYU2Uzmj1mSwz~b&6X`JVB9*gf?FF;P{ zPu*sp`ff<G;7|$0T+iJ#Z}JD|2ljCPXJ->S2nO=-W#e=kv<t1#MBAf34U21vM!P|> zU4#2&Nhdr`v0JhnLO;mKpk;ftMqqi}l4}1Rb>P@dV_nprS<4u9tTDHA!J)nFKlVP5 zp%^7!8t#MF<>ky5`UW8)_1DXb$npM`n4_qZ+6(^U#yYm>myZqAv}asy2SZlB=gtD? zb8jkl*7L+3?Lzvo0zTBI)J{)ia*u+}r{>)WOyj`WdPpX4U=XH*1+R3L%s@}s(3L}& z7nqRh@O^u46dv4pO8+Ke9Oklk=9g&EXO^=m|A3hUM@b2U>t`>_or_mYbXO2xlO_{# z{tF?rHvKZG>XHeudwP5%szky%|IM$9=ZfL^uj=A5h2QAMxoZF5K_NJwzQwA8zWAoL z58>M%NZ|5HpSK+S$UKr2;jIjf@IEY;odK%gZckXU(2FYAx9U)Q#i$(kj<tMidKn6P z*LT#!<Vrw5Hkr*J8M&2K`3gzh**G71^j?-K0i9jM`kwYWxH@1Od%3n6wo5dUiZ!wK z&|ZdvF{K2yJZsX-KNo_R%eSk$f~^Ub>n_dY8xe$9?xBsV=YwGFQtp;SQ!MeBVsJq- zsRXhQY~DA;o`q8ePV%!7!Gy+d<#fH@`5@5vL*3#?I=CI*yCd|w6^`r~DdxkT7yf%j zPo;Fx_s6X{^kJ|R6u9n>Ma!2ETEcYI&R=>V^K<GW>FrjSj}{+L!d_2~%zTSl{5=jY zI-<s0RRdjYWrfwbZIEZ3KJm32dnp!VXa8-tfmg{|{zHpqFssOF+C7b&=gW4R6_~Se zrL_NZGp!%8{)i}e%=Uvz(do5Lmp0rFeZFvZ9{;|BrbRwn`3>JB%t8ep<34c7*ysLT z)NOW@H9otR!?;4f?@N5Q9seY4R*U(BGRNvQziX9{r|v0Nd7&7jSe@zZju7yrk^j+B zZaS<UwknOpd~Zhb1*v+W9{64N;n^ZPzJr5KYtJ;3VB>Y3SNQ8<P<^Tr&~gL&*BDOP z2WgH0@0ju3HHvZY=%81!X2iVnlw0d<%;PZ!xUaAhWk7j&Hj+v_4SuliD_-o&h0>$l z)Oq)cKs2j}I%=a3uJ=FoRAwE(-eH&j!eZ;d`vi+;fS>_U{U|xG_F*=tku3b}66+y5 zHKNiwv=0tF6kE_)9|r2^!GquNy)^Y8{Pt2Xo{!e&Y-Q0G@kR6-^OWHz#GVmbC(a=U zw~&${^2Pu}FGwGWXlw<tSG!M{v2??$e?HP2?#-Y)7q(@$fWCj%%HM)MBp4F@MeC{C z2^BU=9S6kGKh)~@U}dli>a54<Y(Eb{ZtR&SUHE&j(HK-Dv)v8H!|n?n@T-7^<b@9f zwmHNjT7_on2UW!Rtbst${q2MrUtt1wpFdFbQ%z}+28a*?K85T<<&fJwDCFK43o$d7 zgp+CC5I=ndx_xe!17kVm*!a&_qDb3Cz?#7V@+w6GoF-oqk4AzvnN^G6!uiijmQ>Zm zeQ@NlA`2y=zYcyne6Sg`4Ti4BiC_=QnMBvr-d5OGQ&IgVunm}=G0YL{BXB!`#--$5 z8MweepUycF+zd4}jKF>3gu=a0wR08V__`plF}eb7>Is<ge8oBap5K-$-ly(=qz$>) zJ3zBw{4H+-a`H>v6AMtsyf2i>)wxp&Hfy(edj-&^=j8ZVmlkt|KQ}A*pOg~sc5e+_ zB5MNsfr}44KUIUQa(tclx9<?GN-gksG>Tv<lx>m690EtTsI#Y5CR}nodAw0@5P~g( zBJGf0sd~nb>B(>nn3zcx-QFyRbz?p=vcV3}|IfR1=1(OY9b}7&{e$<t)*CZ*%Px4b zLMNPtKFbsIy)SDP#vtWxwV)+aD=aRSS|m7NuW$MfL7`vmApe`{GXDkaxwccIzl3wS zw*1&s0CzX&zcP$z!*{2jRNp60>|;10>dBB9I|!3pqMg<@I3J+PkLr6GBpMiP-)KyR zy>j*nYPX7DjV?L1>3uc)`YPc*BAo;rltx6T?I4uOf1-T#F9m|$&E7hHx&)FU58Q3X z98`t;+vobSnGhb~B}0vz8Wr2mE1!ZU@cUOewqUPiAK%r0A1b5pS&2krmNy8M6ubF; zWDNns*VS9?2BUB>owWC}DRQW{BqJR#r@EY{6Ce9(4EnAI4$$Ndz<t^8pNullkNoeI zzF_b$96L4tR-_EM!v5@>IxCZKDdW6?3;LBeLOaP^KJ`I=&+(=+HN6lYLyf@e2{;*3 zsLCEV0P>-8z0_L+@HkSrVvy8}`LkBli|^1s7}nrlgZmEa%7$P-okxY0;z@PJ2vB}@ z6gyKh4tEvf?4D!4i=*qs&^hEtF!K9JwB__e;jH$4{>ec&TBPW44Eg#36P7c7(Qn(s zC%CMEKmUWa8ka)!(-&+%*i34PAp#ips$KRkCAj_t-TXKaN*IZU`!ra;fm1US*FJsx z3g@yUytk<fFt@E0W5`nmM{fnENnoi4>u9;)`yF%G6%w5=(~}Gr9n6b44`+d@g#Po) z<Fzo+a(9tDvk3~B#JsBa;632*?R}O+H?YeNgnAm)!e>t58@rKXY^Oa_sZB<L8V-Yp zY&G>jm%LB69domj3DvH*1u~&fE7ok3|2Z7}ncLH4REj?N*Re|vbK&NrdpQnrg%DtC z_K=pN4L;vy<bRL7x*vCKJTq^qhWJRQvwTG)5I_9Iy+i|ZLedORzw(!X9U-S~tWXZa z4a(g{qu3K<`6uOkW;+O4D+b<LXn}~u?*E1kA%}|oiTE{~3to8G1{+}hmMg1jj~)6M z^}DK1@!`I`fAwKk&g(viwo#M1&5nG2?$Q&QQ;lG@60uZIGyrXDwl{eJ@}%{cx<j!? zKDO=kF0a-SxUb<v)@q2l^?z1O8<;1O9TB};!GL>L?_XYjuaCp6Z%tJD(kI|<Y=xCz z*9aKaN=6GIfA)@gYg_JtHmEdlyZI3H0GHM-%`E;tIGQK)wgP)bywf@7{0(rQdEa}` zYTpo;9uml9!xEzCcLurJlO^zO#hGa}vI^GXJ)PUJ$K$u0<Lj82GWgu^adYu`6X=|= zOA$sr;m*^Ktl>eeaQfo|vlX#ENQyWg6NLK~1*iRm(T&K@%8`%Yp_qeri#fESn6Cjr z76)(Czw7e0)kk6{L9}-Ft#Ptd_~1%h{#&pNst*IdGo78spZ9@TobnRpfIKyRsx8AM znWvwW$Ckij_Mhot<lS*rOoSh3S%GV`dL}d2_dr*YC>0a41ULF<kDfta(c;%u`*v^S z6y54PcrS7s&is#}^Ny$bZ^JmUM<iq`6b+(~h?~f&jFc#a%1W6@S)oLz$oeTe5i+tz z9DDD*_g>kf$a6n`>eVZ!bI$iOuKT*)*Tu!yyty%m6(2D&-|B|<zp0fijj<2&*^o>< zp40wgcWTL+9)S-UM@gjg`yoQmLxSks6ioi439-W7B6A&CJ7bFlNSi18WI_I_k!WRW zIr#<z-KUFiK@MMMvL#1{^*oShgt6Z`_8UU?Hxg5)7l4|<u|eqg6eJ4=&?f$yhaQRk zFD`FJ;C6g$%c<lpP>tCUrxECeSD!6RemowAamT1|-K<HdUOAR|<a|5G2&%6PIbhzg zP=m?f*=ryt+={3?ISA1d6U}eNaIV#HdjHNG`b?G>%x3nx;ENZh3{5ZU*@fRvDBya! z^N~f9>j>)Q`yYda^^wP{a)MM(tP^`U@8s+`wgJEB{L^lWL132D{g@z#Jw&OIPl}TJ zAw&7FRq!$N^BawQVmnX=>6)@fwy^gl{1X?a7jpB=&+(b0nPJ|K*w<CA4EqxgsN9)B z{#!{}g4)OFGKin~P9=(SsxA8u56bLnAWm>?GD*4sgpcWbQ^r2D8m>vFjoz1VazG$e z?PxEkEgl^?+uR4C<hltoYi;mg@<gyNIrgaq%iCWQtpV*%j@)5utq`CtEz5JD2bevZ zW>1z4flzV&p^m(62$hy(bFajH6Z6qS!gu?CslTyYF<=Dtoj;|lH}(VFs<yURIOg9O z4T@LVMqwK!@_3NvG@nH-c44y{1TVH!_+p-E_4;<e4@2bepUpXbceV^xpJ@)!U>=sW zkuIM5TL)~P_dD=<7w3_`ng$~HF<1Y^OqD?23|-b{iwu?>uqP<9YD|y&6rr{8oek<t zbMbqg8~tFfY*N&Y>v~Fzv)<;;D7d_IvX`9fg-_mb;v?~65LHJ^_MyEW{Sn9G?|d7F zFU1%AY4k?HvH8~79hptc7BqX3TtR+GBm0^L>h4pUtK0wQDP&Sf2RW0i1L=s8%70y( zz<K0|WW5yX1<YnP^VkC>Wo!O(%5@n&Xg*Gk^k0D_A~l0m2b}K+<#|RcBfs11$w9+` z73}-{Z}N-EGL%GBksi}ohguHaipJAxaLK-hgZAwjT+ZNnTv@#a9W(M0VwLM~+1!?+ zG;{^HDqnC({9FYWQ<)oob~hmT>dX^6vkh>4^FH!7a!anHP%uawU51;1#V0~h2XhIu z_2IyE-1_6ED;F*yXQDrwSL`nK@U=NOeL(%{%%6ErcG^)Gzj2VHb^!M!t22+}`*59O z>X58h9S6pZ(AZa@b8wvahBd|9FdVvXB&G8hzb}?8BCoURk^888eJi04Xm$Day6`^V zSL$=qM`RkJh*)UmhjIT5>8|U*{+#e*VFND89nh4$&Mt(y{6=zwOXq(BK%u%NT<V27 zl$-Xh3U4F4HIbvH?;nI%3%+W)Q!{Y5<@=T^>X$^8ITU4nV?fy0AX#lge=adWROAZI z8&(ol-`FFMkSKwW$Ug!<U-mq=s=@qh)g4~b3z#45T9BPZ-wWMS=^8N-<daF4l=Yo% zg(O=|OTC6NXzp?1n9anw@P5)|F?=2)n9T!J$3~!g;IHo(&d00N*{k(GHh{JBGD|$_ zU0QR-FZwb&fa4we#M(|L_Iy{ps=8MTgGA<rF4z-w>5@oBVC5+C%IbVXZjHd=1a*|z zR0{+yiT^#+GzQ)u6r5`n$6!`BGWv7&01T79tSQ4@!I$TAeu~j|L3>2C*g4d5TGky1 z7jp+-JKjK}2haCUO7)`&J&mw3Y{NjNFbk2XI~0ENeURhp;Sk3$3b&OD6c0!Dz_E4q zia_oTFm<8&tblWe*qjH-ZunfDr7ylBliLfT&Z4jM;(8%g>T);Z${2FtFL>S|>VVAT zES*@fGPtAUr6_SvkHDHya8dfu2uO83x}TI%58L03jfp2vpD7*R8+_FVS3-R?jT1(p zc7e(HpJN{^*e{+i(y4`m_aYyh!t-(>|FX+DX(qW)|1#TS1}t)OHg2E%jalRpB4hP= zs~P0Jnu%6g$uP-XIYRpDxYt2Bbvuz$HZN)9{-|#-{jjE&8`Tuoo8)DX^ZsM(mw1Ok z?r?}{d~_Cr+>EJt>BqoBa^@QrsrJfraw%0m{TzJ`$zA`f$g`7pNRF>CH6(<LLXLQK zaC-j~m7K8s^kAGInOt4;U041a6mqg@86>ne2jpJxdb`=nQOY$HJe8K=rjkqlHf6zZ zpIXk_M7CSMn@a9<;j8gyW7KlB55t0Fp3%!`sFiqq4yTn{CbMSc;ir>}>-{!W7ECQC z)UI2`|A0#Fufz82tq?l79Dm_9ZeeP<rLP}LRgEd--afJjcYZ`G*VBIY*w^?2a_#Ti z6Ffb(!6iTMjZPf$ds))jD`K~Sj-<s?`uIOE`QbKa{bdbe9r@>VG4GOIS9d?2bq0RE zQ$C~QjyYKxmHXD%`@+XDpOTh^{VOF)`YGs7dbt!+O_?+cCdHKbMD$B=%=%+QcEu9( zT8Nxa-I{~9RD-NK$RWxU=4h_DG7ApePv+LwCNMX#8We^5l*<&OJ8kwN*eNTKtm3_v zm8jy~AJ=I(@l2i2-@gPmE-{F?a?L@5j>@6j)mgYu>nWl87W+F9{Wr)y4wq9^JJ!$_ zA|rcrYzKW-p2GB8GU!t}lw6p{#y9{s;;);Bs81rdxaE$3{4z}WalcM1#B=yzgTr0O z6IJ5o<_Dt<xcznSV~`SZ+TOpK>*imFL_*T{SjRPpsOHv^LH^*(vzK=_M&_aLpG->g zKU{xbpFBU}vj+L9+_e8hx1l~R<VsT27Tk3GF{aKj3u?#H9n&9f0GD_`Ku5+ZtXADz zoikho-TC`1_s!QJBr7oYz1Iq;`S7qGO4-1kKg@46uVH`kh~i;?<mL*lPby;H>ddbh z2^o`l7&%z0cHq%6I3_DQS)othY@c}VVNKMbRqtfFmmvTDz$v2`x*a(4s98wi@FplL zSh%b{Uj-A6XUF}Iu0R?sCkNX#<jgTga0`ebC))kdP$=?JBaL~oozG*g=Dp^~2y*R( zy|~gZ(XYZGw|6WJl53#%g|F?#Db$M(KK@DlZWU&9G>R(se*^CqDgXVN1-N^`B8KDQ zGNhk8FlB^3v8;m|<mb;XLzBQ}g0%*|pL;>R6Rg-9f??|mpVomr>_BclVG$ZWT+OMu zguK=e$yaCAm%&(tNJ)?s_1J0t9|bF`!18D^>6^$3R0@SDJ^Zo&%S^QV+6fEbU9KsS zTeF1vriH$V!y^1)?))i_94o%hYJ}v-c{p36((&ZL9E9D-^PllS-WD6Dw$HsaP~+@; z7U8%8EW#OgY>~HCce{iu<2G{QrG|yC;JNR)yUA-}Y2+T~8pw;q{f3?BZPhitIbe}? z^|;wE4?8S-M&r4wQ2dm5`0nXisC}K5&a{O5^?vGp#aHz}X|R`Cg`73l@s+6IiUBZY zxIQBg-3i3uS0`95c7qn3e&jh;^c^_-w9Voh0m;spPAt2^ULu#%Y3L&_k&{oI|Jw$? z{W*Qk(I7uk&Ah)?GaE#rwnS(!C(^s`r`t+74c6Pdt#693=c6<J-bKza;FP#79Y>5k zPpnmfQ!hrq=?kgnN0%9}FY3Ezo!p6>crn)H?S5c=|H*M-d=T?8d;dylhTyxNtVrPn z%vVR0v{a9NB{&|^VqX)>1IDdwzI>u&!mLPgf%<LClN`t+&BOclghgA`f0Xf%yG!lB zmJ<U7O|Rpno7>?W>7pR`<9SiM#qU98F5&#~hrW~#GYE|SX~I47)r7*9-I}wX$}udm zZ@{urN|>`}TJh2Gf?N^Fiwsw?pn+-g(v7utoF_SM+FmaQuYVfRcSvhN=x(pgtQYbq z>$PbG`3m7J^@IRl(0lm4kvFR;7)!Vm?53tW>Q9g^_r4x%&=2j4uEhQ5FS}5rBL6HV zAF}hmO8Eul!zEDXu{>H0hfaNz>#pjBfYj)nwviITNfO^}qAS$|HL<{j^^H<O2F0I# z9;rgYgwgTnCKBB5Mdi(uLovsFP+vwhxD(FUUwQWx_v?R!ntV=o+95o?`=N6I@_%Qg zsq3V&z$J){>Zn`*_$l7vxt95sU}~tz%0ANyDqruZPiEsf@#ys*Lp$W?aGjhMc3g$V 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	*UV%LaM)=+=tiZ!pPtN)h7Qj&NDqAYk3Y@C! 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%0D>YeMRx^y*&~^;W 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 diff --git a/bob/learn/misc/data/ztnorm_eval_tnorm.hdf5 b/bob/learn/misc/data/ztnorm_eval_tnorm.hdf5 deleted file mode 100644 index d98b4d656bbe0a8c75a675ccc09834b30bc4bd00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438944 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	EB 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%0A?oM)d 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 diff --git a/bob/learn/misc/data/ztnorm_result.hdf5 b/bob/learn/misc/data/ztnorm_result.hdf5 deleted file mode 100644 index 877c72c77fedb11fe7d39791823f42e58cce1e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569984 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ⅇ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 NfVZQU+aT)u{10PNVO9VD diff --git a/bob/learn/misc/data/ztnorm_znorm_eval.hdf5 b/bob/learn/misc/data/ztnorm_znorm_eval.hdf5 deleted file mode 100644 index 5d670ae0b3bd410c40e70b4697f0531fdc7bfb87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22944 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 diff --git a/bob/learn/misc/data/ztnorm_znorm_tnorm.hdf5 b/bob/learn/misc/data/ztnorm_znorm_tnorm.hdf5 deleted file mode 100644 index e2f709ed9a33a014f64e6c69f15c3e549dc7e3ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18144 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 diff --git a/bob/learn/misc/empca_trainer.cpp b/bob/learn/misc/empca_trainer.cpp deleted file mode 100644 index 1b7a696..0000000 --- a/bob/learn/misc/empca_trainer.cpp +++ /dev/null @@ -1,378 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Tue 03 Fev 11:22:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto EMPCATrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX "._EMPCATrainer", - "" - -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a EMPCATrainer", - "", - true - ) - .add_prototype("convergence_threshold","") - .add_prototype("other","") - .add_prototype("","") - - .add_parameter("other", ":py:class:`bob.learn.misc.EMPCATrainer`", "A EMPCATrainer object to be copied.") - .add_parameter("convergence_threshold", "double", "") - -); - - -static int PyBobLearnMiscEMPCATrainer_init_copy(PyBobLearnMiscEMPCATrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = EMPCATrainer_doc.kwlist(1); - PyBobLearnMiscEMPCATrainerObject* tt; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscEMPCATrainer_Type, &tt)){ - EMPCATrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::EMPCATrainer(*tt->cxx)); - return 0; -} - -static int PyBobLearnMiscEMPCATrainer_init_number(PyBobLearnMiscEMPCATrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = EMPCATrainer_doc.kwlist(0); - double convergence_threshold = 0.0001; - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "d", kwlist, &convergence_threshold)) - return -1; - - if(convergence_threshold < 0){ - PyErr_Format(PyExc_TypeError, "convergence_threshold argument must be greater than to zero"); - return -1; - } - - self->cxx.reset(new bob::learn::misc::EMPCATrainer(convergence_threshold)); - return 0; -} - -static int PyBobLearnMiscEMPCATrainer_init(PyBobLearnMiscEMPCATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch (nargs) { - - case 0:{ //default initializer () - self->cxx.reset(new bob::learn::misc::EMPCATrainer()); - return 0; - } - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is EMPCATrainer object - if (PyBobLearnMiscEMPCATrainer_Check(arg)) - return PyBobLearnMiscEMPCATrainer_init_copy(self, args, kwargs); - else if(PyString_Check(arg)) - return PyBobLearnMiscEMPCATrainer_init_number(self, args, kwargs); - } - default:{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 0 or 1 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - EMPCATrainer_doc.print_usage(); - return -1; - } - } - BOB_CATCH_MEMBER("cannot create EMPCATrainer", 0) - return 0; -} - - -static void PyBobLearnMiscEMPCATrainer_delete(PyBobLearnMiscEMPCATrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscEMPCATrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscEMPCATrainer_Type)); -} - - -static PyObject* PyBobLearnMiscEMPCATrainer_RichCompare(PyBobLearnMiscEMPCATrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscEMPCATrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscEMPCATrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare EMPCATrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - - -/***** rng *****/ -static auto rng = bob::extension::VariableDoc( - "rng", - "str", - "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.", - "" -); -PyObject* PyBobLearnMiscEMPCATrainer_getRng(PyBobLearnMiscEMPCATrainerObject* self, void*) { - BOB_TRY - //Allocating the correspondent python object - - PyBoostMt19937Object* retval = - (PyBoostMt19937Object*)PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type, 0); - - retval->rng = self->cxx->getRng().get(); - return Py_BuildValue("O", retval); - BOB_CATCH_MEMBER("Rng method could not be read", 0) -} -int PyBobLearnMiscEMPCATrainer_setRng(PyBobLearnMiscEMPCATrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyBoostMt19937_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an PyBoostMt19937_Check", Py_TYPE(self)->tp_name, rng.name()); - return -1; - } - - PyBoostMt19937Object* boostObject = 0; - PyBoostMt19937_Converter(value, &boostObject); - self->cxx->setRng((boost::shared_ptr<boost::mt19937>)boostObject->rng); - - return 0; - BOB_CATCH_MEMBER("Rng could not be set", 0) -} - - - -static PyGetSetDef PyBobLearnMiscEMPCATrainer_getseters[] = { - { - rng.name(), - (getter)PyBobLearnMiscEMPCATrainer_getRng, - (setter)PyBobLearnMiscEMPCATrainer_setRng, - rng.doc(), - 0 - }, - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "", - "", - true -) -.add_prototype("linear_machine,data") -.add_parameter("linear_machine", ":py:class:`bob.learn.linear.Machine`", "LinearMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscEMPCATrainer_initialize(PyBobLearnMiscEMPCATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnLinearMachineObject* linear_machine = 0; - PyBlitzArrayObject* data = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnLinearMachine_Type, &linear_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->initialize(*linear_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** eStep ***/ -static auto eStep = bob::extension::FunctionDoc( - "eStep", - "", - "", - true -) -.add_prototype("linear_machine,data") -.add_parameter("linear_machine", ":py:class:`bob.learn.linear.Machine`", "LinearMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscEMPCATrainer_eStep(PyBobLearnMiscEMPCATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = eStep.kwlist(0); - - PyBobLearnLinearMachineObject* linear_machine; - PyBlitzArrayObject* data = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnLinearMachine_Type, &linear_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->eStep(*linear_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - - BOB_CATCH_MEMBER("cannot perform the eStep method", 0) - - Py_RETURN_NONE; -} - - -/*** mStep ***/ -static auto mStep = bob::extension::FunctionDoc( - "mStep", - "", - 0, - true -) -.add_prototype("linear_machine,data") -.add_parameter("linear_machine", ":py:class:`bob.learn.misc.LinearMachine`", "LinearMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscEMPCATrainer_mStep(PyBobLearnMiscEMPCATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = mStep.kwlist(0); - - PyBobLearnLinearMachineObject* linear_machine; - PyBlitzArrayObject* data = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnLinearMachine_Type, &linear_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->mStep(*linear_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - - BOB_CATCH_MEMBER("cannot perform the mStep method", 0) - - Py_RETURN_NONE; -} - - -/*** computeLikelihood ***/ -static auto compute_likelihood = bob::extension::FunctionDoc( - "compute_likelihood", - "", - 0, - true -) -.add_prototype("linear_machine,data") -.add_parameter("linear_machine", ":py:class:`bob.learn.misc.LinearMachine`", "LinearMachine Object"); -static PyObject* PyBobLearnMiscEMPCATrainer_compute_likelihood(PyBobLearnMiscEMPCATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = compute_likelihood.kwlist(0); - - PyBobLearnLinearMachineObject* linear_machine; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnLinearMachine_Type, &linear_machine)) Py_RETURN_NONE; - - double value = self->cxx->computeLikelihood(*linear_machine->cxx); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot perform the computeLikelihood method", 0) -} - - - -static PyMethodDef PyBobLearnMiscEMPCATrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscEMPCATrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - eStep.name(), - (PyCFunction)PyBobLearnMiscEMPCATrainer_eStep, - METH_VARARGS|METH_KEYWORDS, - eStep.doc() - }, - { - mStep.name(), - (PyCFunction)PyBobLearnMiscEMPCATrainer_mStep, - METH_VARARGS|METH_KEYWORDS, - mStep.doc() - }, - { - compute_likelihood.name(), - (PyCFunction)PyBobLearnMiscEMPCATrainer_compute_likelihood, - METH_VARARGS|METH_KEYWORDS, - compute_likelihood.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscEMPCATrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscEMPCATrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscEMPCATrainer_Type.tp_name = EMPCATrainer_doc.name(); - PyBobLearnMiscEMPCATrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscEMPCATrainerObject); - PyBobLearnMiscEMPCATrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance - PyBobLearnMiscEMPCATrainer_Type.tp_doc = EMPCATrainer_doc.doc(); - - // set the functions - PyBobLearnMiscEMPCATrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscEMPCATrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscEMPCATrainer_init); - PyBobLearnMiscEMPCATrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscEMPCATrainer_delete); - PyBobLearnMiscEMPCATrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscEMPCATrainer_RichCompare); - PyBobLearnMiscEMPCATrainer_Type.tp_methods = PyBobLearnMiscEMPCATrainer_methods; - PyBobLearnMiscEMPCATrainer_Type.tp_getset = PyBobLearnMiscEMPCATrainer_getseters; - PyBobLearnMiscEMPCATrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscEMPCATrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscEMPCATrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscEMPCATrainer_Type); - return PyModule_AddObject(module, "_EMPCATrainer", (PyObject*)&PyBobLearnMiscEMPCATrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/gaussian.cpp b/bob/learn/misc/gaussian.cpp deleted file mode 100644 index 5ab2a7d..0000000 --- a/bob/learn/misc/gaussian.cpp +++ /dev/null @@ -1,571 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Fri 21 Nov 10:38:48 2013 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto Gaussian_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".Gaussian", - "This class implements a multivariate diagonal Gaussian distribution" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructs a new multivariate gaussian object", - "", - true - ) - .add_prototype("n_inputs","") - .add_prototype("other","") - .add_prototype("hdf5","") - .add_prototype("","") - - .add_parameter("n_inputs", "int", "Dimension of the feature vector") - .add_parameter("other", ":py:class:`bob.learn.misc.GMMStats`", "A GMMStats object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") -); - - - -static int PyBobLearnMiscGaussian_init_number(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = Gaussian_doc.kwlist(0); - int n_inputs=1; - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &n_inputs)) - return -1; - - if(n_inputs < 0){ - PyErr_Format(PyExc_TypeError, "input argument must be greater than or equal to zero"); - Gaussian_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::Gaussian(n_inputs)); - return 0; -} - -static int PyBobLearnMiscGaussian_init_copy(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = Gaussian_doc.kwlist(1); - PyBobLearnMiscGaussianObject* tt; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGaussian_Type, &tt)){ - Gaussian_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::Gaussian(*tt->cxx)); - return 0; -} - -static int PyBobLearnMiscGaussian_init_hdf5(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = Gaussian_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - Gaussian_doc.print_usage(); - return -1; - } - - try { - self->cxx.reset(new bob::learn::misc::Gaussian(*(config->f))); - } - catch (std::exception& ex) { - PyErr_SetString(PyExc_RuntimeError, ex.what()); - return -1; - } - catch (...) { - PyErr_Format(PyExc_RuntimeError, "cannot create new object of type `%s' - unknown exception thrown", Py_TYPE(self)->tp_name); - return -1; - } - - return 0; -} - - -static int PyBobLearnMiscGaussian_init(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get the number of command line arguments - Py_ssize_t nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - if (nargs==0){ - self->cxx.reset(new bob::learn::misc::Gaussian()); - return 0; - } - - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - /**If the constructor input is a number**/ - if (PyNumber_Check(arg)) - return PyBobLearnMiscGaussian_init_number(self, args, kwargs); - /**If the constructor input is Gaussian object**/ - else if (PyBobLearnMiscGaussian_Check(arg)) - return PyBobLearnMiscGaussian_init_copy(self, args, kwargs); - /**If the constructor input is a HDF5**/ - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscGaussian_init_hdf5(self, args, kwargs); - else - PyErr_Format(PyExc_TypeError, "invalid input argument"); - Gaussian_doc.print_usage(); - return -1; - - BOB_CATCH_MEMBER("cannot create Gaussian", -1) - return 0; -} - - - -static void PyBobLearnMiscGaussian_delete(PyBobLearnMiscGaussianObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscGaussian_RichCompare(PyBobLearnMiscGaussianObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscGaussian_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscGaussianObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare Gaussian objects", 0) -} - -int PyBobLearnMiscGaussian_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscGaussian_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** MEAN *****/ -static auto mean = bob::extension::VariableDoc( - "mean", - "array_like <double, 1D>", - "Mean of the Gaussian", - "" -); -PyObject* PyBobLearnMiscGaussian_getMean(PyBobLearnMiscGaussianObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getMean()); - BOB_CATCH_MEMBER("mean could not be read", 0) -} -int PyBobLearnMiscGaussian_setMean(PyBobLearnMiscGaussianObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, mean.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "mean"); - if (!b) return -1; - self->cxx->setMean(*b); - return 0; - BOB_CATCH_MEMBER("mean could not be set", -1) -} - -/***** Variance *****/ -static auto variance = bob::extension::VariableDoc( - "variance", - "array_like <double, 1D>", - "Variance of the Gaussian", - "" -); -PyObject* PyBobLearnMiscGaussian_getVariance(PyBobLearnMiscGaussianObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getVariance()); - BOB_CATCH_MEMBER("variance could not be read", 0) -} -int PyBobLearnMiscGaussian_setVariance(PyBobLearnMiscGaussianObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, variance.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "variance"); - if (!b) return -1; - self->cxx->setVariance(*b); - return 0; - BOB_CATCH_MEMBER("variance could not be set", -1) -} - - -/***** variance_thresholds *****/ -static auto variance_thresholds = bob::extension::VariableDoc( - "variance_thresholds", - "array_like <double, 1D>", - "The variance flooring thresholds, i.e. the minimum allowed value of variance in each dimension. ", - "The variance will be set to this value if an attempt is made to set it to a smaller value." -); -PyObject* PyBobLearnMiscGaussian_getVarianceThresholds(PyBobLearnMiscGaussianObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getVarianceThresholds()); - BOB_CATCH_MEMBER("variance_thresholds could not be read", 0) -} -int PyBobLearnMiscGaussian_setVarianceThresholds(PyBobLearnMiscGaussianObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, variance_thresholds.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "variance_thresholds"); - if (!b) return -1; - self->cxx->setVarianceThresholds(*b); - return 0; - BOB_CATCH_MEMBER("variance_thresholds could not be set", -1) -} - - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int)", - "A tuple that represents the dimensionality of the Gaussian ``(dim,)``.", - "" -); -PyObject* PyBobLearnMiscGaussian_getShape(PyBobLearnMiscGaussianObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i)", self->cxx->getNInputs()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -static PyGetSetDef PyBobLearnMiscGaussian_getseters[] = { - { - mean.name(), - (getter)PyBobLearnMiscGaussian_getMean, - (setter)PyBobLearnMiscGaussian_setMean, - mean.doc(), - 0 - }, - { - variance.name(), - (getter)PyBobLearnMiscGaussian_getVariance, - (setter)PyBobLearnMiscGaussian_setVariance, - variance.doc(), - 0 - }, - { - variance_thresholds.name(), - (getter)PyBobLearnMiscGaussian_getVarianceThresholds, - (setter)PyBobLearnMiscGaussian_setVarianceThresholds, - variance_thresholds.doc(), - 0 - }, - { - shape.name(), - (getter)PyBobLearnMiscGaussian_getShape, - 0, - shape.doc(), - 0 - }, - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Set the input dimensionality, reset the mean to zero and the variance to one." -) -.add_prototype("input") -.add_parameter("input", "int", "Dimensionality of the feature vector"); -static PyObject* PyBobLearnMiscGaussian_resize(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int input = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &input)) Py_RETURN_NONE; - if (input <= 0){ - PyErr_Format(PyExc_TypeError, "input must be greater than zero"); - resize.print_usage(); - Py_RETURN_NONE; - } - self->cxx->setNInputs(input); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - -/*** log_likelihood ***/ -static auto log_likelihood = bob::extension::FunctionDoc( - "log_likelihood", - "Output the log likelihood of the sample, x. The input size is checked.", - ".. note:: The :py:meth:`__call__` function is an alias for this.", - true -) -.add_prototype("input","output") -.add_parameter("input", "array_like <double, 1D>", "Input vector") -.add_return("output","float","The log likelihood"); -static PyObject* PyBobLearnMiscGaussian_loglikelihood(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = log_likelihood.kwlist(0); - - PyBlitzArrayObject* input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input)) Py_RETURN_NONE; - //protects acquired resources through this scope - auto input_ = make_safe(input); - - double value = self->cxx->logLikelihood(*PyBlitzArrayCxx_AsBlitz<double,1>(input)); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot compute the likelihood", 0) -} - - -/*** log_likelihood_ ***/ -static auto log_likelihood_ = bob::extension::FunctionDoc( - "log_likelihood_", - "Output the log likelihood given a sample. The input size is NOT checked." -) -.add_prototype("input","output") -.add_parameter("input", "array_like <double, 1D>", "Input vector") -.add_return("output","double","The log likelihood"); -static PyObject* PyBobLearnMiscGaussian_loglikelihood_(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - char** kwlist = log_likelihood_.kwlist(0); - - PyBlitzArrayObject* input = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input)) Py_RETURN_NONE; - //protects acquired resources through this scope - auto input_ = make_safe(input); - - double value = self->cxx->logLikelihood_(*PyBlitzArrayCxx_AsBlitz<double,1>(input)); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot compute the likelihood", 0) -} - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the Gassian Machine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing") -; -static PyObject* PyBobLearnMiscGaussian_Save(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the Gassian Machine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscGaussian_Load(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this Gaussian with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` and any other values internal to this machine.", - true -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.Gaussian`", "A gaussian to be compared.") -.add_parameter("[r_epsilon]", "float", "Relative precision.") -.add_parameter("[a_epsilon]", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscGaussian_IsSimilarTo(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - PyBobLearnMiscGaussianObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscGaussian_Type, &other, - &r_epsilon, &a_epsilon)) return 0; - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** set_variance_thresholds ***/ -static auto set_variance_thresholds = bob::extension::FunctionDoc( - "set_variance_thresholds", - "Set the variance flooring thresholds equal to the given threshold for all the dimensions." -) -.add_prototype("input") -.add_parameter("input","float","Threshold") -; -static PyObject* PyBobLearnMiscGaussian_SetVarianceThresholds(PyBobLearnMiscGaussianObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = set_variance_thresholds.kwlist(0); - - double input = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "d", kwlist, &input)) return 0; - - self->cxx->setVarianceThresholds(input); - - BOB_CATCH_MEMBER("cannot perform the set_variance_Thresholds method", 0) - - Py_RETURN_NONE; -} - - -static PyMethodDef PyBobLearnMiscGaussian_methods[] = { - { - resize.name(), - (PyCFunction)PyBobLearnMiscGaussian_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - { - log_likelihood.name(), - (PyCFunction)PyBobLearnMiscGaussian_loglikelihood, - METH_VARARGS|METH_KEYWORDS, - log_likelihood.doc() - }, - { - log_likelihood_.name(), - (PyCFunction)PyBobLearnMiscGaussian_loglikelihood_, - METH_VARARGS|METH_KEYWORDS, - log_likelihood_.doc() - }, - { - save.name(), - (PyCFunction)PyBobLearnMiscGaussian_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscGaussian_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscGaussian_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - set_variance_thresholds.name(), - (PyCFunction)PyBobLearnMiscGaussian_SetVarianceThresholds, - METH_VARARGS|METH_KEYWORDS, - set_variance_thresholds.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscGaussian_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscGaussian(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscGaussian_Type.tp_name = Gaussian_doc.name(); - PyBobLearnMiscGaussian_Type.tp_basicsize = sizeof(PyBobLearnMiscGaussianObject); - PyBobLearnMiscGaussian_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscGaussian_Type.tp_doc = Gaussian_doc.doc(); - - // set the functions - PyBobLearnMiscGaussian_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscGaussian_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscGaussian_init); - PyBobLearnMiscGaussian_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscGaussian_delete); - PyBobLearnMiscGaussian_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscGaussian_RichCompare); - PyBobLearnMiscGaussian_Type.tp_methods = PyBobLearnMiscGaussian_methods; - PyBobLearnMiscGaussian_Type.tp_getset = PyBobLearnMiscGaussian_getseters; - PyBobLearnMiscGaussian_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscGaussian_loglikelihood); - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscGaussian_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscGaussian_Type); - return PyModule_AddObject(module, "Gaussian", (PyObject*)&PyBobLearnMiscGaussian_Type) >= 0; -} - diff --git a/bob/learn/misc/gmm_base_trainer.cpp b/bob/learn/misc/gmm_base_trainer.cpp deleted file mode 100644 index 0308f16..0000000 --- a/bob/learn/misc/gmm_base_trainer.cpp +++ /dev/null @@ -1,437 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Web 21 Jan 12:30:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" -#include <boost/make_shared.hpp> - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static inline bool f(PyObject* o){return o != 0 && PyObject_IsTrue(o) > 0;} /* converts PyObject to bool and returns false if object is NULL */ - -static auto GMMBaseTrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".GMMBaseTrainer", - "This class implements the E-step of the expectation-maximisation" - "algorithm for a :py:class:`bob.learn.misc.GMMMachine`" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a GMMBaseTrainer", - "", - true - ) - .add_prototype("update_means, [update_variances], [update_weights], [mean_var_update_responsibilities_threshold]","") - .add_prototype("other","") - .add_prototype("","") - - .add_parameter("update_means", "bool", "Update means on each iteration") - .add_parameter("update_variances", "bool", "Update variances on each iteration") - .add_parameter("update_weights", "bool", "Update weights on each iteration") - .add_parameter("mean_var_update_responsibilities_threshold", "float", "Threshold over the responsibilities of the Gaussians Equations 9.24, 9.25 of Bishop, `Pattern recognition and machine learning`, 2006 require a division by the responsibilities, which might be equal to zero because of numerical issue. This threshold is used to avoid such divisions.") - .add_parameter("other", ":py:class:`bob.learn.misc.GMMBaseTrainer`", "A GMMBaseTrainer object to be copied.") -); - - - -static int PyBobLearnMiscGMMBaseTrainer_init_copy(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMBaseTrainer_doc.kwlist(1); - PyBobLearnMiscGMMBaseTrainerObject* tt; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMBaseTrainer_Type, &tt)){ - GMMBaseTrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::GMMBaseTrainer(*tt->cxx)); - return 0; -} - - -static int PyBobLearnMiscGMMBaseTrainer_init_bool(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMBaseTrainer_doc.kwlist(0); - PyObject* update_means = 0; - PyObject* update_variances = 0; - PyObject* update_weights = 0; - double mean_var_update_responsibilities_threshold = std::numeric_limits<double>::epsilon(); - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!|O!O!d", kwlist, &PyBool_Type, &update_means, &PyBool_Type, - &update_variances, &PyBool_Type, &update_weights, &mean_var_update_responsibilities_threshold)){ - GMMBaseTrainer_doc.print_usage(); - return -1; - } - self->cxx.reset(new bob::learn::misc::GMMBaseTrainer(f(update_means), f(update_variances), f(update_weights), mean_var_update_responsibilities_threshold)); - return 0; -} - - -static int PyBobLearnMiscGMMBaseTrainer_init(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if (nargs==0){ //default initializer () - self->cxx.reset(new bob::learn::misc::GMMBaseTrainer()); - return 0; - } - else{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is GMMBaseTrainer object - if (PyBobLearnMiscGMMBaseTrainer_Check(arg)) - return PyBobLearnMiscGMMBaseTrainer_init_copy(self, args, kwargs); - else - return PyBobLearnMiscGMMBaseTrainer_init_bool(self, args, kwargs); - } - - BOB_CATCH_MEMBER("cannot create GMMBaseTrainer_init_bool", 0) - return 0; -} - - -static void PyBobLearnMiscGMMBaseTrainer_delete(PyBobLearnMiscGMMBaseTrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscGMMBaseTrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscGMMBaseTrainer_Type)); -} - - -static PyObject* PyBobLearnMiscGMMBaseTrainer_RichCompare(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscGMMBaseTrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscGMMBaseTrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare GMMBaseTrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - - -/***** gmm_stats *****/ -static auto gmm_stats = bob::extension::VariableDoc( - "gmm_stats", - ":py:class:`bob.learn.misc.GMMStats`", - "Get/Set GMMStats", - "" -); -PyObject* PyBobLearnMiscGMMBaseTrainer_getGMMStats(PyBobLearnMiscGMMBaseTrainerObject* self, void*){ - BOB_TRY - - bob::learn::misc::GMMStats stats = self->cxx->getGMMStats(); - boost::shared_ptr<bob::learn::misc::GMMStats> stats_shared = boost::make_shared<bob::learn::misc::GMMStats>(stats); - - //Allocating the correspondent python object - PyBobLearnMiscGMMStatsObject* retval = - (PyBobLearnMiscGMMStatsObject*)PyBobLearnMiscGMMStats_Type.tp_alloc(&PyBobLearnMiscGMMStats_Type, 0); - - retval->cxx = stats_shared; - - return Py_BuildValue("O",retval); - BOB_CATCH_MEMBER("GMMStats could not be read", 0) -} -/* -int PyBobLearnMiscGMMBaseTrainer_setGMMStats(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyBobLearnMiscGMMStats_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a :py:class:`bob.learn.misc.GMMStats`", Py_TYPE(self)->tp_name, gmm_stats.name()); - return -1; - } - - PyBobLearnMiscGMMStatsObject* stats = 0; - PyArg_Parse(value, "O!", &PyBobLearnMiscGMMStats_Type,&stats); - - self->cxx->setGMMStats(*stats->cxx); - - return 0; - BOB_CATCH_MEMBER("gmm_stats could not be set", -1) -} -*/ - - -/***** update_means *****/ -static auto update_means = bob::extension::VariableDoc( - "update_means", - "bool", - "Update means on each iteration", - "" -); -PyObject* PyBobLearnMiscGMMBaseTrainer_getUpdateMeans(PyBobLearnMiscGMMBaseTrainerObject* self, void*){ - BOB_TRY - return Py_BuildValue("O",self->cxx->getUpdateMeans()?Py_True:Py_False); - BOB_CATCH_MEMBER("update_means could not be read", 0) -} - -/***** update_variances *****/ -static auto update_variances = bob::extension::VariableDoc( - "update_variances", - "bool", - "Update variances on each iteration", - "" -); -PyObject* PyBobLearnMiscGMMBaseTrainer_getUpdateVariances(PyBobLearnMiscGMMBaseTrainerObject* self, void*){ - BOB_TRY - return Py_BuildValue("O",self->cxx->getUpdateVariances()?Py_True:Py_False); - BOB_CATCH_MEMBER("update_variances could not be read", 0) -} - - -/***** update_weights *****/ -static auto update_weights = bob::extension::VariableDoc( - "update_weights", - "bool", - "Update weights on each iteration", - "" -); -PyObject* PyBobLearnMiscGMMBaseTrainer_getUpdateWeights(PyBobLearnMiscGMMBaseTrainerObject* self, void*){ - BOB_TRY - return Py_BuildValue("O",self->cxx->getUpdateWeights()?Py_True:Py_False); - BOB_CATCH_MEMBER("update_weights could not be read", 0) -} - - - - - -/***** mean_var_update_responsibilities_threshold *****/ -static auto mean_var_update_responsibilities_threshold = bob::extension::VariableDoc( - "mean_var_update_responsibilities_threshold", - "bool", - "Threshold over the responsibilities of the Gaussians" - "Equations 9.24, 9.25 of Bishop, \"Pattern recognition and machine learning\", 2006" - "require a division by the responsibilities, which might be equal to zero" - "because of numerical issue. This threshold is used to avoid such divisions.", - "" -); -PyObject* PyBobLearnMiscGMMBaseTrainer_getMeanVarUpdateResponsibilitiesThreshold(PyBobLearnMiscGMMBaseTrainerObject* self, void*){ - BOB_TRY - return Py_BuildValue("d",self->cxx->getMeanVarUpdateResponsibilitiesThreshold()); - BOB_CATCH_MEMBER("update_weights could not be read", 0) -} - - -static PyGetSetDef PyBobLearnMiscGMMBaseTrainer_getseters[] = { - { - update_means.name(), - (getter)PyBobLearnMiscGMMBaseTrainer_getUpdateMeans, - 0, - update_means.doc(), - 0 - }, - { - update_variances.name(), - (getter)PyBobLearnMiscGMMBaseTrainer_getUpdateVariances, - 0, - update_variances.doc(), - 0 - }, - { - update_weights.name(), - (getter)PyBobLearnMiscGMMBaseTrainer_getUpdateWeights, - 0, - update_weights.doc(), - 0 - }, - { - mean_var_update_responsibilities_threshold.name(), - (getter)PyBobLearnMiscGMMBaseTrainer_getMeanVarUpdateResponsibilitiesThreshold, - 0, - mean_var_update_responsibilities_threshold.doc(), - 0 - }, - { - gmm_stats.name(), - (getter)PyBobLearnMiscGMMBaseTrainer_getGMMStats, - 0, //(setter)PyBobLearnMiscGMMBaseTrainer_setGMMStats, - gmm_stats.doc(), - 0 - }, - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialization before the EM steps", - "Instanciate :py:class:`bob.learn.misc.GMMStats`", - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscGMMBaseTrainer_initialize(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)) Py_RETURN_NONE; - - self->cxx->initialize(*gmm_machine->cxx); - - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - - -/*** eStep ***/ -static auto eStep = bob::extension::FunctionDoc( - "eStep", - "Calculates and saves statistics across the dataset," - "and saves these as m_ss. ", - - "Calculates the average log likelihood of the observations given the GMM," - "and returns this in average_log_likelihood." - "The statistics, m_ss, will be used in the mStep() that follows.", - - true -) -.add_prototype("gmm_machine,data") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscGMMBaseTrainer_eStep(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = eStep.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - PyBlitzArrayObject* data = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->eStep(*gmm_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - BOB_CATCH_MEMBER("cannot perform the eStep method", 0) - - Py_RETURN_NONE; -} - - -/*** computeLikelihood ***/ -static auto compute_likelihood = bob::extension::FunctionDoc( - "compute_likelihood", - "This functions returns the average min (Square Euclidean) distance (average distance to the closest mean)", - 0, - true -) -.add_prototype("gmm_machine") -.add_parameter("gmm_machine", ":py:class:`bob.learn.misc.GMMMachine`", "GMMMachine Object"); -static PyObject* PyBobLearnMiscGMMBaseTrainer_compute_likelihood(PyBobLearnMiscGMMBaseTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = compute_likelihood.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine)) Py_RETURN_NONE; - - double value = self->cxx->computeLikelihood(*gmm_machine->cxx); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot perform the computeLikelihood method", 0) -} - - -static PyMethodDef PyBobLearnMiscGMMBaseTrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscGMMBaseTrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - eStep.name(), - (PyCFunction)PyBobLearnMiscGMMBaseTrainer_eStep, - METH_VARARGS|METH_KEYWORDS, - eStep.doc() - }, - { - compute_likelihood.name(), - (PyCFunction)PyBobLearnMiscGMMBaseTrainer_compute_likelihood, - METH_VARARGS|METH_KEYWORDS, - compute_likelihood.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscGMMBaseTrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscGMMBaseTrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscGMMBaseTrainer_Type.tp_name = GMMBaseTrainer_doc.name(); - PyBobLearnMiscGMMBaseTrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscGMMBaseTrainerObject); - PyBobLearnMiscGMMBaseTrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscGMMBaseTrainer_Type.tp_doc = GMMBaseTrainer_doc.doc(); - - // set the functions - PyBobLearnMiscGMMBaseTrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscGMMBaseTrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscGMMBaseTrainer_init); - PyBobLearnMiscGMMBaseTrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscGMMBaseTrainer_delete); - PyBobLearnMiscGMMBaseTrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscGMMBaseTrainer_RichCompare); - PyBobLearnMiscGMMBaseTrainer_Type.tp_methods = PyBobLearnMiscGMMBaseTrainer_methods; - PyBobLearnMiscGMMBaseTrainer_Type.tp_getset = PyBobLearnMiscGMMBaseTrainer_getseters; - PyBobLearnMiscGMMBaseTrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscGMMBaseTrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscGMMBaseTrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscGMMBaseTrainer_Type); - return PyModule_AddObject(module, "GMMBaseTrainer", (PyObject*)&PyBobLearnMiscGMMBaseTrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/gmm_machine.cpp b/bob/learn/misc/gmm_machine.cpp deleted file mode 100644 index 0b21d68..0000000 --- a/bob/learn/misc/gmm_machine.cpp +++ /dev/null @@ -1,834 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Wed 11 Dec 18:01:00 2014 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto GMMMachine_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".GMMMachine", - "This class implements a multivariate diagonal Gaussian distribution.", - "See Section 2.3.9 of Bishop, \"Pattern recognition and machine learning\", 2006" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a GMMMachine", - "", - true - ) - .add_prototype("n_gaussians,n_inputs","") - .add_prototype("other","") - .add_prototype("hdf5","") - .add_prototype("","") - - .add_parameter("n_gaussians", "int", "Number of gaussians") - .add_parameter("n_inputs", "int", "Dimension of the feature vector") - .add_parameter("other", ":py:class:`bob.learn.misc.GMMMachine`", "A GMMMachine object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscGMMMachine_init_number(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMMachine_doc.kwlist(0); - int n_inputs = 1; - int n_gaussians = 1; - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &n_gaussians, &n_inputs)) - return -1; - - if(n_gaussians < 0){ - PyErr_Format(PyExc_TypeError, "gaussians argument must be greater than or equal to zero"); - return -1; - } - - if(n_inputs < 0){ - PyErr_Format(PyExc_TypeError, "input argument must be greater than or equal to zero"); - return -1; - } - - self->cxx.reset(new bob::learn::misc::GMMMachine(n_gaussians, n_inputs)); - return 0; -} - - -static int PyBobLearnMiscGMMMachine_init_copy(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMMachine_doc.kwlist(1); - PyBobLearnMiscGMMMachineObject* tt; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMMachine_Type, &tt)){ - GMMMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::GMMMachine(*tt->cxx)); - return 0; -} - - -static int PyBobLearnMiscGMMMachine_init_hdf5(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMMachine_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - GMMMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::GMMMachine(*(config->f))); - - return 0; -} - - - -static int PyBobLearnMiscGMMMachine_init(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch (nargs) { - - case 0: //default initializer () - self->cxx.reset(new bob::learn::misc::GMMMachine()); - return 0; - - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscGMMMachine_Check(arg)) - return PyBobLearnMiscGMMMachine_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscGMMMachine_init_hdf5(self, args, kwargs); - } - case 2: - return PyBobLearnMiscGMMMachine_init_number(self, args, kwargs); - default: - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 0, 1 or 2 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - GMMMachine_doc.print_usage(); - return -1; - } - BOB_CATCH_MEMBER("cannot create GMMMachine", 0) - return 0; -} - - - -static void PyBobLearnMiscGMMMachine_delete(PyBobLearnMiscGMMMachineObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscGMMMachine_RichCompare(PyBobLearnMiscGMMMachineObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscGMMMachine_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscGMMMachineObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare GMMMachine objects", 0) -} - -int PyBobLearnMiscGMMMachine_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscGMMMachine_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int)", - "A tuple that represents the number of gaussians and dimensionality of each Gaussian ``(n_gaussians, dim)``.", - "" -); -PyObject* PyBobLearnMiscGMMMachine_getShape(PyBobLearnMiscGMMMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i)", self->cxx->getNGaussians(), self->cxx->getNInputs()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -/***** MEAN *****/ - -static auto means = bob::extension::VariableDoc( - "means", - "array_like <float, 2D>", - "The means of the gaussians", - "" -); -PyObject* PyBobLearnMiscGMMMachine_getMeans(PyBobLearnMiscGMMMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getMeans()); - BOB_CATCH_MEMBER("means could not be read", 0) -} -int PyBobLearnMiscGMMMachine_setMeans(PyBobLearnMiscGMMMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, means.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "means"); - if (!b) return -1; - self->cxx->setMeans(*b); - return 0; - BOB_CATCH_MEMBER("means could not be set", -1) -} - -/***** Variance *****/ -static auto variances = bob::extension::VariableDoc( - "variances", - "array_like <float, 2D>", - "Variances of the gaussians", - "" -); -PyObject* PyBobLearnMiscGMMMachine_getVariances(PyBobLearnMiscGMMMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getVariances()); - BOB_CATCH_MEMBER("variances could not be read", 0) -} -int PyBobLearnMiscGMMMachine_setVariances(PyBobLearnMiscGMMMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, variances.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "variances"); - if (!b) return -1; - self->cxx->setVariances(*b); - return 0; - BOB_CATCH_MEMBER("variances could not be set", -1) -} - -/***** Weights *****/ -static auto weights = bob::extension::VariableDoc( - "weights", - "array_like <float, 1D>", - "The weights (also known as \"mixing coefficients\")", - "" -); -PyObject* PyBobLearnMiscGMMMachine_getWeights(PyBobLearnMiscGMMMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getWeights()); - BOB_CATCH_MEMBER("weights could not be read", 0) -} -int PyBobLearnMiscGMMMachine_setWeights(PyBobLearnMiscGMMMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, weights.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "weights"); - if (!b) return -1; - self->cxx->setWeights(*b); - return 0; - BOB_CATCH_MEMBER("weights could not be set", -1) -} - - -/***** variance_supervector *****/ -static auto variance_supervector = bob::extension::VariableDoc( - "variance_supervector", - "array_like <float, 1D>", - "The variance supervector of the GMMMachine", - "Concatenation of the variance vectors of each Gaussian of the GMMMachine" -); -PyObject* PyBobLearnMiscGMMMachine_getVarianceSupervector(PyBobLearnMiscGMMMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getVarianceSupervector()); - BOB_CATCH_MEMBER("variance_supervector could not be read", 0) -} -int PyBobLearnMiscGMMMachine_setVarianceSupervector(PyBobLearnMiscGMMMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, variance_supervector.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "variance_supervector"); - if (!b) return -1; - self->cxx->setVarianceSupervector(*b); - return 0; - BOB_CATCH_MEMBER("variance_supervector could not be set", -1) -} - -/***** mean_supervector *****/ -static auto mean_supervector = bob::extension::VariableDoc( - "mean_supervector", - "array_like <float, 1D>", - "The mean supervector of the GMMMachine", - "Concatenation of the mean vectors of each Gaussian of the GMMMachine" -); -PyObject* PyBobLearnMiscGMMMachine_getMeanSupervector(PyBobLearnMiscGMMMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getMeanSupervector()); - BOB_CATCH_MEMBER("mean_supervector could not be read", 0) -} -int PyBobLearnMiscGMMMachine_setMeanSupervector(PyBobLearnMiscGMMMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, mean_supervector.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "mean_supervector"); - if (!b) return -1; - self->cxx->setMeanSupervector(*b); - return 0; - BOB_CATCH_MEMBER("mean_supervector could not be set", -1) -} - - - -/***** variance_thresholds *****/ -static auto variance_thresholds = bob::extension::VariableDoc( - "variance_thresholds", - "array_like <double, 2D>", - "Set the variance flooring thresholds in each dimension to the same vector for all Gaussian components if the argument is a 1D numpy arrray, and equal for all Gaussian components and dimensions if the parameter is a scalar. ", - "" -); -PyObject* PyBobLearnMiscGMMMachine_getVarianceThresholds(PyBobLearnMiscGMMMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getVarianceThresholds()); - BOB_CATCH_MEMBER("variance_thresholds could not be read", 0) -} -int PyBobLearnMiscGMMMachine_setVarianceThresholds(PyBobLearnMiscGMMMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, variance_thresholds.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "variance_thresholds"); - if (!b) return -1; - self->cxx->setVarianceThresholds(*b); - return 0; - BOB_CATCH_MEMBER("variance_thresholds could not be set", -1) -} - - - - -static PyGetSetDef PyBobLearnMiscGMMMachine_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscGMMMachine_getShape, - 0, - shape.doc(), - 0 - }, - { - means.name(), - (getter)PyBobLearnMiscGMMMachine_getMeans, - (setter)PyBobLearnMiscGMMMachine_setMeans, - means.doc(), - 0 - }, - { - variances.name(), - (getter)PyBobLearnMiscGMMMachine_getVariances, - (setter)PyBobLearnMiscGMMMachine_setVariances, - variances.doc(), - 0 - }, - { - weights.name(), - (getter)PyBobLearnMiscGMMMachine_getWeights, - (setter)PyBobLearnMiscGMMMachine_setWeights, - weights.doc(), - 0 - }, - { - variance_thresholds.name(), - (getter)PyBobLearnMiscGMMMachine_getVarianceThresholds, - (setter)PyBobLearnMiscGMMMachine_setVarianceThresholds, - variance_thresholds.doc(), - 0 - }, - { - variance_supervector.name(), - (getter)PyBobLearnMiscGMMMachine_getVarianceSupervector, - (setter)PyBobLearnMiscGMMMachine_setVarianceSupervector, - variance_supervector.doc(), - 0 - }, - - { - mean_supervector.name(), - (getter)PyBobLearnMiscGMMMachine_getMeanSupervector, - (setter)PyBobLearnMiscGMMMachine_setMeanSupervector, - mean_supervector.doc(), - 0 - }, - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the GMMMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscGMMMachine_Save(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the GMMMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscGMMMachine_Load(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this GMMMachine with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.GMMMachine`", "A GMMMachine object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscGMMMachine_IsSimilarTo(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscGMMMachineObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscGMMMachine_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Allocates space for the statistics and resets to zero.", - 0, - true -) -.add_prototype("n_gaussians,n_inputs") -.add_parameter("n_gaussians", "int", "Number of gaussians") -.add_parameter("n_inputs", "int", "Dimensionality of the feature vector"); -static PyObject* PyBobLearnMiscGMMMachine_resize(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int n_gaussians = 0; - int n_inputs = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &n_gaussians, &n_inputs)) Py_RETURN_NONE; - - if (n_gaussians <= 0){ - PyErr_Format(PyExc_TypeError, "n_gaussians must be greater than zero"); - resize.print_usage(); - return 0; - } - if (n_inputs <= 0){ - PyErr_Format(PyExc_TypeError, "n_inputs must be greater than zero"); - resize.print_usage(); - return 0; - } - - self->cxx->resize(n_gaussians, n_inputs); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - - -/*** log_likelihood ***/ -static auto log_likelihood = bob::extension::FunctionDoc( - "log_likelihood", - "Output the log likelihood of the sample, x, i.e. log(p(x|GMM)). Inputs are checked.", - ".. note:: The :py:meth:`__call__` function is an alias for this.", - true -) -.add_prototype("input","output") -.add_parameter("input", "array_like <float, 1D>", "Input vector") -.add_return("output","float","The log likelihood"); -static PyObject* PyBobLearnMiscGMMMachine_loglikelihood(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = log_likelihood.kwlist(0); - - PyBlitzArrayObject* input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input)) Py_RETURN_NONE; - //protects acquired resources through this scope - auto input_ = make_safe(input); - - double value = self->cxx->logLikelihood(*PyBlitzArrayCxx_AsBlitz<double,1>(input)); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot compute the likelihood", 0) -} - - -/*** log_likelihood_ ***/ -static auto log_likelihood_ = bob::extension::FunctionDoc( - "log_likelihood_", - "Output the log likelihood of the sample, x, i.e. log(p(x|GMM)). Inputs are NOT checked.", - "", - true -) -.add_prototype("input","output") -.add_parameter("input", "array_like <float, 1D>", "Input vector") -.add_return("output","float","The log likelihood"); -static PyObject* PyBobLearnMiscGMMMachine_loglikelihood_(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = log_likelihood_.kwlist(0); - - PyBlitzArrayObject* input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input)) Py_RETURN_NONE; - //protects acquired resources through this scope - auto input_ = make_safe(input); - - double value = self->cxx->logLikelihood_(*PyBlitzArrayCxx_AsBlitz<double,1>(input)); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot compute the likelihood", 0) -} - - -/*** acc_statistics ***/ -static auto acc_statistics = bob::extension::FunctionDoc( - "acc_statistics", - "Accumulate the GMM statistics for this sample(s). Inputs are checked.", - "", - true -) -.add_prototype("input,stats") -.add_parameter("input", "array_like <float, 2D>", "Input vector") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics of the GMM"); -static PyObject* PyBobLearnMiscGMMMachine_accStatistics(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = acc_statistics.kwlist(0); - - PyBlitzArrayObject* input = 0; - PyBobLearnMiscGMMStatsObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O!", kwlist, &PyBlitzArray_Converter,&input, - &PyBobLearnMiscGMMStats_Type, &stats)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - self->cxx->accStatistics(*PyBlitzArrayCxx_AsBlitz<double,2>(input), *stats->cxx); - - BOB_CATCH_MEMBER("cannot accumulate the statistics", 0) - Py_RETURN_NONE; -} - - -/*** acc_statistics_ ***/ -static auto acc_statistics_ = bob::extension::FunctionDoc( - "acc_statistics_", - "Accumulate the GMM statistics for this sample(s). Inputs are NOT checked.", - "", - true -) -.add_prototype("input,stats") -.add_parameter("input", "array_like <float, 2D>", "Input vector") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics of the GMM"); -static PyObject* PyBobLearnMiscGMMMachine_accStatistics_(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = acc_statistics_.kwlist(0); - - PyBlitzArrayObject* input = 0; - PyBobLearnMiscGMMStatsObject* stats = 0; - - - - if(!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O!", kwlist, &PyBlitzArray_Converter,&input, - &PyBobLearnMiscGMMStats_Type, &stats)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - self->cxx->accStatistics_(*PyBlitzArrayCxx_AsBlitz<double,2>(input), *stats->cxx); - - BOB_CATCH_MEMBER("cannot accumulate the statistics", 0) - Py_RETURN_NONE; -} - - - -/*** set_variance_thresholds ***/ -static auto set_variance_thresholds = bob::extension::FunctionDoc( - "set_variance_thresholds", - "Set the variance flooring thresholds in each dimension to the same vector for all Gaussian components if the argument is a 1D numpy arrray, and equal for all Gaussian components and dimensions if the parameter is a scalar.", - "", - true -) -.add_prototype("input") -.add_parameter("input", "array_like <float, 1D>", "Input vector"); -static PyObject* PyBobLearnMiscGMMMachine_setVarianceThresholds_method(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = set_variance_thresholds.kwlist(0); - - PyBlitzArrayObject* input_array = 0; - double input_number = 0; - if(PyArg_ParseTupleAndKeywords(args, kwargs, "d", kwlist, &input_number)){ - self->cxx->setVarianceThresholds(input_number); - } - else if(PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter,&input_array)) { - //protects acquired resources through this scope - auto input_ = make_safe(input_array); - self->cxx->setVarianceThresholds(*PyBlitzArrayCxx_AsBlitz<double,1>(input_array)); - } - else - return 0; - - - - BOB_CATCH_MEMBER("cannot accumulate set the variance threshold", 0) - Py_RETURN_NONE; -} - - - - -/*** get_gaussian ***/ -static auto get_gaussian = bob::extension::FunctionDoc( - "get_gaussian", - "Get the specified Gaussian component.", - ".. note:: An exception is thrown if i is out of range.", - true -) -.add_prototype("i","gaussian") -.add_parameter("i", "int", "Index of the gaussian") -.add_return("gaussian",":py:class:`bob.learn.misc.Gaussian`","Gaussian object"); -static PyObject* PyBobLearnMiscGMMMachine_get_gaussian(PyBobLearnMiscGMMMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_gaussian.kwlist(0); - - int i = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - boost::shared_ptr<bob::learn::misc::Gaussian> gaussian = self->cxx->getGaussian(i); - - //Allocating the correspondent python object - PyBobLearnMiscGaussianObject* retval = - (PyBobLearnMiscGaussianObject*)PyBobLearnMiscGaussian_Type.tp_alloc(&PyBobLearnMiscGaussian_Type, 0); - - retval->cxx = gaussian; - - //return reinterpret_cast<PyObject*>(retval); - return Py_BuildValue("O",retval); - - BOB_CATCH_MEMBER("cannot compute the likelihood", 0) -} - - - -static PyMethodDef PyBobLearnMiscGMMMachine_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - resize.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - { - log_likelihood.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_loglikelihood, - METH_VARARGS|METH_KEYWORDS, - log_likelihood.doc() - }, - { - log_likelihood_.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_loglikelihood_, - METH_VARARGS|METH_KEYWORDS, - log_likelihood_.doc() - }, - { - acc_statistics.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_accStatistics, - METH_VARARGS|METH_KEYWORDS, - acc_statistics.doc() - }, - { - acc_statistics_.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_accStatistics_, - METH_VARARGS|METH_KEYWORDS, - acc_statistics_.doc() - }, - - { - get_gaussian.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_get_gaussian, - METH_VARARGS|METH_KEYWORDS, - get_gaussian.doc() - }, - - { - set_variance_thresholds.name(), - (PyCFunction)PyBobLearnMiscGMMMachine_setVarianceThresholds_method, - METH_VARARGS|METH_KEYWORDS, - set_variance_thresholds.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscGMMMachine_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscGMMMachine(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscGMMMachine_Type.tp_name = GMMMachine_doc.name(); - PyBobLearnMiscGMMMachine_Type.tp_basicsize = sizeof(PyBobLearnMiscGMMMachineObject); - PyBobLearnMiscGMMMachine_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscGMMMachine_Type.tp_doc = GMMMachine_doc.doc(); - - // set the functions - PyBobLearnMiscGMMMachine_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscGMMMachine_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscGMMMachine_init); - PyBobLearnMiscGMMMachine_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscGMMMachine_delete); - PyBobLearnMiscGMMMachine_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscGMMMachine_RichCompare); - PyBobLearnMiscGMMMachine_Type.tp_methods = PyBobLearnMiscGMMMachine_methods; - PyBobLearnMiscGMMMachine_Type.tp_getset = PyBobLearnMiscGMMMachine_getseters; - PyBobLearnMiscGMMMachine_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscGMMMachine_loglikelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscGMMMachine_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscGMMMachine_Type); - return PyModule_AddObject(module, "GMMMachine", (PyObject*)&PyBobLearnMiscGMMMachine_Type) >= 0; -} - diff --git a/bob/learn/misc/gmm_stats.cpp b/bob/learn/misc/gmm_stats.cpp deleted file mode 100644 index 9f859ff..0000000 --- a/bob/learn/misc/gmm_stats.cpp +++ /dev/null @@ -1,623 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Wed 03 Dec 14:38:48 2014 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto GMMStats_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".GMMStats", - "A container for GMM statistics", - "With respect to [Reynolds2000]_ the class computes: \n\n" - "* Eq (8) is :py:class:`bob.learn.misc.GMMStats.n`: :math:`n_i=\\sum\\limits_{t=1}^T Pr(i | x_t)`\n\n" - "* Eq (9) is :py:class:`bob.learn.misc.GMMStats.sum_px`: :math:`E_i(x)=\\frac{1}{n(i)}\\sum\\limits_{t=1}^T Pr(i | x_t)x_t`\n\n" - "* Eq (10) is :py:class:`bob.learn.misc.GMMStats.sum_pxx`: :math:`E_i(x^2)=\\frac{1}{n(i)}\\sum\\limits_{t=1}^T Pr(i | x_t)x_t^2`\n\n" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "A container for GMM statistics.", - "", - true - ) - .add_prototype("n_gaussians,n_inputs","") - .add_prototype("other","") - .add_prototype("hdf5","") - .add_prototype("","") - - .add_parameter("n_gaussians", "int", "Number of gaussians") - .add_parameter("n_inputs", "int", "Dimension of the feature vector") - .add_parameter("other", ":py:class:`bob.learn.misc.GMMStats`", "A GMMStats object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscGMMStats_init_number(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMStats_doc.kwlist(0); - int n_inputs = 1; - int n_gaussians = 1; - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &n_gaussians, &n_inputs)) - return -1; - - if(n_gaussians < 0){ - PyErr_Format(PyExc_TypeError, "gaussians argument must be greater than or equal to zero"); - GMMStats_doc.print_usage(); - return -1; - } - - if(n_inputs < 0){ - PyErr_Format(PyExc_TypeError, "input argument must be greater than or equal to zero"); - GMMStats_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::GMMStats(n_gaussians, n_inputs)); - return 0; -} - - -static int PyBobLearnMiscGMMStats_init_copy(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMStats_doc.kwlist(1); - PyBobLearnMiscGMMStatsObject* tt; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMStats_Type, &tt)){ - GMMStats_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::GMMStats(*tt->cxx)); - return 0; -} - - -static int PyBobLearnMiscGMMStats_init_hdf5(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = GMMStats_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - GMMStats_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::GMMStats(*(config->f))); - - return 0; -} - - - -static int PyBobLearnMiscGMMStats_init(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch (nargs) { - - case 0: //default initializer () - self->cxx.reset(new bob::learn::misc::GMMStats()); - return 0; - - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - /**If the constructor input is Gaussian object**/ - if (PyBobLearnMiscGMMStats_Check(arg)) - return PyBobLearnMiscGMMStats_init_copy(self, args, kwargs); - /**If the constructor input is a HDF5**/ - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscGMMStats_init_hdf5(self, args, kwargs); - } - case 2: - return PyBobLearnMiscGMMStats_init_number(self, args, kwargs); - default: - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 0, 1 or 2 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - GMMStats_doc.print_usage(); - return -1; - } - BOB_CATCH_MEMBER("cannot create GMMStats", 0) - return 0; -} - - - -static void PyBobLearnMiscGMMStats_delete(PyBobLearnMiscGMMStatsObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscGMMStats_RichCompare(PyBobLearnMiscGMMStatsObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscGMMStats_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscGMMStatsObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare GMMStats objects", 0) -} - -int PyBobLearnMiscGMMStats_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscGMMStats_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** n *****/ -static auto n = bob::extension::VariableDoc( - "n", - "array_like <float, 1D>", - "For each Gaussian, the accumulated sum of responsibilities, i.e. the sum of :math:`P(gaussian_i|x)`" -); -PyObject* PyBobLearnMiscGMMStats_getN(PyBobLearnMiscGMMStatsObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->n); - BOB_CATCH_MEMBER("n could not be read", 0) -} -int PyBobLearnMiscGMMStats_setN(PyBobLearnMiscGMMStatsObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, n.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "n"); - if (!b) return -1; - self->cxx->n = *b; - return 0; - BOB_CATCH_MEMBER("n could not be set", -1) -} - - -/***** sum_px *****/ -static auto sum_px = bob::extension::VariableDoc( - "sum_px", - "array_like <float, 2D>", - "For each Gaussian, the accumulated sum of responsibility times the sample" -); -PyObject* PyBobLearnMiscGMMStats_getSum_px(PyBobLearnMiscGMMStatsObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->sumPx); - BOB_CATCH_MEMBER("sum_px could not be read", 0) -} -int PyBobLearnMiscGMMStats_setSum_px(PyBobLearnMiscGMMStatsObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, sum_px.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "sum_px"); - if (!b) return -1; - self->cxx->sumPx = *b; - return 0; - BOB_CATCH_MEMBER("sum_px could not be set", -1) -} - - -/***** sum_pxx *****/ -static auto sum_pxx = bob::extension::VariableDoc( - "sum_pxx", - "array_like <float, 2D>", - "For each Gaussian, the accumulated sum of responsibility times the sample squared" -); -PyObject* PyBobLearnMiscGMMStats_getSum_pxx(PyBobLearnMiscGMMStatsObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->sumPxx); - BOB_CATCH_MEMBER("sum_pxx could not be read", 0) -} -int PyBobLearnMiscGMMStats_setSum_pxx(PyBobLearnMiscGMMStatsObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, sum_pxx.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "sum_pxx"); - if (!b) return -1; - self->cxx->sumPxx = *b; - return 0; - BOB_CATCH_MEMBER("sum_pxx could not be set", -1) -} - - -/***** t *****/ -static auto t = bob::extension::VariableDoc( - "t", - "int", - "The number of samples" -); -PyObject* PyBobLearnMiscGMMStats_getT(PyBobLearnMiscGMMStatsObject* self, void*){ - BOB_TRY - return Py_BuildValue("i", self->cxx->T); - BOB_CATCH_MEMBER("t could not be read", 0) -} -int PyBobLearnMiscGMMStats_setT(PyBobLearnMiscGMMStatsObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyInt_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an int", Py_TYPE(self)->tp_name, t.name()); - return -1; - } - - if (PyInt_AS_LONG(value) < 0){ - PyErr_Format(PyExc_TypeError, "t must be greater than or equal to zero"); - return -1; - } - - self->cxx->T = PyInt_AS_LONG(value); - BOB_CATCH_MEMBER("t could not be set", -1) - return 0; -} - - -/***** log_likelihood *****/ -static auto log_likelihood = bob::extension::VariableDoc( - "log_likelihood", - "double", - "The accumulated log likelihood of all samples" -); -PyObject* PyBobLearnMiscGMMStats_getLog_likelihood(PyBobLearnMiscGMMStatsObject* self, void*){ - BOB_TRY - return Py_BuildValue("d","log_likelihood", self->cxx->log_likelihood); - BOB_CATCH_MEMBER("log_likelihood could not be read", 0) -} -int PyBobLearnMiscGMMStats_setLog_likelihood(PyBobLearnMiscGMMStatsObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an double", Py_TYPE(self)->tp_name, t.name()); - return -1; - } - - self->cxx->log_likelihood = PyFloat_AsDouble(value); - return 0; - BOB_CATCH_MEMBER("log_likelihood could not be set", -1) -} - - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int)", - "A tuple that represents the number of gaussians and dimensionality of each Gaussian ``(n_gaussians, dim)``.", - "" -); -PyObject* PyBobLearnMiscGMMStats_getShape(PyBobLearnMiscGMMStatsObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i)", self->cxx->sumPx.shape()[0], self->cxx->sumPx.shape()[1]); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - - - -static PyGetSetDef PyBobLearnMiscGMMStats_getseters[] = { - { - n.name(), - (getter)PyBobLearnMiscGMMStats_getN, - (setter)PyBobLearnMiscGMMStats_setN, - n.doc(), - 0 - }, - { - sum_px.name(), - (getter)PyBobLearnMiscGMMStats_getSum_px, - (setter)PyBobLearnMiscGMMStats_setSum_px, - sum_px.doc(), - 0 - }, - { - sum_pxx.name(), - (getter)PyBobLearnMiscGMMStats_getSum_pxx, - (setter)PyBobLearnMiscGMMStats_setSum_pxx, - sum_pxx.doc(), - 0 - }, - { - t.name(), - (getter)PyBobLearnMiscGMMStats_getT, - (setter)PyBobLearnMiscGMMStats_setT, - t.doc(), - 0 - }, - { - log_likelihood.name(), - (getter)PyBobLearnMiscGMMStats_getLog_likelihood, - (setter)PyBobLearnMiscGMMStats_setLog_likelihood, - log_likelihood.doc(), - 0 - }, - { - shape.name(), - (getter)PyBobLearnMiscGMMStats_getShape, - 0, - shape.doc(), - 0 - }, - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the GMMStats to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscGMMStats_Save(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the GMMStats to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscGMMStats_Load(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this GMMStats with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.GMMStats`", "A GMMStats object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscGMMStats_IsSimilarTo(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscGMMStatsObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscGMMStats_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Allocates space for the statistics and resets to zero.", - 0, - true -) -.add_prototype("n_gaussians,n_inputs") -.add_parameter("n_gaussians", "int", "Number of gaussians") -.add_parameter("n_inputs", "int", "Dimensionality of the feature vector"); -static PyObject* PyBobLearnMiscGMMStats_resize(PyBobLearnMiscGMMStatsObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int n_gaussians = 0; - int n_inputs = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &n_gaussians, &n_inputs)) Py_RETURN_NONE; - - if (n_gaussians <= 0){ - PyErr_Format(PyExc_TypeError, "n_gaussians must be greater than zero"); - resize.print_usage(); - return 0; - } - if (n_inputs <= 0){ - PyErr_Format(PyExc_TypeError, "n_inputs must be greater than zero"); - resize.print_usage(); - return 0; - } - - - self->cxx->resize(n_gaussians, n_inputs); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - - -/*** init ***/ -static auto init = bob::extension::FunctionDoc( - "init", - " Resets statistics to zero." -) -.add_prototype(""); -static PyObject* PyBobLearnMiscGMMStats_init_method(PyBobLearnMiscGMMStatsObject* self) { - BOB_TRY - - self->cxx->init(); - - BOB_CATCH_MEMBER("cannot perform the init method", 0) - - Py_RETURN_NONE; -} - - - -static PyMethodDef PyBobLearnMiscGMMStats_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscGMMStats_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscGMMStats_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscGMMStats_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - resize.name(), - (PyCFunction)PyBobLearnMiscGMMStats_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - { - init.name(), - (PyCFunction)PyBobLearnMiscGMMStats_init_method, - METH_NOARGS, - init.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Operators *******************************************/ -/******************************************************************/ - -static PyBobLearnMiscGMMStatsObject* PyBobLearnMiscGMMStats_inplaceadd(PyBobLearnMiscGMMStatsObject* self, PyObject* other) { - BOB_TRY - - if (!PyBobLearnMiscGMMStats_Check(other)){ - PyErr_Format(PyExc_TypeError, "expected bob.learn.misc.GMMStats object"); - return 0; - } - - auto other_ = reinterpret_cast<PyBobLearnMiscGMMStatsObject*>(other); - - self->cxx->operator+=(*other_->cxx); - - BOB_CATCH_MEMBER("it was not possible to process the operator +=", 0) - - Py_INCREF(self); - return self; -} - -static PyNumberMethods PyBobLearnMiscGMMStats_operators = {0}; - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscGMMStats_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscGMMStats(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscGMMStats_Type.tp_name = GMMStats_doc.name(); - PyBobLearnMiscGMMStats_Type.tp_basicsize = sizeof(PyBobLearnMiscGMMStatsObject); - PyBobLearnMiscGMMStats_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_INPLACEOPS; - PyBobLearnMiscGMMStats_Type.tp_doc = GMMStats_doc.doc(); - - // set the functions - PyBobLearnMiscGMMStats_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscGMMStats_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscGMMStats_init); - PyBobLearnMiscGMMStats_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscGMMStats_delete); - PyBobLearnMiscGMMStats_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscGMMStats_RichCompare); - PyBobLearnMiscGMMStats_Type.tp_methods = PyBobLearnMiscGMMStats_methods; - PyBobLearnMiscGMMStats_Type.tp_getset = PyBobLearnMiscGMMStats_getseters; - PyBobLearnMiscGMMStats_Type.tp_call = 0; - PyBobLearnMiscGMMStats_Type.tp_as_number = &PyBobLearnMiscGMMStats_operators; - - //set operators - PyBobLearnMiscGMMStats_operators.nb_inplace_add = reinterpret_cast<binaryfunc>(PyBobLearnMiscGMMStats_inplaceadd); - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscGMMStats_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscGMMStats_Type); - return PyModule_AddObject(module, "GMMStats", (PyObject*)&PyBobLearnMiscGMMStats_Type) >= 0; -} - diff --git a/bob/learn/misc/include/bob.learn.misc/EMPCATrainer.h b/bob/learn/misc/include/bob.learn.misc/EMPCATrainer.h deleted file mode 100644 index 753c78c..0000000 --- a/bob/learn/misc/include/bob.learn.misc/EMPCATrainer.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - * @date Tue Oct 11 12:18:23 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief Expectation Maximization Algorithm for Principal Component - * Analysis - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_EMPCA_TRAINER_H -#define BOB_LEARN_MISC_EMPCA_TRAINER_H - -#include <bob.learn.linear/machine.h> -#include <blitz/array.h> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief Trains a linear machine using an Expectation-Maximization algorithm - * on the given dataset.\n - * References:\n - * 1. "Probabilistic Principal Component Analysis", - * Michael Tipping and Christopher Bishop, - * Journal of the Royal Statistical Society, - * Series B, 61, Part 3, pp. 611–622\n - * 2. "EM Algorithms for PCA and SPCA", - * Sam Roweis, Neural Information Processing Systems 10 (NIPS'97), - * pp.626-632 (Sensible Principal Component Analysis part)\n - * - * Notations used are the ones from reference 1.\n - * The probabilistic model is given by: \f$t = W x + \mu + \epsilon\f$\n - * - \f$t\f$ is the observed data (dimension \f$f\f$)\n - * - \f$W\f$ is a projection matrix (dimension \f$f \times d\f$)\n - * - \f$x\f$ is the projected data (dimension \f$d < f\f$)\n - * - \f$\mu\f$ is the mean of the data (dimension \f$f\f$)\n - * - \f$\epsilon\f$ is the noise of the data (dimension \f$f\f$) - * Gaussian with zero-mean and covariance matrix \f$\sigma^2 Id\f$ - */ -class EMPCATrainer -{ - public: //api - /** - * @brief Initializes a new EM PCA trainer. The training stage will place the - * resulting components in the linear machine and set it up to - * extract the variable means automatically. - */ - EMPCATrainer(bool compute_likelihood=true); - - /** - * @brief Copy constructor - */ - EMPCATrainer(const EMPCATrainer& other); - - /** - * @brief (virtual) Destructor - */ - virtual ~EMPCATrainer(); - - /** - * @brief Assignment operator - */ - EMPCATrainer& operator=(const EMPCATrainer& other); - - /** - * @brief Equal to - */ - bool operator==(const EMPCATrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const EMPCATrainer& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const EMPCATrainer& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief This methods performs some initialization before the EM loop. - */ - virtual void initialize(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar); - - /** - * @brief Calculates and saves statistics across the dataset, and saves - * these as m_z_{first,second}_order. - * - * The statistics will be used in the mStep() that follows. - */ - virtual void eStep(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar); - - /** - * @brief Performs a maximization step to update the parameters of the - * factor analysis model. - */ - virtual void mStep(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar); - - /** - * @brief Computes the average log likelihood using the current estimates - * of the latent variables. - */ - virtual double computeLikelihood(bob::learn::linear::Machine& machine); - - /** - * @brief Sets \f$\sigma^2\f$ (Mostly for test purpose) - */ - void setSigma2(double sigma2) { m_sigma2 = sigma2; } - - /** - * @brief Gets \f$\sigma^2\f$ (Mostly for test purpose) - */ - double getSigma2() const { return m_sigma2; } - - /** - * @brief Sets the Random Number Generator - */ - void setRng(const boost::shared_ptr<boost::mt19937> rng) - { m_rng = rng; } - - /** - * @brief Gets the Random Number Generator - */ - const boost::shared_ptr<boost::mt19937> getRng() const - { return m_rng; } - - - private: //representation - - bool m_compute_likelihood; - boost::shared_ptr<boost::mt19937> m_rng; - - blitz::Array<double,2> m_S; /// Covariance of the training data (required only if we need to compute the log likelihood) - blitz::Array<double,2> m_z_first_order; /// Current mean of the \f$z_{n}\f$ latent variable - blitz::Array<double,3> m_z_second_order; /// Current covariance of the \f$z_{n}\f$ latent variable - blitz::Array<double,2> m_inW; /// The matrix product \f$W^T W\f$ - blitz::Array<double,2> m_invM; /// The matrix \f$inv(M)\f$, where \f$M = W^T W + \sigma^2 Id\f$ - double m_sigma2; /// The variance \f$sigma^2\f$ of the noise epsilon of the probabilistic model - double m_f_log2pi; /// The constant \f$n_{features} log(2*\pi)\f$ used during the likelihood computation - - // Working arrays - mutable blitz::Array<double,2> m_tmp_dxf; /// size dimensionality x n_features - mutable blitz::Array<double,1> m_tmp_d; /// size dimensionality - mutable blitz::Array<double,1> m_tmp_f; /// size n_features - mutable blitz::Array<double,2> m_tmp_dxd_1; /// size dimensionality x dimensionality - mutable blitz::Array<double,2> m_tmp_dxd_2; /// size dimensionality x dimensionality - mutable blitz::Array<double,2> m_tmp_fxd_1; /// size n_features x dimensionality - mutable blitz::Array<double,2> m_tmp_fxd_2; /// size n_features x dimensionality - mutable blitz::Array<double,2> m_tmp_fxf_1; /// size n_features x n_features - mutable blitz::Array<double,2> m_tmp_fxf_2; /// size n_features x n_features - - - /** - * @brief Initializes/resizes the (array) members - */ - void initMembers(const bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar); - /** - * @brief Computes the mean and the variance (if required) of the training - * data - */ - void computeMeanVariance(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar); - /** - * @brief Random initialization of \f$W\f$ and \f$sigma^2\f$. - * W is the projection matrix (from the LinearMachine) - */ - void initRandomWSigma2(bob::learn::linear::Machine& machine); - /** - * @brief Computes the product \f$W^T W\f$. - * \f$W\f$ is the projection matrix (from the LinearMachine) - */ - void computeWtW(bob::learn::linear::Machine& machine); - /** - * @brief Computes the inverse of \f$M\f$ matrix, where - * \f$M = W^T W + \sigma^2 Id\f$. - * \f$W\f$ is the projection matrix (from the LinearMachine) - */ - void computeInvM(); - /** - * @brief M-Step (part 1): Computes the new estimate of \f$W\f$ using the - * new estimated statistics. - */ - void updateW(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar); - /** - * @brief M-Step (part 2): Computes the new estimate of \f$\sigma^2\f$ using - * the new estimated statistics. - */ - void updateSigma2(bob::learn::linear::Machine& machine, - const blitz::Array<double,2>& ar); -}; - -} } } // namespaces - -#endif /* BOB_LEARN_MISC_EMPCA_TRAINER_H */ diff --git a/bob/learn/misc/include/bob.learn.misc/FABase.h b/bob/learn/misc/include/bob.learn.misc/FABase.h deleted file mode 100644 index 35b1667..0000000 --- a/bob/learn/misc/include/bob.learn.misc/FABase.h +++ /dev/null @@ -1,293 +0,0 @@ -/** - * @date Tue Jan 27 15:51:15 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief A base class for Factor Analysis - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_FABASE_H -#define BOB_LEARN_MISC_FABASE_H - -#include <stdexcept> - -#include <bob.learn.misc/GMMMachine.h> -#include <boost/shared_ptr.hpp> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief A FA Base class which contains U, V and D matrices - * TODO: add a reference to the journal articles - */ -class FABase -{ - public: - /** - * @brief Default constructor. Builds an otherwise invalid 0 x 0 FABase - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - */ - FABase(); - - /** - * @brief Constructor. Builds a new FABase. - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - * - * @param ubm The Universal Background Model - * @param ru size of U (CD x ru) - * @param rv size of U (CD x rv) - * @warning ru and rv SHOULD BE >= 1. Just set U/V/D to zero if you want - * to ignore one subspace. This is the case for ISV. - */ - FABase(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, const size_t ru=1, const size_t rv=1); - - /** - * @brief Copy constructor - */ - FABase(const FABase& other); - - /** - * @brief Just to virtualise the destructor - */ - virtual ~FABase(); - - /** - * @brief Assigns from a different JFA machine - */ - FABase& operator=(const FABase &other); - - /** - * @brief Equal to - */ - bool operator==(const FABase& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const FABase& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const FABase& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Returns the UBM - */ - const boost::shared_ptr<bob::learn::misc::GMMMachine> getUbm() const - { return m_ubm; } - - /** - * @brief Returns the U matrix - */ - const blitz::Array<double,2>& getU() const - { return m_U; } - - /** - * @brief Returns the V matrix - */ - const blitz::Array<double,2>& getV() const - { return m_V; } - - /** - * @brief Returns the diagonal matrix diag(d) (as a 1D vector) - */ - const blitz::Array<double,1>& getD() const - { return m_d; } - - /** - * @brief Returns the UBM mean supervector (as a 1D vector) - */ - const blitz::Array<double,1>& getUbmMean() const - { return m_cache_mean; } - - /** - * @brief Returns the UBM variance supervector (as a 1D vector) - */ - const blitz::Array<double,1>& getUbmVariance() const - { return m_cache_sigma; } - - /** - * @brief Returns the number of Gaussian components C - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNGaussians() const - { if(!m_ubm) throw std::runtime_error("No UBM was set in the JFA machine."); - return m_ubm->getNGaussians(); } - - /** - * @brief Returns the feature dimensionality D - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNInputs() const - { if(!m_ubm) throw std::runtime_error("No UBM was set in the JFA machine."); - return m_ubm->getNInputs(); } - - /** - * @brief Returns the supervector length CD - * (CxD: Number of Gaussian components by the feature dimensionality) - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getSupervectorLength() const - { if(!m_ubm) throw std::runtime_error("No UBM was set in the JFA machine."); - return m_ubm->getNInputs()*m_ubm->getNGaussians(); } - - /** - * @brief Returns the size/rank ru of the U matrix - */ - const size_t getDimRu() const - { return m_ru; } - - /** - * @brief Returns the size/rank rv of the V matrix - */ - const size_t getDimRv() const - { return m_rv; } - - /** - * @brief Resets the dimensionality of the subspace U and V - * U and V are hence uninitialized. - */ - void resize(const size_t ru, const size_t rv); - - /** - * @brief Resets the dimensionality of the subspace U and V, - * assuming that no UBM has yet been set - * U and V are hence uninitialized. - */ - void resize(const size_t ru, const size_t rv, const size_t cd); - - /** - * @brief Returns the U matrix in order to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,2>& updateU() - { return m_U; } - - /** - * @brief Returns the V matrix in order to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,2>& updateV() - { return m_V; } - - /** - * @brief Returns the diagonal matrix diag(d) (as a 1D vector) in order - * to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,1>& updateD() - { return m_d; } - - - /** - * @brief Sets (the mean supervector of) the Universal Background Model - * U, V and d are uninitialized in case of dimensions update (C or D) - */ - void setUbm(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm); - - /** - * @brief Sets the U matrix - */ - void setU(const blitz::Array<double,2>& U); - - /** - * @brief Sets the V matrix - */ - void setV(const blitz::Array<double,2>& V); - - /** - * @brief Sets the diagonal matrix diag(d) - * (a 1D vector is expected as an argument) - */ - void setD(const blitz::Array<double,1>& d); - - - /** - * @brief Estimates x from the GMM statistics considering the LPT - * assumption, that is the latent session variable x is approximated - * using the UBM - */ - void estimateX(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& x) const; - - /** - * @brief Compute and put U^{T}.Sigma^{-1} matrix in cache - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - void updateCacheUbmUVD(); - - - private: - /** - * @brief Update cache arrays/variables - */ - void updateCache(); - /** - * @brief Put GMM mean/variance supervector in cache - */ - void updateCacheUbm(); - /** - * @brief Resize working arrays - */ - void resizeTmp(); - /** - * @brief Computes (Id + U^T.Sigma^-1.U.N_{i,h}.U)^-1 = - * (Id + sum_{c=1..C} N_{i,h}.U_{c}^T.Sigma_{c}^-1.U_{c})^-1 - */ - void computeIdPlusUSProdInv(const bob::learn::misc::GMMStats& gmm_stats, - blitz::Array<double,2>& out) const; - /** - * @brief Computes Fn_x = sum_{sessions h}(N*(o - m)) - * (Normalised first order statistics) - */ - void computeFn_x(const bob::learn::misc::GMMStats& gmm_stats, - blitz::Array<double,1>& out) const; - /** - * @brief Estimates the value of x from the passed arguments - * (IdPlusUSProdInv and Fn_x), considering the LPT assumption - */ - void estimateX(const blitz::Array<double,2>& IdPlusUSProdInv, - const blitz::Array<double,1>& Fn_x, blitz::Array<double,1>& x) const; - - - // UBM - boost::shared_ptr<bob::learn::misc::GMMMachine> m_ubm; - - // dimensionality - size_t m_ru; // size of U (CD x ru) - size_t m_rv; // size of V (CD x rv) - - // U, V, D matrices - // D is assumed to be diagonal, and only the diagonal is stored - blitz::Array<double,2> m_U; - blitz::Array<double,2> m_V; - blitz::Array<double,1> m_d; - - // Vectors/Matrices precomputed in cache - blitz::Array<double,1> m_cache_mean; - blitz::Array<double,1> m_cache_sigma; - blitz::Array<double,2> m_cache_UtSigmaInv; - - mutable blitz::Array<double,2> m_tmp_IdPlusUSProdInv; - mutable blitz::Array<double,1> m_tmp_Fn_x; - mutable blitz::Array<double,1> m_tmp_ru; - mutable blitz::Array<double,2> m_tmp_ruD; - mutable blitz::Array<double,2> m_tmp_ruru; -}; - - -} } } // namespaces - -#endif // BOB_LEARN_MISC_FABASE_H diff --git a/bob/learn/misc/include/bob.learn.misc/FABaseTrainer.h b/bob/learn/misc/include/bob.learn.misc/FABaseTrainer.h deleted file mode 100644 index c5b2734..0000000 --- a/bob/learn/misc/include/bob.learn.misc/FABaseTrainer.h +++ /dev/null @@ -1,350 +0,0 @@ -/** - * @date Sat Jan 31 17:16:17 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief FABaseTrainer functions - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_FABASETRAINER_H -#define BOB_LEARN_MISC_FABASETRAINER_H - -#include <blitz/array.h> -#include <bob.learn.misc/GMMStats.h> -#include <bob.learn.misc/JFAMachine.h> -#include <vector> - -#include <map> -#include <string> -#include <bob.core/array_copy.h> -#include <boost/shared_ptr.hpp> -#include <boost/random.hpp> -#include <bob.core/logging.h> - -namespace bob { namespace learn { namespace misc { - -class FABaseTrainer -{ - public: - /** - * @brief Constructor - */ - FABaseTrainer(); - - /** - * @brief Copy constructor - */ - FABaseTrainer(const FABaseTrainer& other); - - /** - * @brief Destructor - */ - ~FABaseTrainer(); - - /** - * @brief Check that the dimensionality of the statistics match. - */ - void checkStatistics(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - - /** - * @brief Initialize the dimensionality, the UBM, the sums of the - * statistics and the number of identities. - */ - void initUbmNidSumStatistics(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - - /** - * @brief Precomputes the sums of the zeroth order statistics over the - * sessions for each client - */ - void precomputeSumStatisticsN(const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - /** - * @brief Precomputes the sums of the first order statistics over the - * sessions for each client - */ - void precomputeSumStatisticsF(const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - - /** - * @brief Initializes (allocates and sets to zero) the x, y, z speaker - * factors - */ - void initializeXYZ(const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - - /** - * @brief Resets the x, y, z speaker factors to zero values - */ - void resetXYZ(); - - - /**** Y and V functions ****/ - /** - * @brief Computes Vt * diag(sigma)^-1 - */ - void computeVtSigmaInv(const bob::learn::misc::FABase& m); - /** - * @brief Computes Vt_{c} * diag(sigma)^-1 * V_{c} for each Gaussian c - */ - void computeVProd(const bob::learn::misc::FABase& m); - /** - * @brief Computes (I+Vt*diag(sigma)^-1*Ni*V)^-1 which occurs in the y - * estimation for the given person - */ - void computeIdPlusVProd_i(const size_t id); - /** - * @brief Computes sum_{sessions h}(N_{i,h}*(o_{i,h} - m - D*z_{i} - U*x_{i,h}) - * which occurs in the y estimation of the given person - */ - void computeFn_y_i(const bob::learn::misc::FABase& m, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& stats, - const size_t id); - /** - * @brief Updates y_i (of the current person) and the accumulators to - * compute V with the cache values m_cache_IdPlusVprod_i, m_VtSigmaInv and - * m_cache_Fn_y_i - */ - void updateY_i(const size_t id); - /** - * @brief Updates y and the accumulators to compute V - */ - void updateY(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - /** - * @brief Computes the accumulators m_acc_V_A1 and m_acc_V_A2 for V - * V = A2 * A1^-1 - */ - void computeAccumulatorsV(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - /** - * @brief Updates V from the accumulators m_acc_V_A1 and m_acc_V_A2 - */ - void updateV(blitz::Array<double,2>& V); - - - /**** X and U functions ****/ - /** - * @brief Computes Ut * diag(sigma)^-1 - */ - void computeUtSigmaInv(const bob::learn::misc::FABase& m); - /** - * @brief Computes Ut_{c} * diag(sigma)^-1 * U_{c} for each Gaussian c - */ - void computeUProd(const bob::learn::misc::FABase& m); - /** - * @brief Computes (I+Ut*diag(sigma)^-1*Ni*U)^-1 which occurs in the x - * estimation - */ - void computeIdPlusUProd_ih(const boost::shared_ptr<bob::learn::misc::GMMStats>& stats); - /** - * @brief Computes sum_{sessions h}(N_{i,h}*(o_{i,h} - m - D*z_{i} - U*x_{i,h}) - * which occurs in the y estimation of the given person - */ - void computeFn_x_ih(const bob::learn::misc::FABase& m, - const boost::shared_ptr<bob::learn::misc::GMMStats>& stats, const size_t id); - /** - * @brief Updates x_ih (of the current person/session) and the - * accumulators to compute U with the cache values m_cache_IdPlusVprod_i, - * m_VtSigmaInv and m_cache_Fn_y_i - */ - void updateX_ih(const size_t id, const size_t h); - /** - * @brief Updates x - */ - void updateX(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - /** - * @brief Computes the accumulators m_acc_U_A1 and m_acc_U_A2 for U - * U = A2 * A1^-1 - */ - void computeAccumulatorsU(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - /** - * @brief Updates U from the accumulators m_acc_U_A1 and m_acc_U_A2 - */ - void updateU(blitz::Array<double,2>& U); - - - /**** z and D functions ****/ - /** - * @brief Computes diag(D) * diag(sigma)^-1 - */ - void computeDtSigmaInv(const bob::learn::misc::FABase& m); - /** - * @brief Computes Dt_{c} * diag(sigma)^-1 * D_{c} for each Gaussian c - */ - void computeDProd(const bob::learn::misc::FABase& m); - /** - * @brief Computes (I+diag(d)t*diag(sigma)^-1*Ni*diag(d))^-1 which occurs - * in the z estimation for the given person - */ - void computeIdPlusDProd_i(const size_t id); - /** - * @brief Computes sum_{sessions h}(N_{i,h}*(o_{i,h} - m - V*y_{i} - U*x_{i,h}) - * which occurs in the y estimation of the given person - */ - void computeFn_z_i(const bob::learn::misc::FABase& m, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& stats, const size_t id); - /** - * @brief Updates z_i (of the current person) and the accumulators to - * compute D with the cache values m_cache_IdPlusDProd_i, m_VtSigmaInv - * and m_cache_Fn_z_i - */ - void updateZ_i(const size_t id); - /** - * @brief Updates z and the accumulators to compute D - */ - void updateZ(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - /** - * @brief Computes the accumulators m_acc_D_A1 and m_acc_D_A2 for d - * d = A2 * A1^-1 - */ - void computeAccumulatorsD(const bob::learn::misc::FABase& m, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& stats); - /** - * @brief Updates d from the accumulators m_acc_D_A1 and m_acc_D_A2 - */ - void updateD(blitz::Array<double,1>& d); - - - /** - * @brief Get the zeroth order statistics - */ - const std::vector<blitz::Array<double,1> >& getNacc() const - { return m_Nacc; } - /** - * @brief Get the first order statistics - */ - const std::vector<blitz::Array<double,1> >& getFacc() const - { return m_Facc; } - /** - * @brief Get the x speaker factors - */ - const std::vector<blitz::Array<double,2> >& getX() const - { return m_x; } - /** - * @brief Get the y speaker factors - */ - const std::vector<blitz::Array<double,1> >& getY() const - { return m_y; } - /** - * @brief Get the z speaker factors - */ - const std::vector<blitz::Array<double,1> >& getZ() const - { return m_z; } - /** - * @brief Set the x speaker factors - */ - void setX(const std::vector<blitz::Array<double,2> >& X) - { m_x = X; } - /** - * @brief Set the y speaker factors - */ - void setY(const std::vector<blitz::Array<double,1> >& y) - { m_y = y; } - /** - * @brief Set the z speaker factors - */ - void setZ(const std::vector<blitz::Array<double,1> >& z) - { m_z = z; } - - /** - * @brief Initializes the cache to process the given statistics - */ - void initCache(); - - /** - * @brief Getters for the accumulators - */ - const blitz::Array<double,3>& getAccVA1() const - { return m_acc_V_A1; } - const blitz::Array<double,2>& getAccVA2() const - { return m_acc_V_A2; } - const blitz::Array<double,3>& getAccUA1() const - { return m_acc_U_A1; } - const blitz::Array<double,2>& getAccUA2() const - { return m_acc_U_A2; } - const blitz::Array<double,1>& getAccDA1() const - { return m_acc_D_A1; } - const blitz::Array<double,1>& getAccDA2() const - { return m_acc_D_A2; } - - /** - * @brief Setters for the accumulators, Very useful if the e-Step needs - * to be parallelized. - */ - void setAccVA1(const blitz::Array<double,3>& acc) - { bob::core::array::assertSameShape(acc, m_acc_V_A1); - m_acc_V_A1 = acc; } - void setAccVA2(const blitz::Array<double,2>& acc) - { bob::core::array::assertSameShape(acc, m_acc_V_A2); - m_acc_V_A2 = acc; } - void setAccUA1(const blitz::Array<double,3>& acc) - { bob::core::array::assertSameShape(acc, m_acc_U_A1); - m_acc_U_A1 = acc; } - void setAccUA2(const blitz::Array<double,2>& acc) - { bob::core::array::assertSameShape(acc, m_acc_U_A2); - m_acc_U_A2 = acc; } - void setAccDA1(const blitz::Array<double,1>& acc) - { bob::core::array::assertSameShape(acc, m_acc_D_A1); - m_acc_D_A1 = acc; } - void setAccDA2(const blitz::Array<double,1>& acc) - { bob::core::array::assertSameShape(acc, m_acc_D_A2); - m_acc_D_A2 = acc; } - - - private: - size_t m_Nid; // Number of identities - size_t m_dim_C; // Number of Gaussian components of the UBM GMM - size_t m_dim_D; // Dimensionality of the feature space - size_t m_dim_ru; // Rank of the U subspace - size_t m_dim_rv; // Rank of the V subspace - - std::vector<blitz::Array<double,2> > m_x; // matrix x of speaker factors for eigenchannels U, for each client - std::vector<blitz::Array<double,1> > m_y; // vector y of spealer factors for eigenvoices V, for each client - std::vector<blitz::Array<double,1> > m_z; // vector z of spealer factors for eigenvoices Z, for each client - - std::vector<blitz::Array<double,1> > m_Nacc; // Sum of the zeroth order statistics over the sessions for each client, dimension C - std::vector<blitz::Array<double,1> > m_Facc; // Sum of the first order statistics over the sessions for each client, dimension CD - - // Accumulators for the M-step - blitz::Array<double,3> m_acc_V_A1; - blitz::Array<double,2> m_acc_V_A2; - blitz::Array<double,3> m_acc_U_A1; - blitz::Array<double,2> m_acc_U_A2; - blitz::Array<double,1> m_acc_D_A1; - blitz::Array<double,1> m_acc_D_A2; - - // Cache/Precomputation - blitz::Array<double,2> m_cache_VtSigmaInv; // Vt * diag(sigma)^-1 - blitz::Array<double,3> m_cache_VProd; // first dimension is the Gaussian id - blitz::Array<double,2> m_cache_IdPlusVProd_i; - blitz::Array<double,1> m_cache_Fn_y_i; - - blitz::Array<double,2> m_cache_UtSigmaInv; // Ut * diag(sigma)^-1 - blitz::Array<double,3> m_cache_UProd; // first dimension is the Gaussian id - blitz::Array<double,2> m_cache_IdPlusUProd_ih; - blitz::Array<double,1> m_cache_Fn_x_ih; - - blitz::Array<double,1> m_cache_DtSigmaInv; // Dt * diag(sigma)^-1 - blitz::Array<double,1> m_cache_DProd; // supervector length dimension - blitz::Array<double,1> m_cache_IdPlusDProd_i; - blitz::Array<double,1> m_cache_Fn_z_i; - - // Working arrays - mutable blitz::Array<double,2> m_tmp_ruru; - mutable blitz::Array<double,2> m_tmp_ruD; - mutable blitz::Array<double,2> m_tmp_rvrv; - mutable blitz::Array<double,2> m_tmp_rvD; - mutable blitz::Array<double,1> m_tmp_rv; - mutable blitz::Array<double,1> m_tmp_ru; - mutable blitz::Array<double,1> m_tmp_CD; - mutable blitz::Array<double,1> m_tmp_CD_b; -}; - - -} } } // namespaces - -#endif /* BOB_LEARN_MISC_FABASETRAINER_H */ diff --git a/bob/learn/misc/include/bob.learn.misc/GMMBaseTrainer.h b/bob/learn/misc/include/bob.learn.misc/GMMBaseTrainer.h deleted file mode 100644 index 4015055..0000000 --- a/bob/learn/misc/include/bob.learn.misc/GMMBaseTrainer.h +++ /dev/null @@ -1,161 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * @brief This class implements the E-step of the expectation-maximisation algorithm for a GMM Machine. - * @details See Section 9.2.2 of Bishop, "Pattern recognition and machine learning", 2006 - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_GMMBASETRAINER_H -#define BOB_LEARN_MISC_GMMBASETRAINER_H - -#include <bob.learn.misc/GMMMachine.h> -#include <bob.learn.misc/GMMStats.h> -#include <limits> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class implements the E-step of the expectation-maximisation - * algorithm for a GMM Machine. - * @details See Section 9.2.2 of Bishop, - * "Pattern recognition and machine learning", 2006 - */ -class GMMBaseTrainer -{ - public: - /** - * @brief Default constructor - */ - GMMBaseTrainer(const bool update_means=true, - const bool update_variances=false, - const bool update_weights=false, - const double mean_var_update_responsibilities_threshold = std::numeric_limits<double>::epsilon()); - - /** - * @brief Copy constructor - */ - GMMBaseTrainer(const GMMBaseTrainer& other); - - /** - * @brief Destructor - */ - virtual ~GMMBaseTrainer(); - - /** - * @brief Initialization before the EM steps - */ - void initialize(bob::learn::misc::GMMMachine& gmm); - - /** - * @brief Calculates and saves statistics across the dataset, - * and saves these as m_ss. Calculates the average - * log likelihood of the observations given the GMM, - * and returns this in average_log_likelihood. - * - * The statistics, m_ss, will be used in the mStep() that follows. - * Implements EMTrainer::eStep(double &) - */ - void eStep(bob::learn::misc::GMMMachine& gmm, - const blitz::Array<double,2>& data); - - /** - * @brief Computes the likelihood using current estimates of the latent - * variables - */ - double computeLikelihood(bob::learn::misc::GMMMachine& gmm); - - - /** - * @brief Assigns from a different GMMBaseTrainer - */ - GMMBaseTrainer& operator=(const GMMBaseTrainer &other); - - /** - * @brief Equal to - */ - bool operator==(const GMMBaseTrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const GMMBaseTrainer& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const GMMBaseTrainer& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Returns the internal GMM statistics. Useful to parallelize the - * E-step - */ - const bob::learn::misc::GMMStats getGMMStats() const - { return m_ss; } - - /** - * @brief Sets the internal GMM statistics. Useful to parallelize the - * E-step - */ - void setGMMStats(const bob::learn::misc::GMMStats& stats); - - /** - * update means on each iteration - */ - bool getUpdateMeans() - {return m_update_means;} - - /** - * update variances on each iteration - */ - bool getUpdateVariances() - {return m_update_variances;} - - - bool getUpdateWeights() - {return m_update_weights;} - - - double getMeanVarUpdateResponsibilitiesThreshold() - {return m_mean_var_update_responsibilities_threshold;} - - - private: - - /** - * These are the sufficient statistics, calculated during the - * E-step and used during the M-step - */ - bob::learn::misc::GMMStats m_ss; - - - /** - * update means on each iteration - */ - bool m_update_means; - - /** - * update variances on each iteration - */ - bool m_update_variances; - - /** - * update weights on each iteration - */ - bool m_update_weights; - - /** - * threshold over the responsibilities of the Gaussians - * Equations 9.24, 9.25 of Bishop, "Pattern recognition and machine learning", 2006 - * require a division by the responsibilities, which might be equal to zero - * because of numerical issue. This threshold is used to avoid such divisions. - */ - double m_mean_var_update_responsibilities_threshold; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_GMMBASETRAINER_H diff --git a/bob/learn/misc/include/bob.learn.misc/GMMMachine.h b/bob/learn/misc/include/bob.learn.misc/GMMMachine.h deleted file mode 100644 index bf3808a..0000000 --- a/bob/learn/misc/include/bob.learn.misc/GMMMachine.h +++ /dev/null @@ -1,371 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief This class implements a multivariate diagonal Gaussian distribution. - * @details See Section 2.3.9 of Bishop, "Pattern recognition and machine learning", 2006 - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_GMMMACHINE_H -#define BOB_LEARN_MISC_GMMMACHINE_H - -#include <bob.learn.misc/Gaussian.h> -#include <bob.learn.misc/GMMStats.h> -#include <bob.io.base/HDF5File.h> -#include <iostream> -#include <boost/shared_ptr.hpp> -#include <vector> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class implements a multivariate diagonal Gaussian distribution. - * @details See Section 2.3.9 of Bishop, "Pattern recognition and machine learning", 2006 - */ -class GMMMachine -{ - public: - /** - * Default constructor - */ - GMMMachine(); - - /** - * Constructor - * @param[in] n_gaussians The number of Gaussian components - * @param[in] n_inputs The feature dimensionality - */ - GMMMachine(const size_t n_gaussians, const size_t n_inputs); - - /** - * Copy constructor - * (Needed because the GMM points to its constituent Gaussian members) - */ - GMMMachine(const GMMMachine& other); - - /** - * Constructor from a Configuration - */ - GMMMachine(bob::io::base::HDF5File& config); - - /** - * Assignment - */ - GMMMachine& operator=(const GMMMachine &other); - - /** - * Equal to - */ - bool operator==(const GMMMachine& b) const; - - /** - * Not equal to - */ - bool operator!=(const GMMMachine& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const GMMMachine& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * Destructor - */ - virtual ~GMMMachine(); - - - /** - * Reset the input dimensionality, and the number of Gaussian components. - * Initialises the weights to uniform distribution. - * @param n_gaussians The number of Gaussian components - * @param n_inputs The feature dimensionality - */ - void resize(const size_t n_gaussians, const size_t n_inputs); - - - ///////////////////////// - // Getters - //////////////////////// - - /** - * Get number of inputs - */ - size_t getNInputs() const - { return m_n_inputs; } - - /** - * Get the weights ("mixing coefficients") of the Gaussian components - */ - const blitz::Array<double,1>& getWeights() const - { return m_weights; } - - /** - * Get the logarithm of the weights of the Gaussian components - */ - inline const blitz::Array<double,1>& getLogWeights() const - { return m_cache_log_weights; } - - - /** - * Get the means - */ - const blitz::Array<double,2> getMeans() const; - - /** - * Get the mean supervector - */ - void getMeanSupervector(blitz::Array<double,1> &mean_supervector) const; - - /** - * Returns a const reference to the supervector (Put in cache) - */ - const blitz::Array<double,1>& getMeanSupervector() const; - - /** - * Get the variances - */ - const blitz::Array<double,2> getVariances() const; - - /** - * Returns a const reference to the supervector (Put in cache) - */ - const blitz::Array<double,1>& getVarianceSupervector() const; - - - /** - * Get the variance flooring thresholds for each Gaussian in each dimension - */ - const blitz::Array<double,2> getVarianceThresholds() const; - - - - /////////////////////// - // Setters - /////////////////////// - - /** - * Set the weights - */ - void setWeights(const blitz::Array<double,1> &weights); - - /** - * Set the means - */ - void setMeans(const blitz::Array<double,2> &means); - /** - * Set the means from a supervector - */ - void setMeanSupervector(const blitz::Array<double,1> &mean_supervector); - - /** - * Set the variances - */ - void setVariances(const blitz::Array<double,2> &variances); - /** - * Set the variances from a supervector - */ - void setVarianceSupervector(const blitz::Array<double,1> &variance_supervector); - - /** - * Set the variance flooring thresholds in each dimension - */ - void setVarianceThresholds(const double value); - /** - * Set the variance flooring thresholds in each dimension - * (equal for all Gaussian components) - */ - void setVarianceThresholds(blitz::Array<double,1> variance_thresholds); - /** - * Set the variance flooring thresholds for each Gaussian in each dimension - */ - void setVarianceThresholds(const blitz::Array<double,2> &variance_thresholds); - - - //////////////// - // Methods - ///////////////// - - /** - * Get the weights in order to be updated - * ("mixing coefficients") of the Gaussian components - * @warning Only trainers should use this function for efficiency reason - */ - inline blitz::Array<double,1>& updateWeights() - { return m_weights; } - - - /** - * Update the log of the weights in cache - * @warning Should be used by trainer only when using updateWeights() - */ - void recomputeLogWeights() const; - - - - /** - * Output the log likelihood of the sample, x, i.e. log(p(x|GMMMachine)) - * @param[in] x The sample - * @param[out] log_weighted_gaussian_likelihoods For each Gaussian, i: log(weight_i*p(x|Gaussian_i)) - * @return The GMMMachine log likelihood, i.e. log(p(x|GMMMachine)) - * Dimensions of the parameters are checked - */ - double logLikelihood(const blitz::Array<double, 1> &x, blitz::Array<double,1> &log_weighted_gaussian_likelihoods) const; - - /** - * Output the log likelihood of the sample, x, i.e. log(p(x|GMMMachine)) - * @param[in] x The sample - * @param[out] log_weighted_gaussian_likelihoods For each Gaussian, i: log(weight_i*p(x|Gaussian_i)) - * @return The GMMMachine log likelihood, i.e. log(p(x|GMMMachine)) - * @warning Dimensions of the parameters are not checked - */ - double logLikelihood_(const blitz::Array<double, 1> &x, blitz::Array<double,1> &log_weighted_gaussian_likelihoods) const; - - /** - * Output the log likelihood of the sample, x, i.e. log(p(x|GMM)) - * @param[in] x The sample - * Dimension of the input is checked - */ - double logLikelihood(const blitz::Array<double, 1> &x) const; - - /** - * Output the log likelihood of the sample, x, i.e. log(p(x|GMM)) - * @param[in] x The sample - * @warning Dimension of the input is not checked - */ - double logLikelihood_(const blitz::Array<double, 1> &x) const; - - /** - * Accumulates the GMM statistics over a set of samples. - * @see bool accStatistics(const blitz::Array<double,1> &x, GMMStats stats) - * Dimensions of the parameters are checked - */ - void accStatistics(const blitz::Array<double,2>& input, GMMStats &stats) const; - - /** - * Accumulates the GMM statistics over a set of samples. - * @see bool accStatistics(const blitz::Array<double,1> &x, GMMStats stats) - * @warning Dimensions of the parameters are not checked - */ - void accStatistics_(const blitz::Array<double,2>& input, GMMStats &stats) const; - - /** - * Accumulate the GMM statistics for this sample. - * - * @param[in] x The current sample - * @param[out] stats The accumulated statistics - * Dimensions of the parameters are checked - */ - void accStatistics(const blitz::Array<double,1> &x, GMMStats &stats) const; - - /** - * Accumulate the GMM statistics for this sample. - * - * @param[in] x The current sample - * @param[out] stats The accumulated statistics - * @warning Dimensions of the parameters are not checked - */ - void accStatistics_(const blitz::Array<double,1> &x, GMMStats &stats) const; - - - /** - * Get a pointer to a particular Gaussian component - * @param[in] i The index of the Gaussian component - * @return A smart pointer to the i'th Gaussian component - * if it exists, otherwise throws an exception - */ - boost::shared_ptr<bob::learn::misc::Gaussian> getGaussian(const size_t i); - - - /** - * Return the number of Gaussian components - */ - inline size_t getNGaussians() const - { return m_n_gaussians; } - - /** - * Save to a Configuration - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * Load from a Configuration - */ - void load(bob::io::base::HDF5File& config); - - /** - * Load/Reload mean/variance supervector in cache - */ - void reloadCacheSupervectors() const; - - friend std::ostream& operator<<(std::ostream& os, const GMMMachine& machine); - - - private: - /** - * Copy another GMMMachine - */ - void copy(const GMMMachine&); - - /** - * The number of Gaussian components - */ - size_t m_n_gaussians; - - /** - * The feature dimensionality - */ - size_t m_n_inputs; - - /** - * The Gaussian components - */ - std::vector<boost::shared_ptr<Gaussian> > m_gaussians; - - /** - * The weights (also known as "mixing coefficients") - */ - blitz::Array<double,1> m_weights; - - /** - * Update the mean and variance supervectors - * in cache (into a 1D blitz array) - */ - void updateCacheSupervectors() const; - - /** - * Initialise the cache members (allocate arrays) - */ - void initCache() const; - - /** - * Accumulate the GMM statistics for this sample. - * Called by accStatistics() and accStatistics_() - * - * @param[in] x The current sample - * @param[out] stats The accumulated statistics - * @param[in] log_likelihood The current log_likelihood - * @warning Dimensions of the parameters are not checked - */ - void accStatisticsInternal(const blitz::Array<double,1> &x, - GMMStats &stats, const double log_likelihood) const; - - - /// Some cache arrays to avoid re-allocation when computing log-likelihoods - mutable blitz::Array<double,1> m_cache_log_weights; - mutable blitz::Array<double,1> m_cache_log_weighted_gaussian_likelihoods; - mutable blitz::Array<double,1> m_cache_P; - mutable blitz::Array<double,2> m_cache_Px; - - mutable blitz::Array<double,1> m_cache_mean_supervector; - mutable blitz::Array<double,1> m_cache_variance_supervector; - mutable bool m_cache_supervector; - -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_GMMMACHINE_H diff --git a/bob/learn/misc/include/bob.learn.misc/GMMStats.h b/bob/learn/misc/include/bob.learn.misc/GMMStats.h deleted file mode 100644 index 4dbef6c..0000000 --- a/bob/learn/misc/include/bob.learn.misc/GMMStats.h +++ /dev/null @@ -1,141 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_GMMSTATS_H -#define BOB_LEARN_MISC_GMMSTATS_H - -#include <blitz/array.h> -#include <bob.io.base/HDF5File.h> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief A container for GMM statistics. - * @see GMMMachine - * - * With respect to Reynolds, "Speaker Verification Using Adapted - * Gaussian Mixture Models", DSP, 2000: - * Eq (8) is n(i) - * Eq (9) is sumPx(i) / n(i) - * Eq (10) is sumPxx(i) / n(i) - */ -class GMMStats { - public: - - /** - * Default constructor. - */ - GMMStats(); - - /** - * Constructor. - * @param n_gaussians Number of Gaussians in the mixture model. - * @param n_inputs Feature dimensionality. - */ - GMMStats(const size_t n_gaussians, const size_t n_inputs); - - /** - * Copy constructor - */ - GMMStats(const GMMStats& other); - - /** - * Constructor (from a Configuration) - */ - GMMStats(bob::io::base::HDF5File& config); - - /** - * Assigment - */ - GMMStats& operator=(const GMMStats& other); - - /** - * Equal to - */ - bool operator==(const GMMStats& b) const; - - /** - * Not Equal to - */ - bool operator!=(const GMMStats& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const GMMStats& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * Updates a GMMStats with another GMMStats - */ - void operator+=(const GMMStats& b); - - /** - * Destructor - */ - ~GMMStats(); - - /** - * Allocates space for the statistics and resets to zero. - * @param n_gaussians Number of Gaussians in the mixture model. - * @param n_inputs Feature dimensionality. - */ - void resize(const size_t n_gaussians, const size_t n_inputs); - - /** - * Resets statistics to zero. - */ - void init(); - - /** - * The accumulated log likelihood of all samples - */ - double log_likelihood; - - /** - * The accumulated number of samples - */ - size_t T; - - /** - * For each Gaussian, the accumulated sum of responsibilities, i.e. the sum of P(gaussian_i|x) - */ - blitz::Array<double,1> n; - - /** - * For each Gaussian, the accumulated sum of responsibility times the sample - */ - blitz::Array<double,2> sumPx; - - /** - * For each Gaussian, the accumulated sum of responsibility times the sample squared - */ - blitz::Array<double,2> sumPxx; - - /** - * Save to a Configuration - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * Load from a Configuration - */ - void load(bob::io::base::HDF5File& config); - - friend std::ostream& operator<<(std::ostream& os, const GMMStats& g); - - private: - /** - * Copy another GMMStats - */ - void copy(const GMMStats&); -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_GMMSTATS_H diff --git a/bob/learn/misc/include/bob.learn.misc/Gaussian.h b/bob/learn/misc/include/bob.learn.misc/Gaussian.h deleted file mode 100644 index acb08fc..0000000 --- a/bob/learn/misc/include/bob.learn.misc/Gaussian.h +++ /dev/null @@ -1,247 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_GAUSSIAN_H -#define BOB_LEARN_MISC_GAUSSIAN_H - -#include <bob.io.base/HDF5File.h> -#include <blitz/array.h> -#include <limits> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class implements a multivariate diagonal Gaussian distribution. - */ -class Gaussian -{ - public: - /** - * Default constructor - */ - Gaussian(); - - /** - * Constructor - * @param[in] n_inputs The feature dimensionality - */ - Gaussian(const size_t n_inputs); - - /** - * Destructor - */ - virtual ~Gaussian(); - - /** - * Copy constructor - */ - Gaussian(const Gaussian& other); - - /** - * Constructs from a configuration file - */ - Gaussian(bob::io::base::HDF5File& config); - - /** - * Assignment - */ - Gaussian& operator=(const Gaussian &other); - - /** - * Equal to - */ - bool operator==(const Gaussian& b) const; - /** - * Not equal to - */ - bool operator!=(const Gaussian& b) const; - /** - * @brief Similar to - */ - bool is_similar_to(const Gaussian& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * Set the input dimensionality, reset the mean to zero - * and the variance to one. - * @see resize() - * @param n_inputs The feature dimensionality - * @warning The mean and variance are not initialized - */ - void setNInputs(const size_t n_inputs); - - /** - * Get the input dimensionality - */ - size_t getNInputs() const - { return m_n_inputs; } - - /** - * Set the input dimensionality, reset the mean to zero - * and the variance to one. - * @see setNInputs() - * @param n_inputs The feature dimensionality - */ - void resize(const size_t n_inputs); - - /** - * Get the mean - */ - inline const blitz::Array<double,1>& getMean() const - { return m_mean; } - - /** - * Get the mean in order to be updated - * @warning Only trainers should use this function for efficiency reason - */ - inline blitz::Array<double,1>& updateMean() - { return m_mean; } - - /** - * Set the mean - */ - void setMean(const blitz::Array<double,1> &mean); - - /** - * Get the variance (the diagonal of the covariance matrix) - */ - inline const blitz::Array<double,1>& getVariance() const - { return m_variance; } - - /** - * Get the variance in order to be updated - * @warning Only trainers should use this function for efficiency reason - */ - inline blitz::Array<double,1>& updateVariance() - { return m_variance; } - - /** - * Set the variance - */ - void setVariance(const blitz::Array<double,1> &variance); - - /** - * Get the variance flooring thresholds - */ - const blitz::Array<double,1>& getVarianceThresholds() const - { return m_variance_thresholds; } - - /** - * Get the variance thresholds in order to be updated - * @warning Only trainers should use this function for efficiency reason - */ - inline blitz::Array<double,1>& updateVarianceThreshods() - { return m_variance_thresholds; } - - /** - * Set the variance flooring thresholds - */ - void setVarianceThresholds(const blitz::Array<double,1> &variance_thresholds); - - /** - * Set the variance flooring thresholds - */ - void setVarianceThresholds(const double value); - - /** - * Apply the variance flooring thresholds - * This method is called when using setVarianceThresholds() - * @warning It is only useful when using updateVarianceThreshods(), - * and should mostly be done by trainers - */ - void applyVarianceThresholds(); - - /** - * Output the log likelihood of the sample, x - * @param x The data sample (feature vector) - */ - double logLikelihood(const blitz::Array<double,1>& x) const; - - /** - * Output the log likelihood of the sample, x - * @param x The data sample (feature vector) - * @warning The input is NOT checked - */ - double logLikelihood_(const blitz::Array<double,1>& x) const; - - /** - * Saves to a Configuration - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * Loads from a Configuration - */ - void load(bob::io::base::HDF5File& config); - - /** - * Prints a Gaussian in the output stream - */ - friend std::ostream& operator<<(std::ostream& os, const bob::learn::misc::Gaussian& g); - - - private: - /** - * Copies another Gaussian - */ - void copy(const Gaussian& other); - - /** - * Computes n_inputs * log(2*pi) - */ - void preComputeNLog2Pi(); - - /** - * Computes and stores the value of g_norm, - * to later speed up evaluation of logLikelihood() - * Note: g_norm is defined as follows: - * log(Gaussian pdf) = log(1/((2pi)^(k/2)(det)^(1/2)) * exp(...)) - * = -1/2 * g_norm * (...) - */ - void preComputeConstants(); - - /** - * The mean vector of the Gaussian - */ - blitz::Array<double,1> m_mean; - - /** - * The diagonal of the covariance matrix (assumed to be diagonal) - */ - blitz::Array<double,1> m_variance; - - /** - * The variance flooring thresholds, i.e. the minimum allowed - * value of variance in each dimension. - * The variance will be set to this value if an attempt is made - * to set it to a smaller value. - */ - blitz::Array<double,1> m_variance_thresholds; - - /** - * A constant that depends only on the feature dimensionality - * m_n_log2pi = n_inputs * log(2*pi) (used to compute m_gnorm) - */ - double m_n_log2pi; - - /** - * A constant that depends only on the feature dimensionality - * (m_n_inputs) and the variance - * @see bool preComputeConstants() - */ - double m_g_norm; - - /** - * The number of inputs (feature dimensionality) - */ - size_t m_n_inputs; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_GAUSSIAN_H diff --git a/bob/learn/misc/include/bob.learn.misc/ISVBase.h b/bob/learn/misc/include/bob.learn.misc/ISVBase.h deleted file mode 100644 index c062076..0000000 --- a/bob/learn/misc/include/bob.learn.misc/ISVBase.h +++ /dev/null @@ -1,228 +0,0 @@ -/** - * @date Tue Jan 27 16:02:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief A base class for Joint Factor Analysis-like machines - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_ISVBASE_H -#define BOB_LEARN_MISC_ISVBASE_H - -#include <stdexcept> - -#include <bob.learn.misc/GMMMachine.h> -#include <bob.learn.misc/FABase.h> - -#include <bob.io.base/HDF5File.h> -#include <boost/shared_ptr.hpp> - -namespace bob { namespace learn { namespace misc { - - -/** - * @brief An ISV Base class which contains U and D matrices - * TODO: add a reference to the journal articles - */ -class ISVBase -{ - public: - /** - * @brief Default constructor. Builds an otherwise invalid 0 x 0 ISVBase - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - */ - ISVBase(); - - /** - * @brief Constructor. Builds a new ISVBase. - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - * - * @param ubm The Universal Background Model - * @param ru size of U (CD x ru) - * @warning ru SHOULD BE >= 1. - */ - ISVBase(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, const size_t ru=1); - - /** - * @brief Copy constructor - */ - ISVBase(const ISVBase& other); - - /** - * @deprecated Starts a new JFAMachine from an existing Configuration object. - */ - ISVBase(bob::io::base::HDF5File& config); - - /** - * @brief Just to virtualise the destructor - */ - virtual ~ISVBase(); - - /** - * @brief Assigns from a different JFA machine - */ - ISVBase& operator=(const ISVBase &other); - - /** - * @brief Equal to - */ - bool operator==(const ISVBase& b) const - { return m_base.operator==(b.m_base); } - - /** - * @brief Not equal to - */ - bool operator!=(const ISVBase& b) const - { return m_base.operator!=(b.m_base); } - - /** - * @brief Similar to - */ - bool is_similar_to(const ISVBase& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const - { return m_base.is_similar_to(b.m_base, r_epsilon, a_epsilon); } - - /** - * @brief Saves machine to an HDF5 file - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * @brief Loads data from an existing configuration object. Resets - * the current state. - */ - void load(bob::io::base::HDF5File& config); - - /** - * @brief Returns the UBM - */ - const boost::shared_ptr<bob::learn::misc::GMMMachine> getUbm() const - { return m_base.getUbm(); } - - /** - * @brief Returns the U matrix - */ - const blitz::Array<double,2>& getU() const - { return m_base.getU(); } - - /** - * @brief Returns the diagonal matrix diag(d) (as a 1D vector) - */ - const blitz::Array<double,1>& getD() const - { return m_base.getD(); } - - /** - * @brief Returns the number of Gaussian components C - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNGaussians() const - { return m_base.getNGaussians(); } - - /** - * @brief Returns the feature dimensionality D - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNInputs() const - { return m_base.getNInputs(); } - - /** - * @brief Returns the supervector length CD - * (CxD: Number of Gaussian components by the feature dimensionality) - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getSupervectorLength() const - { return m_base.getSupervectorLength(); } - - /** - * @brief Returns the size/rank ru of the U matrix - */ - const size_t getDimRu() const - { return m_base.getDimRu(); } - - /** - * @brief Resets the dimensionality of the subspace U - * U is hence uninitialized. - */ - void resize(const size_t ru) - { m_base.resize(ru, 1); - blitz::Array<double,2>& V = m_base.updateV(); - V = 0; - } - - /** - * @brief Returns the U matrix in order to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,2>& updateU() - { return m_base.updateU(); } - - /** - * @brief Returns the diagonal matrix diag(d) (as a 1D vector) in order - * to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,1>& updateD() - { return m_base.updateD(); } - - - /** - * @brief Sets (the mean supervector of) the Universal Background Model - * U, V and d are uninitialized in case of dimensions update (C or D) - */ - void setUbm(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm) - { m_base.setUbm(ubm); } - - /** - * @brief Sets the U matrix - */ - void setU(const blitz::Array<double,2>& U) - { m_base.setU(U); } - - /** - * @brief Sets the diagonal matrix diag(d) - * (a 1D vector is expected as an argument) - */ - void setD(const blitz::Array<double,1>& d) - { m_base.setD(d); } - - /** - * @brief Estimates x from the GMM statistics considering the LPT - * assumption, that is the latent session variable x is approximated - * using the UBM - */ - void estimateX(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& x) const - { m_base.estimateX(gmm_stats, x); } - - /** - * @brief Precompute (put U^{T}.Sigma^{-1} matrix in cache) - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - void precompute() - { m_base.updateCacheUbmUVD(); } - - /** - * @brief Returns the FABase member - */ - const bob::learn::misc::FABase& getBase() const - { return m_base; } - - - private: - // FABase - bob::learn::misc::FABase m_base; -}; - - -} } } // namespaces - -#endif // BOB_LEARN_MISC_JFABASE_H diff --git a/bob/learn/misc/include/bob.learn.misc/ISVMachine.h b/bob/learn/misc/include/bob.learn.misc/ISVMachine.h deleted file mode 100644 index 16adfb9..0000000 --- a/bob/learn/misc/include/bob.learn.misc/ISVMachine.h +++ /dev/null @@ -1,230 +0,0 @@ -/** - * @date Tue Jan 27 16:06:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief A base class for Joint Factor Analysis-like machines - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_ISVMACHINE_H -#define BOB_LEARN_MISC_ISVMACHINE_H - -#include <stdexcept> - -#include <bob.learn.misc/ISVBase.h> -#include <bob.learn.misc/GMMMachine.h> -#include <bob.learn.misc/LinearScoring.h> - -#include <bob.io.base/HDF5File.h> -#include <boost/shared_ptr.hpp> - -namespace bob { namespace learn { namespace misc { - - -/** - * @brief A ISVMachine which is associated to a ISVBase that contains - * U D matrices. - * TODO: add a reference to the journal articles - */ -class ISVMachine -{ - public: - /** - * @brief Default constructor. Builds an otherwise invalid 0 x 0 ISVMachine - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - */ - ISVMachine(); - - /** - * @brief Constructor. Builds a new ISVMachine. - * - * @param isv_base The ISVBase associated with this machine - */ - ISVMachine(const boost::shared_ptr<bob::learn::misc::ISVBase> isv_base); - - /** - * @brief Copy constructor - */ - ISVMachine(const ISVMachine& other); - - /** - * @brief Starts a new ISVMachine from an existing Configuration object. - */ - ISVMachine(bob::io::base::HDF5File& config); - - /** - * @brief Just to virtualise the destructor - */ - virtual ~ISVMachine(); - - /** - * @brief Assigns from a different ISV machine - */ - ISVMachine& operator=(const ISVMachine &other); - - /** - * @brief Equal to - */ - bool operator==(const ISVMachine& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const ISVMachine& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const ISVMachine& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Saves machine to an HDF5 file - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * @brief Loads data from an existing configuration object. Resets - * the current state. - */ - void load(bob::io::base::HDF5File& config); - - - /** - * @brief Returns the number of Gaussian components C - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNGaussians() const - { return m_isv_base->getNGaussians(); } - - /** - * @brief Returns the feature dimensionality D - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNInputs() const - { return m_isv_base->getNInputs(); } - - /** - * @brief Returns the supervector length CD - * (CxD: Number of Gaussian components by the feature dimensionality) - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getSupervectorLength() const - { return m_isv_base->getSupervectorLength(); } - - /** - * @brief Returns the size/rank ru of the U matrix - */ - const size_t getDimRu() const - { return m_isv_base->getDimRu(); } - - /** - * @brief Returns the x session factor - */ - const blitz::Array<double,1>& getX() const - { return m_cache_x; } - - /** - * @brief Returns the z speaker factor - */ - const blitz::Array<double,1>& getZ() const - { return m_z; } - - /** - * @brief Returns the z speaker factors in order to update it - */ - blitz::Array<double,1>& updateZ() - { return m_z; } - - /** - * @brief Returns the V matrix - */ - void setZ(const blitz::Array<double,1>& z); - - /** - * @brief Returns the ISVBase - */ - const boost::shared_ptr<bob::learn::misc::ISVBase> getISVBase() const - { return m_isv_base; } - - /** - * @brief Sets the ISVBase - */ - void setISVBase(const boost::shared_ptr<bob::learn::misc::ISVBase> isv_base); - - - /** - * @brief Estimates x from the GMM statistics considering the LPT - * assumption, that is the latent session variable x is approximated - * using the UBM - */ - void estimateX(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& x) const - { m_isv_base->estimateX(gmm_stats, x); } - /** - * @brief Estimates Ux from the GMM statistics considering the LPT - * assumption, that is the latent session variable x is approximated - * using the UBM - */ - void estimateUx(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& Ux); - - /** - * @brief Execute the machine - * - * @param input input data used by the machine - * @warning Inputs are checked - * @return score value computed by the machine - */ - double forward(const bob::learn::misc::GMMStats& input); - /** - * @brief Computes a score for the given UBM statistics and given the - * Ux vector - */ - double forward(const bob::learn::misc::GMMStats& gmm_stats, - const blitz::Array<double,1>& Ux); - - /** - * @brief Execute the machine - * - * @param input input data used by the machine - * @warning Inputs are NOT checked - * @return score value computed by the machine - */ - double forward_(const bob::learn::misc::GMMStats& input); - - private: - /** - * @brief Resize latent variable according to the ISVBase - */ - void resize(); - /** - * @ Update cache - */ - void updateCache(); - /** - * @brief Resize working arrays - */ - void resizeTmp(); - - // UBM - boost::shared_ptr<bob::learn::misc::ISVBase> m_isv_base; - - // y and z vectors/factors learned during the enrolment procedure - blitz::Array<double,1> m_z; - - // cache - blitz::Array<double,1> m_cache_mDz; - mutable blitz::Array<double,1> m_cache_x; - - // x vector/factor in cache when computing scores - mutable blitz::Array<double,1> m_tmp_Ux; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_ISVMACHINE_H diff --git a/bob/learn/misc/include/bob.learn.misc/ISVTrainer.h b/bob/learn/misc/include/bob.learn.misc/ISVTrainer.h deleted file mode 100644 index 1f04141..0000000 --- a/bob/learn/misc/include/bob.learn.misc/ISVTrainer.h +++ /dev/null @@ -1,154 +0,0 @@ -/** - * @date Tue Jul 19 12:16:17 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief JFA functions - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_ISVTRAINER_H -#define BOB_LEARN_MISC_ISVTRAINER_H - -#include <blitz/array.h> -#include <bob.learn.misc/GMMStats.h> -#include <bob.learn.misc/FABaseTrainer.h> -#include <bob.learn.misc/ISVMachine.h> -#include <vector> - -#include <map> -#include <string> -#include <bob.core/array_copy.h> -#include <boost/shared_ptr.hpp> -#include <boost/random.hpp> -#include <bob.core/logging.h> - -namespace bob { namespace learn { namespace misc { - -class ISVTrainer -{ - public: - /** - * @brief Constructor - */ - ISVTrainer(const double relevance_factor=4.); - - /** - * @brief Copy onstructor - */ - ISVTrainer(const ISVTrainer& other); - - /** - * @brief Destructor - */ - virtual ~ISVTrainer(); - - /** - * @brief Assignment operator - */ - ISVTrainer& operator=(const ISVTrainer& other); - - /** - * @brief Equal to - */ - bool operator==(const ISVTrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const ISVTrainer& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const ISVTrainer& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief This methods performs some initialization before the EM loop. - */ - virtual void initialize(bob::learn::misc::ISVBase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - - /** - * @brief Calculates and saves statistics across the dataset - * The statistics will be used in the mStep() that follows. - */ - virtual void eStep(bob::learn::misc::ISVBase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - - /** - * @brief Performs a maximization step to update the parameters of the - * factor analysis model. - */ - virtual void mStep(bob::learn::misc::ISVBase& machine); - - /** - * @brief Computes the average log likelihood using the current estimates - * of the latent variables. - */ - virtual double computeLikelihood(bob::learn::misc::ISVBase& machine); - - /** - * @brief Enrol a client - */ - void enrol(bob::learn::misc::ISVMachine& machine, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& features, - const size_t n_iter); - - /** - * @brief Get the x speaker factors - */ - const std::vector<blitz::Array<double,2> >& getX() const - { return m_base_trainer.getX(); } - /** - * @brief Get the z speaker factors - */ - const std::vector<blitz::Array<double,1> >& getZ() const - { return m_base_trainer.getZ(); } - /** - * @brief Set the x speaker factors - */ - void setX(const std::vector<blitz::Array<double,2> >& X) - { m_base_trainer.setX(X); } - /** - * @brief Set the z speaker factors - */ - void setZ(const std::vector<blitz::Array<double,1> >& z) - { m_base_trainer.setZ(z); } - - /** - * @brief Getters for the accumulators - */ - const blitz::Array<double,3>& getAccUA1() const - { return m_base_trainer.getAccUA1(); } - const blitz::Array<double,2>& getAccUA2() const - { return m_base_trainer.getAccUA2(); } - - /** - * @brief Setters for the accumulators, Very useful if the e-Step needs - * to be parallelized. - */ - void setAccUA1(const blitz::Array<double,3>& acc) - { m_base_trainer.setAccUA1(acc); } - void setAccUA2(const blitz::Array<double,2>& acc) - { m_base_trainer.setAccUA2(acc); } - - - private: - /** - * @brief Initialize D to sqrt(ubm_var/relevance_factor) - */ - void initializeD(bob::learn::misc::ISVBase& machine) const; - - // Attributes - bob::learn::misc::FABaseTrainer m_base_trainer; - - double m_relevance_factor; - - boost::shared_ptr<boost::mt19937> m_rng; ///< The random number generator for the inialization}; -}; - -} } } // namespaces - -#endif /* BOB_LEARN_MISC_ISVTRAINER_H */ diff --git a/bob/learn/misc/include/bob.learn.misc/IVectorMachine.h b/bob/learn/misc/include/bob.learn.misc/IVectorMachine.h deleted file mode 100644 index 88dd5c1..0000000 --- a/bob/learn/misc/include/bob.learn.misc/IVectorMachine.h +++ /dev/null @@ -1,274 +0,0 @@ -/** - * @date Sat Mar 30 20:55:00 2013 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_IVECTOR_MACHINE_H -#define BOB_LEARN_MISC_IVECTOR_MACHINE_H - -#include <blitz/array.h> -#include <bob.learn.misc/GMMMachine.h> -#include <bob.learn.misc/GMMStats.h> -#include <bob.io.base/HDF5File.h> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief An IVectorMachine consists of a Total Variability subspace \f$T\f$ - * and allows the extraction of IVector\n - * Reference:\n - * "Front-End Factor Analysis For Speaker Verification", - * N. Dehak, P. Kenny, R. Dehak, P. Dumouchel, P. Ouellet, - * IEEE Trans. on Audio, Speech and Language Processing - */ -class IVectorMachine -{ - public: - /** - * @brief Default constructor. Builds an IVectorMachine. - * The Universal Background Model and the matrices \f$T\f$ and - * \f$diag(\Sigma)\f$ are not initialized. - */ - IVectorMachine(); - - /** - * @brief Constructor. Builds a new IVectorMachine. - * The Universal Background Model and the matrices \f$T\f$ and - * \f$diag(\Sigma)\f$ are not initialized. - * - * @param ubm The Universal Background Model - * @param rt size of \f$T\f$ (CD x rt) - * @param variance_threshold variance flooring threshold for the - * \f$\Sigma\f$ (diagonal) matrix - * @warning rt SHOULD BE >= 1. - */ - IVectorMachine(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, - const size_t rt=1, const double variance_threshold=1e-10); - - /** - * @brief Copy constructor - */ - IVectorMachine(const IVectorMachine& other); - - /** - * @brief Starts a new IVectorMachine from an existing Configuration object. - */ - IVectorMachine(bob::io::base::HDF5File& config); - - /** - * @brief Destructor - */ - virtual ~IVectorMachine(); - - /** - * @brief Assigns from a different IVectorMachine - */ - IVectorMachine& operator=(const IVectorMachine &other); - - /** - * @brief Equal to - */ - bool operator==(const IVectorMachine& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const IVectorMachine& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const IVectorMachine& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Saves model to an HDF5 file - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * @brief Loads data from an existing configuration object. Resets - * the current state. - */ - void load(bob::io::base::HDF5File& config); - - /** - * @brief Returns the UBM - */ - const boost::shared_ptr<bob::learn::misc::GMMMachine> getUbm() const - { return m_ubm; } - - /** - * @brief Returns the \f$T\f$ matrix - */ - const blitz::Array<double,2>& getT() const - { return m_T; } - - /** - * @brief Returns the \f$\Sigma\f$ (diagonal) matrix as a 1D array - */ - const blitz::Array<double,1>& getSigma() const - { return m_sigma; } - - /** - * @brief Gets the variance flooring threshold - */ - const double getVarianceThreshold() const - { return m_variance_threshold; } - - /** - * @brief Returns the number of Gaussian components C. - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNGaussians() const - { return m_ubm->getNGaussians(); } - - /** - * @brief Returns the feature dimensionality D. - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNInputs() const - { return m_ubm->getNInputs(); } - - /** - * @brief Returns the supervector length CD. - * (CxD: Number of Gaussian components by the feature dimensionality) - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getSupervectorLength() const - { return m_ubm->getNGaussians()*m_ubm->getNInputs(); } - - /** - * @brief Returns the size/rank rt of the \f$T\f$ matrix - */ - const size_t getDimRt() const - { return m_rt; } - - /** - * @brief Resets the dimensionality of the subspace \f$T\f$. - * \f$T\f$ is hence uninitialized. - */ - void resize(const size_t rt); - - /** - * @brief Returns the \f$T\f$ matrix in order to update it. - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,2>& updateT() - { return m_T; } - - /** - * @brief Returns the \f$\Sigma\f$ (diagonal) matrix in order to update it. - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,1>& updateSigma() - { return m_sigma; } - - /** - * @brief Sets (the mean supervector of) the Universal Background Model. - * \f$T\f$ and \f$\Sigma\f$ are uninitialized in case of dimensions update (C or D) - */ - void setUbm(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm); - - /** - * @brief Sets the \f$T\f$ matrix - */ - void setT(const blitz::Array<double,2>& T); - - /** - * @brief Sets the \f$\Sigma\f$ (diagonal) matrix - */ - void setSigma(const blitz::Array<double,1>& sigma); - - /** - * @brief Set the variance flooring threshold - */ - void setVarianceThreshold(const double value); - - /** - * @brief Update arrays in cache - * @warning It is only useful when using updateT() or updateSigma() - * and should mostly be done by trainers - */ - void precompute(); - - /** - * @brief Computes \f$(Id + \sum_{c=1}^{C} N_{i,j,c} T^{T} \Sigma_{c}^{-1} T)\f$ - * @warning No check is perform - */ - void computeIdTtSigmaInvT(const bob::learn::misc::GMMStats& input, blitz::Array<double,2>& output) const; - - /** - * @brief Computes \f$T^{T} \Sigma^{-1} \sum_{c=1}^{C} (F_c - N_c ubmmean_{c})\f$ - * @warning No check is perform - */ - void computeTtSigmaInvFnorm(const bob::learn::misc::GMMStats& input, blitz::Array<double,1>& output) const; - - /** - * @brief Extracts an ivector from the input GMM statistics - * - * @param input GMM statistics to be used by the machine - * @param output I-vector computed by the machine - */ - void forward(const bob::learn::misc::GMMStats& input, blitz::Array<double,1>& output) const; - - /** - * @brief Extracts an ivector from the input GMM statistics - * - * @param input GMM statistics to be used by the machine - * @param output I-vector computed by the machine - * @warning Inputs are NOT checked - */ - void forward_(const bob::learn::misc::GMMStats& input, blitz::Array<double,1>& output) const; - - private: - /** - * @brief Apply the variance flooring thresholds. - * This method is called when using setVarianceThresholds() - */ - void applyVarianceThreshold(); - - /** - * @brief Resize cache - */ - void resizeCache(); - /** - * @brief Resize working arrays - */ - void resizeTmp(); - /** - * @brief Resize cache and working arrays before updating cache - */ - void resizePrecompute(); - - // UBM - boost::shared_ptr<bob::learn::misc::GMMMachine> m_ubm; - - // dimensionality - size_t m_rt; ///< size of \f$T\f$ (CD x rt) - - ///< \f$T\f$ and \f$Sigma\f$ matrices. - ///< \f$Sigma\f$ is assumed to be diagonal, and only the diagonal is stored - blitz::Array<double,2> m_T; ///< The total variability matrix \f$T\f$ - blitz::Array<double,1> m_sigma; ///< The diagonal covariance matrix \f$\Sigma\f$ - double m_variance_threshold; ///< The variance flooring threshold - - blitz::Array<double,3> m_cache_Tct_sigmacInv; - blitz::Array<double,3> m_cache_Tct_sigmacInv_Tc; - - mutable blitz::Array<double,1> m_tmp_d; - mutable blitz::Array<double,1> m_tmp_t1; - mutable blitz::Array<double,1> m_tmp_t2; - mutable blitz::Array<double,2> m_tmp_tt; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_IVECTOR_MACHINE_H diff --git a/bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h b/bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h deleted file mode 100644 index 4f496d6..0000000 --- a/bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @date Sat Mar 30 20:55:00 2013 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_IVECTOR_TRAINER_H -#define BOB_LEARN_MISC_IVECTOR_TRAINER_H - -#include <blitz/array.h> -#include <bob.learn.misc/IVectorMachine.h> -#include <bob.learn.misc/GMMStats.h> -#include <boost/shared_ptr.hpp> -#include <vector> -#include <bob.core/array_copy.h> -#include <boost/random.hpp> - -#include <boost/random/mersenne_twister.hpp> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief An IVectorTrainer to learn a Total Variability subspace \f$T\f$ - * (and eventually a covariance matrix \f$\Sigma\f$).\n - * Reference:\n - * "Front-End Factor Analysis For Speaker Verification", - * N. Dehak, P. Kenny, R. Dehak, P. Dumouchel, P. Ouellet, - * IEEE Trans. on Audio, Speech and Language Processing - */ -class IVectorTrainer -{ - public: - /** - * @brief Default constructor. Builds an IVectorTrainer - */ - IVectorTrainer(const bool update_sigma=false); - - /** - * @brief Copy constructor - */ - IVectorTrainer(const IVectorTrainer& other); - - /** - * @brief Destructor - */ - virtual ~IVectorTrainer(); - - /** - * @brief Initialization before the EM loop - */ - virtual void initialize(bob::learn::misc::IVectorMachine& ivector); - - /** - * @brief Calculates statistics across the dataset, - * and saves these as: - * - m_acc_Nij_wij2 - * - m_acc_Fnormij_wij - * - m_acc_Nij (only if update_sigma is enabled) - * - m_acc_Snormij (only if update_sigma is enabled) - * - * These statistics will be used in the mStep() that follows. - */ - virtual void eStep(bob::learn::misc::IVectorMachine& ivector, - const std::vector<bob::learn::misc::GMMStats>& data); - - /** - * @brief Maximisation step: Update the Total Variability matrix \f$T\f$ - * and \f$\Sigma\f$ if update_sigma is enabled. - */ - virtual void mStep(bob::learn::misc::IVectorMachine& ivector); - - - /** - * @brief Assigns from a different IVectorTrainer - */ - IVectorTrainer& operator=(const IVectorTrainer &other); - - /** - * @brief Equal to - */ - bool operator==(const IVectorTrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const IVectorTrainer& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const IVectorTrainer& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Getters for the accumulators - */ - const blitz::Array<double,3>& getAccNijWij2() const - { return m_acc_Nij_wij2; } - const blitz::Array<double,3>& getAccFnormijWij() const - { return m_acc_Fnormij_wij; } - const blitz::Array<double,1>& getAccNij() const - { return m_acc_Nij; } - const blitz::Array<double,2>& getAccSnormij() const - { return m_acc_Snormij; } - - /** - * @brief Setters for the accumulators, Very useful if the e-Step needs - * to be parallelized. - */ - void setAccNijWij2(const blitz::Array<double,3>& acc) - { bob::core::array::assertSameShape(acc, m_acc_Nij_wij2); - m_acc_Nij_wij2 = acc; } - void setAccFnormijWij(const blitz::Array<double,3>& acc) - { bob::core::array::assertSameShape(acc, m_acc_Fnormij_wij); - m_acc_Fnormij_wij = acc; } - void setAccNij(const blitz::Array<double,1>& acc) - { bob::core::array::assertSameShape(acc, m_acc_Nij); - m_acc_Nij = acc; } - void setAccSnormij(const blitz::Array<double,2>& acc) - { bob::core::array::assertSameShape(acc, m_acc_Snormij); - m_acc_Snormij = acc; } - - protected: - // Attributes - bool m_update_sigma; - - // Acccumulators - blitz::Array<double,3> m_acc_Nij_wij2; - blitz::Array<double,3> m_acc_Fnormij_wij; - blitz::Array<double,1> m_acc_Nij; - blitz::Array<double,2> m_acc_Snormij; - - // Working arrays - mutable blitz::Array<double,1> m_tmp_wij; - mutable blitz::Array<double,2> m_tmp_wij2; - mutable blitz::Array<double,1> m_tmp_d1; - mutable blitz::Array<double,1> m_tmp_t1; - mutable blitz::Array<double,2> m_tmp_dd1; - mutable blitz::Array<double,2> m_tmp_dt1; - mutable blitz::Array<double,2> m_tmp_tt1; - mutable blitz::Array<double,2> m_tmp_tt2; - - /** - * @brief The random number generator for the inialization - */ - boost::shared_ptr<boost::mt19937> m_rng; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_IVECTOR_TRAINER_H diff --git a/bob/learn/misc/include/bob.learn.misc/JFABase.h b/bob/learn/misc/include/bob.learn.misc/JFABase.h deleted file mode 100644 index 7fbc669..0000000 --- a/bob/learn/misc/include/bob.learn.misc/JFABase.h +++ /dev/null @@ -1,253 +0,0 @@ -/** - * @date Tue Jan 27 15:54:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief A base class for Joint Factor Analysis-like machines - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_JFABASE_H -#define BOB_LEARN_MISC_JFABASE_H - -#include <stdexcept> - -#include <bob.learn.misc/GMMMachine.h> -#include <bob.learn.misc/FABase.h> -//#include <bob.learn.misc/LinearScoring.h> - -#include <bob.io.base/HDF5File.h> -#include <boost/shared_ptr.hpp> - -namespace bob { namespace learn { namespace misc { - - -/** - * @brief A JFA Base class which contains U, V and D matrices - * TODO: add a reference to the journal articles - */ -class JFABase -{ - public: - /** - * @brief Default constructor. Builds a 1 x 1 JFABase - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - */ - JFABase(); - - /** - * @brief Constructor. Builds a new JFABase. - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - * - * @param ubm The Universal Background Model - * @param ru size of U (CD x ru) - * @param rv size of U (CD x rv) - * @warning ru and rv SHOULD BE >= 1. - */ - JFABase(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm, const size_t ru=1, const size_t rv=1); - - /** - * @brief Copy constructor - */ - JFABase(const JFABase& other); - - /** - * @deprecated Starts a new JFAMachine from an existing Configuration object. - */ - JFABase(bob::io::base::HDF5File& config); - - /** - * @brief Just to virtualise the destructor - */ - virtual ~JFABase(); - - /** - * @brief Assigns from a different JFA machine - */ - JFABase& operator=(const JFABase &other); - - /** - * @brief Equal to - */ - bool operator==(const JFABase& b) const - { return m_base.operator==(b.m_base); } - - /** - * @brief Not equal to - */ - bool operator!=(const JFABase& b) const - { return m_base.operator!=(b.m_base); } - - /** - * @brief Similar to - */ - bool is_similar_to(const JFABase& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const - { return m_base.is_similar_to(b.m_base, r_epsilon, a_epsilon); } - - /** - * @brief Saves model to an HDF5 file - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * @brief Loads data from an existing configuration object. Resets - * the current state. - */ - void load(bob::io::base::HDF5File& config); - - /** - * @brief Returns the UBM - */ - const boost::shared_ptr<bob::learn::misc::GMMMachine> getUbm() const - { return m_base.getUbm(); } - - /** - * @brief Returns the U matrix - */ - const blitz::Array<double,2>& getU() const - { return m_base.getU(); } - - /** - * @brief Returns the V matrix - */ - const blitz::Array<double,2>& getV() const - { return m_base.getV(); } - - /** - * @brief Returns the diagonal matrix diag(d) (as a 1D vector) - */ - const blitz::Array<double,1>& getD() const - { return m_base.getD(); } - - /** - * @brief Returns the number of Gaussian components - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNGaussians() const - { return m_base.getNGaussians();} - - /** - * @brief Returns the feature dimensionality D - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNInputs() const - { return m_base.getNInputs(); } - - /** - * @brief Returns the supervector length CD - * (CxD: Number of Gaussian components by the feature dimensionality) - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getSupervectorLength() const - { return m_base.getSupervectorLength(); } - - /** - * @brief Returns the size/rank ru of the U matrix - */ - const size_t getDimRu() const - { return m_base.getDimRu(); } - - /** - * @brief Returns the size/rank rv of the V matrix - */ - const size_t getDimRv() const - { return m_base.getDimRv(); } - - /** - * @brief Resets the dimensionality of the subspace U and V - * U and V are hence uninitialized. - */ - void resize(const size_t ru, const size_t rv) - { m_base.resize(ru, rv); } - - /** - * @brief Returns the U matrix in order to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,2>& updateU() - { return m_base.updateU(); } - - /** - * @brief Returns the V matrix in order to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,2>& updateV() - { return m_base.updateV(); } - - /** - * @brief Returns the diagonal matrix diag(d) (as a 1D vector) in order - * to update it - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - blitz::Array<double,1>& updateD() - { return m_base.updateD(); } - - - /** - * @brief Sets (the mean supervector of) the Universal Background Model - * U, V and d are uninitialized in case of dimensions update (C or D) - */ - void setUbm(const boost::shared_ptr<bob::learn::misc::GMMMachine> ubm) - { m_base.setUbm(ubm); } - - /** - * @brief Sets the U matrix - */ - void setU(const blitz::Array<double,2>& U) - { m_base.setU(U); } - - /** - * @brief Sets the V matrix - */ - void setV(const blitz::Array<double,2>& V) - { m_base.setV(V); } - - /** - * @brief Sets the diagonal matrix diag(d) - * (a 1D vector is expected as an argument) - */ - void setD(const blitz::Array<double,1>& d) - { m_base.setD(d); } - - /** - * @brief Estimates x from the GMM statistics considering the LPT - * assumption, that is the latent session variable x is approximated - * using the UBM - */ - void estimateX(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& x) const - { m_base.estimateX(gmm_stats, x); } - - /** - * @brief Precompute (put U^{T}.Sigma^{-1} matrix in cache) - * @warning Should only be used by the trainer for efficiency reason, - * or for testing purpose. - */ - void precompute() - { m_base.updateCacheUbmUVD(); } - - /** - * @brief Returns the FABase member - */ - const bob::learn::misc::FABase& getBase() const - { return m_base; } - - - private: - // FABase - bob::learn::misc::FABase m_base; -}; - - -} } } // namespaces - -#endif // BOB_LEARN_MISC_JFABASE_H diff --git a/bob/learn/misc/include/bob.learn.misc/JFAMachine.h b/bob/learn/misc/include/bob.learn.misc/JFAMachine.h deleted file mode 100644 index 54c93b9..0000000 --- a/bob/learn/misc/include/bob.learn.misc/JFAMachine.h +++ /dev/null @@ -1,254 +0,0 @@ -/** - * @date Tue Jan 27 16:47:00 2015 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief A base class for Joint Factor Analysis-like machines - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_JFAMACHINE_H -#define BOB_LEARN_MISC_JFAMACHINE_H - -#include <stdexcept> - -#include <bob.learn.misc/JFABase.h> -#include <bob.learn.misc/GMMMachine.h> -#include <bob.learn.misc/LinearScoring.h> - -#include <bob.io.base/HDF5File.h> -#include <boost/shared_ptr.hpp> - -namespace bob { namespace learn { namespace misc { - - -/** - * @brief A JFAMachine which is associated to a JFABase that contains - * U, V and D matrices. The JFAMachine describes the identity part - * (latent variables y and z) - * TODO: add a reference to the journal articles - */ -class JFAMachine -{ - public: - /** - * @brief Default constructor. Builds an otherwise invalid 0 x 0 JFAMachine - * The Universal Background Model and the matrices U, V and diag(d) are - * not initialized. - */ - JFAMachine(); - - /** - * @brief Constructor. Builds a new JFAMachine. - * - * @param jfa_base The JFABase associated with this machine - */ - JFAMachine(const boost::shared_ptr<bob::learn::misc::JFABase> jfa_base); - - /** - * @brief Copy constructor - */ - JFAMachine(const JFAMachine& other); - - /** - * @deprecated Starts a new JFAMachine from an existing Configuration object. - */ - JFAMachine(bob::io::base::HDF5File& config); - - /** - * @brief Just to virtualise the destructor - */ - virtual ~JFAMachine(); - - /** - * @brief Assigns from a different JFA machine - */ - JFAMachine& operator=(const JFAMachine &other); - - /** - * @brief Equal to - */ - bool operator==(const JFAMachine& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const JFAMachine& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const JFAMachine& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Saves machine to an HDF5 file - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * @brief Loads data from an existing configuration object. Resets - * the current state. - */ - void load(bob::io::base::HDF5File& config); - - /** - * @brief Returns the number of Gaussian components C - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNGaussians() const - { return m_jfa_base->getNGaussians(); } - - /** - * @brief Returns the feature dimensionality D - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getNInputs() const - { return m_jfa_base->getNInputs(); } - - /** - * @brief Returns the supervector length CD - * (CxD: Number of Gaussian components by the feature dimensionality) - * @warning An exception is thrown if no Universal Background Model has - * been set yet. - */ - const size_t getSupervectorLength() const - { return m_jfa_base->getSupervectorLength(); } - - /** - * @brief Returns the size/rank ru of the U matrix - */ - const size_t getDimRu() const - { return m_jfa_base->getDimRu(); } - - /** - * @brief Returns the size/rank rv of the V matrix - */ - const size_t getDimRv() const - { return m_jfa_base->getDimRv(); } - - /** - * @brief Returns the x session factor - */ - const blitz::Array<double,1>& getX() const - { return m_cache_x; } - - /** - * @brief Returns the y speaker factor - */ - const blitz::Array<double,1>& getY() const - { return m_y; } - - /** - * @brief Returns the z speaker factor - */ - const blitz::Array<double,1>& getZ() const - { return m_z; } - - /** - * @brief Returns the y speaker factors in order to update it - */ - blitz::Array<double,1>& updateY() - { return m_y; } - - /** - * @brief Returns the z speaker factors in order to update it - */ - blitz::Array<double,1>& updateZ() - { return m_z; } - - /** - * @brief Returns the y speaker factors - */ - void setY(const blitz::Array<double,1>& y); - - /** - * @brief Returns the V matrix - */ - void setZ(const blitz::Array<double,1>& z); - - /** - * @brief Returns the JFABase - */ - const boost::shared_ptr<bob::learn::misc::JFABase> getJFABase() const - { return m_jfa_base; } - - /** - * @brief Sets the JFABase - */ - void setJFABase(const boost::shared_ptr<bob::learn::misc::JFABase> jfa_base); - - - /** - * @brief Estimates x from the GMM statistics considering the LPT - * assumption, that is the latent session variable x is approximated - * using the UBM - */ - void estimateX(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& x) const - { m_jfa_base->estimateX(gmm_stats, x); } - /** - * @brief Estimates Ux from the GMM statistics considering the LPT - * assumption, that is the latent session variable x is approximated - * using the UBM - */ - void estimateUx(const bob::learn::misc::GMMStats& gmm_stats, blitz::Array<double,1>& Ux); - - /** - * @brief Execute the machine - * - * @param input input data used by the machine - * @warning Inputs are checked - * @return score value computed by the machine - */ - double forward(const bob::learn::misc::GMMStats& input); - /** - * @brief Computes a score for the given UBM statistics and given the - * Ux vector - */ - double forward(const bob::learn::misc::GMMStats& gmm_stats, - const blitz::Array<double,1>& Ux); - - /** - * @brief Execute the machine - * - * @param input input data used by the machine - * @param score value computed by the machine - * @warning Inputs are NOT checked - */ - double forward_(const bob::learn::misc::GMMStats& input); - - private: - /** - * @brief Resize latent variable according to the JFABase - */ - void resize(); - /** - * @brief Resize working arrays - */ - void resizeTmp(); - /** - * @brief Update the cache - */ - void updateCache(); - - // UBM - boost::shared_ptr<bob::learn::misc::JFABase> m_jfa_base; - - // y and z vectors/factors learned during the enrolment procedure - blitz::Array<double,1> m_y; - blitz::Array<double,1> m_z; - - // cache - blitz::Array<double,1> m_cache_mVyDz; - mutable blitz::Array<double,1> m_cache_x; - - // x vector/factor in cache when computing scores - mutable blitz::Array<double,1> m_tmp_Ux; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_JFAMACHINE_H diff --git a/bob/learn/misc/include/bob.learn.misc/JFATrainer.h b/bob/learn/misc/include/bob.learn.misc/JFATrainer.h deleted file mode 100644 index 99070b5..0000000 --- a/bob/learn/misc/include/bob.learn.misc/JFATrainer.h +++ /dev/null @@ -1,238 +0,0 @@ -/** - * @date Tue Jul 19 12:16:17 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief JFA functions - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_JFATRAINER_H -#define BOB_LEARN_MISC_JFATRAINER_H - -#include <blitz/array.h> -#include <bob.learn.misc/GMMStats.h> -#include <bob.learn.misc/FABaseTrainer.h> -#include <bob.learn.misc/JFAMachine.h> -#include <vector> - -#include <map> -#include <string> -#include <bob.core/array_copy.h> -#include <boost/shared_ptr.hpp> -#include <boost/random.hpp> -#include <bob.core/logging.h> - -namespace bob { namespace learn { namespace misc { - -class JFATrainer -{ - public: - /** - * @brief Constructor - */ - JFATrainer(); - - /** - * @brief Copy onstructor - */ - JFATrainer(const JFATrainer& other); - - /** - * @brief Destructor - */ - virtual ~JFATrainer(); - - /** - * @brief Assignment operator - */ - JFATrainer& operator=(const JFATrainer& other); - - /** - * @brief Equal to - */ - bool operator==(const JFATrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const JFATrainer& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const JFATrainer& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Sets the maximum number of EM-like iterations (for each subspace) - */ - //void setMaxIterations(const size_t max_iterations) - //{ m_max_iterations = max_iterations; } - - /** - * @brief Gets the maximum number of EM-like iterations (for each subspace) - */ - //size_t getMaxIterations() const - //{ return m_max_iterations; } - - /** - * @brief This methods performs some initialization before the EM loop. - */ - virtual void initialize(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - - /** - * @brief This methods performs the e-Step to train the first subspace V - */ - virtual void eStep1(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the m-Step to train the first subspace V - */ - virtual void mStep1(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the finalization after training the first - * subspace V - */ - virtual void finalize1(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the e-Step to train the second subspace U - */ - virtual void eStep2(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the m-Step to train the second subspace U - */ - virtual void mStep2(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the finalization after training the second - * subspace U - */ - virtual void finalize2(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the e-Step to train the third subspace d - */ - virtual void eStep3(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the m-Step to train the third subspace d - */ - virtual void mStep3(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods performs the finalization after training the third - * subspace d - */ - virtual void finalize3(bob::learn::misc::JFABase& machine, - const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - - /** - * @brief This methods performs the main loops to train the subspaces U, V and d - */ - //virtual void train_loop(bob::learn::misc::JFABase& machine, - //const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - /** - * @brief This methods trains the subspaces U, V and d - */ - //virtual void train(bob::learn::misc::JFABase& machine, - //const std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& ar); - - /** - * @brief Enrol a client - */ - void enrol(bob::learn::misc::JFAMachine& machine, - const std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& features, - const size_t n_iter); - - /** - * @brief Sets the Random Number Generator - */ - void setRng(const boost::shared_ptr<boost::mt19937> rng) - { m_rng = rng; } - - /** - * @brief Gets the Random Number Generator - */ - const boost::shared_ptr<boost::mt19937> getRng() const - { return m_rng; } - - /** - * @brief Get the x speaker factors - */ - const std::vector<blitz::Array<double,2> >& getX() const - { return m_base_trainer.getX(); } - /** - * @brief Get the y speaker factors - */ - const std::vector<blitz::Array<double,1> >& getY() const - { return m_base_trainer.getY(); } - /** - * @brief Get the z speaker factors - */ - const std::vector<blitz::Array<double,1> >& getZ() const - { return m_base_trainer.getZ(); } - /** - * @brief Set the x speaker factors - */ - void setX(const std::vector<blitz::Array<double,2> >& X) - { m_base_trainer.setX(X); } - /** - * @brief Set the y speaker factors - */ - void setY(const std::vector<blitz::Array<double,1> >& y) - { m_base_trainer.setY(y); } - /** - * @brief Set the z speaker factors - */ - void setZ(const std::vector<blitz::Array<double,1> >& z) - { m_base_trainer.setZ(z); } - - /** - * @brief Getters for the accumulators - */ - const blitz::Array<double,3>& getAccVA1() const - { return m_base_trainer.getAccVA1(); } - const blitz::Array<double,2>& getAccVA2() const - { return m_base_trainer.getAccVA2(); } - const blitz::Array<double,3>& getAccUA1() const - { return m_base_trainer.getAccUA1(); } - const blitz::Array<double,2>& getAccUA2() const - { return m_base_trainer.getAccUA2(); } - const blitz::Array<double,1>& getAccDA1() const - { return m_base_trainer.getAccDA1(); } - const blitz::Array<double,1>& getAccDA2() const - { return m_base_trainer.getAccDA2(); } - - /** - * @brief Setters for the accumulators, Very useful if the e-Step needs - * to be parallelized. - */ - void setAccVA1(const blitz::Array<double,3>& acc) - { m_base_trainer.setAccVA1(acc); } - void setAccVA2(const blitz::Array<double,2>& acc) - { m_base_trainer.setAccVA2(acc); } - void setAccUA1(const blitz::Array<double,3>& acc) - { m_base_trainer.setAccUA1(acc); } - void setAccUA2(const blitz::Array<double,2>& acc) - { m_base_trainer.setAccUA2(acc); } - void setAccDA1(const blitz::Array<double,1>& acc) - { m_base_trainer.setAccDA1(acc); } - void setAccDA2(const blitz::Array<double,1>& acc) - { m_base_trainer.setAccDA2(acc); } - - - private: - // Attributes - //size_t m_max_iterations; - boost::shared_ptr<boost::mt19937> m_rng; ///< The random number generator for the inialization - bob::learn::misc::FABaseTrainer m_base_trainer; -}; - -} } } // namespaces - -#endif /* BOB_LEARN_MISC_JFATRAINER_H */ diff --git a/bob/learn/misc/include/bob.learn.misc/KMeansMachine.h b/bob/learn/misc/include/bob.learn.misc/KMeansMachine.h deleted file mode 100644 index 5f8f5bf..0000000 --- a/bob/learn/misc/include/bob.learn.misc/KMeansMachine.h +++ /dev/null @@ -1,244 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ -#ifndef BOB_LEARN_MISC_KMEANSMACHINE_H -#define BOB_LEARN_MISC_KMEANSMACHINE_H - -#include <blitz/array.h> -#include <cfloat> - -#include <bob.io.base/HDF5File.h> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class implements a k-means classifier. - * @details See Section 9.1 of Bishop, "Pattern recognition and machine learning", 2006 - */ -class KMeansMachine { - public: - /** - * Default constructor. Builds an otherwise invalid 0 x 0 k-means - * machine. This is equivalent to construct a LinearMachine with two - * size_t parameters set to 0, as in LinearMachine(0, 0). - */ - KMeansMachine(); - - /** - * Constructor - * @param[in] n_means The number of means - * @param[in] n_inputs The feature dimensionality - */ - KMeansMachine(const size_t n_means, const size_t n_inputs); - - /** - * Builds a new machine with the given means. Each row of the means - * matrix should represent a mean. - */ - KMeansMachine(const blitz::Array<double,2>& means); - - /** - * Copies another machine (copy constructor) - */ - KMeansMachine(const KMeansMachine& other); - - /** - * Starts a new KMeansMachine from an existing Configuration object. - */ - KMeansMachine(bob::io::base::HDF5File& config); - - /** - * Destructor - */ - virtual ~KMeansMachine(); - - /** - * Assigns from a different machine - */ - KMeansMachine& operator=(const KMeansMachine& other); - - /** - * Equal to - */ - bool operator==(const KMeansMachine& b) const; - - /** - * Not equal to - */ - bool operator!=(const KMeansMachine& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const KMeansMachine& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * Loads data from an existing configuration object. Resets the current - * state. - */ - void load(bob::io::base::HDF5File& config); - - /** - * Saves an existing machine to a Configuration object. - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * Output the minimum (Square Euclidean) distance between the input and - * one of the means (overrides Machine::forward) - */ - void forward(const blitz::Array<double,1>& input, double& output) const; - - /** - * Output the minimum (Square Euclidean) distance between the input and - * one of the means (overrides Machine::forward_) - * @warning Inputs are NOT checked - */ - void forward_(const blitz::Array<double,1>& input, double& output) const; - - - /** - * Set the means - */ - void setMeans(const blitz::Array<double,2>& means); - - /** - * Set the i'th mean - */ - void setMean(const size_t i, const blitz::Array<double,1>& mean); - - /** - * Get a mean - * @param[in] i The index of the mean - * @param[out] mean The mean, a 1D array, with a length equal to the number of feature dimensions. - */ - const blitz::Array<double,1> getMean(const size_t i) const; - - /** - * Get the means (i.e. a 2D array, with as many rows as means, and as - * many columns as feature dimensions.) - */ - const blitz::Array<double,2>& getMeans() const - { return m_means; } - - /** - * Get the means in order to be updated (i.e. a 2D array, with as many - * rows as means, and as many columns as feature dimensions.) - * @warning Only trainers should use this function for efficiency reasons - */ - blitz::Array<double,2>& updateMeans() - { return m_means; } - - /** - * Return the power of two of the (Square Euclidean) distance of the - * sample, x, to the i'th mean - * @param x The data sample (feature vector) - * @param i The index of the mean - */ - double getDistanceFromMean(const blitz::Array<double,1>& x, - const size_t i) const; - - /** - * Calculate the index of the mean that is closest - * (in terms of Square Euclidean distance) to the data sample, x - * @param x The data sample (feature vector) - * @param closest_mean (output) The index of the mean closest to the sample - * @param min_distance (output) The distance of the sample from the closest mean - */ - void getClosestMean(const blitz::Array<double,1>& x, - size_t &closest_mean, double &min_distance) const; - - /** - * Output the minimum (Square Euclidean) distance between the input and - * one of the means - */ - double getMinDistance(const blitz::Array<double,1>& input) const; - - /** - * For each mean, find the subset of the samples - * that is closest to that mean, and calculate - * 1) the variance of that subset (the cluster variance) - * 2) the proportion of the samples represented by that subset (the cluster weight) - * @param[in] data The data - * @param[out] variances The cluster variances (one row per cluster), - * with as many columns as feature dimensions. - * @param[out] weights A vector of weights, one per cluster - */ - void getVariancesAndWeightsForEachCluster(const blitz::Array<double,2> &data, blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const; - /** - * Methods consecutively called by getVariancesAndWeightsForEachCluster() - * This should help for the parallelization on several nodes by splitting the data and calling - * getVariancesAndWeightsForEachClusterAcc() for each split. In this case, there is a need to sum - * with the m_cache_means, variances, and weights variables before performing the merge on one - * node using getVariancesAndWeightsForEachClusterFin(). - */ - void getVariancesAndWeightsForEachClusterInit(blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const; - void getVariancesAndWeightsForEachClusterAcc(const blitz::Array<double,2> &data, blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const; - void getVariancesAndWeightsForEachClusterFin(blitz::Array<double,2>& variances, blitz::Array<double,1>& weights) const; - - /** - * Get the m_cache_means array. - * @warning This variable should only be used in the case you want to parallelize the - * getVariancesAndWeightsForEachCluster() method! - */ - const blitz::Array<double,2>& getCacheMeans() const - { return m_cache_means; } - - /** - * Set the m_cache_means array. - * @warning This variable should only be used in the case you want to parallelize the - * getVariancesAndWeightsForEachCluster() method! - */ - void setCacheMeans(const blitz::Array<double,2>& cache_means); - - /** - * Resize the means - */ - void resize(const size_t n_means, const size_t n_inputs); - - /** - * Return the number of means - */ - size_t getNMeans() const { return m_n_means; } - - /** - * Return the number of inputs - */ - size_t getNInputs() const { return m_n_inputs; } - - /** - * Prints a KMeansMachine in the output stream - */ - friend std::ostream& operator<<(std::ostream& os, const KMeansMachine& km); - - - private: - /** - * The number of means - */ - size_t m_n_means; - - /** - * The number of inputs - */ - size_t m_n_inputs; - - /** - * The means (each row is a mean) - */ - blitz::Array<double,2> m_means; - - /** - * cache to avoid re-allocation - */ - mutable blitz::Array<double,2> m_cache_means; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_KMEANSMACHINE_H diff --git a/bob/learn/misc/include/bob.learn.misc/KMeansTrainer.h b/bob/learn/misc/include/bob.learn.misc/KMeansTrainer.h deleted file mode 100644 index 432c829..0000000 --- a/bob/learn/misc/include/bob.learn.misc/KMeansTrainer.h +++ /dev/null @@ -1,187 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ -#ifndef BOB_LEARN_MISC_KMEANSTRAINER_H -#define BOB_LEARN_MISC_KMEANSTRAINER_H - -#include <bob.learn.misc/KMeansMachine.h> -#include <boost/version.hpp> -#include <boost/random/mersenne_twister.hpp> - -namespace bob { namespace learn { namespace misc { - -/** - * Trains a KMeans machine. - * @brief This class implements the expectation-maximisation algorithm for a k-means machine. - * @details See Section 9.1 of Bishop, "Pattern recognition and machine learning", 2006 - * It uses a random initialisation of the means followed by the expectation-maximization algorithm - */ -class KMeansTrainer -{ - public: - /** - * @brief This enumeration defines different initialization methods for - * K-means - */ - typedef enum { - RANDOM=0, - RANDOM_NO_DUPLICATE -#if BOOST_VERSION >= 104700 - , - KMEANS_PLUS_PLUS -#endif - } - InitializationMethod; - - /** - * @brief Constructor - */ - KMeansTrainer(InitializationMethod=RANDOM); - - /* - KMeansTrainer(double convergence_threshold=0.001, - size_t max_iterations=10, bool compute_likelihood=true, - InitializationMethod=RANDOM);*/ - - - /** - * @brief Virtualize destructor - */ - virtual ~KMeansTrainer() {} - - /** - * @brief Copy constructor - */ - KMeansTrainer(const KMeansTrainer& other); - - /** - * @brief Assigns from a different machine - */ - KMeansTrainer& operator=(const KMeansTrainer& other); - - /** - * @brief Equal to - */ - bool operator==(const KMeansTrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const KMeansTrainer& b) const; - - /** - * @brief The name for this trainer - */ - virtual std::string name() const { return "KMeansTrainer"; } - - /** - * @brief Initialise the means randomly. - * Data is split into as many chunks as there are means, - * then each mean is set to a random example within each chunk. - */ - void initialize(bob::learn::misc::KMeansMachine& kMeansMachine, - const blitz::Array<double,2>& sampler); - - /** - * @brief Accumulate across the dataset: - * - zeroeth and first order statistics - * - average (Square Euclidean) distance from the closest mean - * Implements EMTrainer::eStep(double &) - */ - void eStep(bob::learn::misc::KMeansMachine& kmeans, - const blitz::Array<double,2>& data); - - /** - * @brief Updates the mean based on the statistics from the E-step. - */ - void mStep(bob::learn::misc::KMeansMachine& kmeans); - - /** - * @brief This functions returns the average min (Square Euclidean) - * distance (average distance to the closest mean) - */ - double computeLikelihood(bob::learn::misc::KMeansMachine& kmeans); - - - /** - * @brief Reset the statistics accumulators - * to the correct size and a value of zero. - */ - bool resetAccumulators(bob::learn::misc::KMeansMachine& kMeansMachine); - - /** - * @brief Sets the Random Number Generator - */ - void setRng(const boost::shared_ptr<boost::mt19937> rng) - { m_rng = rng; } - - /** - * @brief Gets the Random Number Generator - */ - const boost::shared_ptr<boost::mt19937> getRng() const - { return m_rng; } - - /** - * @brief Sets the initialization method used to generate the initial means - */ - void setInitializationMethod(InitializationMethod v) { m_initialization_method = v; } - - /** - * @brief Gets the initialization method used to generate the initial means - */ - InitializationMethod getInitializationMethod() const { return m_initialization_method; } - - /** - * @brief Returns the internal statistics. Useful to parallelize the E-step - */ - const blitz::Array<double,1>& getZeroethOrderStats() const { return m_zeroethOrderStats; } - const blitz::Array<double,2>& getFirstOrderStats() const { return m_firstOrderStats; } - double getAverageMinDistance() const { return m_average_min_distance; } - /** - * @brief Sets the internal statistics. Useful to parallelize the E-step - */ - void setZeroethOrderStats(const blitz::Array<double,1>& zeroethOrderStats); - void setFirstOrderStats(const blitz::Array<double,2>& firstOrderStats); - void setAverageMinDistance(const double value) { m_average_min_distance = value; } - - - private: - - /** - * @brief The initialization method - * Check that there is no duplicated means during the random initialization - */ - InitializationMethod m_initialization_method; - - /** - * @brief The random number generator for the inialization - */ - boost::shared_ptr<boost::mt19937> m_rng; - - /** - * @brief Average min (Square Euclidean) distance - */ - double m_average_min_distance; - - /** - * @brief Zeroeth order statistics accumulator. - * The k'th value in m_zeroethOrderStats is the denominator of - * equation 9.4, Bishop, "Pattern recognition and machine learning", 2006 - */ - blitz::Array<double,1> m_zeroethOrderStats; - - /** - * @brief First order statistics accumulator. - * The k'th row of m_firstOrderStats is the numerator of - * equation 9.4, Bishop, "Pattern recognition and machine learning", 2006 - */ - blitz::Array<double,2> m_firstOrderStats; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_KMEANSTRAINER_H diff --git a/bob/learn/misc/include/bob.learn.misc/LinearScoring.h b/bob/learn/misc/include/bob.learn.misc/LinearScoring.h deleted file mode 100644 index aeac718..0000000 --- a/bob/learn/misc/include/bob.learn.misc/LinearScoring.h +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @date Wed Jul 13 16:00:04 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ -#ifndef BOB_LEARN_MISC_LINEARSCORING_H -#define BOB_LEARN_MISC_LINEARSCORING_H - -#include <blitz/array.h> -#include <boost/shared_ptr.hpp> -#include <vector> -#include <bob.learn.misc/GMMMachine.h> - -namespace bob { namespace learn { namespace misc { - -/** - * Compute a matrix of scores using linear scoring. - * - * @warning Each GMM must have the same size. - * - * @param models list of mean supervector for the client models - * @param ubm_mean mean supervector of the world model - * @param ubm_variance variance supervector of the world model - * @param test_stats list of accumulate statistics for each test trial - * @param test_channelOffset list of channel offset if any (for JFA/ISA for instance) - * @param frame_length_normalisation perform a normalisation by the number of feature vectors - * @param[out] scores 2D matrix of scores, <tt>scores[m, s]</tt> is the score for model @c m against statistics @c s - * @warning the output scores matrix should have the correct size (number of models x number of test_stats) - */ -void linearScoring(const std::vector<blitz::Array<double,1> >& models, - const blitz::Array<double,1>& ubm_mean, const blitz::Array<double,1>& ubm_variance, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const std::vector<blitz::Array<double, 1> >& test_channelOffset, - const bool frame_length_normalisation, - blitz::Array<double,2>& scores); -void linearScoring(const std::vector<blitz::Array<double,1> >& models, - const blitz::Array<double,1>& ubm_mean, const blitz::Array<double,1>& ubm_variance, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const bool frame_length_normalisation, - blitz::Array<double,2>& scores); - -/** - * Compute a matrix of scores using linear scoring. - * - * @warning Each GMM must have the same size. - * - * @param models list of client models as GMMMachines - * @param ubm world model as a GMMMachine - * @param test_stats list of accumulate statistics for each test trial - * @param frame_length_normalisation perform a normalisation by the number of feature vectors - * @param[out] scores 2D matrix of scores, <tt>scores[m, s]</tt> is the score for model @c m against statistics @c s - * @warning the output scores matrix should have the correct size (number of models x number of test_stats) - */ -void linearScoring(const std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> >& models, - const bob::learn::misc::GMMMachine& ubm, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const bool frame_length_normalisation, - blitz::Array<double,2>& scores); -/** - * Compute a matrix of scores using linear scoring. - * - * @warning Each GMM must have the same size. - * - * @param models list of client models as GMMMachines - * @param ubm world model as a GMMMachine - * @param test_stats list of accumulate statistics for each test trial - * @param test_channelOffset list of channel offset if any (for JFA/ISA for instance) - * @param frame_length_normalisation perform a normalisation by the number of feature vectors - * @param[out] scores 2D matrix of scores, <tt>scores[m, s]</tt> is the score for model @c m against statistics @c s - * @warning the output scores matrix should have the correct size (number of models x number of test_stats) - */ -void linearScoring(const std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> >& models, - const bob::learn::misc::GMMMachine& ubm, - const std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats, - const std::vector<blitz::Array<double, 1> >& test_channelOffset, - const bool frame_length_normalisation, - blitz::Array<double,2>& scores); - -/** - * Compute a score using linear scoring. - * - * @param model mean supervector for the client model - * @param ubm_mean mean supervector of the world model - * @param ubm_variance variance supervector of the world model - * @param test_stats accumulate statistics of the test trial - * @param test_channelOffset channel offset - * @param frame_length_normalisation perform a normalisation by the number of feature vectors - */ -double linearScoring(const blitz::Array<double,1>& model, - const blitz::Array<double,1>& ubm_mean, const blitz::Array<double,1>& ubm_variance, - const bob::learn::misc::GMMStats& test_stats, - const blitz::Array<double,1>& test_channelOffset, - const bool frame_length_normalisation); - -} } } // namespaces - -#endif // BOB_LEARN_MISC_LINEARSCORING_H diff --git a/bob/learn/misc/include/bob.learn.misc/MAP_GMMTrainer.h b/bob/learn/misc/include/bob.learn.misc/MAP_GMMTrainer.h deleted file mode 100644 index c6c7cf7..0000000 --- a/bob/learn/misc/include/bob.learn.misc/MAP_GMMTrainer.h +++ /dev/null @@ -1,170 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * @brief This class implements the maximum a posteriori M-step of the expectation-maximisation algorithm for a GMM Machine. The prior parameters are encoded in the form of a GMM (e.g. a universal background model). The EM algorithm thus performs GMM adaptation. - * @details See Section 3.4 of Reynolds et al., "Speaker Verification Using Adapted Gaussian Mixture Models", Digital Signal Processing, 2000. We use a "single adaptation coefficient", alpha_i, and thus a single relevance factor, r. - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_MAP_GMMTRAINER_H -#define BOB_LEARN_MISC_MAP_GMMTRAINER_H - -#include <bob.learn.misc/GMMBaseTrainer.h> -#include <limits> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class implements the maximum a posteriori M-step of the expectation-maximisation algorithm for a GMM Machine. The prior parameters are encoded in the form of a GMM (e.g. a universal background model). The EM algorithm thus performs GMM adaptation. - * @details See Section 3.4 of Reynolds et al., "Speaker Verification Using Adapted Gaussian Mixture Models", Digital Signal Processing, 2000. We use a "single adaptation coefficient", alpha_i, and thus a single relevance factor, r. - */ -class MAP_GMMTrainer -{ - public: - /** - * @brief Default constructor - */ - MAP_GMMTrainer( - const bool update_means=true, - const bool update_variances=false, - const bool update_weights=false, - const double mean_var_update_responsibilities_threshold = std::numeric_limits<double>::epsilon(), - const bool reynolds_adaptation=false, - const double relevance_factor=4, - const double alpha=0.5, - boost::shared_ptr<bob::learn::misc::GMMMachine> prior_gmm = 0); - - /** - * @brief Copy constructor - */ - MAP_GMMTrainer(const MAP_GMMTrainer& other); - - /** - * @brief Destructor - */ - virtual ~MAP_GMMTrainer(); - - /** - * @brief Initialization - */ - void initialize(bob::learn::misc::GMMMachine& gmm); - - /** - * @brief Assigns from a different MAP_GMMTrainer - */ - MAP_GMMTrainer& operator=(const MAP_GMMTrainer &other); - - /** - * @brief Equal to - */ - bool operator==(const MAP_GMMTrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const MAP_GMMTrainer& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const MAP_GMMTrainer& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Set the GMM to use as a prior for MAP adaptation. - * Generally, this is a "universal background model" (UBM), - * also referred to as a "world model". - */ - bool setPriorGMM(boost::shared_ptr<bob::learn::misc::GMMMachine> prior_gmm); - - /** - * @brief Calculates and saves statistics across the dataset, - * and saves these as m_ss. Calculates the average - * log likelihood of the observations given the GMM, - * and returns this in average_log_likelihood. - * - * The statistics, m_ss, will be used in the mStep() that follows. - * Implements EMTrainer::eStep(double &) - */ - void eStep(bob::learn::misc::GMMMachine& gmm, - const blitz::Array<double,2>& data){ - m_gmm_base_trainer.eStep(gmm,data); - } - - - /** - * @brief Performs a maximum a posteriori (MAP) update of the GMM - * parameters using the accumulated statistics in m_ss and the - * parameters of the prior model - * Implements EMTrainer::mStep() - */ - void mStep(bob::learn::misc::GMMMachine& gmm); - - /** - * @brief Computes the likelihood using current estimates of the latent - * variables - */ - double computeLikelihood(bob::learn::misc::GMMMachine& gmm){ - return m_gmm_base_trainer.computeLikelihood(gmm); - } - - bool getReynoldsAdaptation() - {return m_reynolds_adaptation;} - - void setReynoldsAdaptation(const bool reynolds_adaptation) - {m_reynolds_adaptation = reynolds_adaptation;} - - - double getRelevanceFactor() - {return m_relevance_factor;} - - void setRelevanceFactor(const double relevance_factor) - {m_relevance_factor = relevance_factor;} - - - double getAlpha() - {return m_alpha;} - - void setAlpha(const double alpha) - {m_alpha = alpha;} - - - protected: - - /** - * The relevance factor for MAP adaptation, r (see Reynolds et al., \"Speaker Verification Using Adapted Gaussian Mixture Models\", Digital Signal Processing, 2000). - */ - double m_relevance_factor; - - /** - Base Trainer for the MAP algorithm. Basically implements the e-step - */ - bob::learn::misc::GMMBaseTrainer m_gmm_base_trainer; - - /** - * The GMM to use as a prior for MAP adaptation. - * Generally, this is a "universal background model" (UBM), - * also referred to as a "world model" - */ - boost::shared_ptr<bob::learn::misc::GMMMachine> m_prior_gmm; - - /** - * The alpha for the Torch3-like adaptation - */ - double m_alpha; - /** - * Whether Torch3-like adaptation should be used or not - */ - bool m_reynolds_adaptation; - - private: - /// cache to avoid re-allocation - mutable blitz::Array<double,1> m_cache_alpha; - mutable blitz::Array<double,1> m_cache_ml_weights; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_MAP_GMMTRAINER_H diff --git a/bob/learn/misc/include/bob.learn.misc/ML_GMMTrainer.h b/bob/learn/misc/include/bob.learn.misc/ML_GMMTrainer.h deleted file mode 100644 index 13cda74..0000000 --- a/bob/learn/misc/include/bob.learn.misc/ML_GMMTrainer.h +++ /dev/null @@ -1,119 +0,0 @@ -/** - * @date Tue May 10 11:35:58 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * - * @brief This class implements the maximum likelihood M-step of the expectation-maximisation algorithm for a GMM Machine. - * @details See Section 9.2.2 of Bishop, "Pattern recognition and machine learning", 2006 - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_ML_GMMTRAINER_H -#define BOB_LEARN_MISC_ML_GMMTRAINER_H - -#include <bob.learn.misc/GMMBaseTrainer.h> -#include <limits> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class implements the maximum likelihood M-step of the - * expectation-maximisation algorithm for a GMM Machine. - * @details See Section 9.2.2 of Bishop, - * "Pattern recognition and machine learning", 2006 - */ -class ML_GMMTrainer{ - public: - /** - * @brief Default constructor - */ - ML_GMMTrainer(const bool update_means=true, - const bool update_variances=false, - const bool update_weights=false, - const double mean_var_update_responsibilities_threshold = std::numeric_limits<double>::epsilon()); - - /** - * @brief Copy constructor - */ - ML_GMMTrainer(const ML_GMMTrainer& other); - - /** - * @brief Destructor - */ - virtual ~ML_GMMTrainer(); - - /** - * @brief Initialisation before the EM steps - */ - void initialize(bob::learn::misc::GMMMachine& gmm); - - /** - * @brief Calculates and saves statistics across the dataset, - * and saves these as m_ss. Calculates the average - * log likelihood of the observations given the GMM, - * and returns this in average_log_likelihood. - * - * The statistics, m_ss, will be used in the mStep() that follows. - * Implements EMTrainer::eStep(double &) - */ - void eStep(bob::learn::misc::GMMMachine& gmm, - const blitz::Array<double,2>& data){ - m_gmm_base_trainer.eStep(gmm,data); - } - - /** - * @brief Performs a maximum likelihood (ML) update of the GMM parameters - * using the accumulated statistics in m_ss - * Implements EMTrainer::mStep() - */ - void mStep(bob::learn::misc::GMMMachine& gmm); - - /** - * @brief Computes the likelihood using current estimates of the latent - * variables - */ - double computeLikelihood(bob::learn::misc::GMMMachine& gmm){ - return m_gmm_base_trainer.computeLikelihood(gmm); - } - - - /** - * @brief Assigns from a different ML_GMMTrainer - */ - ML_GMMTrainer& operator=(const ML_GMMTrainer &other); - - /** - * @brief Equal to - */ - bool operator==(const ML_GMMTrainer& b) const; - - /** - * @brief Not equal to - */ - bool operator!=(const ML_GMMTrainer& b) const; - - /** - * @brief Similar to - */ - bool is_similar_to(const ML_GMMTrainer& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - - protected: - - /** - Base Trainer for the MAP algorithm. Basically implements the e-step - */ - bob::learn::misc::GMMBaseTrainer m_gmm_base_trainer; - - - private: - /** - * @brief Add cache to avoid re-allocation at each iteration - */ - mutable blitz::Array<double,1> m_cache_ss_n_thresholded; -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_ML_GMMTRAINER_H diff --git a/bob/learn/misc/include/bob.learn.misc/PLDAMachine.h b/bob/learn/misc/include/bob.learn.misc/PLDAMachine.h deleted file mode 100644 index c750857..0000000 --- a/bob/learn/misc/include/bob.learn.misc/PLDAMachine.h +++ /dev/null @@ -1,702 +0,0 @@ -/** - * @date Fri Oct 14 18:07:56 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief Machines that implements the Probabilistic Linear Discriminant - * Analysis Model of Prince and Helder, - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_PLDAMACHINE_H -#define BOB_LEARN_MISC_PLDAMACHINE_H - -#include <blitz/array.h> -#include <bob.io.base/HDF5File.h> -#include <map> -#include <iostream> -#include <stdexcept> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class is a container for the \f$F\f$, \f$G\f$ and \f$\Sigma\f$ - * matrices and the mean vector \f$\mu\f$ of a PLDA model. This also - * precomputes useful matrices to make the model scalable.\n - * References:\n - * 1. 'A Scalable Formulation of Probabilistic Linear Discriminant Analysis: - * Applied to Face Recognition', Laurent El Shafey, Chris McCool, - * Roy Wallace, Sebastien Marcel, TPAMI'2013 - * 2. 'Probabilistic Linear Discriminant Analysis for Inference About - * Identity', Prince and Elder, ICCV'2007\n - * 3. 'Probabilistic Models for Inference about Identity', Li, Fu, Mohammed, - * Elder and Prince, TPAMI'2012 - */ -class PLDABase -{ - public: - /** - * @brief Default constructor.\n Builds an otherwise invalid 0x0x0 - * PLDABase. - */ - PLDABase(); - /** - * @brief Constructor, builds a new PLDABase.\n \f$F\f$, \f$G\f$ - * and \f$\Sigma\f$ are initialized to the 'eye' matrix (matrix with 1's - * on the diagonal and 0 outside), and \f$\mu\f$ is initialized to 0. - * - * @param dim_d Dimensionality of the feature vector - * @param dim_f size of \f$F\f$ (dim_d x dim_f) - * @param dim_g size of \f$G\f$ (dim_d x dim_g) - * @param variance_threshold The smallest possible value of the variance - * (Ignored if set to 0.) - */ - PLDABase(const size_t dim_d, const size_t dim_f, - const size_t dim_g, const double variance_threshold=0.); - /** - * @brief Copies another PLDABase - */ - PLDABase(const PLDABase& other); - /** - * @brief Starts a new PLDABase from an existing configuration - * object. - * @param config HDF5 configuration file - */ - PLDABase(bob::io::base::HDF5File& config); - - /** - * @brief Just to virtualize the destructor - */ - virtual ~PLDABase(); - - /** - * @brief Assigns from a different PLDABase - */ - PLDABase& operator=(const PLDABase &other); - - /** - * @brief Equal to.\n Even precomputed members such as \f$\alpha\f$, - * \f$\beta\f$ and \f$\gamma_a\f$'s are compared! - */ - bool operator==(const PLDABase& b) const; - /** - * @brief Not equal to.\n Defined as the negation of operator== - */ - bool operator!=(const PLDABase& b) const; - /** - * @brief Similar to.\n Even precomputed members such as \f$\alpha\f$, - * \f$\beta\f$ and \f$\gamma_a\f$'s are compared! - */ - bool is_similar_to(const PLDABase& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Loads data from an existing configuration object. Resets the - * current state. - * @param config HDF5 configuration file - */ - void load(bob::io::base::HDF5File& config); - /** - * @brief Saves an existing machine to a configuration object. - * @param config HDF5 configuration file - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * @brief Resizes the PLDABase. - * @warning \f$F\f$, \f$G\f$, \f$\Sigma\f$, \f$\mu\f$ and the variance - * flooring thresholds will be reinitialized! - * @param dim_d Dimensionality of the feature vector - * @param dim_f Rank of \f$F\f$ (dim_d x dim_f) - * @param dim_g Rank of \f$G\f$ (dim_d x dim_g) - */ - void resize(const size_t dim_d, const size_t dim_f, const size_t dim_g); - - /** - * @brief Gets the \f$F\f$ subspace/matrix of the PLDA model - */ - const blitz::Array<double,2>& getF() const - { return m_F; } - /** - * @brief Sets the \f$F\f$ subspace/matrix of the PLDA model - */ - void setF(const blitz::Array<double,2>& F); - /** - * @brief Returns the current \f$F\f$ matrix/subspace of the PLDA model - * in order to be updated. - * @warning Use with care. Only trainers should use this function for - * efficiency reasons. - */ - blitz::Array<double,2>& updateF() - { return m_F; } - - /** - * @brief Gets the \f$G\f$ subspace/matrix of the PLDA model - */ - const blitz::Array<double,2>& getG() const - { return m_G; } - /** - * @brief Sets the \f$G\f$ subspace/matrix of the PLDA model - */ - void setG(const blitz::Array<double,2>& G); - /** - * @brief Returns the current \f$G\f$ subspace/matrix of the PLDA model - * in order to be updated. - * @warning Use with care. Only trainers should use this function for - * efficiency reasons. - */ - blitz::Array<double,2>& updateG() - { return m_G; } - - /** - * @brief Gets the \f$\Sigma\f$ (diagonal) covariance matrix of the PLDA - * model - */ - const blitz::Array<double,1>& getSigma() const - { return m_sigma; } - /** - * @brief Sets the \f$\Sigma\f$ (diagonal) covariance matrix of the PLDA - * model - */ - void setSigma(const blitz::Array<double,1>& s); - /** - * @brief Returns the current \f$\Sigma\f$ (diagonal) covariance matrix of - * the PLDA model in order to be updated. - * @warning Use with care. Only trainers should use this function for - * efficiency reasons. Variance threshold should be applied after - * updating \f$\Sigma\f$! - */ - blitz::Array<double,1>& updateSigma() - { return m_sigma; } - - /** - * @brief Gets the \f$\mu\f$ mean vector of the PLDA model - */ - const blitz::Array<double,1>& getMu() const - { return m_mu; } - /** - * @brief Sets the \f$\mu\f$ mean vector of the PLDA model - */ - void setMu(const blitz::Array<double,1>& mu); - /** - * @brief Returns the current \f$\mu\f$ mean vector of the PLDA model - * in order to be updated. - * @warning Use with care. Only trainers should use this function for - * efficiency reasons. - */ - blitz::Array<double,1>& updateMu() - { return m_mu; } - - /** - * @brief Gets the variance flooring threshold - */ - double getVarianceThreshold() const - { return m_variance_threshold; } - /** - * @brief Sets the variance flooring threshold - */ - void setVarianceThreshold(const double value); - /** - * @brief Apply the variance flooring thresholds. - * This method is automatically called when using setVarianceThresholds(). - * @warning It is only useful when using updateVarianceThreshods(), - * and should mostly be done by trainers - */ - void applyVarianceThreshold(); - - /** - * @brief Gets the feature dimensionality - */ - size_t getDimD() const - { return m_dim_d; } - /** - * @brief Gets the size/rank the \f$F\f$ subspace/matrix of the PLDA model - */ - size_t getDimF() const - { return m_dim_f; } - /** - * @brief Gets the size/rank the \f$G\f$ subspace/matrix of the PLDA model - */ - size_t getDimG() const - { return m_dim_g; } - - /** - * @brief Precomputes useful values such as \f$\Sigma^{-1}\f$, - * \f$G^{T}\Sigma^{-1}\f$, \f$\alpha\f$, \f$\beta\f$, and - * \f$F^{T}\beta\f$. - * @warning Previous \f$\gamma_a\f$ values and log likelihood constant - * terms are cleared. - */ - void precompute(); - /** - * @brief Precomputes useful values for the log likelihood - * \f$\log(\det(\alpha))\f$ and \f$\log(\det(\Sigma))\f$. - */ - void precomputeLogLike(); - /** - * @brief Gets the inverse vector/diagonal matrix of \f$\Sigma^{-1}\f$ - */ - const blitz::Array<double,1>& getISigma() const - { return m_cache_isigma; } - /** - * @brief Gets the \f$\alpha\f$ matrix. - * \f$\alpha = (Id + G^T \Sigma^{-1} G)^{-1} = \mathcal{G}\f$ - */ - const blitz::Array<double,2>& getAlpha() const - { return m_cache_alpha; } - /** - * @brief Gets the \f$\beta\f$ matrix - * \f$\beta = (\Sigma + G G^T)^{-1} = \mathcal{S} = - * \Sigma^{-1} - \Sigma^{-1} G \mathcal{G} G^{T} \Sigma^{-1}\f$ - */ - const blitz::Array<double,2>& getBeta() const - { return m_cache_beta; } - /** - * @brief Gets the \f$\gamma_a\f$ matrix for a given \f$a\f$ (number of - * samples). - * \f$\gamma_{a} = (Id + a F^T \beta F)^{-1} = \mathcal{F}_{a}\f$ - * @warning an exception is thrown if \f$\gamma_a\f$ does not exists - */ - const blitz::Array<double,2>& getGamma(const size_t a) const; - /** - * @brief Gets the \f$\gamma_a\f$ matrix for a given \f$a\f$ (number of - * samples). - * \f$\gamma_a = (Id + a F^T \beta F)^{-1} = \mathcal{F}_{a}\f$ - * @warning The matrix is computed if it does not already exists - */ - const blitz::Array<double,2>& getAddGamma(const size_t a); - /** - * @brief Gets the \f$F^T \beta\f$ matrix - */ - const blitz::Array<double,2>& getFtBeta() const - { return m_cache_Ft_beta; } - /** - * @brief Gets the \f$G^T \Sigma^{-1}\f$ matrix - */ - const blitz::Array<double,2>& getGtISigma() const - { return m_cache_Gt_isigma; } - /** - * @brief Gets \f$\log(\det(\alpha))\f$ - */ - double getLogDetAlpha() const - { return m_cache_logdet_alpha; } - /** - * @brief Gets \f$\log(\det(\Sigma))\f$ - */ - double getLogDetSigma() const - { return m_cache_logdet_sigma; } - /** - * @brief Computes the log likelihood constant term for a given \f$a\f$ - * (number of samples), given the provided \f$\gamma_a\f$ matrix - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - */ - double computeLogLikeConstTerm(const size_t a, - const blitz::Array<double,2>& gamma_a) const; - /** - * @brief Computes the log likelihood constant term for a given \f$a\f$ - * (number of samples) - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - * @warning: gamma_a will be computed and added if it does - * not already exists - */ - double computeLogLikeConstTerm(const size_t a); - /** - * @brief Tells if the log likelihood constant term for a given \f$a\f$ - * (number of samples) exists - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - */ - bool hasLogLikeConstTerm(const size_t a) const - { return (m_cache_loglike_constterm.find(a) != m_cache_loglike_constterm.end()); } - /** - * @brief Gets the log likelihood constant term for a given \f$a\f$ - * (number of samples) - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - * @warning an exception is thrown if the value does not exists - */ - double getLogLikeConstTerm(const size_t a) const; - /** - * @brief Gets the log likelihood constant term for a given \f$a\f$ - * (number of samples) - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - * @warning The value is computed if it does not already exists - */ - double getAddLogLikeConstTerm(const size_t a); - - /** - * @brief Computes the \f$\gamma_a\f$ matrix for a given \f$a\f$ (number - * of samples) and put the result in the provided array. - * \f$\gamma_a = (Id + a F^T \beta F)^{-1}\f$ - */ - void computeGamma(const size_t a, blitz::Array<double,2> res) const; - /** - * @brief Tells if the \f$\gamma_a\f$ matrix for a given a (number of - * samples) exists. - * \f$\gamma_a = (Id + a F^T \beta F)^{-1}\f$ - */ - bool hasGamma(const size_t a) const - { return (m_cache_gamma.find(a) != m_cache_gamma.end()); } - - /** - * @brief Clears the maps (\f$\gamma_a\f$ and loglike_constterm_a). - */ - void clearMaps(); - - /** - * @brief Gets the log-likelihood of an observation, given the current model - * and the latent variables (point estimate).\n - * This will basically compute \f$p(x_{ij} | h_{i}, w_{ij}, \Theta)\f$\n - * , given by \n - * \f$\mathcal{N}(x_{ij}|[\mu + F h_{i} + G w_{ij} + \epsilon_{ij}, \Sigma])\f$\n - * , which is in logarithm, \n - * \f$-\frac{D}{2} log(2\pi) -\frac{1}{2} log(det(\Sigma)) -\frac{1}{2} {(x_{ij}-(\mu+F h_{i}+G w_{ij}))^{T}\Sigma^{-1}(x_{ij}-(\mu+F h_{i}+G w_{ij}))}\f$. - */ - double computeLogLikelihoodPointEstimate(const blitz::Array<double,1>& xij, - const blitz::Array<double,1>& hi, const blitz::Array<double,1>& wij) const; - - // Friend method declaration - friend std::ostream& operator<<(std::ostream& os, const PLDABase& m); - - - private: - // Attributes - size_t m_dim_d; ///< Dimensionality of the input feature vector - size_t m_dim_f; ///< Size/rank of the \f$F\f$ subspace - size_t m_dim_g; ///< Size/rank of the \f$G\f$ subspace - blitz::Array<double,2> m_F; ///< \f$F\f$ subspace of the PLDA model - blitz::Array<double,2> m_G; ///< \f$G\f$ subspace of the PLDA model - /** - * @brief \f$\Sigma\f$ diagonal (by assumption) covariance matrix of the - * PLDA model - */ - blitz::Array<double,1> m_sigma; - blitz::Array<double,1> m_mu; ///< \f$\mu\f$ mean vector of the PLDA model - /** - * @brief The variance flooring thresholds, i.e. the minimum allowed - * value of variance m_sigma in each dimension. - * The variance will be set to this value if an attempt is made - * to set it to a smaller value. - */ - double m_variance_threshold; - - // Internal values very useful used to optimize the code - blitz::Array<double,1> m_cache_isigma; ///< \f$\Sigma^{-1}\f$ - blitz::Array<double,2> m_cache_alpha; ///< \f$\alpha = (Id + G^T \Sigma^{-1} G)^{-1}\f$ - /** - * @brief \f$\beta = (\Sigma+G G^T)^{-1} = (\Sigma^{-1} - \Sigma^{-1} G \alpha G^T \Sigma^{-1})^{-1}\f$ - */ - blitz::Array<double,2> m_cache_beta; - std::map<size_t, blitz::Array<double,2> > m_cache_gamma; ///< \f$\gamma_{a} = (Id + a F^T \beta F)^{-1}\f$ - blitz::Array<double,2> m_cache_Ft_beta; ///< \f$F^{T} \beta \f$ - blitz::Array<double,2> m_cache_Gt_isigma; ///< \f$G^{T} \Sigma^{-1} \f$ - double m_cache_logdet_alpha; ///< \f$\log(\det(\alpha))\f$ - double m_cache_logdet_sigma; ///< \f$\log(\det(\Sigma))\f$ - /** - * @brief \f$l_{a} = \frac{a}{2} ( -D log(2*\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - */ - std::map<size_t, double> m_cache_loglike_constterm; - - // working arrays - mutable blitz::Array<double,1> m_tmp_d_1; ///< Cache vector of size dim_d - mutable blitz::Array<double,1> m_tmp_d_2; ///< Cache vector of size dim_d - mutable blitz::Array<double,2> m_tmp_d_ng_1; ///< Cache matrix of size dim_d x dim_g - mutable blitz::Array<double,2> m_tmp_nf_nf_1; ///< Cache matrix of size dim_f x dim_f - mutable blitz::Array<double,2> m_tmp_ng_ng_1; ///< Cache matrix of size dim_g x dim_g - - // private methods - void resizeNoInit(const size_t dim_d, const size_t dim_f, const size_t dim_g); - void resizeTmp(); - void initMuFGSigma(); - void precomputeISigma(); - void precomputeAlpha(); - void precomputeBeta(); - void precomputeGamma(const size_t a); - void precomputeFtBeta(); - void precomputeGtISigma(); - void precomputeLogDetAlpha(); - void precomputeLogDetSigma(); - void precomputeLogLikeConstTerm(const size_t a); -}; - - -/** - * @brief This class is a container for an enrolled identity/class. It - * contains information extracted from the enrollment samples. It should - * be used in combination with a PLDABase instance.\n - * References:\n - * 1. 'A Scalable Formulation of Probabilistic Linear Discriminant Analysis: - * Applied to Face Recognition', Laurent El Shafey, Chris McCool, - * Roy Wallace, Sebastien Marcel, TPAMI'2013 - * 2. 'Probabilistic Linear Discriminant Analysis for Inference About - * Identity', Prince and Elder, ICCV'2007\n - * 3. 'Probabilistic Models for Inference about Identity', Li, Fu, Mohammed, - * Elder and Prince, TPAMI'2012 - */ -class PLDAMachine -{ - public: - /** - * @brief Default constructor.\n - * Builds an otherwise invalid (No attached PLDABase) PLDAMachine. - */ - PLDAMachine(); - /** - * @brief Constructor, builds a new PLDAMachine, setting a - * PLDABase. - */ - PLDAMachine(const boost::shared_ptr<bob::learn::misc::PLDABase> pldabase); - /** - * @brief Copies another PLDAMachine.\n Both PLDAMachine's will point - * to the same PLDABase. - */ - PLDAMachine(const PLDAMachine& other); - /** - * @brief Starts a new PLDAMachine from an existing configuration object, - * and a PLDABase. - */ - PLDAMachine(bob::io::base::HDF5File& config, - const boost::shared_ptr<bob::learn::misc::PLDABase> pldabase); - - /** - * @brief Just to virtualise the destructor - */ - virtual ~PLDAMachine(); - - /** - * @brief Assigns from a different machine - */ - PLDAMachine& operator=(const PLDAMachine &other); - - /** - * @brief Equal to.\n The two PLDAMachine's should have the same - * PLDABase. Precomputed members such as \f$\gamma_a\f$'s - * are compared! - */ - bool operator==(const PLDAMachine& b) const; - /** - * @brief Not equal to.\n Defined as the negation of operator== - */ - bool operator!=(const PLDAMachine& b) const; - /** - * @brief Equal to.\n The two PLDAMachine's should have the same - * PLDABase. Precomputed members such as \f$\gamma_a\f$'s - * are compared! - */ - bool is_similar_to(const PLDAMachine& b, const double r_epsilon=1e-5, - const double a_epsilon=1e-8) const; - - /** - * @brief Loads data from an existing configuration object. Resets the - * current state. - */ - void load(bob::io::base::HDF5File& config); - /** - * @brief Saves an existing machine to a configuration object. - */ - void save(bob::io::base::HDF5File& config) const; - - /** - * @brief Gets the attached PLDABase - */ - const boost::shared_ptr<PLDABase> getPLDABase() const - { return m_plda_base; } - /** - * @brief Sets the attached PLDABase - */ - void setPLDABase(const boost::shared_ptr<bob::learn::misc::PLDABase> plda_base); - - /** - * @brief Gets the feature dimensionality - */ - size_t getDimD() const - { if (!m_plda_base) throw std::runtime_error("No PLDABase set to this machine"); - return m_plda_base->getDimD(); } - /** - * @brief Gets the size/rank the \f$F\f$ subspace/matrix of the PLDA model - */ - size_t getDimF() const - { if (!m_plda_base) throw std::runtime_error("No PLDABase set to this machine"); - return m_plda_base->getDimF(); } - /** - * @brief Gets the size/rank the \f$G\f$ subspace/matrix of the PLDA model - */ - size_t getDimG() const - { if (!m_plda_base) throw std::runtime_error("No PLDABase set to this machine"); - return m_plda_base->getDimG(); } - - /** - * @brief Gets the number of enrolled samples - */ - uint64_t getNSamples() const - { return m_n_samples; } - /** - * @brief Sets the number of enrolled samples - */ - void setNSamples(const uint64_t n_samples) - { m_n_samples = n_samples; } - /** - * @brief Gets the \f$A = -0.5 \sum_{i} x_{i}^T \beta x_{i}\f$ value - */ - double getWSumXitBetaXi() const - { return m_nh_sum_xit_beta_xi; } - /** - * @brief Sets the \f$A = -0.5 \sum_{i} x_{i}^T \beta x_{i}\f$ value - */ - void setWSumXitBetaXi(const double val) - { m_nh_sum_xit_beta_xi = val; } - /** - * @brief Gets the current \f$\sum_{i} F^T \beta x_{i}\f$ value - */ - const blitz::Array<double,1>& getWeightedSum() const - { return m_weighted_sum; } - /** - * @brief Sets the \f$\sum_{i} F^T \beta x_{i}\f$ value - */ - void setWeightedSum(const blitz::Array<double,1>& weighted_sum); - /** - * @brief Returns the current \f$\sum_{i} F^T \beta x_{i}\f$ value - * in order to be updated. - * @warning Use with care. Only trainers should use this function for - * efficiency reasons. - */ - blitz::Array<double,1>& updateWeightedSum() - { return m_weighted_sum; } - /** - * @brief Gets the log likelihood of the enrollment samples - */ - double getLogLikelihood() const - { return m_loglikelihood; } - /** - * @brief Sets the log likelihood of the enrollment samples - */ - void setLogLikelihood(const double val) - { m_loglikelihood = val; } - - /** - * @brief Tells if the \f$\gamma_a\f$ matrix for a given \f$a\f$ (number - * of samples) exists in this machine (does not check the base machine) - * \f$\gamma_a = (Id + a F^T \beta F)^{-1} = \mathcal{F}_{a}\f$ - */ - bool hasGamma(const size_t a) const - { return (m_cache_gamma.find(a) != m_cache_gamma.end()); } - /** - * @brief Gets the \f$\gamma_a\f$ matrix for a given \f$a\f$ (number of - * samples) \f$\gamma_a = (Id + a F^T \beta F)^{-1} = \mathcal{F}_{a}\f$ - * Tries to find it from the base machine and then from this machine - * @warning an exception is thrown if gamma does not exists - */ - const blitz::Array<double,2>& getGamma(const size_t a) const; - /** - * @brief Gets the \f$\gamma_a\f$ matrix for a given \f$a\f$ (number of - * samples) \f$\gamma_a = (Id + a F^T \beta F)^{-1} = \mathcal{F}_{a}\f$ - * Tries to find it from the base machine and then from this machine - * @warning The matrix is computed if it does not already exists, - * and stored in this machine - */ - const blitz::Array<double,2>& getAddGamma(const size_t a); - - /** - * @brief Tells if the log likelihood constant term for a given \f$a\f$ - * (number of samples) exists in this machine - * (does not check the base machine) - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - */ - bool hasLogLikeConstTerm(const size_t a) const - { return (m_cache_loglike_constterm.find(a) != m_cache_loglike_constterm.end()); } - /** - * @brief Gets the log likelihood constant term for a given \f$a\f$ - * (number of samples) - * Tries to find it from the base machine and then from this machine - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - * @warning an exception is thrown if the value does not exists - */ - double getLogLikeConstTerm(const size_t a) const; - /** - * @brief Gets the log likelihood constant term for a given \f$a\f$ - * (number of samples) - * Tries to find it from the base machine and then from this machine - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - * @warning The value is computed if it does not already exists - */ - double getAddLogLikeConstTerm(const size_t a); - - /** - * @brief Clears the maps (\f$\gamma_a\f$ and loglike_constterm[a]). - */ - void clearMaps(); - - - /** - * @brief Compute the log-likelihood of the given sample and (optionally) - * the enrolled samples - */ - double computeLogLikelihood(const blitz::Array<double,1>& sample, - bool with_enrolled_samples=true) const; - /** - * @brief Compute the log-likelihood of the given samples and (optionally) - * the enrolled samples - */ - double computeLogLikelihood(const blitz::Array<double,2>& samples, - bool with_enrolled_samples=true) const; - - /** - * @brief Computes a log likelihood ratio from a 1D or 2D blitz::Array - */ - double forward(const blitz::Array<double,1>& sample); - double forward_(const blitz::Array<double,1>& sample); - double forward(const blitz::Array<double,2>& samples); - - - private: - /** - * @brief Associated PLDABase containing the model (\f$\mu\f$, - * \f$F\f$, \f$G\f$ and \f$\Sigma\f$) - */ - boost::shared_ptr<PLDABase> m_plda_base; - uint64_t m_n_samples; ///< Number of enrollment samples - /** - * @brief Contains the value:\n - * \f$A = -0.5 (\sum_{i} x_{i}^{T} \Sigma^{-1} x_{i} - x_{i}^T \Sigma^{-1} G \alpha G^{T} \Sigma^{-1} x_{i})\f$\n - * \f$A = -0.5 \sum_{i} x_{i}^T \beta x_{i}\f$\n - * used in the likelihood computation (first \f$x_{i}\f$ dependent term) - */ - double m_nh_sum_xit_beta_xi; - /** - * @brief Contains the value \f$\sum_{i} F^T \beta x_{i}\f$ used in the - * likelihood computation (for the second \f$x_{i}\f$ dependent term) - */ - blitz::Array<double,1> m_weighted_sum; - double m_loglikelihood; ///< Log likelihood of the enrollment samples - /** - * @brief \f$\gamma_a\f$ balues which are not already in the - * PLDABase \f$\gamma_a = (Id + a F^T \beta F)^{-1}\f$ - * (depend on the number of samples \f$a\f$) - */ - std::map<size_t, blitz::Array<double,2> > m_cache_gamma; - /** - * @brief Log likelihood constant terms which depend on the number of - * samples \f$a\f$ - * \f$l_{a} = \frac{a}{2} ( -D log(2\pi) -log|\Sigma| +log|\alpha| +log|\gamma_a|)\f$ - */ - std::map<size_t, double> m_cache_loglike_constterm; - - - // working arrays - mutable blitz::Array<double,1> m_tmp_d_1; ///< Cache vector of size dim_d - mutable blitz::Array<double,1> m_tmp_d_2; ///< Cache vector of size dim_d - mutable blitz::Array<double,1> m_tmp_nf_1; ///< Cache vector of size dim_f - mutable blitz::Array<double,1> m_tmp_nf_2; ///< Cache vector of size dim_f - mutable blitz::Array<double,2> m_tmp_nf_nf_1; ///< Cache vector of size dim_f dim_f - - /** - * @brief Resizes the PLDAMachine - */ - void resize(const size_t dim_d, const size_t dim_f, const size_t dim_g); - /** - * @brief Resize working arrays - */ - void resizeTmp(); -}; - -} } } // namespaces - -#endif // BOB_LEARN_MISC_PLDAMACHINE_H diff --git a/bob/learn/misc/include/bob.learn.misc/PLDATrainer.h b/bob/learn/misc/include/bob.learn.misc/PLDATrainer.h deleted file mode 100644 index 3323083..0000000 --- a/bob/learn/misc/include/bob.learn.misc/PLDATrainer.h +++ /dev/null @@ -1,310 +0,0 @@ -/** - * @date Fri Oct 14 18:07:56 2011 +0200 - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * @brief Probabilistic PLDA Discriminant Analysis implemented using - * Expectation Maximization. - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_PLDA_TRAINER_H -#define BOB_LEARN_MISC_PLDA_TRAINER_H - -#include <bob.learn.misc/PLDAMachine.h> -#include <boost/shared_ptr.hpp> -#include <vector> -#include <map> -#include <bob.core/array_copy.h> -#include <boost/random.hpp> -#include <boost/random/mersenne_twister.hpp> - -namespace bob { namespace learn { namespace misc { - -/** - * @brief This class can be used to train the \f$F\f$, \f$G\f$ and - * \f$\Sigma\f$ matrices and the mean vector \f$\mu\f$ of a PLDA model.\n - * References:\n - * 1. 'A Scalable Formulation of Probabilistic Linear Discriminant Analysis: - * Applied to Face Recognition', Laurent El Shafey, Chris McCool, - * Roy Wallace, Sebastien Marcel, TPAMI'2013 - * 2. 'Probabilistic Linear Discriminant Analysis for Inference About - * Identity', Prince and Elder, ICCV'2007\n - * 3. 'Probabilistic Models for Inference about Identity', Li, Fu, Mohammed, - * Elder and Prince, TPAMI'2012 - */ -class PLDATrainer -{ - public: //api - /** - * @brief Default constructor.\n Initializes a new PLDA trainer. The - * training stage will place the resulting components in the - * PLDABase. - */ - PLDATrainer(const bool use_sum_second_order); - - /** - * @brief Copy constructor - */ - PLDATrainer(const PLDATrainer& other); - - /** - * @brief (virtual) Destructor - */ - virtual ~PLDATrainer(); - - /** - * @brief Assignment operator - */ - PLDATrainer& operator=(const PLDATrainer& other); - - /** - * @brief Equal to - */ - bool operator==(const PLDATrainer& other) const; - - /** - * @brief Not equal to - */ - bool operator!=(const PLDATrainer& other) const; - - /** - * @brief Similarity operator - */ - bool is_similar_to(const PLDATrainer& b, - const double r_epsilon=1e-5, const double a_epsilon=1e-8) const; - - /** - * @brief Performs some initialization before the E- and M-steps. - */ - void initialize(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - /** - * @brief Performs some actions after the end of the E- and M-steps. - */ - void finalize(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - - /** - * @brief Calculates and saves statistics across the dataset, and saves - * these as m_z_{first,second}_order. - * The statistics will be used in the mStep() that follows. - */ - void eStep(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - - /** - * @brief Performs a maximization step to update the parameters of the - * PLDABase - */ - void mStep(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - - - /** - * @brief Sets whether the second order statistics are stored during the - * training procedure, or only their sum. - */ - void setUseSumSecondOrder(bool v) { m_use_sum_second_order = v; } - /** - * @brief Tells whether the second order statistics are stored during the - * training procedure, or only their sum. - */ - bool getUseSumSecondOrder() const - { return m_use_sum_second_order; } - - /** - * @brief This enum defines different methods for initializing the \f$F\f$ - * subspace - */ - typedef enum { - RANDOM_F=0, - BETWEEN_SCATTER=1 - } - InitFMethod; - /** - * @brief This enum defines different methods for initializing the \f$G\f$ - * subspace - */ - typedef enum { - RANDOM_G=0, - WITHIN_SCATTER=1 - } - InitGMethod; - /** - * @brief This enum defines different methods for initializing the - * \f$\Sigma\f$ covariance matrix - */ - typedef enum { - RANDOM_SIGMA=0, - VARIANCE_G=1, - CONSTANT=2, - VARIANCE_DATA=3 - } - InitSigmaMethod; - /** - * @brief Sets the method used to initialize \f$F\f$ - */ - void setInitFMethod(const InitFMethod m) { m_initF_method = m; } - /** - * @brief Gets the method used to initialize \f$F\f$ - */ - InitFMethod getInitFMethod() const { return m_initF_method; } - /** - * @brief Sets the ratio value used to initialize \f$F\f$ - */ - void setInitFRatio(double d) { m_initF_ratio = d; } - /** - * @brief Gets the ratio value used to initialize \f$F\f$ - */ - double getInitFRatio() const { return m_initF_ratio; } - /** - * @brief Sets the method used to initialize \f$G\f$ - */ - void setInitGMethod(const InitGMethod m) { m_initG_method = m; } - /** - * @brief Gets the method used to initialize \f$G\f$ - */ - InitGMethod getInitGMethod() const { return m_initG_method; } - /** - * @brief Sets the ratio value used to initialize \f$G\f$ - */ - void setInitGRatio(double d) { m_initG_ratio = d; } - /** - * @brief Gets the ratio value used to initialize \f$G\f$ - */ - double getInitGRatio() const { return m_initG_ratio; } - /** - * @brief Sets the method used to initialize \f$\Sigma\f$ - */ - void setInitSigmaMethod(const InitSigmaMethod m) - { m_initSigma_method = m; } - /** - * @brief Gets the method used to initialize \f$\Sigma\f$ - */ - InitSigmaMethod getInitSigmaMethod() const - { return m_initSigma_method; } - /** - * @brief Sets the ratio value used to initialize \f$\Sigma\f$ - */ - void setInitSigmaRatio(double d) { m_initSigma_ratio = d; } - /** - * @brief Gets the ratio value used to initialize \f$\Sigma\f$ - */ - double getInitSigmaRatio() const { return m_initSigma_ratio; } - - /** - * @brief Gets the z first order statistics (mostly for test purposes) - */ - const std::vector<blitz::Array<double,2> >& getZFirstOrder() const - { return m_cache_z_first_order;} - /** - * @brief Gets the z second order statistics (mostly for test purposes) - */ - const blitz::Array<double,2>& getZSecondOrderSum() const - { return m_cache_sum_z_second_order;} - /** - * @brief Gets the z second order statistics (mostly for test purposes) - */ - const std::vector<blitz::Array<double,3> >& getZSecondOrder() const - { if(m_use_sum_second_order) - throw std::runtime_error("You should disable the use_sum_second_order flag to use this feature"); - return m_cache_z_second_order; - } - - /** - * @brief Main procedure for enrolling a PLDAMachine - */ - void enrol(bob::learn::misc::PLDAMachine& plda_machine, - const blitz::Array<double,2>& ar) const; - - - /** - * @brief Sets the Random Number Generator - */ - void setRng(const boost::shared_ptr<boost::mt19937> rng) - { m_rng = rng; } - - /** - * @brief Gets the Random Number Generator - */ - const boost::shared_ptr<boost::mt19937> getRng() const - { return m_rng; } - - private: - - boost::shared_ptr<boost::mt19937> m_rng; - - //representation - size_t m_dim_d; ///< Dimensionality of the input features - size_t m_dim_f; ///< Size/rank of the \f$F\f$ subspace - size_t m_dim_g; ///< Size/rank of the \f$G\f$ subspace - bool m_use_sum_second_order; ///< If set, only the sum of the second order statistics is stored/allocated - InitFMethod m_initF_method; ///< Initialization method for \f$F\f$ - double m_initF_ratio; ///< Ratio/factor used for the initialization of \f$F\f$ - InitGMethod m_initG_method; ///< Initialization method for \f$G\f$ - double m_initG_ratio; ///< Ratio/factor used for the initialization of \f$G\f$ - InitSigmaMethod m_initSigma_method; ///< Initialization method for \f$\Sigma\f$ - double m_initSigma_ratio; ///< Ratio/factor used for the initialization of \f$\Sigma\f$ - - // Statistics and covariance computed during the training process - blitz::Array<double,2> m_cache_S; ///< Covariance of the training data - std::vector<blitz::Array<double,2> > m_cache_z_first_order; ///< Current mean of the z_{n} latent variable (1 for each sample) - blitz::Array<double,2> m_cache_sum_z_second_order; ///< Current sum of the covariance of the z_{n} latent variable - std::vector<blitz::Array<double,3> > m_cache_z_second_order; ///< Current covariance of the z_{n} latent variable - // Precomputed - /** - * @brief Number of training samples for each individual in the training set - */ - std::vector<size_t> m_cache_n_samples_per_id; - /** - * @brief Tells if there is an identity with a 'key'/particular number of - * training samples, and if corresponding matrices are up to date. - */ - std::map<size_t,bool> m_cache_n_samples_in_training; - blitz::Array<double,2> m_cache_B; ///< \f$B = [F, G]\f$ (size nfeatures x (m_dim_f+m_dim_g) ) - blitz::Array<double,2> m_cache_Ft_isigma_G; ///< \f$F^T \Sigma^-1 G\f$ - blitz::Array<double,2> m_cache_eta; ///< \f$F^T \Sigma^-1 G \alpha\f$ - // Blocks (with \f$\gamma_{a}\f$) of \f$(Id + A^T \Sigma'^-1 A)^-1\f$ (efficient inversion) - std::map<size_t,blitz::Array<double,2> > m_cache_zeta; ///< \f$\zeta_{a} = \alpha + \eta^T \gamma_{a} \eta\f$ - std::map<size_t,blitz::Array<double,2> > m_cache_iota; ///< \f$\iota_{a} = -\gamma_{a} \eta\f$ - - // Working arrays - mutable blitz::Array<double,1> m_tmp_nf_1; ///< vector of dimension dim_f - mutable blitz::Array<double,1> m_tmp_nf_2; ///< vector of dimension dim_f - mutable blitz::Array<double,1> m_tmp_ng_1; ///< vector of dimension dim_f - mutable blitz::Array<double,1> m_tmp_D_1; ///< vector of dimension dim_d - mutable blitz::Array<double,1> m_tmp_D_2; ///< vector of dimension dim_d - mutable blitz::Array<double,2> m_tmp_nfng_nfng; ///< matrix of dimension (dim_f+dim_g)x(dim_f+dim_g) - mutable blitz::Array<double,2> m_tmp_D_nfng_1; ///< matrix of dimension (dim_d)x(dim_f+dim_g) - mutable blitz::Array<double,2> m_tmp_D_nfng_2; ///< matrix of dimension (dim_d)x(dim_f+dim_g) - - // internal methods - void computeMeanVariance(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - void initMembers(const std::vector<blitz::Array<double,2> >& v_ar); - void initFGSigma(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - void initF(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - void initG(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - void initSigma(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - - void checkTrainingData(const std::vector<blitz::Array<double,2> >& v_ar); - void precomputeFromFGSigma(bob::learn::misc::PLDABase& machine); - void precomputeLogLike(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - - void updateFG(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - void updateSigma(bob::learn::misc::PLDABase& machine, - const std::vector<blitz::Array<double,2> >& v_ar); - - void resizeTmp(); -}; - -} } } // namespaces - -#endif /* BOB_LEARN_MISC_PLDA_TRAINER_H */ diff --git a/bob/learn/misc/include/bob.learn.misc/ZTNorm.h b/bob/learn/misc/include/bob.learn.misc/ZTNorm.h deleted file mode 100644 index 47f0af9..0000000 --- a/bob/learn/misc/include/bob.learn.misc/ZTNorm.h +++ /dev/null @@ -1,89 +0,0 @@ -/** - * @date Tue Jul 19 15:33:20 2011 +0200 - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * - * Copyright (C) Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_LEARN_MISC_ZTNORM_H -#define BOB_LEARN_MISC_ZTNORM_H - -#include <blitz/array.h> - -namespace bob { namespace learn { namespace misc { - -/** - * Normalise raw scores with ZT-Norm - * - * @exception std::runtime_error matrix sizes are not consistent - * - * @param rawscores_probes_vs_models - * @param rawscores_zprobes_vs_models - * @param rawscores_probes_vs_tmodels - * @param rawscores_zprobes_vs_tmodels - * @param mask_zprobes_vs_tmodels_istruetrial - * @param[out] normalizedscores normalized scores - * @warning The destination score array should have the correct size - * (Same size as rawscores_probes_vs_models) - */ -void ztNorm(const blitz::Array<double, 2>& rawscores_probes_vs_models, - const blitz::Array<double, 2>& rawscores_zprobes_vs_models, - const blitz::Array<double, 2>& rawscores_probes_vs_tmodels, - const blitz::Array<double, 2>& rawscores_zprobes_vs_tmodels, - const blitz::Array<bool, 2>& mask_zprobes_vs_tmodels_istruetrial, - blitz::Array<double, 2>& normalizedscores); - -/** - * Normalise raw scores with ZT-Norm. - * Assume that znorm and tnorm have no common subject id. - * - * @exception std::runtime_error matrix sizes are not consistent - * - * @param rawscores_probes_vs_models - * @param rawscores_zprobes_vs_models - * @param rawscores_probes_vs_tmodels - * @param rawscores_zprobes_vs_tmodels - * @param[out] normalizedscores normalized scores - * @warning The destination score array should have the correct size - * (Same size as rawscores_probes_vs_models) - */ -void ztNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>& rawscores_zprobes_vs_models, - const blitz::Array<double,2>& rawscores_probes_vs_tmodels, - const blitz::Array<double,2>& rawscores_zprobes_vs_tmodels, - blitz::Array<double,2>& normalizedscores); - -/** - * Normalise raw scores with T-Norm. - * - * @exception std::runtime_error matrix sizes are not consistent - * - * @param rawscores_probes_vs_models - * @param rawscores_probes_vs_tmodels - * @param[out] normalizedscores normalized scores - * @warning The destination score array should have the correct size - * (Same size as rawscores_probes_vs_models) - */ -void tNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>& rawscores_probes_vs_tmodels, - blitz::Array<double,2>& normalizedscores); - -/** - * Normalise raw scores with Z-Norm. - * - * @exception std::runtime_error matrix sizes are not consistent - * - * @param rawscores_probes_vs_models - * @param rawscores_zprobes_vs_models - * @param[out] normalizedscores normalized scores - * @warning The destination score array should have the correct size - * (Same size as rawscores_probes_vs_models) - */ -void zNorm(const blitz::Array<double,2>& rawscores_probes_vs_models, - const blitz::Array<double,2>& rawscores_zprobes_vs_models, - blitz::Array<double,2>& normalizedscores); - -} } } // namespaces - -#endif /* BOB_LEARN_MISC_ZTNORM_H */ diff --git a/bob/learn/misc/include/bob.learn.misc/api.h b/bob/learn/misc/include/bob.learn.misc/api.h deleted file mode 100644 index 44208e5..0000000 --- a/bob/learn/misc/include/bob.learn.misc/api.h +++ /dev/null @@ -1,127 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Fri 21 Nov 10:38:48 2013 - * - * @brief Python API for bob::learn::em - */ - -#ifndef BOB_LEARN_EM_API_H -#define BOB_LEARN_EM_API_H - -/* Define Module Name and Prefix for other Modules - Note: We cannot use BOB_EXT_* macros here, unfortunately */ -#define BOB_LEARN_EM_PREFIX "bob.learn.misc" -#define BOB_LEARN_EM_FULL_NAME "bob.learn.misc._library" - -#include <Python.h> - -#include <bob.learn.misc/config.h> -#include <boost/shared_ptr.hpp> - -/******************* - * C API functions * - *******************/ - -/* Enum defining entries in the function table */ -enum _PyBobLearnMisc_ENUM{ - PyBobLearnMisc_APIVersion_NUM = 0, - // bindings - ////PyBobIpBaseLBP_Type_NUM, - ////PyBobIpBaseLBP_Check_NUM, - ////PyBobIpBaseLBP_Converter_NUM, - // Total number of C API pointers - PyBobLearnMisc_API_pointers -}; - - -#ifdef BOB_LEARN_EM_MODULE - - /* This section is used when compiling `bob.io.base' itself */ - - /************** - * Versioning * - **************/ - - extern int PyBobLearnMisc_APIVersion; - -#else // BOB_LEARN_EM_MODULE - - /* This section is used in modules that use `bob.io.base's' C-API */ - -#if defined(NO_IMPORT_ARRAY) - extern void **PyBobLearnMisc_API; -#elif defined(PY_ARRAY_UNIQUE_SYMBOL) - void **PyBobLearnMisc_API; -#else - static void **PyBobLearnMisc_API=NULL; -#endif - - /************** - * Versioning * - **************/ - -#define PyBobLearnMisc_APIVersion (*(int *)PyBobLearnMisc_API[PyBobLearnMisc_APIVersion_NUM]) - -#if !defined(NO_IMPORT_ARRAY) - - /** - * Returns -1 on error, 0 on success. - */ - static int import_bob_learn_misc(void) { - - PyObject *c_api_object; - PyObject *module; - - module = PyImport_ImportModule(BOB_LEARN_EM_FULL_NAME); - - if (module == NULL) return -1; - - c_api_object = PyObject_GetAttrString(module, "_C_API"); - - if (c_api_object == NULL) { - Py_DECREF(module); - return -1; - } - -#if PY_VERSION_HEX >= 0x02070000 - if (PyCapsule_CheckExact(c_api_object)) { - PyBobLearnMisc_API = (void **)PyCapsule_GetPointer(c_api_object, PyCapsule_GetName(c_api_object)); - } -#else - if (PyCObject_Check(c_api_object)) { - PyBobLearnMisc_API = (void **)PyCObject_AsVoidPtr(c_api_object); - } -#endif - - Py_DECREF(c_api_object); - Py_DECREF(module); - - if (!PyBobLearnMisc_API) { - PyErr_SetString(PyExc_ImportError, "cannot find C/C++ API " -#if PY_VERSION_HEX >= 0x02070000 - "capsule" -#else - "cobject" -#endif - " at `" BOB_LEARN_EM_FULL_NAME "._C_API'"); - return -1; - } - - /* Checks that the imported version matches the compiled version */ - int imported_version = *(int*)PyBobLearnMisc_API[PyBobLearnMisc_APIVersion_NUM]; - - if (BOB_LEARN_MISC_API_VERSION != imported_version) { - PyErr_Format(PyExc_ImportError, BOB_LEARN_EM_FULL_NAME " import error: you compiled against API version 0x%04x, but are now importing an API with version 0x%04x which is not compatible - check your Python runtime environment for errors", BOB_LEARN_MISC_API_VERSION, imported_version); - return -1; - } - - /* If you get to this point, all is good */ - return 0; - - } - -#endif //!defined(NO_IMPORT_ARRAY) - -#endif /* BOB_LEARN_EM_MODULE */ - -#endif /* BOB_LEARN_EM_API_H */ diff --git a/bob/learn/misc/include/bob.learn.misc/config.h b/bob/learn/misc/include/bob.learn.misc/config.h deleted file mode 100644 index c35fa5c..0000000 --- a/bob/learn/misc/include/bob.learn.misc/config.h +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @author Manuel Guenther <manuel.guenther@idiap.ch> - * @date Thu Aug 21 20:49:42 CEST 2014 - * - * @brief General directives for all modules in bob.learn.misc - */ - -#ifndef BOB_LEARN_MISC_CONFIG_H -#define BOB_LEARN_MISC_CONFIG_H - -/* Macros that define versions and important names */ -#define BOB_LEARN_MISC_API_VERSION 0x0200 - -#endif /* BOB_LEARN_MISC_CONFIG_H */ diff --git a/bob/learn/misc/isv_base.cpp b/bob/learn/misc/isv_base.cpp deleted file mode 100644 index 023a6d3..0000000 --- a/bob/learn/misc/isv_base.cpp +++ /dev/null @@ -1,528 +0,0 @@ -/** - * @date Wed Jan 28 11:13:15 2015 +0200 - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto ISVBase_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".ISVBase", - - "A ISVBase instance can be seen as a container for U and D when performing Joint Factor Analysis (JFA)." - "References: [Vogt2008,McCool2013]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a ISVBase", - "", - true - ) - .add_prototype("gmm,ru","") - .add_prototype("other","") - .add_prototype("hdf5","") - .add_prototype("","") - - .add_parameter("gmm", ":py:class:`bob.learn.misc.GMMMachine`", "The Universal Background Model.") - .add_parameter("ru", "int", "Size of U (Within client variation matrix). In the end the U matrix will have (number_of_gaussians * feature_dimension x ru)") - .add_parameter("other", ":py:class:`bob.learn.misc.ISVBase`", "A ISVBase object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscISVBase_init_copy(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVBase_doc.kwlist(1); - PyBobLearnMiscISVBaseObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscISVBase_Type, &o)){ - ISVBase_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVBase(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscISVBase_init_hdf5(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVBase_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - ISVBase_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVBase(*(config->f))); - - return 0; -} - - -static int PyBobLearnMiscISVBase_init_ubm(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVBase_doc.kwlist(0); - - PyBobLearnMiscGMMMachineObject* ubm; - int ru = 1; - - //Here we have to select which keyword argument to read - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!i", kwlist, &PyBobLearnMiscGMMMachine_Type, &ubm, &ru)){ - ISVBase_doc.print_usage(); - return -1; - } - - if(ru < 0){ - PyErr_Format(PyExc_TypeError, "ru argument must be greater than or equal to one"); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVBase(ubm->cxx, ru)); - return 0; -} - - -static int PyBobLearnMiscISVBase_init(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch (nargs) { - - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscISVBase_Check(arg)) - return PyBobLearnMiscISVBase_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscISVBase_init_hdf5(self, args, kwargs); - } - case 2: - return PyBobLearnMiscISVBase_init_ubm(self, args, kwargs); - default: - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 1 or 2 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - ISVBase_doc.print_usage(); - return -1; - } - BOB_CATCH_MEMBER("cannot create ISVBase", 0) - return 0; -} - - -static void PyBobLearnMiscISVBase_delete(PyBobLearnMiscISVBaseObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscISVBase_RichCompare(PyBobLearnMiscISVBaseObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscISVBase_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscISVBaseObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare ISVBase objects", 0) -} - -int PyBobLearnMiscISVBase_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscISVBase_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int, int)", - "A tuple that represents the number of gaussians, dimensionality of each Gaussian, dimensionality of the rU (within client variability matrix) `(#Gaussians, #Inputs, #rU)`.", - "" -); -PyObject* PyBobLearnMiscISVBase_getShape(PyBobLearnMiscISVBaseObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i,i)", self->cxx->getNGaussians(), self->cxx->getNInputs(), self->cxx->getDimRu()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -/***** supervector_length *****/ -static auto supervector_length = bob::extension::VariableDoc( - "supervector_length", - "int", - - "Returns the supervector length." - "NGaussians x NInputs: Number of Gaussian components by the feature dimensionality", - - "@warning An exception is thrown if no Universal Background Model has been set yet." -); -PyObject* PyBobLearnMiscISVBase_getSupervectorLength(PyBobLearnMiscISVBaseObject* self, void*) { - BOB_TRY - return Py_BuildValue("i", self->cxx->getSupervectorLength()); - BOB_CATCH_MEMBER("supervector_length could not be read", 0) -} - - -/***** u *****/ -static auto U = bob::extension::VariableDoc( - "u", - "array_like <float, 2D>", - "Returns the U matrix (within client variability matrix)", - "" -); -PyObject* PyBobLearnMiscISVBase_getU(PyBobLearnMiscISVBaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getU()); - BOB_CATCH_MEMBER("``u`` could not be read", 0) -} -int PyBobLearnMiscISVBase_setU(PyBobLearnMiscISVBaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, U.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "u"); - if (!b) return -1; - self->cxx->setU(*b); - return 0; - BOB_CATCH_MEMBER("``u`` matrix could not be set", -1) -} - - -/***** d *****/ -static auto D = bob::extension::VariableDoc( - "d", - "array_like <float, 1D>", - "Returns the diagonal matrix diag(d) (as a 1D vector)", - "" -); -PyObject* PyBobLearnMiscISVBase_getD(PyBobLearnMiscISVBaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getD()); - BOB_CATCH_MEMBER("``d`` could not be read", 0) -} -int PyBobLearnMiscISVBase_setD(PyBobLearnMiscISVBaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, D.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "d"); - if (!b) return -1; - self->cxx->setD(*b); - return 0; - BOB_CATCH_MEMBER("``d`` matrix could not be set", -1) -} - - -/***** ubm *****/ -static auto ubm = bob::extension::VariableDoc( - "ubm", - ":py:class:`bob.learn.misc.GMMMachine`", - "Returns the UBM (Universal Background Model", - "" -); -PyObject* PyBobLearnMiscISVBase_getUBM(PyBobLearnMiscISVBaseObject* self, void*){ - BOB_TRY - - boost::shared_ptr<bob::learn::misc::GMMMachine> ubm_gmmMachine = self->cxx->getUbm(); - - //Allocating the correspondent python object - PyBobLearnMiscGMMMachineObject* retval = - (PyBobLearnMiscGMMMachineObject*)PyBobLearnMiscGMMMachine_Type.tp_alloc(&PyBobLearnMiscGMMMachine_Type, 0); - retval->cxx = ubm_gmmMachine; - - return Py_BuildValue("O",retval); - BOB_CATCH_MEMBER("ubm could not be read", 0) -} -int PyBobLearnMiscISVBase_setUBM(PyBobLearnMiscISVBaseObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyBobLearnMiscGMMMachine_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a :py:class:`bob.learn.misc.GMMMachine`", Py_TYPE(self)->tp_name, ubm.name()); - return -1; - } - - PyBobLearnMiscGMMMachineObject* ubm_gmmMachine = 0; - PyArg_Parse(value, "O!", &PyBobLearnMiscGMMMachine_Type,&ubm_gmmMachine); - - self->cxx->setUbm(ubm_gmmMachine->cxx); - - return 0; - BOB_CATCH_MEMBER("ubm could not be set", -1) -} - - - -static PyGetSetDef PyBobLearnMiscISVBase_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscISVBase_getShape, - 0, - shape.doc(), - 0 - }, - - { - supervector_length.name(), - (getter)PyBobLearnMiscISVBase_getSupervectorLength, - 0, - supervector_length.doc(), - 0 - }, - - { - U.name(), - (getter)PyBobLearnMiscISVBase_getU, - (setter)PyBobLearnMiscISVBase_setU, - U.doc(), - 0 - }, - - { - D.name(), - (getter)PyBobLearnMiscISVBase_getD, - (setter)PyBobLearnMiscISVBase_setD, - D.doc(), - 0 - }, - - { - ubm.name(), - (getter)PyBobLearnMiscISVBase_getUBM, - (setter)PyBobLearnMiscISVBase_setUBM, - ubm.doc(), - 0 - }, - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the ISVBase to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscISVBase_Save(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the ISVBase to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscISVBase_Load(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this ISVBase with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.ISVBase`", "A ISVBase object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscISVBase_IsSimilarTo(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscISVBaseObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscISVBase_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Resets the dimensionality of the subspace U. " - "U is hence uninitialized.", - 0, - true -) -.add_prototype("rU") -.add_parameter("rU", "int", "Size of U (Within client variation matrix)"); -static PyObject* PyBobLearnMiscISVBase_resize(PyBobLearnMiscISVBaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int rU = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &rU)) Py_RETURN_NONE; - - if (rU <= 0){ - PyErr_Format(PyExc_TypeError, "rU must be greater than zero"); - resize.print_usage(); - return 0; - } - - self->cxx->resize(rU); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - - - - -static PyMethodDef PyBobLearnMiscISVBase_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscISVBase_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscISVBase_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscISVBase_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - resize.name(), - (PyCFunction)PyBobLearnMiscISVBase_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the ISV type struct; will be initialized later -PyTypeObject PyBobLearnMiscISVBase_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscISVBase(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscISVBase_Type.tp_name = ISVBase_doc.name(); - PyBobLearnMiscISVBase_Type.tp_basicsize = sizeof(PyBobLearnMiscISVBaseObject); - PyBobLearnMiscISVBase_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscISVBase_Type.tp_doc = ISVBase_doc.doc(); - - // set the functions - PyBobLearnMiscISVBase_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscISVBase_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscISVBase_init); - PyBobLearnMiscISVBase_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscISVBase_delete); - PyBobLearnMiscISVBase_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscISVBase_RichCompare); - PyBobLearnMiscISVBase_Type.tp_methods = PyBobLearnMiscISVBase_methods; - PyBobLearnMiscISVBase_Type.tp_getset = PyBobLearnMiscISVBase_getseters; - //PyBobLearnMiscISVBase_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscISVBase_forward); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscISVBase_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscISVBase_Type); - return PyModule_AddObject(module, "ISVBase", (PyObject*)&PyBobLearnMiscISVBase_Type) >= 0; -} - diff --git a/bob/learn/misc/isv_machine.cpp b/bob/learn/misc/isv_machine.cpp deleted file mode 100644 index 0d7f0da..0000000 --- a/bob/learn/misc/isv_machine.cpp +++ /dev/null @@ -1,604 +0,0 @@ -/** - * @date Wed Jan 28 13:03:15 2015 +0200 - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto ISVMachine_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".ISVMachine", - "A ISVMachine. An attached :py:class:`bob.learn.misc.ISVBase` should be provided for Joint Factor Analysis. The :py:class:`bob.learn.misc.ISVMachine` carries information about the speaker factors y and z, whereas a :py:class:`bob.learn.misc.JFABase` carries information about the matrices U, V and D." - "References: [Vogt2008,McCool2013]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructor. Builds a new ISVMachine", - "", - true - ) - .add_prototype("isv_base","") - .add_prototype("other","") - .add_prototype("hdf5","") - - .add_parameter("isv", ":py:class:`bob.learn.misc.ISVBase`", "The ISVBase associated with this machine") - .add_parameter("other", ":py:class:`bob.learn.misc.ISVMachine`", "A ISVMachine object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscISVMachine_init_copy(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVMachine_doc.kwlist(1); - PyBobLearnMiscISVMachineObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscISVMachine_Type, &o)){ - ISVMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVMachine(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscISVMachine_init_hdf5(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVMachine_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - ISVMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVMachine(*(config->f))); - - return 0; -} - - -static int PyBobLearnMiscISVMachine_init_isvbase(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVMachine_doc.kwlist(0); - - PyBobLearnMiscISVBaseObject* isv_base; - - //Here we have to select which keyword argument to read - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscISVBase_Type, &isv_base)){ - ISVMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVMachine(isv_base->cxx)); - return 0; -} - - -static int PyBobLearnMiscISVMachine_init(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if(nargs == 1){ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscISVMachine_Check(arg)) - return PyBobLearnMiscISVMachine_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscISVMachine_init_hdf5(self, args, kwargs); - // If the constructor input is a JFABase Object - else - return PyBobLearnMiscISVMachine_init_isvbase(self, args, kwargs); - } - else{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires only 1 argument, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - ISVMachine_doc.print_usage(); - return -1; - } - - BOB_CATCH_MEMBER("cannot create ISVMachine", 0) - return 0; -} - -static void PyBobLearnMiscISVMachine_delete(PyBobLearnMiscISVMachineObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscISVMachine_RichCompare(PyBobLearnMiscISVMachineObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscISVMachine_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscISVMachineObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare ISVMachine objects", 0) -} - -int PyBobLearnMiscISVMachine_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscISVMachine_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int, int, int)", - "A tuple that represents the number of gaussians, dimensionality of each Gaussian and dimensionality of the rU (within client variability matrix)) ``(#Gaussians, #Inputs, #rU)``.", - "" -); -PyObject* PyBobLearnMiscISVMachine_getShape(PyBobLearnMiscISVMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i,i)", self->cxx->getNGaussians(), self->cxx->getNInputs(), self->cxx->getDimRu()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -/***** supervector_length *****/ -static auto supervector_length = bob::extension::VariableDoc( - "supervector_length", - "int", - - "Returns the supervector length." - "NGaussians x NInputs: Number of Gaussian components by the feature dimensionality", - - "@warning An exception is thrown if no Universal Background Model has been set yet." -); -PyObject* PyBobLearnMiscISVMachine_getSupervectorLength(PyBobLearnMiscISVMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("i", self->cxx->getSupervectorLength()); - BOB_CATCH_MEMBER("supervector_length could not be read", 0) -} - -/***** z *****/ -static auto Z = bob::extension::VariableDoc( - "z", - "array_like <float, 1D>", - "Returns the z speaker factor. Eq (31) from [McCool2013]", - "" -); -PyObject* PyBobLearnMiscISVMachine_getZ(PyBobLearnMiscISVMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getZ()); - BOB_CATCH_MEMBER("`z` could not be read", 0) -} -int PyBobLearnMiscISVMachine_setZ(PyBobLearnMiscISVMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, Z.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "z"); - if (!b) return -1; - self->cxx->setZ(*b); - return 0; - BOB_CATCH_MEMBER("`z` vector could not be set", -1) -} - - -/***** x *****/ -static auto X = bob::extension::VariableDoc( - "x", - "array_like <float, 1D>", - "Returns the X session factor. Eq (29) from [McCool2013]", - "The latent variable x (last one computed). This is a feature provided for convenience, but this attribute is not 'part' of the machine. The session latent variable x is indeed not class-specific, but depends on the sample considered. Furthermore, it is not saved into the machine or used when comparing machines." -); -PyObject* PyBobLearnMiscISVMachine_getX(PyBobLearnMiscISVMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getX()); - BOB_CATCH_MEMBER("`x` could not be read", 0) -} - - -/***** isv_base *****/ -static auto isv_base = bob::extension::VariableDoc( - "isv_base", - ":py:class:`bob.learn.misc.ISVBase`", - "The ISVBase attached to this machine", - "" -); -PyObject* PyBobLearnMiscISVMachine_getISVBase(PyBobLearnMiscISVMachineObject* self, void*){ - BOB_TRY - - boost::shared_ptr<bob::learn::misc::ISVBase> isv_base_o = self->cxx->getISVBase(); - - //Allocating the correspondent python object - PyBobLearnMiscISVBaseObject* retval = - (PyBobLearnMiscISVBaseObject*)PyBobLearnMiscISVBase_Type.tp_alloc(&PyBobLearnMiscISVBase_Type, 0); - retval->cxx = isv_base_o; - - return Py_BuildValue("O",retval); - BOB_CATCH_MEMBER("isv_base could not be read", 0) -} -int PyBobLearnMiscISVMachine_setISVBase(PyBobLearnMiscISVMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyBobLearnMiscISVBase_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a :py:class:`bob.learn.misc.ISVBase`", Py_TYPE(self)->tp_name, isv_base.name()); - return -1; - } - - PyBobLearnMiscISVBaseObject* isv_base_o = 0; - PyArg_Parse(value, "O!", &PyBobLearnMiscISVBase_Type,&isv_base_o); - - self->cxx->setISVBase(isv_base_o->cxx); - - return 0; - BOB_CATCH_MEMBER("isv_base could not be set", -1) -} - - - - -static PyGetSetDef PyBobLearnMiscISVMachine_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscISVMachine_getShape, - 0, - shape.doc(), - 0 - }, - - { - supervector_length.name(), - (getter)PyBobLearnMiscISVMachine_getSupervectorLength, - 0, - supervector_length.doc(), - 0 - }, - - { - isv_base.name(), - (getter)PyBobLearnMiscISVMachine_getISVBase, - (setter)PyBobLearnMiscISVMachine_setISVBase, - isv_base.doc(), - 0 - }, - - { - Z.name(), - (getter)PyBobLearnMiscISVMachine_getZ, - (setter)PyBobLearnMiscISVMachine_setZ, - Z.doc(), - 0 - }, - - { - X.name(), - (getter)PyBobLearnMiscISVMachine_getX, - 0, - X.doc(), - 0 - }, - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the ISVMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscISVMachine_Save(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the ISVMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscISVMachine_Load(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this ISVMachine with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.ISVMachine`", "A ISVMachine object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscISVMachine_IsSimilarTo(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscISVMachineObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscISVMachine_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** estimate_x ***/ -static auto estimate_x = bob::extension::FunctionDoc( - "estimate_x", - "Estimates the session offset x (LPT assumption) given GMM statistics.", - "Estimates x from the GMM statistics considering the LPT assumption, that is the latent session variable x is approximated using the UBM", - true -) -.add_prototype("stats,input") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics of the GMM") -.add_parameter("input", "array_like <float, 1D>", "Input vector"); -static PyObject* PyBobLearnMiscISVMachine_estimateX(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = estimate_x.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - PyBlitzArrayObject* input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMStats_Type, &stats, - &PyBlitzArray_Converter,&input)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - self->cxx->estimateX(*stats->cxx, *PyBlitzArrayCxx_AsBlitz<double,1>(input)); - - BOB_CATCH_MEMBER("cannot estimate X", 0) - Py_RETURN_NONE; -} - - -/*** estimate_ux ***/ -static auto estimate_ux = bob::extension::FunctionDoc( - "estimate_ux", - "Estimates Ux (LPT assumption) given GMM statistics.", - "Estimates Ux from the GMM statistics considering the LPT assumption, that is the latent session variable x is approximated using the UBM.", - true -) -.add_prototype("stats,input") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics of the GMM") -.add_parameter("input", "array_like <float, 1D>", "Input vector"); -static PyObject* PyBobLearnMiscISVMachine_estimateUx(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = estimate_ux.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - PyBlitzArrayObject* input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMStats_Type, &stats, - &PyBlitzArray_Converter,&input)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - self->cxx->estimateUx(*stats->cxx, *PyBlitzArrayCxx_AsBlitz<double,1>(input)); - - BOB_CATCH_MEMBER("cannot estimate Ux", 0) - Py_RETURN_NONE; -} - - -/*** forward_ux ***/ -static auto forward_ux = bob::extension::FunctionDoc( - "forward_ux", - "Computes a score for the given UBM statistics and given the Ux vector", - "", - true -) -.add_prototype("stats,ux") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics as input") -.add_parameter("ux", "array_like <float, 1D>", "Input vector"); -static PyObject* PyBobLearnMiscISVMachine_ForwardUx(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = forward_ux.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - PyBlitzArrayObject* ux_input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMStats_Type, &stats, - &PyBlitzArray_Converter,&ux_input)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto ux_input_ = make_safe(ux_input); - double score = self->cxx->forward(*stats->cxx, *PyBlitzArrayCxx_AsBlitz<double,1>(ux_input)); - - return Py_BuildValue("d", score); - BOB_CATCH_MEMBER("cannot forward_ux", 0) -} - - -/*** forward ***/ -static auto forward = bob::extension::FunctionDoc( - "forward", - "Execute the machine", - "", - true -) -.add_prototype("stats") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics as input"); -static PyObject* PyBobLearnMiscISVMachine_Forward(PyBobLearnMiscISVMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = forward.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMStats_Type, &stats)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - double score = self->cxx->forward(*stats->cxx); - - return Py_BuildValue("d", score); - BOB_CATCH_MEMBER("cannot forward", 0) - -} - - -static PyMethodDef PyBobLearnMiscISVMachine_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscISVMachine_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscISVMachine_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscISVMachine_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - - { - estimate_x.name(), - (PyCFunction)PyBobLearnMiscISVMachine_estimateX, - METH_VARARGS|METH_KEYWORDS, - estimate_x.doc() - }, - - { - estimate_ux.name(), - (PyCFunction)PyBobLearnMiscISVMachine_estimateUx, - METH_VARARGS|METH_KEYWORDS, - estimate_ux.doc() - }, - - { - forward_ux.name(), - (PyCFunction)PyBobLearnMiscISVMachine_ForwardUx, - METH_VARARGS|METH_KEYWORDS, - forward_ux.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the JFA type struct; will be initialized later -PyTypeObject PyBobLearnMiscISVMachine_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscISVMachine(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscISVMachine_Type.tp_name = ISVMachine_doc.name(); - PyBobLearnMiscISVMachine_Type.tp_basicsize = sizeof(PyBobLearnMiscISVMachineObject); - PyBobLearnMiscISVMachine_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscISVMachine_Type.tp_doc = ISVMachine_doc.doc(); - - // set the functions - PyBobLearnMiscISVMachine_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscISVMachine_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscISVMachine_init); - PyBobLearnMiscISVMachine_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscISVMachine_delete); - PyBobLearnMiscISVMachine_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscISVMachine_RichCompare); - PyBobLearnMiscISVMachine_Type.tp_methods = PyBobLearnMiscISVMachine_methods; - PyBobLearnMiscISVMachine_Type.tp_getset = PyBobLearnMiscISVMachine_getseters; - PyBobLearnMiscISVMachine_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscISVMachine_Forward); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscISVMachine_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscISVMachine_Type); - return PyModule_AddObject(module, "ISVMachine", (PyObject*)&PyBobLearnMiscISVMachine_Type) >= 0; -} - diff --git a/bob/learn/misc/isv_trainer.cpp b/bob/learn/misc/isv_trainer.cpp deleted file mode 100644 index 6ac3b83..0000000 --- a/bob/learn/misc/isv_trainer.cpp +++ /dev/null @@ -1,566 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Mon 02 Fev 20:20:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" -#include <boost/make_shared.hpp> - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static int extract_GMMStats_1d(PyObject *list, - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& training_data) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++){ - - PyBobLearnMiscGMMStatsObject* stats; - if (!PyArg_Parse(PyList_GetItem(list, i), "O!", &PyBobLearnMiscGMMStats_Type, &stats)){ - PyErr_Format(PyExc_RuntimeError, "Expected GMMStats objects"); - return -1; - } - training_data.push_back(stats->cxx); - } - return 0; -} - -static int extract_GMMStats_2d(PyObject *list, - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& training_data) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++) - { - PyObject* another_list; - PyArg_Parse(PyList_GetItem(list, i), "O!", &PyList_Type, &another_list); - - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > another_training_data; - for (int j=0; j<PyList_GET_SIZE(another_list); j++){ - - PyBobLearnMiscGMMStatsObject* stats; - if (!PyArg_Parse(PyList_GetItem(another_list, j), "O!", &PyBobLearnMiscGMMStats_Type, &stats)){ - PyErr_Format(PyExc_RuntimeError, "Expected GMMStats objects"); - return -1; - } - another_training_data.push_back(stats->cxx); - } - training_data.push_back(another_training_data); - } - return 0; -} - -template <int N> -static PyObject* vector_as_list(const std::vector<blitz::Array<double,N> >& vec) -{ - PyObject* list = PyList_New(vec.size()); - for(size_t i=0; i<vec.size(); i++){ - blitz::Array<double,N> numpy_array = vec[i]; - PyObject* numpy_py_object = PyBlitzArrayCxx_AsNumpy(numpy_array); - PyList_SET_ITEM(list, i, numpy_py_object); - } - return list; -} - -template <int N> -int list_as_vector(PyObject* list, std::vector<blitz::Array<double,N> >& vec) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++) - { - PyBlitzArrayObject* blitz_object; - if (!PyArg_Parse(PyList_GetItem(list, i), "O&", &PyBlitzArray_Converter, &blitz_object)){ - PyErr_Format(PyExc_RuntimeError, "Expected numpy array object"); - return -1; - } - auto blitz_object_ = make_safe(blitz_object); - vec.push_back(*PyBlitzArrayCxx_AsBlitz<double,N>(blitz_object)); - } - return 0; -} - - - -static auto ISVTrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".ISVTrainer", - "ISVTrainer" - "References: [Vogt2008,McCool2013]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructor. Builds a new ISVTrainer", - "", - true - ) - .add_prototype("relevance_factor","") - .add_prototype("other","") - .add_prototype("","") - .add_parameter("other", ":py:class:`bob.learn.misc.ISVTrainer`", "A ISVTrainer object to be copied.") - .add_parameter("relevance_factor", "double", "") - .add_parameter("convergence_threshold", "double", "") -); - - -static int PyBobLearnMiscISVTrainer_init_copy(PyBobLearnMiscISVTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVTrainer_doc.kwlist(1); - PyBobLearnMiscISVTrainerObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscISVTrainer_Type, &o)){ - ISVTrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVTrainer(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscISVTrainer_init_number(PyBobLearnMiscISVTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = ISVTrainer_doc.kwlist(0); - double relevance_factor = 4.; - - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "d", kwlist, &relevance_factor)) - return -1; - - if(relevance_factor < 0){ - PyErr_Format(PyExc_TypeError, "gaussians argument must be greater than zero"); - return -1; - } - - self->cxx.reset(new bob::learn::misc::ISVTrainer(relevance_factor)); - return 0; -} - - -static int PyBobLearnMiscISVTrainer_init(PyBobLearnMiscISVTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch(nargs){ - case 0:{ - self->cxx.reset(new bob::learn::misc::ISVTrainer()); - return 0; - } - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - if(PyBobLearnMiscISVTrainer_Check(arg)) - // If the constructor input is ISVTrainer object - return PyBobLearnMiscISVTrainer_init_copy(self, args, kwargs); - else - return PyBobLearnMiscISVTrainer_init_number(self, args, kwargs); - - } - default:{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires only 0 or 1 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - ISVTrainer_doc.print_usage(); - return -1; - } - } - BOB_CATCH_MEMBER("cannot create ISVTrainer", 0) - return 0; -} - - -static void PyBobLearnMiscISVTrainer_delete(PyBobLearnMiscISVTrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscISVTrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscISVTrainer_Type)); -} - - -static PyObject* PyBobLearnMiscISVTrainer_RichCompare(PyBobLearnMiscISVTrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscISVTrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscISVTrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare ISVTrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -static auto acc_u_a1 = bob::extension::VariableDoc( - "acc_u_a1", - "array_like <float, 3D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscISVTrainer_get_acc_u_a1(PyBobLearnMiscISVTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccUA1()); - BOB_CATCH_MEMBER("acc_u_a1 could not be read", 0) -} -int PyBobLearnMiscISVTrainer_set_acc_u_a1(PyBobLearnMiscISVTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 3D array of floats", Py_TYPE(self)->tp_name, acc_u_a1.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,3>(o, "acc_u_a1"); - if (!b) return -1; - self->cxx->setAccUA1(*b); - return 0; - BOB_CATCH_MEMBER("acc_u_a1 could not be set", -1) -} - - -static auto acc_u_a2 = bob::extension::VariableDoc( - "acc_u_a2", - "array_like <float, 2D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscISVTrainer_get_acc_u_a2(PyBobLearnMiscISVTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccUA2()); - BOB_CATCH_MEMBER("acc_u_a2 could not be read", 0) -} -int PyBobLearnMiscISVTrainer_set_acc_u_a2(PyBobLearnMiscISVTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, acc_u_a2.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "acc_u_a2"); - if (!b) return -1; - self->cxx->setAccUA2(*b); - return 0; - BOB_CATCH_MEMBER("acc_u_a2 could not be set", -1) -} - - - - - -static auto __X__ = bob::extension::VariableDoc( - "__X__", - "list", - "", - "" -); -PyObject* PyBobLearnMiscISVTrainer_get_X(PyBobLearnMiscISVTrainerObject* self, void*){ - BOB_TRY - return vector_as_list(self->cxx->getX()); - BOB_CATCH_MEMBER("__X__ could not be read", 0) -} -int PyBobLearnMiscISVTrainer_set_X(PyBobLearnMiscISVTrainerObject* self, PyObject* value, void*){ - BOB_TRY - - // Parses input arguments in a single shot - if (!PyList_Check(value)){ - PyErr_Format(PyExc_TypeError, "Expected a list in `%s'", __X__.name()); - return -1; - } - - std::vector<blitz::Array<double,2> > data; - if(list_as_vector(value ,data)==0){ - self->cxx->setX(data); - } - - return 0; - BOB_CATCH_MEMBER("__X__ could not be written", 0) -} - - -static auto __Z__ = bob::extension::VariableDoc( - "__Z__", - "list", - "", - "" -); -PyObject* PyBobLearnMiscISVTrainer_get_Z(PyBobLearnMiscISVTrainerObject* self, void*){ - BOB_TRY - return vector_as_list(self->cxx->getZ()); - BOB_CATCH_MEMBER("__Z__ could not be read", 0) -} -int PyBobLearnMiscISVTrainer_set_Z(PyBobLearnMiscISVTrainerObject* self, PyObject* value, void*){ - BOB_TRY - - // Parses input arguments in a single shot - if (!PyList_Check(value)){ - PyErr_Format(PyExc_TypeError, "Expected a list in `%s'", __Z__.name()); - return -1; - } - - std::vector<blitz::Array<double,1> > data; - if(list_as_vector(value ,data)==0){ - self->cxx->setZ(data); - } - - return 0; - BOB_CATCH_MEMBER("__Z__ could not be written", 0) -} - - - - -static PyGetSetDef PyBobLearnMiscISVTrainer_getseters[] = { - { - acc_u_a1.name(), - (getter)PyBobLearnMiscISVTrainer_get_acc_u_a1, - (setter)PyBobLearnMiscISVTrainer_set_acc_u_a1, - acc_u_a1.doc(), - 0 - }, - { - acc_u_a2.name(), - (getter)PyBobLearnMiscISVTrainer_get_acc_u_a2, - (setter)PyBobLearnMiscISVTrainer_set_acc_u_a2, - acc_u_a2.doc(), - 0 - }, - { - __X__.name(), - (getter)PyBobLearnMiscISVTrainer_get_X, - (setter)PyBobLearnMiscISVTrainer_set_X, - __X__.doc(), - 0 - }, - { - __Z__.name(), - (getter)PyBobLearnMiscISVTrainer_get_Z, - (setter)PyBobLearnMiscISVTrainer_set_Z, - __Z__.doc(), - 0 - }, - - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialization before the EM steps", - "", - true -) -.add_prototype("isv_base,stats") -.add_parameter("isv_base", ":py:class:`bob.learn.misc.ISVBase`", "ISVBase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscISVTrainer_initialize(PyBobLearnMiscISVTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscISVBaseObject* isv_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscISVBase_Type, &isv_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->initialize(*isv_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** e_step ***/ -static auto e_step = bob::extension::FunctionDoc( - "e_step", - "Call the e-step procedure (for the U subspace).", - "", - true -) -.add_prototype("isv_base,stats") -.add_parameter("isv_base", ":py:class:`bob.learn.misc.ISVBase`", "ISVBase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscISVTrainer_e_step(PyBobLearnMiscISVTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = e_step.kwlist(0); - - PyBobLearnMiscISVBaseObject* isv_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscISVBase_Type, &isv_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->eStep(*isv_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the e_step method", 0) - - Py_RETURN_NONE; -} - - -/*** m_step ***/ -static auto m_step = bob::extension::FunctionDoc( - "m_step", - "Call the m-step procedure (for the U subspace).", - "", - true -) -.add_prototype("isv_base") -.add_parameter("isv_base", ":py:class:`bob.learn.misc.ISVBase`", "ISVBase Object"); -static PyObject* PyBobLearnMiscISVTrainer_m_step(PyBobLearnMiscISVTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = m_step.kwlist(0); - - PyBobLearnMiscISVBaseObject* isv_base = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscISVBase_Type, &isv_base)) return 0; - - self->cxx->mStep(*isv_base->cxx); - - BOB_CATCH_MEMBER("cannot perform the m_step method", 0) - - Py_RETURN_NONE; -} - - - -/*** enrol ***/ -static auto enrol = bob::extension::FunctionDoc( - "enrol", - "", - "", - true -) -.add_prototype("isv_machine,features,n_iter","") -.add_parameter("isv_machine", ":py:class:`bob.learn.misc.ISVMachine`", "ISVMachine Object") -.add_parameter("features", "list(:py:class:`bob.learn.misc.GMMStats`)`", "") -.add_parameter("n_iter", "int", "Number of iterations"); -static PyObject* PyBobLearnMiscISVTrainer_enrol(PyBobLearnMiscISVTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = enrol.kwlist(0); - - PyBobLearnMiscISVMachineObject* isv_machine = 0; - PyObject* stats = 0; - int n_iter = 1; - - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!i", kwlist, &PyBobLearnMiscISVMachine_Type, &isv_machine, - &PyList_Type, &stats, &n_iter)) Py_RETURN_NONE; - - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > training_data; - if(extract_GMMStats_1d(stats ,training_data)==0) - self->cxx->enrol(*isv_machine->cxx, training_data, n_iter); - - BOB_CATCH_MEMBER("cannot perform the enrol method", 0) - - Py_RETURN_NONE; -} - - - -static PyMethodDef PyBobLearnMiscISVTrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscISVTrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - e_step.name(), - (PyCFunction)PyBobLearnMiscISVTrainer_e_step, - METH_VARARGS|METH_KEYWORDS, - e_step.doc() - }, - { - m_step.name(), - (PyCFunction)PyBobLearnMiscISVTrainer_m_step, - METH_VARARGS|METH_KEYWORDS, - m_step.doc() - }, - { - enrol.name(), - (PyCFunction)PyBobLearnMiscISVTrainer_enrol, - METH_VARARGS|METH_KEYWORDS, - enrol.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscISVTrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscISVTrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscISVTrainer_Type.tp_name = ISVTrainer_doc.name(); - PyBobLearnMiscISVTrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscISVTrainerObject); - PyBobLearnMiscISVTrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance; - PyBobLearnMiscISVTrainer_Type.tp_doc = ISVTrainer_doc.doc(); - - // set the functions - PyBobLearnMiscISVTrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscISVTrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscISVTrainer_init); - PyBobLearnMiscISVTrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscISVTrainer_delete); - PyBobLearnMiscISVTrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscISVTrainer_RichCompare); - PyBobLearnMiscISVTrainer_Type.tp_methods = PyBobLearnMiscISVTrainer_methods; - PyBobLearnMiscISVTrainer_Type.tp_getset = PyBobLearnMiscISVTrainer_getseters; - //PyBobLearnMiscISVTrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscISVTrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscISVTrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscISVTrainer_Type); - return PyModule_AddObject(module, "_ISVTrainer", (PyObject*)&PyBobLearnMiscISVTrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/ivector_machine.cpp b/bob/learn/misc/ivector_machine.cpp deleted file mode 100644 index 5251905..0000000 --- a/bob/learn/misc/ivector_machine.cpp +++ /dev/null @@ -1,676 +0,0 @@ -/** - * @date Wed Jan 28 17:46:15 2015 +0200 - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto IVectorMachine_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".IVectorMachine", - "An IVectorMachine consists of a Total Variability subspace \f$T\f$ and allows the extraction of IVector" - "References: [Dehak2010]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructor. Builds a new IVectorMachine", - "", - true - ) - .add_prototype("ubm, rt, variance_threshold","") - .add_prototype("other","") - .add_prototype("hdf5","") - - .add_parameter("ubm", ":py:class:`bob.learn.misc.GMMMachine`", "The Universal Background Model.") - .add_parameter("rt", "int", "Size of the Total Variability matrix (CD x rt).") - .add_parameter("variance_threshold", "double", "Variance flooring threshold for the :math:`\\Sigma` (diagonal) matrix") - - .add_parameter("other", ":py:class:`bob.learn.misc.IVectorMachine`", "A IVectorMachine object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscIVectorMachine_init_copy(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = IVectorMachine_doc.kwlist(1); - PyBobLearnMiscIVectorMachineObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscIVectorMachine_Type, &o)){ - IVectorMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::IVectorMachine(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscIVectorMachine_init_hdf5(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = IVectorMachine_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - IVectorMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::IVectorMachine(*(config->f))); - - return 0; -} - - -static int PyBobLearnMiscIVectorMachine_init_ubm(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = IVectorMachine_doc.kwlist(0); - - PyBobLearnMiscGMMMachineObject* gmm_machine; - int rt = 1; - double variance_threshold = 1e-10; - - //Here we have to select which keyword argument to read - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!i|d", kwlist, &PyBobLearnMiscGMMMachine_Type, &gmm_machine, &rt, &variance_threshold)){ - IVectorMachine_doc.print_usage(); - return -1; - } - - if(rt < 1){ - PyErr_Format(PyExc_TypeError, "rt argument must be greater than or equal to one"); - return -1; - } - - if(variance_threshold <= 0){ - PyErr_Format(PyExc_TypeError, "variance_threshold argument must be greater than zero"); - return -1; - } - - self->cxx.reset(new bob::learn::misc::IVectorMachine(gmm_machine->cxx, rt, variance_threshold)); - return 0; -} - - -static int PyBobLearnMiscIVectorMachine_init(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if(nargs == 1){ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscIVectorMachine_Check(arg)) - return PyBobLearnMiscIVectorMachine_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else - return PyBobLearnMiscIVectorMachine_init_hdf5(self, args, kwargs); - } - else if ((nargs == 2) || (nargs == 3)) - PyBobLearnMiscIVectorMachine_init_ubm(self, args, kwargs); - else{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 1,2 or 3 argument, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - IVectorMachine_doc.print_usage(); - return -1; - } - - BOB_CATCH_MEMBER("cannot create IVectorMachine", 0) - return 0; -} - -static void PyBobLearnMiscIVectorMachine_delete(PyBobLearnMiscIVectorMachineObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscIVectorMachine_RichCompare(PyBobLearnMiscIVectorMachineObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscIVectorMachine_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscIVectorMachineObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare IVectorMachine objects", 0) -} - -int PyBobLearnMiscIVectorMachine_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscIVectorMachine_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int, int)", - "A tuple that represents the number of gaussians, dimensionality of each Gaussian, dimensionality of the rT (total variability matrix) ``(#Gaussians, #Inputs, #rT)``.", - "" -); -PyObject* PyBobLearnMiscIVectorMachine_getShape(PyBobLearnMiscIVectorMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i,i)", self->cxx->getNGaussians(), self->cxx->getNInputs(), self->cxx->getDimRt()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -/***** supervector_length *****/ -static auto supervector_length = bob::extension::VariableDoc( - "supervector_length", - "int", - - "Returns the supervector length." - "NGaussians x NInputs: Number of Gaussian components by the feature dimensionality", - - "@warning An exception is thrown if no Universal Background Model has been set yet." -); -PyObject* PyBobLearnMiscIVectorMachine_getSupervectorLength(PyBobLearnMiscIVectorMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("i", self->cxx->getSupervectorLength()); - BOB_CATCH_MEMBER("supervector_length could not be read", 0) -} - - -/***** T *****/ -static auto T = bob::extension::VariableDoc( - "t", - "array_like <float, 2D>", - "Returns the Total Variability matrix", - "" -); -PyObject* PyBobLearnMiscIVectorMachine_getT(PyBobLearnMiscIVectorMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getT()); - BOB_CATCH_MEMBER("`t` could not be read", 0) -} -int PyBobLearnMiscIVectorMachine_setT(PyBobLearnMiscIVectorMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, T.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "t"); - if (!b) return -1; - self->cxx->setT(*b); - return 0; - BOB_CATCH_MEMBER("`t` vector could not be set", -1) -} - - -/***** sigma *****/ -static auto sigma = bob::extension::VariableDoc( - "sigma", - "array_like <float, 1D>", - "The residual matrix of the model sigma", - "" -); -PyObject* PyBobLearnMiscIVectorMachine_getSigma(PyBobLearnMiscIVectorMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getSigma()); - BOB_CATCH_MEMBER("`sigma` could not be read", 0) -} -int PyBobLearnMiscIVectorMachine_setSigma(PyBobLearnMiscIVectorMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, sigma.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "sigma"); - if (!b) return -1; - self->cxx->setSigma(*b); - return 0; - BOB_CATCH_MEMBER("`sigma` vector could not be set", -1) -} - - -/***** variance_threshold *****/ -static auto variance_threshold = bob::extension::VariableDoc( - "variance_threshold", - "double", - "Threshold for the variance contained in sigma", - "" -); -PyObject* PyBobLearnMiscIVectorMachine_getVarianceThreshold(PyBobLearnMiscIVectorMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("d", self->cxx->getVarianceThreshold()); - BOB_CATCH_MEMBER("variance_threshold could not be read", 0) -} -int PyBobLearnMiscIVectorMachine_setVarianceThreshold(PyBobLearnMiscIVectorMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an double", Py_TYPE(self)->tp_name, variance_threshold.name()); - return -1; - } - - if (PyFloat_AS_DOUBLE(value) < 0){ - PyErr_Format(PyExc_TypeError, "variance_threshold must be greater than or equal to zero"); - return -1; - } - - self->cxx->setVarianceThreshold(PyFloat_AS_DOUBLE(value)); - BOB_CATCH_MEMBER("variance_threshold could not be set", -1) - return 0; -} - - -/***** ubm *****/ -static auto ubm = bob::extension::VariableDoc( - "ubm", - ":py:class:`bob.learn.misc.GMMMachine`", - "Returns the UBM (Universal Background Model", - "" -); -PyObject* PyBobLearnMiscIVectorMachine_getUBM(PyBobLearnMiscIVectorMachineObject* self, void*){ - BOB_TRY - - boost::shared_ptr<bob::learn::misc::GMMMachine> ubm_gmmMachine = self->cxx->getUbm(); - - //Allocating the correspondent python object - PyBobLearnMiscGMMMachineObject* retval = - (PyBobLearnMiscGMMMachineObject*)PyBobLearnMiscGMMMachine_Type.tp_alloc(&PyBobLearnMiscGMMMachine_Type, 0); - retval->cxx = ubm_gmmMachine; - - return Py_BuildValue("O",retval); - BOB_CATCH_MEMBER("ubm could not be read", 0) -} -int PyBobLearnMiscIVectorMachine_setUBM(PyBobLearnMiscIVectorMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyBobLearnMiscGMMMachine_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a :py:class:`bob.learn.misc.GMMMachine`", Py_TYPE(self)->tp_name, ubm.name()); - return -1; - } - - PyBobLearnMiscGMMMachineObject* ubm_gmmMachine = 0; - PyArg_Parse(value, "O!", &PyBobLearnMiscGMMMachine_Type,&ubm_gmmMachine); - - self->cxx->setUbm(ubm_gmmMachine->cxx); - - return 0; - BOB_CATCH_MEMBER("ubm could not be set", -1) -} - - -static PyGetSetDef PyBobLearnMiscIVectorMachine_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscIVectorMachine_getShape, - 0, - shape.doc(), - 0 - }, - - { - supervector_length.name(), - (getter)PyBobLearnMiscIVectorMachine_getSupervectorLength, - 0, - supervector_length.doc(), - 0 - }, - - { - T.name(), - (getter)PyBobLearnMiscIVectorMachine_getT, - (setter)PyBobLearnMiscIVectorMachine_setT, - T.doc(), - 0 - }, - - { - variance_threshold.name(), - (getter)PyBobLearnMiscIVectorMachine_getVarianceThreshold, - (setter)PyBobLearnMiscIVectorMachine_setVarianceThreshold, - variance_threshold.doc(), - 0 - }, - - { - sigma.name(), - (getter)PyBobLearnMiscIVectorMachine_getSigma, - (setter)PyBobLearnMiscIVectorMachine_setSigma, - sigma.doc(), - 0 - }, - - { - ubm.name(), - (getter)PyBobLearnMiscIVectorMachine_getUBM, - (setter)PyBobLearnMiscIVectorMachine_setUBM, - ubm.doc(), - 0 - }, - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the IVectorMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscIVectorMachine_Save(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the IVectorMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscIVectorMachine_Load(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this IVectorMachine with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.IVectorMachine`", "A IVectorMachine object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscIVectorMachine_IsSimilarTo(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscIVectorMachineObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscIVectorMachine_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - - -/*** forward ***/ -static auto forward = bob::extension::FunctionDoc( - "forward", - "Execute the machine", - "", - true -) -.add_prototype("stats") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics as input"); -static PyObject* PyBobLearnMiscIVectorMachine_Forward(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = forward.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMStats_Type, &stats)) - Py_RETURN_NONE; - - blitz::Array<double,1> ivector(self->cxx->getDimRt()); - self->cxx->forward(*stats->cxx, ivector); - - return PyBlitzArrayCxx_AsConstNumpy(ivector); - - BOB_CATCH_MEMBER("cannot forward", 0) - -} - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Resets the dimensionality of the subspace T. ", - 0, - true -) -.add_prototype("rT") -.add_parameter("rT", "int", "Size of T (Total variability matrix)"); -static PyObject* PyBobLearnMiscIVectorMachine_resize(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int rT = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &rT)) Py_RETURN_NONE; - - if (rT < 1){ - PyErr_Format(PyExc_TypeError, "rU must be greater than one"); - resize.print_usage(); - return 0; - } - - self->cxx->resize(rT); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - - -/*** __compute_Id_TtSigmaInvT__ ***/ -static auto __compute_Id_TtSigmaInvT__ = bob::extension::FunctionDoc( - "__compute_Id_TtSigmaInvT__", - "", - "", - true -) -.add_prototype("stats") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics as input"); -static PyObject* PyBobLearnMiscIVectorMachine_compute_Id_TtSigmaInvT__(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = __compute_Id_TtSigmaInvT__.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMStats_Type, &stats)) - Py_RETURN_NONE; - - - blitz::Array<double,2> output(self->cxx->getDimRt(), self->cxx->getDimRt()); - self->cxx->computeIdTtSigmaInvT(*stats->cxx, output); - return PyBlitzArrayCxx_AsConstNumpy(output); - - BOB_CATCH_MEMBER("cannot __compute_Id_TtSigmaInvT__", 0) -} - - - -/*** __compute_TtSigmaInvFnorm__ ***/ -static auto __compute_TtSigmaInvFnorm__ = bob::extension::FunctionDoc( - "__compute_TtSigmaInvFnorm__", - "", - "", - true -) -.add_prototype("stats") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics as input"); -static PyObject* PyBobLearnMiscIVectorMachine_compute_TtSigmaInvFnorm__(PyBobLearnMiscIVectorMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = __compute_TtSigmaInvFnorm__.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMStats_Type, &stats)) - Py_RETURN_NONE; - - - blitz::Array<double,1> output(self->cxx->getDimRt()); - self->cxx->computeTtSigmaInvFnorm(*stats->cxx, output); - return PyBlitzArrayCxx_AsConstNumpy(output); - - BOB_CATCH_MEMBER("cannot __compute_TtSigmaInvFnorm__", 0) -} - - - - -static PyMethodDef PyBobLearnMiscIVectorMachine_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscIVectorMachine_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscIVectorMachine_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscIVectorMachine_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - resize.name(), - (PyCFunction)PyBobLearnMiscIVectorMachine_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - { - __compute_Id_TtSigmaInvT__.name(), - (PyCFunction)PyBobLearnMiscIVectorMachine_compute_Id_TtSigmaInvT__, - METH_VARARGS|METH_KEYWORDS, - __compute_Id_TtSigmaInvT__.doc() - }, - { - __compute_TtSigmaInvFnorm__.name(), - (PyCFunction)PyBobLearnMiscIVectorMachine_compute_TtSigmaInvFnorm__, - METH_VARARGS|METH_KEYWORDS, - __compute_TtSigmaInvFnorm__.doc() - }, - -/* - { - forward.name(), - (PyCFunction)PyBobLearnMiscIVectorMachine_Forward, - METH_VARARGS|METH_KEYWORDS, - forward.doc() - },*/ - - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the JFA type struct; will be initialized later -PyTypeObject PyBobLearnMiscIVectorMachine_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscIVectorMachine(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscIVectorMachine_Type.tp_name = IVectorMachine_doc.name(); - PyBobLearnMiscIVectorMachine_Type.tp_basicsize = sizeof(PyBobLearnMiscIVectorMachineObject); - PyBobLearnMiscIVectorMachine_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscIVectorMachine_Type.tp_doc = IVectorMachine_doc.doc(); - - // set the functions - PyBobLearnMiscIVectorMachine_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscIVectorMachine_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscIVectorMachine_init); - PyBobLearnMiscIVectorMachine_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscIVectorMachine_delete); - PyBobLearnMiscIVectorMachine_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscIVectorMachine_RichCompare); - PyBobLearnMiscIVectorMachine_Type.tp_methods = PyBobLearnMiscIVectorMachine_methods; - PyBobLearnMiscIVectorMachine_Type.tp_getset = PyBobLearnMiscIVectorMachine_getseters; - PyBobLearnMiscIVectorMachine_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscIVectorMachine_Forward); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscIVectorMachine_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscIVectorMachine_Type); - return PyModule_AddObject(module, "IVectorMachine", (PyObject*)&PyBobLearnMiscIVectorMachine_Type) >= 0; -} - diff --git a/bob/learn/misc/ivector_trainer.cpp b/bob/learn/misc/ivector_trainer.cpp deleted file mode 100644 index 958d2a9..0000000 --- a/bob/learn/misc/ivector_trainer.cpp +++ /dev/null @@ -1,453 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Tue 03 Fev 10:29:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" -#include <boost/make_shared.hpp> - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static inline bool f(PyObject* o){return o != 0 && PyObject_IsTrue(o) > 0;} /* converts PyObject to bool and returns false if object is NULL */ - -static int extract_GMMStats_1d(PyObject *list, - std::vector<bob::learn::misc::GMMStats>& training_data) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++){ - - PyBobLearnMiscGMMStatsObject* stats; - if (!PyArg_Parse(PyList_GetItem(list, i), "O!", &PyBobLearnMiscGMMStats_Type, &stats)){ - PyErr_Format(PyExc_RuntimeError, "Expected GMMStats objects"); - return -1; - } - training_data.push_back(*stats->cxx); - - } - return 0; -} - - -static auto IVectorTrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".IVectorTrainer", - "IVectorTrainer" - "An IVectorTrainer to learn a Total Variability subspace :math:`$T$`" - " (and eventually a covariance matrix :math:`$\\Sigma$`).", - " References: [Dehak2010]" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructor. Builds a new IVectorTrainer", - "", - true - ) - .add_prototype("update_sigma","") - .add_prototype("other","") - .add_prototype("","") - .add_parameter("other", ":py:class:`bob.learn.misc.IVectorTrainer`", "A IVectorTrainer object to be copied.") - .add_parameter("update_sigma", "bool", "") -); - - -static int PyBobLearnMiscIVectorTrainer_init_copy(PyBobLearnMiscIVectorTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = IVectorTrainer_doc.kwlist(1); - PyBobLearnMiscIVectorTrainerObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscIVectorTrainer_Type, &o)){ - IVectorTrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::IVectorTrainer(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscIVectorTrainer_init_bool(PyBobLearnMiscIVectorTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = IVectorTrainer_doc.kwlist(0); - PyObject* update_sigma = 0; - - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBool_Type, &update_sigma)) - return -1; - - self->cxx.reset(new bob::learn::misc::IVectorTrainer(f(update_sigma))); - return 0; -} - - -static int PyBobLearnMiscIVectorTrainer_init(PyBobLearnMiscIVectorTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch(nargs){ - case 0:{ - self->cxx.reset(new bob::learn::misc::IVectorTrainer()); - return 0; - } - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is IVectorTrainer object - if(PyBobLearnMiscIVectorTrainer_Check(arg)) - return PyBobLearnMiscIVectorTrainer_init_copy(self, args, kwargs); - else - return PyBobLearnMiscIVectorTrainer_init_bool(self, args, kwargs); - - } - default:{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires only 0 or 1 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - IVectorTrainer_doc.print_usage(); - return -1; - } - } - BOB_CATCH_MEMBER("cannot create IVectorTrainer", 0) - return 0; -} - - -static void PyBobLearnMiscIVectorTrainer_delete(PyBobLearnMiscIVectorTrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscIVectorTrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscIVectorTrainer_Type)); -} - - -static PyObject* PyBobLearnMiscIVectorTrainer_RichCompare(PyBobLearnMiscIVectorTrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscIVectorTrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscIVectorTrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare IVectorTrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -static auto acc_nij_wij2 = bob::extension::VariableDoc( - "acc_nij_wij2", - "array_like <float, 3D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscIVectorTrainer_get_acc_nij_wij2(PyBobLearnMiscIVectorTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccNijWij2()); - BOB_CATCH_MEMBER("acc_nij_wij2 could not be read", 0) -} -int PyBobLearnMiscIVectorTrainer_set_acc_nij_wij2(PyBobLearnMiscIVectorTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 3D array of floats", Py_TYPE(self)->tp_name, acc_nij_wij2.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,3>(o, "acc_nij_wij2"); - if (!b) return -1; - self->cxx->setAccNijWij2(*b); - return 0; - BOB_CATCH_MEMBER("acc_nij_wij2 could not be set", -1) -} - - -static auto acc_fnormij_wij = bob::extension::VariableDoc( - "acc_fnormij_wij", - "array_like <float, 3D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscIVectorTrainer_get_acc_fnormij_wij(PyBobLearnMiscIVectorTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccFnormijWij()); - BOB_CATCH_MEMBER("acc_fnormij_wij could not be read", 0) -} -int PyBobLearnMiscIVectorTrainer_set_acc_fnormij_wij(PyBobLearnMiscIVectorTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 3D array of floats", Py_TYPE(self)->tp_name, acc_fnormij_wij.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,3>(o, "acc_fnormij_wij"); - if (!b) return -1; - self->cxx->setAccFnormijWij(*b); - return 0; - BOB_CATCH_MEMBER("acc_fnormij_wij could not be set", -1) -} - - -static auto acc_nij = bob::extension::VariableDoc( - "acc_nij", - "array_like <float, 1D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscIVectorTrainer_get_acc_nij(PyBobLearnMiscIVectorTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccNij()); - BOB_CATCH_MEMBER("acc_nij could not be read", 0) -} -int PyBobLearnMiscIVectorTrainer_set_acc_nij(PyBobLearnMiscIVectorTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, acc_nij.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "acc_nij"); - if (!b) return -1; - self->cxx->setAccNij(*b); - return 0; - BOB_CATCH_MEMBER("acc_nij could not be set", -1) -} - - -static auto acc_snormij = bob::extension::VariableDoc( - "acc_snormij", - "array_like <float, 2D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscIVectorTrainer_get_acc_snormij(PyBobLearnMiscIVectorTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccSnormij()); - BOB_CATCH_MEMBER("acc_snormij could not be read", 0) -} -int PyBobLearnMiscIVectorTrainer_set_acc_snormij(PyBobLearnMiscIVectorTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, acc_snormij.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "acc_snormij"); - if (!b) return -1; - self->cxx->setAccSnormij(*b); - return 0; - BOB_CATCH_MEMBER("acc_snormij could not be set", -1) -} - - - - -static PyGetSetDef PyBobLearnMiscIVectorTrainer_getseters[] = { - { - acc_nij_wij2.name(), - (getter)PyBobLearnMiscIVectorTrainer_get_acc_nij_wij2, - (setter)PyBobLearnMiscIVectorTrainer_set_acc_nij_wij2, - acc_nij_wij2.doc(), - 0 - }, - { - acc_fnormij_wij.name(), - (getter)PyBobLearnMiscIVectorTrainer_get_acc_fnormij_wij, - (setter)PyBobLearnMiscIVectorTrainer_set_acc_fnormij_wij, - acc_fnormij_wij.doc(), - 0 - }, - { - acc_nij.name(), - (getter)PyBobLearnMiscIVectorTrainer_get_acc_nij, - (setter)PyBobLearnMiscIVectorTrainer_set_acc_nij, - acc_nij.doc(), - 0 - }, - { - acc_snormij.name(), - (getter)PyBobLearnMiscIVectorTrainer_get_acc_snormij, - (setter)PyBobLearnMiscIVectorTrainer_set_acc_snormij, - acc_snormij.doc(), - 0 - }, - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialization before the EM steps", - "", - true -) -.add_prototype("ivector_machine") -.add_parameter("ivector_machine", ":py:class:`bob.learn.misc.ISVBase`", "IVectorMachine Object"); -static PyObject* PyBobLearnMiscIVectorTrainer_initialize(PyBobLearnMiscIVectorTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscIVectorMachineObject* ivector_machine = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscIVectorMachine_Type, &ivector_machine)) Py_RETURN_NONE; - - self->cxx->initialize(*ivector_machine->cxx); - - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** e_step ***/ -static auto e_step = bob::extension::FunctionDoc( - "e_step", - "Call the e-step procedure (for the U subspace).", - "", - true -) -.add_prototype("ivector_machine,stats") -.add_parameter("ivector_machine", ":py:class:`bob.learn.misc.ISVBase`", "IVectorMachine Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscIVectorTrainer_e_step(PyBobLearnMiscIVectorTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = e_step.kwlist(0); - - PyBobLearnMiscIVectorMachineObject* ivector_machine = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscIVectorMachine_Type, &ivector_machine, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<bob::learn::misc::GMMStats> training_data; - if(extract_GMMStats_1d(stats ,training_data)==0) - self->cxx->eStep(*ivector_machine->cxx, training_data); - - Py_RETURN_NONE; - BOB_CATCH_MEMBER("cannot perform the e_step method", 0) -} - - -/*** m_step ***/ -static auto m_step = bob::extension::FunctionDoc( - "m_step", - "Call the m-step procedure (for the U subspace).", - "", - true -) -.add_prototype("ivector_machine") -.add_parameter("ivector_machine", ":py:class:`bob.learn.misc.ISVBase`", "IVectorMachine Object"); -static PyObject* PyBobLearnMiscIVectorTrainer_m_step(PyBobLearnMiscIVectorTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = m_step.kwlist(0); - - PyBobLearnMiscIVectorMachineObject* ivector_machine = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscIVectorMachine_Type, &ivector_machine)) Py_RETURN_NONE; - - self->cxx->mStep(*ivector_machine->cxx); - - BOB_CATCH_MEMBER("cannot perform the m_step method", 0) - - Py_RETURN_NONE; -} - - - -static PyMethodDef PyBobLearnMiscIVectorTrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscIVectorTrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - e_step.name(), - (PyCFunction)PyBobLearnMiscIVectorTrainer_e_step, - METH_VARARGS|METH_KEYWORDS, - e_step.doc() - }, - { - m_step.name(), - (PyCFunction)PyBobLearnMiscIVectorTrainer_m_step, - METH_VARARGS|METH_KEYWORDS, - m_step.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscIVectorTrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscIVectorTrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscIVectorTrainer_Type.tp_name = IVectorTrainer_doc.name(); - PyBobLearnMiscIVectorTrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscIVectorTrainerObject); - PyBobLearnMiscIVectorTrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance; - PyBobLearnMiscIVectorTrainer_Type.tp_doc = IVectorTrainer_doc.doc(); - - // set the functions - PyBobLearnMiscIVectorTrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscIVectorTrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscIVectorTrainer_init); - PyBobLearnMiscIVectorTrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscIVectorTrainer_delete); - PyBobLearnMiscIVectorTrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscIVectorTrainer_RichCompare); - PyBobLearnMiscIVectorTrainer_Type.tp_methods = PyBobLearnMiscIVectorTrainer_methods; - PyBobLearnMiscIVectorTrainer_Type.tp_getset = PyBobLearnMiscIVectorTrainer_getseters; - //PyBobLearnMiscIVectorTrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscIVectorTrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscIVectorTrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscIVectorTrainer_Type); - return PyModule_AddObject(module, "_IVectorTrainer", (PyObject*)&PyBobLearnMiscIVectorTrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/jfa_base.cpp b/bob/learn/misc/jfa_base.cpp deleted file mode 100644 index 5793919..0000000 --- a/bob/learn/misc/jfa_base.cpp +++ /dev/null @@ -1,578 +0,0 @@ -/** - * @date Wed Jan 27 17:03:15 2015 +0200 - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto JFABase_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".JFABase", - "A JFABase instance can be seen as a container for U, V and D when performing Joint Factor Analysis (JFA)." - "References: [Vogt2008,McCool2013]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructor. Builds a new JFABase", - "", - true - ) - .add_prototype("gmm,ru,rv","") - .add_prototype("other","") - .add_prototype("hdf5","") - .add_prototype("","") - - .add_parameter("gmm", ":py:class:`bob.learn.misc.GMMMachine`", "The Universal Background Model.") - .add_parameter("ru", "int", "Size of U (Within client variation matrix). In the end the U matrix will have (number_of_gaussians * feature_dimension x ru)") - .add_parameter("rv", "int", "Size of V (Between client variation matrix). In the end the U matrix will have (number_of_gaussians * feature_dimension x rv)") - .add_parameter("other", ":py:class:`bob.learn.misc.JFABase`", "A JFABase object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscJFABase_init_copy(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = JFABase_doc.kwlist(1); - PyBobLearnMiscJFABaseObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscJFABase_Type, &o)){ - JFABase_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::JFABase(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscJFABase_init_hdf5(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = JFABase_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - JFABase_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::JFABase(*(config->f))); - - return 0; -} - - -static int PyBobLearnMiscJFABase_init_ubm(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = JFABase_doc.kwlist(0); - - PyBobLearnMiscGMMMachineObject* ubm; - int ru = 1; - int rv = 1; - - //Here we have to select which keyword argument to read - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!ii", kwlist, &PyBobLearnMiscGMMMachine_Type, &ubm, - &ru, &rv)){ - JFABase_doc.print_usage(); - return -1; - } - - if(ru < 0){ - PyErr_Format(PyExc_TypeError, "ru argument must be greater than or equal to one"); - return -1; - } - - if(rv < 0){ - PyErr_Format(PyExc_TypeError, "rv argument must be greater than or equal to one"); - return -1; - } - - self->cxx.reset(new bob::learn::misc::JFABase(ubm->cxx, ru, rv)); - return 0; -} - - -static int PyBobLearnMiscJFABase_init(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch (nargs) { - - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscJFABase_Check(arg)) - return PyBobLearnMiscJFABase_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscJFABase_init_hdf5(self, args, kwargs); - } - case 3: - return PyBobLearnMiscJFABase_init_ubm(self, args, kwargs); - default: - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 1 or 3 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - JFABase_doc.print_usage(); - return -1; - } - BOB_CATCH_MEMBER("cannot create JFABase", 0) - return 0; -} - - - -static void PyBobLearnMiscJFABase_delete(PyBobLearnMiscJFABaseObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscJFABase_RichCompare(PyBobLearnMiscJFABaseObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscJFABase_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscJFABaseObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare JFABase objects", 0) -} - -int PyBobLearnMiscJFABase_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscJFABase_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int, int, int)", - "A tuple that represents the number of gaussians, dimensionality of each Gaussian, dimensionality of the rU (within client variability matrix) and dimensionality of the rV (between client variability matrix) ``(#Gaussians, #Inputs, #rU, #rV)``.", - "" -); -PyObject* PyBobLearnMiscJFABase_getShape(PyBobLearnMiscJFABaseObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i,i,i)", self->cxx->getNGaussians(), self->cxx->getNInputs(), self->cxx->getDimRu(), self->cxx->getDimRv()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -/***** supervector_length *****/ -static auto supervector_length = bob::extension::VariableDoc( - "supervector_length", - "int", - - "Returns the supervector length." - "NGaussians x NInputs: Number of Gaussian components by the feature dimensionality", - - "@warning An exception is thrown if no Universal Background Model has been set yet." -); -PyObject* PyBobLearnMiscJFABase_getSupervectorLength(PyBobLearnMiscJFABaseObject* self, void*) { - BOB_TRY - return Py_BuildValue("i", self->cxx->getSupervectorLength()); - BOB_CATCH_MEMBER("supervector_length could not be read", 0) -} - - -/***** u *****/ -static auto U = bob::extension::VariableDoc( - "u", - "array_like <float, 2D>", - "Returns the U matrix (within client variability matrix)", - "" -); -PyObject* PyBobLearnMiscJFABase_getU(PyBobLearnMiscJFABaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getU()); - BOB_CATCH_MEMBER("``u`` could not be read", 0) -} -int PyBobLearnMiscJFABase_setU(PyBobLearnMiscJFABaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, U.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "u"); - if (!b) return -1; - self->cxx->setU(*b); - return 0; - BOB_CATCH_MEMBER("``u`` matrix could not be set", -1) -} - -/***** v *****/ -static auto V = bob::extension::VariableDoc( - "v", - "array_like <float, 2D>", - "Returns the V matrix (between client variability matrix)", - "" -); -PyObject* PyBobLearnMiscJFABase_getV(PyBobLearnMiscJFABaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getV()); - BOB_CATCH_MEMBER("``v`` could not be read", 0) -} -int PyBobLearnMiscJFABase_setV(PyBobLearnMiscJFABaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, V.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "v"); - if (!b) return -1; - self->cxx->setV(*b); - return 0; - BOB_CATCH_MEMBER("``v`` matrix could not be set", -1) -} - - -/***** d *****/ -static auto D = bob::extension::VariableDoc( - "d", - "array_like <float, 1D>", - "Returns the diagonal matrix diag(d) (as a 1D vector)", - "" -); -PyObject* PyBobLearnMiscJFABase_getD(PyBobLearnMiscJFABaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getD()); - BOB_CATCH_MEMBER("``d`` could not be read", 0) -} -int PyBobLearnMiscJFABase_setD(PyBobLearnMiscJFABaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, D.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "d"); - if (!b) return -1; - self->cxx->setD(*b); - return 0; - BOB_CATCH_MEMBER("``d`` matrix could not be set", -1) -} - - -/***** ubm *****/ -static auto ubm = bob::extension::VariableDoc( - "ubm", - ":py:class:`bob.learn.misc.GMMMachine`", - "Returns the UBM (Universal Background Model", - "" -); -PyObject* PyBobLearnMiscJFABase_getUBM(PyBobLearnMiscJFABaseObject* self, void*){ - BOB_TRY - - boost::shared_ptr<bob::learn::misc::GMMMachine> ubm_gmmMachine = self->cxx->getUbm(); - - //Allocating the correspondent python object - PyBobLearnMiscGMMMachineObject* retval = - (PyBobLearnMiscGMMMachineObject*)PyBobLearnMiscGMMMachine_Type.tp_alloc(&PyBobLearnMiscGMMMachine_Type, 0); - retval->cxx = ubm_gmmMachine; - - return Py_BuildValue("O",retval); - BOB_CATCH_MEMBER("ubm could not be read", 0) -} -int PyBobLearnMiscJFABase_setUBM(PyBobLearnMiscJFABaseObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyBobLearnMiscGMMMachine_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a :py:class:`bob.learn.misc.GMMMachine`", Py_TYPE(self)->tp_name, ubm.name()); - return -1; - } - - PyBobLearnMiscGMMMachineObject* ubm_gmmMachine = 0; - PyArg_Parse(value, "O!", &PyBobLearnMiscGMMMachine_Type,&ubm_gmmMachine); - - self->cxx->setUbm(ubm_gmmMachine->cxx); - - return 0; - BOB_CATCH_MEMBER("ubm could not be set", -1) -} - - - - -static PyGetSetDef PyBobLearnMiscJFABase_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscJFABase_getShape, - 0, - shape.doc(), - 0 - }, - - { - supervector_length.name(), - (getter)PyBobLearnMiscJFABase_getSupervectorLength, - 0, - supervector_length.doc(), - 0 - }, - - { - U.name(), - (getter)PyBobLearnMiscJFABase_getU, - (setter)PyBobLearnMiscJFABase_setU, - U.doc(), - 0 - }, - - { - V.name(), - (getter)PyBobLearnMiscJFABase_getV, - (setter)PyBobLearnMiscJFABase_setV, - V.doc(), - 0 - }, - - { - D.name(), - (getter)PyBobLearnMiscJFABase_getD, - (setter)PyBobLearnMiscJFABase_setD, - D.doc(), - 0 - }, - - { - ubm.name(), - (getter)PyBobLearnMiscJFABase_getUBM, - (setter)PyBobLearnMiscJFABase_setUBM, - ubm.doc(), - 0 - }, - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the JFABase to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscJFABase_Save(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the JFABase to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscJFABase_Load(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this JFABase with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.JFABase`", "A JFABase object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscJFABase_IsSimilarTo(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscJFABaseObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscJFABase_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Resets the dimensionality of the subspace U and V. " - "U and V are hence uninitialized", - 0, - true -) -.add_prototype("rU,rV") -.add_parameter("rU", "int", "Size of U (Within client variation matrix)") -.add_parameter("rV", "int", "Size of V (Between client variation matrix)"); -static PyObject* PyBobLearnMiscJFABase_resize(PyBobLearnMiscJFABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int rU = 0; - int rV = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &rU, &rV)) Py_RETURN_NONE; - - if (rU <= 0){ - PyErr_Format(PyExc_TypeError, "rU must be greater than zero"); - resize.print_usage(); - return 0; - } - if (rV <= 0){ - PyErr_Format(PyExc_TypeError, "rV must be greater than zero"); - resize.print_usage(); - return 0; - } - self->cxx->resize(rU, rV); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - - - - -static PyMethodDef PyBobLearnMiscJFABase_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscJFABase_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscJFABase_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscJFABase_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - resize.name(), - (PyCFunction)PyBobLearnMiscJFABase_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the JFA type struct; will be initialized later -PyTypeObject PyBobLearnMiscJFABase_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscJFABase(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscJFABase_Type.tp_name = JFABase_doc.name(); - PyBobLearnMiscJFABase_Type.tp_basicsize = sizeof(PyBobLearnMiscJFABaseObject); - PyBobLearnMiscJFABase_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscJFABase_Type.tp_doc = JFABase_doc.doc(); - - // set the functions - PyBobLearnMiscJFABase_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscJFABase_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscJFABase_init); - PyBobLearnMiscJFABase_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscJFABase_delete); - PyBobLearnMiscJFABase_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscJFABase_RichCompare); - PyBobLearnMiscJFABase_Type.tp_methods = PyBobLearnMiscJFABase_methods; - PyBobLearnMiscJFABase_Type.tp_getset = PyBobLearnMiscJFABase_getseters; - //PyBobLearnMiscJFABase_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscJFABase_forward); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscJFABase_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscJFABase_Type); - return PyModule_AddObject(module, "JFABase", (PyObject*)&PyBobLearnMiscJFABase_Type) >= 0; -} - diff --git a/bob/learn/misc/jfa_machine.cpp b/bob/learn/misc/jfa_machine.cpp deleted file mode 100644 index af71412..0000000 --- a/bob/learn/misc/jfa_machine.cpp +++ /dev/null @@ -1,650 +0,0 @@ -/** - * @date Wed Jan 28 17:03:15 2015 +0200 - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto JFAMachine_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".JFAMachine", - "A JFAMachine. An attached :py:class:`bob.learn.misc.JFABase` should be provided for Joint Factor Analysis. The :py:class:`bob.learn.misc.JFAMachine` carries information about the speaker factors y and z, whereas a :py:class:`bob.learn.misc.JFABase` carries information about the matrices U, V and D." - "References: [Vogt2008,McCool2013]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructor. Builds a new JFAMachine", - "", - true - ) - .add_prototype("jfa_base","") - .add_prototype("other","") - .add_prototype("hdf5","") - - .add_parameter("jfa", ":py:class:`bob.learn.misc.JFABase`", "The JFABase associated with this machine") - .add_parameter("other", ":py:class:`bob.learn.misc.JFAMachine`", "A JFAMachine object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscJFAMachine_init_copy(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = JFAMachine_doc.kwlist(1); - PyBobLearnMiscJFAMachineObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscJFAMachine_Type, &o)){ - JFAMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::JFAMachine(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscJFAMachine_init_hdf5(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = JFAMachine_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - JFAMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::JFAMachine(*(config->f))); - - return 0; -} - - -static int PyBobLearnMiscJFAMachine_init_jfabase(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = JFAMachine_doc.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base; - - //Here we have to select which keyword argument to read - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base)){ - JFAMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::JFAMachine(jfa_base->cxx)); - return 0; -} - - -static int PyBobLearnMiscJFAMachine_init(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if(nargs == 1){ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscJFAMachine_Check(arg)) - return PyBobLearnMiscJFAMachine_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscJFAMachine_init_hdf5(self, args, kwargs); - // If the constructor input is a JFABase Object - else - return PyBobLearnMiscJFAMachine_init_jfabase(self, args, kwargs); - } - else{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires only 1 argument, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - JFAMachine_doc.print_usage(); - return -1; - } - - BOB_CATCH_MEMBER("cannot create JFAMachine", 0) - return 0; -} - -static void PyBobLearnMiscJFAMachine_delete(PyBobLearnMiscJFAMachineObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscJFAMachine_RichCompare(PyBobLearnMiscJFAMachineObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscJFAMachine_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscJFAMachineObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare JFAMachine objects", 0) -} - -int PyBobLearnMiscJFAMachine_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscJFAMachine_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int, int, int)", - "A tuple that represents the number of gaussians, dimensionality of each Gaussian, dimensionality of the rU (within client variability matrix) and dimensionality of the rV (between client variability matrix) ``(#Gaussians, #Inputs, #rU, #rV)``.", - "" -); -PyObject* PyBobLearnMiscJFAMachine_getShape(PyBobLearnMiscJFAMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i,i,i)", self->cxx->getNGaussians(), self->cxx->getNInputs(), self->cxx->getDimRu(), self->cxx->getDimRv()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -/***** supervector_length *****/ -static auto supervector_length = bob::extension::VariableDoc( - "supervector_length", - "int", - - "Returns the supervector length." - "NGaussians x NInputs: Number of Gaussian components by the feature dimensionality", - - "@warning An exception is thrown if no Universal Background Model has been set yet." -); -PyObject* PyBobLearnMiscJFAMachine_getSupervectorLength(PyBobLearnMiscJFAMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("i", self->cxx->getSupervectorLength()); - BOB_CATCH_MEMBER("supervector_length could not be read", 0) -} - - -/***** y *****/ -static auto Y = bob::extension::VariableDoc( - "y", - "array_like <float, 1D>", - "Returns the y speaker factor. Eq (30) from [McCool2013]", - "" -); -PyObject* PyBobLearnMiscJFAMachine_getY(PyBobLearnMiscJFAMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getY()); - BOB_CATCH_MEMBER("`y` could not be read", 0) -} -int PyBobLearnMiscJFAMachine_setY(PyBobLearnMiscJFAMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, Y.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "y"); - if (!b) return -1; - self->cxx->setY(*b); - return 0; - BOB_CATCH_MEMBER("`y` vector could not be set", -1) -} - - -/***** z *****/ -static auto Z = bob::extension::VariableDoc( - "z", - "array_like <float, 1D>", - "Returns the z speaker factor. Eq (31) from [McCool2013]", - "" -); -PyObject* PyBobLearnMiscJFAMachine_getZ(PyBobLearnMiscJFAMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getZ()); - BOB_CATCH_MEMBER("`z` could not be read", 0) -} -int PyBobLearnMiscJFAMachine_setZ(PyBobLearnMiscJFAMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, Z.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "z"); - if (!b) return -1; - self->cxx->setZ(*b); - return 0; - BOB_CATCH_MEMBER("`z` vector could not be set", -1) -} - - -/***** x *****/ -static auto X = bob::extension::VariableDoc( - "x", - "array_like <float, 1D>", - "Returns the X session factor. Eq (29) from [McCool2013]", - "The latent variable x (last one computed). This is a feature provided for convenience, but this attribute is not 'part' of the machine. The session latent variable x is indeed not class-specific, but depends on the sample considered. Furthermore, it is not saved into the machine or used when comparing machines." -); -PyObject* PyBobLearnMiscJFAMachine_getX(PyBobLearnMiscJFAMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getX()); - BOB_CATCH_MEMBER("`x` could not be read", 0) -} - - -/***** jfa_base *****/ -static auto jfa_base = bob::extension::VariableDoc( - "jfa_base", - ":py:class:`bob.learn.misc.JFABase`", - "The JFABase attached to this machine", - "" -); -PyObject* PyBobLearnMiscJFAMachine_getJFABase(PyBobLearnMiscJFAMachineObject* self, void*){ - BOB_TRY - - boost::shared_ptr<bob::learn::misc::JFABase> jfa_base_o = self->cxx->getJFABase(); - - //Allocating the correspondent python object - PyBobLearnMiscJFABaseObject* retval = - (PyBobLearnMiscJFABaseObject*)PyBobLearnMiscJFABase_Type.tp_alloc(&PyBobLearnMiscJFABase_Type, 0); - retval->cxx = jfa_base_o; - - return Py_BuildValue("O",retval); - BOB_CATCH_MEMBER("jfa_base could not be read", 0) -} -int PyBobLearnMiscJFAMachine_setJFABase(PyBobLearnMiscJFAMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyBobLearnMiscJFABase_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a :py:class:`bob.learn.misc.JFABase`", Py_TYPE(self)->tp_name, jfa_base.name()); - return -1; - } - - PyBobLearnMiscJFABaseObject* jfa_base_o = 0; - PyArg_Parse(value, "O!", &PyBobLearnMiscJFABase_Type,&jfa_base_o); - - self->cxx->setJFABase(jfa_base_o->cxx); - - return 0; - BOB_CATCH_MEMBER("jfa_base could not be set", -1) -} - - - - -static PyGetSetDef PyBobLearnMiscJFAMachine_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscJFAMachine_getShape, - 0, - shape.doc(), - 0 - }, - - { - supervector_length.name(), - (getter)PyBobLearnMiscJFAMachine_getSupervectorLength, - 0, - supervector_length.doc(), - 0 - }, - - { - jfa_base.name(), - (getter)PyBobLearnMiscJFAMachine_getJFABase, - (setter)PyBobLearnMiscJFAMachine_setJFABase, - jfa_base.doc(), - 0 - }, - - { - Y.name(), - (getter)PyBobLearnMiscJFAMachine_getY, - (setter)PyBobLearnMiscJFAMachine_setY, - Y.doc(), - 0 - }, - - { - Z.name(), - (getter)PyBobLearnMiscJFAMachine_getZ, - (setter)PyBobLearnMiscJFAMachine_setZ, - Z.doc(), - 0 - }, - - { - X.name(), - (getter)PyBobLearnMiscJFAMachine_getX, - 0, - X.doc(), - 0 - }, - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the JFAMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscJFAMachine_Save(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the JFAMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscJFAMachine_Load(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this JFAMachine with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.JFAMachine`", "A JFAMachine object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscJFAMachine_IsSimilarTo(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscJFAMachineObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscJFAMachine_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** estimate_x ***/ -static auto estimate_x = bob::extension::FunctionDoc( - "estimate_x", - "Estimates the session offset x (LPT assumption) given GMM statistics.", - "Estimates x from the GMM statistics considering the LPT assumption, that is the latent session variable x is approximated using the UBM", - true -) -.add_prototype("stats,input") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics of the GMM") -.add_parameter("input", "array_like <float, 1D>", "Input vector"); -static PyObject* PyBobLearnMiscJFAMachine_estimateX(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = estimate_x.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - PyBlitzArrayObject* input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMStats_Type, &stats, - &PyBlitzArray_Converter,&input)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - self->cxx->estimateX(*stats->cxx, *PyBlitzArrayCxx_AsBlitz<double,1>(input)); - - BOB_CATCH_MEMBER("cannot estimate X", 0) - Py_RETURN_NONE; -} - - -/*** estimate_ux ***/ -static auto estimate_ux = bob::extension::FunctionDoc( - "estimate_ux", - "Estimates Ux (LPT assumption) given GMM statistics.", - "Estimates Ux from the GMM statistics considering the LPT assumption, that is the latent session variable x is approximated using the UBM.", - true -) -.add_prototype("stats,input") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics of the GMM") -.add_parameter("input", "array_like <float, 1D>", "Input vector"); -static PyObject* PyBobLearnMiscJFAMachine_estimateUx(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = estimate_ux.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - PyBlitzArrayObject* input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMStats_Type, &stats, - &PyBlitzArray_Converter,&input)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - self->cxx->estimateUx(*stats->cxx, *PyBlitzArrayCxx_AsBlitz<double,1>(input)); - - BOB_CATCH_MEMBER("cannot estimate Ux", 0) - Py_RETURN_NONE; -} - - -/*** forward_ux ***/ -static auto forward_ux = bob::extension::FunctionDoc( - "forward_ux", - "Computes a score for the given UBM statistics and given the Ux vector", - "", - true -) -.add_prototype("stats,ux") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics as input") -.add_parameter("ux", "array_like <float, 1D>", "Input vector"); -static PyObject* PyBobLearnMiscJFAMachine_ForwardUx(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = forward_ux.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - PyBlitzArrayObject* ux_input = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscGMMStats_Type, &stats, - &PyBlitzArray_Converter,&ux_input)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - auto ux_input_ = make_safe(ux_input); - double score = self->cxx->forward(*stats->cxx, *PyBlitzArrayCxx_AsBlitz<double,1>(ux_input)); - - return Py_BuildValue("d", score); - BOB_CATCH_MEMBER("cannot forward_ux", 0) - -} - - -/*** forward ***/ -static auto forward = bob::extension::FunctionDoc( - "forward", - "Execute the machine", - "", - true -) -.add_prototype("stats") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "Statistics as input"); -static PyObject* PyBobLearnMiscJFAMachine_Forward(PyBobLearnMiscJFAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = forward.kwlist(0); - - PyBobLearnMiscGMMStatsObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscGMMStats_Type, &stats)) - Py_RETURN_NONE; - - //protects acquired resources through this scope - double score = self->cxx->forward(*stats->cxx); - - return Py_BuildValue("d", score); - BOB_CATCH_MEMBER("cannot forward", 0) - -} - - -static PyMethodDef PyBobLearnMiscJFAMachine_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscJFAMachine_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscJFAMachine_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscJFAMachine_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - - { - estimate_x.name(), - (PyCFunction)PyBobLearnMiscJFAMachine_estimateX, - METH_VARARGS|METH_KEYWORDS, - estimate_x.doc() - }, - - { - estimate_ux.name(), - (PyCFunction)PyBobLearnMiscJFAMachine_estimateUx, - METH_VARARGS|METH_KEYWORDS, - estimate_ux.doc() - }, - - { - forward_ux.name(), - (PyCFunction)PyBobLearnMiscJFAMachine_ForwardUx, - METH_VARARGS|METH_KEYWORDS, - forward_ux.doc() - }, -/* - { - forward.name(), - (PyCFunction)PyBobLearnMiscJFAMachine_Forward, - METH_VARARGS|METH_KEYWORDS, - forward.doc() - },*/ - - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the JFA type struct; will be initialized later -PyTypeObject PyBobLearnMiscJFAMachine_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscJFAMachine(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscJFAMachine_Type.tp_name = JFAMachine_doc.name(); - PyBobLearnMiscJFAMachine_Type.tp_basicsize = sizeof(PyBobLearnMiscJFAMachineObject); - PyBobLearnMiscJFAMachine_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscJFAMachine_Type.tp_doc = JFAMachine_doc.doc(); - - // set the functions - PyBobLearnMiscJFAMachine_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscJFAMachine_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscJFAMachine_init); - PyBobLearnMiscJFAMachine_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscJFAMachine_delete); - PyBobLearnMiscJFAMachine_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscJFAMachine_RichCompare); - PyBobLearnMiscJFAMachine_Type.tp_methods = PyBobLearnMiscJFAMachine_methods; - PyBobLearnMiscJFAMachine_Type.tp_getset = PyBobLearnMiscJFAMachine_getseters; - PyBobLearnMiscJFAMachine_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscJFAMachine_Forward); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscJFAMachine_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscJFAMachine_Type); - return PyModule_AddObject(module, "JFAMachine", (PyObject*)&PyBobLearnMiscJFAMachine_Type) >= 0; -} - diff --git a/bob/learn/misc/jfa_trainer.cpp b/bob/learn/misc/jfa_trainer.cpp deleted file mode 100644 index 8d46e94..0000000 --- a/bob/learn/misc/jfa_trainer.cpp +++ /dev/null @@ -1,1013 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Sun 01 Fev 09:40:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" -#include <boost/make_shared.hpp> - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static int extract_GMMStats_1d(PyObject *list, - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >& training_data) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++){ - - PyBobLearnMiscGMMStatsObject* stats; - if (!PyArg_Parse(PyList_GetItem(list, i), "O!", &PyBobLearnMiscGMMStats_Type, &stats)){ - PyErr_Format(PyExc_RuntimeError, "Expected GMMStats objects"); - return -1; - } - training_data.push_back(stats->cxx); - } - return 0; -} - -static int extract_GMMStats_2d(PyObject *list, - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& training_data) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++) - { - PyObject* another_list; - PyArg_Parse(PyList_GetItem(list, i), "O!", &PyList_Type, &another_list); - - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > another_training_data; - for (int j=0; j<PyList_GET_SIZE(another_list); j++){ - - PyBobLearnMiscGMMStatsObject* stats; - if (!PyArg_Parse(PyList_GetItem(another_list, j), "O!", &PyBobLearnMiscGMMStats_Type, &stats)){ - PyErr_Format(PyExc_RuntimeError, "Expected GMMStats objects"); - return -1; - } - another_training_data.push_back(stats->cxx); - } - training_data.push_back(another_training_data); - } - return 0; -} - -template <int N> -static PyObject* vector_as_list(const std::vector<blitz::Array<double,N> >& vec) -{ - PyObject* list = PyList_New(vec.size()); - for(size_t i=0; i<vec.size(); i++){ - blitz::Array<double,N> numpy_array = vec[i]; - PyObject* numpy_py_object = PyBlitzArrayCxx_AsNumpy(numpy_array); - PyList_SET_ITEM(list, i, numpy_py_object); - } - return list; -} - -template <int N> -int list_as_vector(PyObject* list, std::vector<blitz::Array<double,N> >& vec) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++) - { - PyBlitzArrayObject* blitz_object; - if (!PyArg_Parse(PyList_GetItem(list, i), "O&", &PyBlitzArray_Converter, &blitz_object)){ - PyErr_Format(PyExc_RuntimeError, "Expected numpy array object"); - return -1; - } - auto blitz_object_ = make_safe(blitz_object); - vec.push_back(*PyBlitzArrayCxx_AsBlitz<double,N>(blitz_object)); - } - return 0; -} - - - -static auto JFATrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".JFATrainer", - "JFATrainer" - "References: [Vogt2008,McCool2013]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Constructor. Builds a new JFATrainer", - "", - true - ) - .add_prototype("other","") - .add_prototype("","") - .add_parameter("other", ":py:class:`bob.learn.misc.JFATrainer`", "A JFATrainer object to be copied.") -); - - -static int PyBobLearnMiscJFATrainer_init_copy(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = JFATrainer_doc.kwlist(0); - PyBobLearnMiscJFATrainerObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscJFATrainer_Type, &o)){ - JFATrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::JFATrainer(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscJFATrainer_init(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch(nargs){ - case 0:{ - self->cxx.reset(new bob::learn::misc::JFATrainer()); - return 0; - } - case 1:{ - // If the constructor input is JFATrainer object - return PyBobLearnMiscJFATrainer_init_copy(self, args, kwargs); - } - default:{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires only 0 and 1 argument, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - JFATrainer_doc.print_usage(); - return -1; - } - } - BOB_CATCH_MEMBER("cannot create JFATrainer", 0) - return 0; -} - - -static void PyBobLearnMiscJFATrainer_delete(PyBobLearnMiscJFATrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscJFATrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscJFATrainer_Type)); -} - - -static PyObject* PyBobLearnMiscJFATrainer_RichCompare(PyBobLearnMiscJFATrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscJFATrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscJFATrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare JFATrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -static auto acc_v_a1 = bob::extension::VariableDoc( - "acc_v_a1", - "array_like <float, 3D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_acc_v_a1(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccVA1()); - BOB_CATCH_MEMBER("acc_v_a1 could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_acc_v_a1(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 3D array of floats", Py_TYPE(self)->tp_name, acc_v_a1.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,3>(o, "acc_v_a1"); - if (!b) return -1; - self->cxx->setAccVA1(*b); - return 0; - BOB_CATCH_MEMBER("acc_v_a1 could not be set", -1) -} - - -static auto acc_v_a2 = bob::extension::VariableDoc( - "acc_v_a2", - "array_like <float, 2D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_acc_v_a2(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccVA2()); - BOB_CATCH_MEMBER("acc_v_a2 could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_acc_v_a2(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, acc_v_a2.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "acc_v_a2"); - if (!b) return -1; - self->cxx->setAccVA2(*b); - return 0; - BOB_CATCH_MEMBER("acc_v_a2 could not be set", -1) -} - - -static auto acc_u_a1 = bob::extension::VariableDoc( - "acc_u_a1", - "array_like <float, 3D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_acc_u_a1(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccUA1()); - BOB_CATCH_MEMBER("acc_u_a1 could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_acc_u_a1(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 3D array of floats", Py_TYPE(self)->tp_name, acc_u_a1.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,3>(o, "acc_u_a1"); - if (!b) return -1; - self->cxx->setAccUA1(*b); - return 0; - BOB_CATCH_MEMBER("acc_u_a1 could not be set", -1) -} - - -static auto acc_u_a2 = bob::extension::VariableDoc( - "acc_u_a2", - "array_like <float, 2D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_acc_u_a2(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccUA2()); - BOB_CATCH_MEMBER("acc_u_a2 could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_acc_u_a2(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, acc_u_a2.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "acc_u_a2"); - if (!b) return -1; - self->cxx->setAccUA2(*b); - return 0; - BOB_CATCH_MEMBER("acc_u_a2 could not be set", -1) -} - - -static auto acc_d_a1 = bob::extension::VariableDoc( - "acc_d_a1", - "array_like <float, 1D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_acc_d_a1(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccDA1()); - BOB_CATCH_MEMBER("acc_d_a1 could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_acc_d_a1(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, acc_d_a1.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "acc_d_a1"); - if (!b) return -1; - self->cxx->setAccDA1(*b); - return 0; - BOB_CATCH_MEMBER("acc_d_a1 could not be set", -1) -} - - -static auto acc_d_a2 = bob::extension::VariableDoc( - "acc_d_a2", - "array_like <float, 1D>", - "Accumulator updated during the E-step", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_acc_d_a2(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAccDA2()); - BOB_CATCH_MEMBER("acc_d_a2 could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_acc_d_a2(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, acc_d_a2.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "acc_d_a2"); - if (!b) return -1; - self->cxx->setAccDA2(*b); - return 0; - BOB_CATCH_MEMBER("acc_d_a2 could not be set", -1) -} - - -static auto __X__ = bob::extension::VariableDoc( - "__X__", - "list", - "", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_X(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return vector_as_list(self->cxx->getX()); - BOB_CATCH_MEMBER("__X__ could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_X(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - - // Parses input arguments in a single shot - if (!PyList_Check(value)){ - PyErr_Format(PyExc_TypeError, "Expected a list in `%s'", __X__.name()); - return -1; - } - - std::vector<blitz::Array<double,2> > data; - if(list_as_vector(value ,data)==0){ - self->cxx->setX(data); - } - - return 0; - BOB_CATCH_MEMBER("__X__ could not be written", 0) -} - - - -static auto __Y__ = bob::extension::VariableDoc( - "__Y__", - "list", - "", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_Y(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return vector_as_list(self->cxx->getY()); - BOB_CATCH_MEMBER("__Y__ could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_Y(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - - // Parses input arguments in a single shot - if (!PyList_Check(value)){ - PyErr_Format(PyExc_TypeError, "Expected a list in `%s'", __Y__.name()); - return -1; - } - - std::vector<blitz::Array<double,1> > data; - if(list_as_vector(value ,data)==0){ - self->cxx->setY(data); - } - - return 0; - BOB_CATCH_MEMBER("__Y__ could not be written", 0) -} - - - -static auto __Z__ = bob::extension::VariableDoc( - "__Z__", - "list", - "", - "" -); -PyObject* PyBobLearnMiscJFATrainer_get_Z(PyBobLearnMiscJFATrainerObject* self, void*){ - BOB_TRY - return vector_as_list(self->cxx->getZ()); - BOB_CATCH_MEMBER("__Z__ could not be read", 0) -} -int PyBobLearnMiscJFATrainer_set_Z(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*){ - BOB_TRY - - // Parses input arguments in a single shot - if (!PyList_Check(value)){ - PyErr_Format(PyExc_TypeError, "Expected a list in `%s'", __Z__.name()); - return -1; - } - - std::vector<blitz::Array<double,1> > data; - if(list_as_vector(value ,data)==0){ - self->cxx->setZ(data); - } - - return 0; - BOB_CATCH_MEMBER("__Z__ could not be written", 0) -} - - - -/***** rng *****/ -static auto rng = bob::extension::VariableDoc( - "rng", - "str", - "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.", - "" -); -PyObject* PyBobLearnMiscJFATrainer_getRng(PyBobLearnMiscJFATrainerObject* self, void*) { - BOB_TRY - //Allocating the correspondent python object - - PyBoostMt19937Object* retval = - (PyBoostMt19937Object*)PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type, 0); - - retval->rng = self->cxx->getRng().get(); - return Py_BuildValue("O", retval); - BOB_CATCH_MEMBER("Rng method could not be read", 0) -} -int PyBobLearnMiscJFATrainer_setRng(PyBobLearnMiscJFATrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyBoostMt19937_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an PyBoostMt19937_Check", Py_TYPE(self)->tp_name, rng.name()); - return -1; - } - - PyBoostMt19937Object* boostObject = 0; - PyBoostMt19937_Converter(value, &boostObject); - self->cxx->setRng((boost::shared_ptr<boost::mt19937>)boostObject->rng); - - return 0; - BOB_CATCH_MEMBER("Rng could not be set", 0) -} - -static PyGetSetDef PyBobLearnMiscJFATrainer_getseters[] = { - { - acc_v_a1.name(), - (getter)PyBobLearnMiscJFATrainer_get_acc_v_a1, - (setter)PyBobLearnMiscJFATrainer_get_acc_v_a1, - acc_v_a1.doc(), - 0 - }, - { - acc_v_a2.name(), - (getter)PyBobLearnMiscJFATrainer_get_acc_v_a2, - (setter)PyBobLearnMiscJFATrainer_get_acc_v_a2, - acc_v_a2.doc(), - 0 - }, - { - acc_u_a1.name(), - (getter)PyBobLearnMiscJFATrainer_get_acc_u_a1, - (setter)PyBobLearnMiscJFATrainer_get_acc_u_a1, - acc_u_a1.doc(), - 0 - }, - { - acc_u_a2.name(), - (getter)PyBobLearnMiscJFATrainer_get_acc_u_a2, - (setter)PyBobLearnMiscJFATrainer_get_acc_u_a2, - acc_u_a2.doc(), - 0 - }, - { - acc_d_a1.name(), - (getter)PyBobLearnMiscJFATrainer_get_acc_d_a1, - (setter)PyBobLearnMiscJFATrainer_get_acc_d_a1, - acc_d_a1.doc(), - 0 - }, - { - acc_d_a2.name(), - (getter)PyBobLearnMiscJFATrainer_get_acc_d_a2, - (setter)PyBobLearnMiscJFATrainer_get_acc_d_a2, - acc_d_a2.doc(), - 0 - }, - { - rng.name(), - (getter)PyBobLearnMiscJFATrainer_getRng, - (setter)PyBobLearnMiscJFATrainer_setRng, - rng.doc(), - 0 - }, - { - __X__.name(), - (getter)PyBobLearnMiscJFATrainer_get_X, - (setter)PyBobLearnMiscJFATrainer_set_X, - __X__.doc(), - 0 - }, - { - __Y__.name(), - (getter)PyBobLearnMiscJFATrainer_get_Y, - (setter)PyBobLearnMiscJFATrainer_set_Y, - __Y__.doc(), - 0 - }, - { - __Z__.name(), - (getter)PyBobLearnMiscJFATrainer_get_Z, - (setter)PyBobLearnMiscJFATrainer_set_Z, - __Z__.doc(), - 0 - }, - - - - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialization before the EM steps", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_initialize(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->initialize(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** e_step1 ***/ -static auto e_step1 = bob::extension::FunctionDoc( - "e_step1", - "Call the 1st e-step procedure (for the V subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_e_step1(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - //Parses input arguments in a single shot - char** kwlist = e_step1.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->eStep1(*jfa_base->cxx, training_data); - - - BOB_CATCH_MEMBER("cannot perform the e_step1 method", 0) - - Py_RETURN_NONE; -} - - -/*** m_step1 ***/ -static auto m_step1 = bob::extension::FunctionDoc( - "m_step1", - "Call the 1st m-step procedure (for the V subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_m_step1(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = m_step1.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->mStep1(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the m_step1 method", 0) - - Py_RETURN_NONE; -} - - -/*** finalize1 ***/ -static auto finalize1 = bob::extension::FunctionDoc( - "finalize1", - "Call the 1st finalize procedure (for the V subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_finalize1(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - //Parses input arguments in a single shot - char** kwlist = finalize1.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->finalize1(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the finalize1 method", 0) - - Py_RETURN_NONE; -} - - -/*** e_step2 ***/ -static auto e_step2 = bob::extension::FunctionDoc( - "e_step2", - "Call the 2nd e-step procedure (for the U subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_e_step2(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = e_step2.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->eStep2(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the e_step2 method", 0) - - Py_RETURN_NONE; -} - - -/*** m_step2 ***/ -static auto m_step2 = bob::extension::FunctionDoc( - "m_step2", - "Call the 2nd m-step procedure (for the U subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_m_step2(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = m_step2.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->mStep2(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the m_step2 method", 0) - - Py_RETURN_NONE; -} - - -/*** finalize2 ***/ -static auto finalize2 = bob::extension::FunctionDoc( - "finalize2", - "Call the 2nd finalize procedure (for the U subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_finalize2(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = finalize2.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->finalize2(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the finalize2 method", 0) - - Py_RETURN_NONE; -} - - -/*** e_step3 ***/ -static auto e_step3 = bob::extension::FunctionDoc( - "e_step3", - "Call the 3rd e-step procedure (for the d subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_e_step3(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = e_step3.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->eStep3(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the e_step3 method", 0) - - Py_RETURN_NONE; -} - - -/*** m_step3 ***/ -static auto m_step3 = bob::extension::FunctionDoc( - "m_step3", - "Call the 3rd m-step procedure (for the d subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_m_step3(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = m_step3.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->mStep3(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the m_step3 method", 0) - - Py_RETURN_NONE; -} - - -/*** finalize3 ***/ -static auto finalize3 = bob::extension::FunctionDoc( - "finalize3", - "Call the 3rd finalize procedure (for the d subspace).", - "", - true -) -.add_prototype("jfa_base,stats") -.add_parameter("jfa_base", ":py:class:`bob.learn.misc.JFABase`", "JFABase Object") -.add_parameter("stats", ":py:class:`bob.learn.misc.GMMStats`", "GMMStats Object"); -static PyObject* PyBobLearnMiscJFATrainer_finalize3(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = finalize3.kwlist(0); - - PyBobLearnMiscJFABaseObject* jfa_base = 0; - PyObject* stats = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscJFABase_Type, &jfa_base, - &PyList_Type, &stats)) Py_RETURN_NONE; - - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - if(extract_GMMStats_2d(stats ,training_data)==0) - self->cxx->finalize3(*jfa_base->cxx, training_data); - - BOB_CATCH_MEMBER("cannot perform the finalize3 method", 0) - - Py_RETURN_NONE; -} - - -/*** enrol ***/ -static auto enrol = bob::extension::FunctionDoc( - "enrol", - "", - "", - true -) -.add_prototype("jfa_machine,features,n_iter","") -.add_parameter("jfa_machine", ":py:class:`bob.learn.misc.JFAMachine`", "JFAMachine Object") -.add_parameter("features", "list(:py:class:`bob.learn.misc.GMMStats`)`", "") -.add_parameter("n_iter", "int", "Number of iterations"); -static PyObject* PyBobLearnMiscJFATrainer_enrol(PyBobLearnMiscJFATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // Parses input arguments in a single shot - char** kwlist = enrol.kwlist(0); - - PyBobLearnMiscJFAMachineObject* jfa_machine = 0; - PyObject* stats = 0; - int n_iter = 1; - - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!i", kwlist, &PyBobLearnMiscJFAMachine_Type, &jfa_machine, - &PyList_Type, &stats, &n_iter)) Py_RETURN_NONE; - - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > training_data; - if(extract_GMMStats_1d(stats ,training_data)==0) - self->cxx->enrol(*jfa_machine->cxx, training_data, n_iter); - - BOB_CATCH_MEMBER("cannot perform the enrol method", 0) - - Py_RETURN_NONE; -} - - - -static PyMethodDef PyBobLearnMiscJFATrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - e_step1.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_e_step1, - METH_VARARGS|METH_KEYWORDS, - e_step1.doc() - }, - { - e_step2.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_e_step2, - METH_VARARGS|METH_KEYWORDS, - e_step2.doc() - }, - { - e_step3.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_e_step3, - METH_VARARGS|METH_KEYWORDS, - e_step3.doc() - }, - { - m_step1.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_m_step1, - METH_VARARGS|METH_KEYWORDS, - m_step1.doc() - }, - { - m_step2.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_m_step2, - METH_VARARGS|METH_KEYWORDS, - m_step2.doc() - }, - { - m_step3.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_m_step3, - METH_VARARGS|METH_KEYWORDS, - m_step3.doc() - }, - { - finalize1.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_finalize1, - METH_VARARGS|METH_KEYWORDS, - finalize1.doc() - }, - { - finalize2.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_finalize2, - METH_VARARGS|METH_KEYWORDS, - finalize2.doc() - }, - { - finalize3.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_finalize3, - METH_VARARGS|METH_KEYWORDS, - finalize3.doc() - }, - { - enrol.name(), - (PyCFunction)PyBobLearnMiscJFATrainer_enrol, - METH_VARARGS|METH_KEYWORDS, - enrol.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscJFATrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscJFATrainer(PyObject* module) -{ - // initialize the type JFATrainer - PyBobLearnMiscJFATrainer_Type.tp_name = JFATrainer_doc.name(); - PyBobLearnMiscJFATrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscJFATrainerObject); - PyBobLearnMiscJFATrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance; - PyBobLearnMiscJFATrainer_Type.tp_doc = JFATrainer_doc.doc(); - - // set the functions - PyBobLearnMiscJFATrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscJFATrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscJFATrainer_init); - PyBobLearnMiscJFATrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscJFATrainer_delete); - PyBobLearnMiscJFATrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscJFATrainer_RichCompare); - PyBobLearnMiscJFATrainer_Type.tp_methods = PyBobLearnMiscJFATrainer_methods; - PyBobLearnMiscJFATrainer_Type.tp_getset = PyBobLearnMiscJFATrainer_getseters; - //PyBobLearnMiscJFATrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscJFATrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscJFATrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscJFATrainer_Type); - return PyModule_AddObject(module, "_JFATrainer", (PyObject*)&PyBobLearnMiscJFATrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/kmeans_machine.cpp b/bob/learn/misc/kmeans_machine.cpp deleted file mode 100644 index 9febd70..0000000 --- a/bob/learn/misc/kmeans_machine.cpp +++ /dev/null @@ -1,768 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Fri 26 Dec 16:18:00 2014 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto KMeansMachine_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".KMeansMachine", - "This class implements a k-means classifier.\n" - "See Section 9.1 of Bishop, \"Pattern recognition and machine learning\", 2006" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a KMeansMachine", - "", - true - ) - .add_prototype("n_means,n_inputs","") - .add_prototype("other","") - .add_prototype("hdf5","") - .add_prototype("","") - - .add_parameter("n_means", "int", "Number of means") - .add_parameter("n_inputs", "int", "Dimension of the feature vector") - .add_parameter("other", ":py:class:`bob.learn.misc.KMeansMachine`", "A KMeansMachine object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscKMeansMachine_init_number(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = KMeansMachine_doc.kwlist(0); - int n_inputs = 1; - int n_means = 1; - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &n_means, &n_inputs)) - return -1; - - if(n_means < 0){ - PyErr_Format(PyExc_TypeError, "means argument must be greater than or equal to zero"); - KMeansMachine_doc.print_usage(); - return -1; - } - - if(n_inputs < 0){ - PyErr_Format(PyExc_TypeError, "input argument must be greater than or equal to zero"); - KMeansMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::KMeansMachine(n_means, n_inputs)); - return 0; -} - - -static int PyBobLearnMiscKMeansMachine_init_copy(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = KMeansMachine_doc.kwlist(1); - PyBobLearnMiscKMeansMachineObject* tt; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscKMeansMachine_Type, &tt)){ - KMeansMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::KMeansMachine(*tt->cxx)); - return 0; -} - - -static int PyBobLearnMiscKMeansMachine_init_hdf5(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = KMeansMachine_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - KMeansMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::KMeansMachine(*(config->f))); - - return 0; -} - - -static int PyBobLearnMiscKMeansMachine_init(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch (nargs) { - - case 0: //default initializer () - self->cxx.reset(new bob::learn::misc::KMeansMachine()); - return 0; - - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscKMeansMachine_Check(arg)) - return PyBobLearnMiscKMeansMachine_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscKMeansMachine_init_hdf5(self, args, kwargs); - } - case 2: - return PyBobLearnMiscKMeansMachine_init_number(self, args, kwargs); - default: - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 0, 1 or 2 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - KMeansMachine_doc.print_usage(); - return -1; - } - BOB_CATCH_MEMBER("cannot create KMeansMachine", 0) - return 0; -} - - - -static void PyBobLearnMiscKMeansMachine_delete(PyBobLearnMiscKMeansMachineObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscKMeansMachine_RichCompare(PyBobLearnMiscKMeansMachineObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscKMeansMachine_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscKMeansMachineObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare KMeansMachine objects", 0) -} - -int PyBobLearnMiscKMeansMachine_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscKMeansMachine_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int)", - "A tuple that represents the number of means and dimensionality of the feature vector``(n_means, dim)``.", - "" -); -PyObject* PyBobLearnMiscKMeansMachine_getShape(PyBobLearnMiscKMeansMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i)", self->cxx->getNMeans(), self->cxx->getNInputs()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - -/***** MEAN *****/ - -static auto means = bob::extension::VariableDoc( - "means", - "array_like <float, 2D>", - "The means", - "" -); -PyObject* PyBobLearnMiscKMeansMachine_getMeans(PyBobLearnMiscKMeansMachineObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getMeans()); - BOB_CATCH_MEMBER("means could not be read", 0) -} -int PyBobLearnMiscKMeansMachine_setMeans(PyBobLearnMiscKMeansMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, means.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "means"); - if (!b) return -1; - self->cxx->setMeans(*b); - return 0; - BOB_CATCH_MEMBER("means could not be set", -1) -} - - -static PyGetSetDef PyBobLearnMiscKMeansMachine_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscKMeansMachine_getShape, - 0, - shape.doc(), - 0 - }, - { - means.name(), - (getter)PyBobLearnMiscKMeansMachine_getMeans, - (setter)PyBobLearnMiscKMeansMachine_setMeans, - means.doc(), - 0 - }, - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the KMeansMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscKMeansMachine_Save(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the KMeansMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscKMeansMachine_Load(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this KMeansMachine with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.KMeansMachine`", "A KMeansMachine object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscKMeansMachine_IsSimilarTo(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscKMeansMachineObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscKMeansMachine_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Allocates space for the statistics and resets to zero.", - 0, - true -) -.add_prototype("n_means,n_inputs") -.add_parameter("n_means", "int", "Number of means") -.add_parameter("n_inputs", "int", "Dimensionality of the feature vector"); -static PyObject* PyBobLearnMiscKMeansMachine_resize(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int n_means = 0; - int n_inputs = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &n_means, &n_inputs)) Py_RETURN_NONE; - - if (n_means <= 0){ - PyErr_Format(PyExc_TypeError, "n_means must be greater than zero"); - resize.print_usage(); - return 0; - } - if (n_inputs <= 0){ - PyErr_Format(PyExc_TypeError, "n_inputs must be greater than zero"); - resize.print_usage(); - return 0; - } - - self->cxx->resize(n_means, n_inputs); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - -/*** get_mean ***/ -static auto get_mean = bob::extension::FunctionDoc( - "get_mean", - "Get the i'th mean.", - ".. note:: An exception is thrown if i is out of range.", - true -) -.add_prototype("i") -.add_parameter("i", "int", "Index of the mean") -.add_return("mean","array_like <float, 1D>","Mean array"); -static PyObject* PyBobLearnMiscKMeansMachine_get_mean(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_mean.kwlist(0); - - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getMean(i)); - - BOB_CATCH_MEMBER("cannot get the mean", 0) -} - - -/*** set_mean ***/ -static auto set_mean = bob::extension::FunctionDoc( - "set_mean", - "Set the i'th mean.", - ".. note:: An exception is thrown if i is out of range.", - true -) -.add_prototype("i,mean") -.add_parameter("i", "int", "Index of the mean") -.add_parameter("mean", "array_like <float, 1D>", "Mean array"); -static PyObject* PyBobLearnMiscKMeansMachine_set_mean(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = set_mean.kwlist(0); - - int i = 0; - PyBlitzArrayObject* mean = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iO&", kwlist, &i, &PyBlitzArray_Converter, &mean)) Py_RETURN_NONE; - - //protects acquired resources through this scope - auto mean_ = make_safe(mean); - - //setting the mean - self->cxx->setMean(i, *PyBlitzArrayCxx_AsBlitz<double,1>(mean)); - - BOB_CATCH_MEMBER("cannot set the mean", 0) - - Py_RETURN_NONE; -} - - - -/*** get_distance_from_mean ***/ -static auto get_distance_from_mean = bob::extension::FunctionDoc( - "get_distance_from_mean", - "Return the power of two of the square Euclidean distance of the sample, x, to the i'th mean.", - ".. note:: An exception is thrown if i is out of range.", - true -) -.add_prototype("input,i","output") -.add_parameter("input", "array_like <float, 1D>", "The data sample (feature vector)") -.add_parameter("i", "int", "The index of the mean") -.add_return("output","float","Square Euclidean distance of the sample, x, to the i'th mean"); -static PyObject* PyBobLearnMiscKMeansMachine_get_distance_from_mean(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_distance_from_mean.kwlist(0); - - PyBlitzArrayObject* input = 0; - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i", kwlist, &PyBlitzArray_Converter, &input, &i)){ - Py_RETURN_NONE; - } - - //protects acquired resources through this scope - auto input_ = make_safe(input); - - double output = self->cxx->getDistanceFromMean(*PyBlitzArrayCxx_AsBlitz<double,1>(input),i); - return Py_BuildValue("d", output); - - BOB_CATCH_MEMBER("cannot compute the likelihood", 0) -} - - -/*** get_closest_mean ***/ -static auto get_closest_mean = bob::extension::FunctionDoc( - "get_closest_mean", - "Calculate the index of the mean that is closest (in terms of square Euclidean distance) to the data sample, x.", - "", - true -) -.add_prototype("input","output") -.add_parameter("input", "array_like <float, 1D>", "The data sample (feature vector)") -.add_return("output", "(int, int)", "Tuple containing the closest mean and the minimum distance from the input"); -static PyObject* PyBobLearnMiscKMeansMachine_get_closest_mean(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_closest_mean.kwlist(0); - - PyBlitzArrayObject* input = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input)) Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - - size_t closest_mean = 0; - double min_distance = -1; - self->cxx->getClosestMean(*PyBlitzArrayCxx_AsBlitz<double,1>(input), closest_mean, min_distance); - - return Py_BuildValue("(i,d)", closest_mean, min_distance); - - BOB_CATCH_MEMBER("cannot compute the closest mean", 0) -} - - -/*** get_min_distance ***/ -static auto get_min_distance = bob::extension::FunctionDoc( - "get_min_distance", - "Output the minimum (Square Euclidean) distance between the input and the closest mean ", - "", - true -) -.add_prototype("input","output") -.add_parameter("input", "array_like <float, 1D>", "The data sample (feature vector)") -.add_return("output", "double", "The minimum distance"); -static PyObject* PyBobLearnMiscKMeansMachine_get_min_distance(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_min_distance.kwlist(0); - - PyBlitzArrayObject* input = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input)) Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - - double min_distance = 0; - min_distance = self->cxx->getMinDistance(*PyBlitzArrayCxx_AsBlitz<double,1>(input)); - - return Py_BuildValue("d", min_distance); - - BOB_CATCH_MEMBER("cannot compute the min distance", 0) -} - -/**** get_variances_and_weights_for_each_cluster ***/ -static auto get_variances_and_weights_for_each_cluster = bob::extension::FunctionDoc( - "get_variances_and_weights_for_each_cluster", - "For each mean, find the subset of the samples that is closest to that mean, and calculate" - " 1) the variance of that subset (the cluster variance)" - " 2) the proportion of the samples represented by that subset (the cluster weight)", - "", - true -) -.add_prototype("input","output") -.add_parameter("input", "array_like <float, 2D>", "The data sample (feature vector)") -.add_return("output", "(array_like <float, 2D>, array_like <float, 1D>)", "A tuple with the variances and the weights respectively"); -static PyObject* PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_variances_and_weights_for_each_cluster.kwlist(0); - - PyBlitzArrayObject* input = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input)) Py_RETURN_NONE; - - //protects acquired resources through this scope - auto input_ = make_safe(input); - - blitz::Array<double,2> variances(self->cxx->getNMeans(),self->cxx->getNInputs()); - blitz::Array<double,1> weights(self->cxx->getNMeans()); - - self->cxx->getVariancesAndWeightsForEachCluster(*PyBlitzArrayCxx_AsBlitz<double,2>(input),variances,weights); - - return Py_BuildValue("(O,O)",PyBlitzArrayCxx_AsConstNumpy(variances), PyBlitzArrayCxx_AsConstNumpy(weights)); - - BOB_CATCH_MEMBER("cannot compute the variances and weights for each cluster", 0) -} - - -/**** __get_variances_and_weights_for_each_cluster_init__ ***/ -static auto __get_variances_and_weights_for_each_cluster_init__ = bob::extension::FunctionDoc( - "__get_variances_and_weights_for_each_cluster_init__", - "Methods consecutively called by getVariancesAndWeightsForEachCluster()" - "This should help for the parallelization on several nodes by splitting the data and calling" - "getVariancesAndWeightsForEachClusterAcc() for each split. In this case, there is a need to sum" - "with the m_cache_means, variances, and weights variables before performing the merge on one" - "node using getVariancesAndWeightsForEachClusterFin().", - "", - true -) -.add_prototype("variances,weights","") -.add_parameter("variances", "array_like <float, 2D>", "Variance array") -.add_parameter("weights", "array_like <float, 1D>", "Weight array"); -static PyObject* PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster_init(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = __get_variances_and_weights_for_each_cluster_init__.kwlist(0); - - PyBlitzArrayObject* variances = 0; - PyBlitzArrayObject* weights = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&", kwlist, &PyBlitzArray_Converter, &variances, &PyBlitzArray_Converter, &weights)) Py_RETURN_NONE; - - //protects acquired resources through this scope - auto weights_ = make_safe(weights); - auto variances_ = make_safe(variances); - - self->cxx->getVariancesAndWeightsForEachClusterInit(*PyBlitzArrayCxx_AsBlitz<double,2>(variances), *PyBlitzArrayCxx_AsBlitz<double,1>(weights)); - Py_RETURN_NONE; - - BOB_CATCH_MEMBER("cannot compute the variances and weights for each cluster", 0) -} - - -/**** __get_variances_and_weights_for_each_cluster_acc__ ***/ -static auto __get_variances_and_weights_for_each_cluster_acc__ = bob::extension::FunctionDoc( - "__get_variances_and_weights_for_each_cluster_acc__", - "Methods consecutively called by getVariancesAndWeightsForEachCluster()" - "This should help for the parallelization on several nodes by splitting the data and calling" - "getVariancesAndWeightsForEachClusterAcc() for each split. In this case, there is a need to sum" - "with the m_cache_means, variances, and weights variables before performing the merge on one" - "node using getVariancesAndWeightsForEachClusterFin().", - "", - true -) -.add_prototype("data,variances,weights","") -.add_parameter("data", "array_like <float, 2D>", "data array") -.add_parameter("variances", "array_like <float, 2D>", "Variance array") -.add_parameter("weights", "array_like <float, 1D>", "Weight array"); -static PyObject* PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster_acc(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = __get_variances_and_weights_for_each_cluster_acc__.kwlist(0); - - PyBlitzArrayObject* data = 0; - PyBlitzArrayObject* variances = 0; - PyBlitzArrayObject* weights = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&", kwlist, &PyBlitzArray_Converter, &data, &PyBlitzArray_Converter, &variances, &PyBlitzArray_Converter, &weights)) Py_RETURN_NONE; - - //protects acquired resources through this scope - auto data_ = make_safe(data); - auto weights_ = make_safe(weights); - auto variances_ = make_safe(variances); - - self->cxx->getVariancesAndWeightsForEachClusterAcc(*PyBlitzArrayCxx_AsBlitz<double,2>(data), *PyBlitzArrayCxx_AsBlitz<double,2>(variances), *PyBlitzArrayCxx_AsBlitz<double,1>(weights)); - Py_RETURN_NONE; - - BOB_CATCH_MEMBER("cannot compute the variances and weights for each cluster", 0) -} - - -/**** __get_variances_and_weights_for_each_cluster_fin__ ***/ -static auto __get_variances_and_weights_for_each_cluster_fin__ = bob::extension::FunctionDoc( - "__get_variances_and_weights_for_each_cluster_fin__", - "Methods consecutively called by getVariancesAndWeightsForEachCluster()" - "This should help for the parallelization on several nodes by splitting the data and calling" - "getVariancesAndWeightsForEachClusterAcc() for each split. In this case, there is a need to sum" - "with the m_cache_means, variances, and weights variables before performing the merge on one" - "node using getVariancesAndWeightsForEachClusterFin().", - "", - true -) -.add_prototype("variances,weights","") -.add_parameter("variances", "array_like <float, 2D>", "Variance array") -.add_parameter("weights", "array_like <float, 1D>", "Weight array"); -static PyObject* PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster_fin(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = __get_variances_and_weights_for_each_cluster_fin__.kwlist(0); - - PyBlitzArrayObject* variances = 0; - PyBlitzArrayObject* weights = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&", kwlist, &PyBlitzArray_Converter, &variances, &PyBlitzArray_Converter, &weights)) Py_RETURN_NONE; - - //protects acquired resources through this scope - auto weights_ = make_safe(weights); - auto variances_ = make_safe(variances); - - self->cxx->getVariancesAndWeightsForEachClusterFin(*PyBlitzArrayCxx_AsBlitz<double,2>(variances), *PyBlitzArrayCxx_AsBlitz<double,1>(weights)); - Py_RETURN_NONE; - - BOB_CATCH_MEMBER("cannot compute the variances and weights for each cluster", 0) -} - - -static PyMethodDef PyBobLearnMiscKMeansMachine_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - resize.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - { - get_mean.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_mean, - METH_VARARGS|METH_KEYWORDS, - get_mean.doc() - }, - { - set_mean.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_set_mean, - METH_VARARGS|METH_KEYWORDS, - set_mean.doc() - }, - { - get_distance_from_mean.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_distance_from_mean, - METH_VARARGS|METH_KEYWORDS, - get_distance_from_mean.doc() - }, - { - get_closest_mean.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_closest_mean, - METH_VARARGS|METH_KEYWORDS, - get_closest_mean.doc() - }, - { - get_min_distance.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_min_distance, - METH_VARARGS|METH_KEYWORDS, - get_min_distance.doc() - }, - { - get_variances_and_weights_for_each_cluster.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster, - METH_VARARGS|METH_KEYWORDS, - get_variances_and_weights_for_each_cluster.doc() - }, - { - __get_variances_and_weights_for_each_cluster_init__.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster_init, - METH_VARARGS|METH_KEYWORDS, - __get_variances_and_weights_for_each_cluster_init__.doc() - }, - { - __get_variances_and_weights_for_each_cluster_acc__.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster_acc, - METH_VARARGS|METH_KEYWORDS, - __get_variances_and_weights_for_each_cluster_acc__.doc() - }, - { - __get_variances_and_weights_for_each_cluster_fin__.name(), - (PyCFunction)PyBobLearnMiscKMeansMachine_get_variances_and_weights_for_each_cluster_fin, - METH_VARARGS|METH_KEYWORDS, - __get_variances_and_weights_for_each_cluster_fin__.doc() - }, - - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscKMeansMachine_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscKMeansMachine(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscKMeansMachine_Type.tp_name = KMeansMachine_doc.name(); - PyBobLearnMiscKMeansMachine_Type.tp_basicsize = sizeof(PyBobLearnMiscKMeansMachineObject); - PyBobLearnMiscKMeansMachine_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscKMeansMachine_Type.tp_doc = KMeansMachine_doc.doc(); - - // set the functions - PyBobLearnMiscKMeansMachine_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscKMeansMachine_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscKMeansMachine_init); - PyBobLearnMiscKMeansMachine_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscKMeansMachine_delete); - PyBobLearnMiscKMeansMachine_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscKMeansMachine_RichCompare); - PyBobLearnMiscKMeansMachine_Type.tp_methods = PyBobLearnMiscKMeansMachine_methods; - PyBobLearnMiscKMeansMachine_Type.tp_getset = PyBobLearnMiscKMeansMachine_getseters; - //PyBobLearnMiscGMMMachine_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscGMMMachine_loglikelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscKMeansMachine_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscKMeansMachine_Type); - return PyModule_AddObject(module, "KMeansMachine", (PyObject*)&PyBobLearnMiscKMeansMachine_Type) >= 0; -} - diff --git a/bob/learn/misc/kmeans_trainer.cpp b/bob/learn/misc/kmeans_trainer.cpp deleted file mode 100644 index c31e3df..0000000 --- a/bob/learn/misc/kmeans_trainer.cpp +++ /dev/null @@ -1,553 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Tue 13 Jan 16:50:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -// InitializationMethod type conversion -static const std::map<std::string, bob::learn::misc::KMeansTrainer::InitializationMethod> IM = {{"RANDOM", bob::learn::misc::KMeansTrainer::InitializationMethod::RANDOM}, {"RANDOM_NO_DUPLICATE", bob::learn::misc::KMeansTrainer::InitializationMethod::RANDOM_NO_DUPLICATE}, {"KMEANS_PLUS_PLUS", bob::learn::misc::KMeansTrainer::InitializationMethod::KMEANS_PLUS_PLUS}}; -static inline bob::learn::misc::KMeansTrainer::InitializationMethod string2IM(const std::string& o){ /* converts string to InitializationMethod type */ - auto it = IM.find(o); - if (it == IM.end()) throw std::runtime_error("The given InitializationMethod '" + o + "' is not known; choose one of ('RANDOM', 'RANDOM_NO_DUPLICATE', 'KMEANS_PLUS_PLUS')"); - else return it->second; -} -static inline const std::string& IM2string(bob::learn::misc::KMeansTrainer::InitializationMethod o){ /* converts InitializationMethod type to string */ - for (auto it = IM.begin(); it != IM.end(); ++it) if (it->second == o) return it->first; - throw std::runtime_error("The given InitializationMethod type is not known"); -} - - -static auto KMeansTrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX "._KMeansTrainer", - "Trains a KMeans machine." - "This class implements the expectation-maximization algorithm for a k-means machine." - "See Section 9.1 of Bishop, \"Pattern recognition and machine learning\", 2006" - "It uses a random initialization of the means followed by the expectation-maximization algorithm" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Creates a KMeansTrainer", - "", - true - ) - .add_prototype("initialization_method","") - .add_prototype("other","") - .add_prototype("","") - - .add_parameter("initialization_method", "str", "The initialization method of the means") - .add_parameter("other", ":py:class:`bob.learn.misc.KMeansTrainer`", "A KMeansTrainer object to be copied.") - -); - - -static int PyBobLearnMiscKMeansTrainer_init_copy(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = KMeansTrainer_doc.kwlist(1); - PyBobLearnMiscKMeansTrainerObject* tt; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscKMeansTrainer_Type, &tt)){ - KMeansTrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::KMeansTrainer(*tt->cxx)); - return 0; -} - -static int PyBobLearnMiscKMeansTrainer_init_str(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = KMeansTrainer_doc.kwlist(0); - char* value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &value)){ - KMeansTrainer_doc.print_usage(); - return -1; - } - self->cxx.reset(new bob::learn::misc::KMeansTrainer(string2IM(std::string(value)))); - return 0; -} - - -static int PyBobLearnMiscKMeansTrainer_init(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - switch (nargs) { - - case 0:{ //default initializer () - self->cxx.reset(new bob::learn::misc::KMeansTrainer()); - return 0; - } - case 1:{ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is KMeansTrainer object - if (PyBobLearnMiscKMeansTrainer_Check(arg)) - return PyBobLearnMiscKMeansTrainer_init_copy(self, args, kwargs); - else if(PyString_Check(arg)) - return PyBobLearnMiscKMeansTrainer_init_str(self, args, kwargs); - //return PyBobLearnMiscKMeansTrainer_init_str(self, arg); - } - default:{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 0 or 1 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - KMeansTrainer_doc.print_usage(); - return -1; - } - } - BOB_CATCH_MEMBER("cannot create KMeansTrainer", 0) - return 0; -} - - -static void PyBobLearnMiscKMeansTrainer_delete(PyBobLearnMiscKMeansTrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscKMeansTrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscKMeansTrainer_Type)); -} - - -static PyObject* PyBobLearnMiscKMeansTrainer_RichCompare(PyBobLearnMiscKMeansTrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscKMeansTrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscKMeansTrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare KMeansTrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** initialization_method *****/ -static auto initialization_method = bob::extension::VariableDoc( - "initialization_method", - "str", - "Initialization method.", - "" -); -PyObject* PyBobLearnMiscKMeansTrainer_getInitializationMethod(PyBobLearnMiscKMeansTrainerObject* self, void*) { - BOB_TRY - return Py_BuildValue("s", IM2string(self->cxx->getInitializationMethod()).c_str()); - BOB_CATCH_MEMBER("initialization method could not be read", 0) -} -int PyBobLearnMiscKMeansTrainer_setInitializationMethod(PyBobLearnMiscKMeansTrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyString_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an str", Py_TYPE(self)->tp_name, initialization_method.name()); - return -1; - } - self->cxx->setInitializationMethod(string2IM(PyString_AS_STRING(value))); - - return 0; - BOB_CATCH_MEMBER("initialization method could not be set", 0) -} - - -/***** zeroeth_order_statistics *****/ -static auto zeroeth_order_statistics = bob::extension::VariableDoc( - "zeroeth_order_statistics", - "array_like <float, 1D>", - "Returns the internal statistics. Useful to parallelize the E-step", - "" -); -PyObject* PyBobLearnMiscKMeansTrainer_getZeroethOrderStatistics(PyBobLearnMiscKMeansTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getZeroethOrderStats()); - BOB_CATCH_MEMBER("zeroeth_order_statistics could not be read", 0) -} -int PyBobLearnMiscKMeansTrainer_setZeroethOrderStatistics(PyBobLearnMiscKMeansTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, zeroeth_order_statistics.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "zeroeth_order_statistics"); - if (!b) return -1; - self->cxx->setZeroethOrderStats(*b); - return 0; - BOB_CATCH_MEMBER("zeroeth_order_statistics could not be set", -1) -} - - -/***** first_order_statistics *****/ -static auto first_order_statistics = bob::extension::VariableDoc( - "first_order_statistics", - "array_like <float, 2D>", - "Returns the internal statistics. Useful to parallelize the E-step", - "" -); -PyObject* PyBobLearnMiscKMeansTrainer_getFirstOrderStatistics(PyBobLearnMiscKMeansTrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getFirstOrderStats()); - BOB_CATCH_MEMBER("first_order_statistics could not be read", 0) -} -int PyBobLearnMiscKMeansTrainer_setFirstOrderStatistics(PyBobLearnMiscKMeansTrainerObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 1D array of floats", Py_TYPE(self)->tp_name, first_order_statistics.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "first_order_statistics"); - if (!b) return -1; - self->cxx->setFirstOrderStats(*b); - return 0; - BOB_CATCH_MEMBER("first_order_statistics could not be set", -1) -} - - -/***** average_min_distance *****/ -static auto average_min_distance = bob::extension::VariableDoc( - "average_min_distance", - "str", - "Average min (square Euclidean) distance. Useful to parallelize the E-step.", - "" -); -PyObject* PyBobLearnMiscKMeansTrainer_getAverageMinDistance(PyBobLearnMiscKMeansTrainerObject* self, void*) { - BOB_TRY - return Py_BuildValue("d", self->cxx->getAverageMinDistance()); - BOB_CATCH_MEMBER("Average Min Distance method could not be read", 0) -} -int PyBobLearnMiscKMeansTrainer_setAverageMinDistance(PyBobLearnMiscKMeansTrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an double", Py_TYPE(self)->tp_name, average_min_distance.name()); - return -1; - } - self->cxx->setAverageMinDistance(PyFloat_AS_DOUBLE(value)); - - return 0; - BOB_CATCH_MEMBER("Average Min Distance could not be set", 0) -} - - - -/***** rng *****/ -static auto rng = bob::extension::VariableDoc( - "rng", - "str", - "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.", - "" -); -PyObject* PyBobLearnMiscKMeansTrainer_getRng(PyBobLearnMiscKMeansTrainerObject* self, void*) { - BOB_TRY - //Allocating the correspondent python object - - PyBoostMt19937Object* retval = - (PyBoostMt19937Object*)PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type, 0); - - retval->rng = self->cxx->getRng().get(); - return Py_BuildValue("O", retval); - BOB_CATCH_MEMBER("Rng method could not be read", 0) -} -int PyBobLearnMiscKMeansTrainer_setRng(PyBobLearnMiscKMeansTrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyBoostMt19937_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an PyBoostMt19937_Check", Py_TYPE(self)->tp_name, rng.name()); - return -1; - } - - PyBoostMt19937Object* boostObject = 0; - PyBoostMt19937_Converter(value, &boostObject); - self->cxx->setRng((boost::shared_ptr<boost::mt19937>)boostObject->rng); - - return 0; - BOB_CATCH_MEMBER("Rng could not be set", 0) -} - - - -static PyGetSetDef PyBobLearnMiscKMeansTrainer_getseters[] = { - { - initialization_method.name(), - (getter)PyBobLearnMiscKMeansTrainer_getInitializationMethod, - (setter)PyBobLearnMiscKMeansTrainer_setInitializationMethod, - initialization_method.doc(), - 0 - }, - { - zeroeth_order_statistics.name(), - (getter)PyBobLearnMiscKMeansTrainer_getZeroethOrderStatistics, - (setter)PyBobLearnMiscKMeansTrainer_setZeroethOrderStatistics, - zeroeth_order_statistics.doc(), - 0 - }, - { - first_order_statistics.name(), - (getter)PyBobLearnMiscKMeansTrainer_getFirstOrderStatistics, - (setter)PyBobLearnMiscKMeansTrainer_setFirstOrderStatistics, - first_order_statistics.doc(), - 0 - }, - { - average_min_distance.name(), - (getter)PyBobLearnMiscKMeansTrainer_getAverageMinDistance, - (setter)PyBobLearnMiscKMeansTrainer_setAverageMinDistance, - average_min_distance.doc(), - 0 - }, - { - rng.name(), - (getter)PyBobLearnMiscKMeansTrainer_getRng, - (setter)PyBobLearnMiscKMeansTrainer_setRng, - rng.doc(), - 0 - }, - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialise the means randomly", - "Data is split into as many chunks as there are means, then each mean is set to a random example within each chunk.", - true -) -.add_prototype("kmeans_machine,data") -.add_parameter("kmeans_machine", ":py:class:`bob.learn.misc.KMeansMachine`", "KMeansMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscKMeansTrainer_initialize(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscKMeansMachineObject* kmeans_machine = 0; - PyBlitzArrayObject* data = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscKMeansMachine_Type, &kmeans_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->initialize(*kmeans_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** eStep ***/ -static auto eStep = bob::extension::FunctionDoc( - "eStep", - "Compute the eStep, which is basically the distances ", - "Accumulate across the dataset:" - " -zeroeth and first order statistics" - " -average (Square Euclidean) distance from the closest mean", - true -) -.add_prototype("kmeans_machine,data") -.add_parameter("kmeans_machine", ":py:class:`bob.learn.misc.KMeansMachine`", "KMeansMachine Object") -.add_parameter("data", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscKMeansTrainer_eStep(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = eStep.kwlist(0); - - PyBobLearnMiscKMeansMachineObject* kmeans_machine; - PyBlitzArrayObject* data = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscKMeansMachine_Type, &kmeans_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - auto data_ = make_safe(data); - - self->cxx->eStep(*kmeans_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - - BOB_CATCH_MEMBER("cannot perform the eStep method", 0) - - Py_RETURN_NONE; -} - - -/*** mStep ***/ -static auto mStep = bob::extension::FunctionDoc( - "mStep", - "Updates the mean based on the statistics from the E-step", - 0, - true -) -.add_prototype("kmeans_machine") -.add_parameter("kmeans_machine", ":py:class:`bob.learn.misc.KMeansMachine`", "KMeansMachine Object"); -static PyObject* PyBobLearnMiscKMeansTrainer_mStep(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = mStep.kwlist(0); - - PyBobLearnMiscKMeansMachineObject* kmeans_machine; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscKMeansMachine_Type, &kmeans_machine)) Py_RETURN_NONE; - - self->cxx->mStep(*kmeans_machine->cxx); - - BOB_CATCH_MEMBER("cannot perform the mStep method", 0) - - Py_RETURN_NONE; -} - - -/*** computeLikelihood ***/ -static auto compute_likelihood = bob::extension::FunctionDoc( - "compute_likelihood", - "This functions returns the average min (Square Euclidean) distance (average distance to the closest mean)", - 0, - true -) -.add_prototype("kmeans_machine") -.add_parameter("kmeans_machine", ":py:class:`bob.learn.misc.KMeansMachine`", "KMeansMachine Object"); -static PyObject* PyBobLearnMiscKMeansTrainer_compute_likelihood(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = compute_likelihood.kwlist(0); - - PyBobLearnMiscKMeansMachineObject* kmeans_machine; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscKMeansMachine_Type, &kmeans_machine)) Py_RETURN_NONE; - - double value = self->cxx->computeLikelihood(*kmeans_machine->cxx); - return Py_BuildValue("d", value); - - BOB_CATCH_MEMBER("cannot perform the computeLikelihood method", 0) -} - - -/*** reset_accumulators ***/ -static auto reset_accumulators = bob::extension::FunctionDoc( - "reset_accumulators", - "Reset the statistics accumulators to the correct size and a value of zero.", - 0, - true -) -.add_prototype("kmeans_machine") -.add_parameter("kmeans_machine", ":py:class:`bob.learn.misc.KMeansMachine`", "KMeansMachine Object"); -static PyObject* PyBobLearnMiscKMeansTrainer_reset_accumulators(PyBobLearnMiscKMeansTrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = reset_accumulators.kwlist(0); - - PyBobLearnMiscKMeansMachineObject* kmeans_machine; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscKMeansMachine_Type, &kmeans_machine)) Py_RETURN_NONE; - - bool value = self->cxx->resetAccumulators(*kmeans_machine->cxx); - return Py_BuildValue("b", value); - - BOB_CATCH_MEMBER("cannot perform the reset_accumulators method", 0) -} - - -static PyMethodDef PyBobLearnMiscKMeansTrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscKMeansTrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - eStep.name(), - (PyCFunction)PyBobLearnMiscKMeansTrainer_eStep, - METH_VARARGS|METH_KEYWORDS, - eStep.doc() - }, - { - mStep.name(), - (PyCFunction)PyBobLearnMiscKMeansTrainer_mStep, - METH_VARARGS|METH_KEYWORDS, - mStep.doc() - }, - { - compute_likelihood.name(), - (PyCFunction)PyBobLearnMiscKMeansTrainer_compute_likelihood, - METH_VARARGS|METH_KEYWORDS, - compute_likelihood.doc() - }, - { - reset_accumulators.name(), - (PyCFunction)PyBobLearnMiscKMeansTrainer_reset_accumulators, - METH_VARARGS|METH_KEYWORDS, - reset_accumulators.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscKMeansTrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscKMeansTrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscKMeansTrainer_Type.tp_name = KMeansTrainer_doc.name(); - PyBobLearnMiscKMeansTrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscKMeansTrainerObject); - PyBobLearnMiscKMeansTrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance - PyBobLearnMiscKMeansTrainer_Type.tp_doc = KMeansTrainer_doc.doc(); - - // set the functions - PyBobLearnMiscKMeansTrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscKMeansTrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscKMeansTrainer_init); - PyBobLearnMiscKMeansTrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscKMeansTrainer_delete); - PyBobLearnMiscKMeansTrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscKMeansTrainer_RichCompare); - PyBobLearnMiscKMeansTrainer_Type.tp_methods = PyBobLearnMiscKMeansTrainer_methods; - PyBobLearnMiscKMeansTrainer_Type.tp_getset = PyBobLearnMiscKMeansTrainer_getseters; - PyBobLearnMiscKMeansTrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscKMeansTrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscKMeansTrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscKMeansTrainer_Type); - return PyModule_AddObject(module, "_KMeansTrainer", (PyObject*)&PyBobLearnMiscKMeansTrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/linear_scoring.cpp b/bob/learn/misc/linear_scoring.cpp deleted file mode 100644 index b5bf6e0..0000000 --- a/bob/learn/misc/linear_scoring.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Wed 05 Feb 16:10:48 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/*Convert a PyObject to a a list of GMMStats*/ -//template<class R, class P1, class P2> -static int extract_gmmstats_list(PyObject *list, - std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& training_data) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++){ - - PyBobLearnMiscGMMStatsObject* stats; - if (!PyArg_Parse(PyList_GetItem(list, i), "O!", &PyBobLearnMiscGMMStats_Type, &stats)){ - PyErr_Format(PyExc_RuntimeError, "Expected GMMStats objects"); - return -1; - } - training_data.push_back(stats->cxx); - } - return 0; -} - -static int extract_gmmmachine_list(PyObject *list, - std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> >& training_data) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++){ - - PyBobLearnMiscGMMMachineObject* stats; - if (!PyArg_Parse(PyList_GetItem(list, i), "O!", &PyBobLearnMiscGMMMachine_Type, &stats)){ - PyErr_Format(PyExc_RuntimeError, "Expected GMMMachine objects"); - return -1; - } - training_data.push_back(stats->cxx); - } - return 0; -} - - - -/*Convert a PyObject to a list of blitz Array*/ -template <int N> -int extract_array_list(PyObject* list, std::vector<blitz::Array<double,N> >& vec) -{ - - if(list==0) - return 0; - - for (int i=0; i<PyList_GET_SIZE(list); i++) - { - PyBlitzArrayObject* blitz_object; - if (!PyArg_Parse(PyList_GetItem(list, i), "O&", &PyBlitzArray_Converter, &blitz_object)){ - PyErr_Format(PyExc_RuntimeError, "Expected numpy array object"); - return -1; - } - auto blitz_object_ = make_safe(blitz_object); - vec.push_back(*PyBlitzArrayCxx_AsBlitz<double,N>(blitz_object)); - } - return 0; -} - -/* converts PyObject to bool and returns false if object is NULL */ -static inline bool f(PyObject* o){return o != 0 && PyObject_IsTrue(o) > 0;} - - -/*** linear_scoring ***/ -static auto linear_scoring1 = bob::extension::FunctionDoc( - "linear_scoring", - "", - 0, - true -) -.add_prototype("models, ubm, test_stats, test_channelOffset, frame_length_normalisation", "output") -.add_parameter("models", "list(:py:class:`bob.learn.misc.GMMMachine`)", "") -.add_parameter("ubm", ":py:class:`bob.learn.misc.GMMMachine`", "") -.add_parameter("test_stats", "list(:py:class:`bob.learn.misc.GMMStats`)", "") -.add_parameter("test_channelOffset", "list(array_like<float,1>)", "") -.add_parameter("frame_length_normalisation", "bool", "") -.add_return("output","array_like<float,1>","Score"); - - -static auto linear_scoring2 = bob::extension::FunctionDoc( - "linear_scoring", - "", - 0, - true -) -.add_prototype("models, ubm_mean, ubm_variance, test_stats, test_channelOffset, frame_length_normalisation", "output") -.add_parameter("models", "list(array_like<float,1>)", "") -.add_parameter("ubm_mean", "list(array_like<float,1>)", "") -.add_parameter("ubm_variance", "list(array_like<float,1>)", "") -.add_parameter("test_stats", "list(:py:class:`bob.learn.misc.GMMStats`)", "") -.add_parameter("test_channelOffset", "list(array_like<float,1>)", "") -.add_parameter("frame_length_normalisation", "bool", "") -.add_return("output","array_like<float,1>","Score"); - - - -static auto linear_scoring3 = bob::extension::FunctionDoc( - "linear_scoring", - "", - 0, - true -) -.add_prototype("model, ubm_mean, ubm_variance, test_stats, test_channelOffset, frame_length_normalisation", "output") -.add_parameter("model", "array_like<float,1>", "") -.add_parameter("ubm_mean", "array_like<float,1>", "") -.add_parameter("ubm_variance", "array_like<float,1>", "") -.add_parameter("test_stats", ":py:class:`bob.learn.misc.GMMStats`", "") -.add_parameter("test_channelOffset", "array_like<float,1>", "") -.add_parameter("frame_length_normalisation", "bool", "") -.add_return("output","array_like<float,1>","Score"); - -static PyObject* PyBobLearnMisc_linear_scoring(PyObject*, PyObject* args, PyObject* kwargs) { - - //Cheking the number of arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - //Reading the first input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - //Checking the signature of the method (list of GMMMachine as input) - if ((PyList_Check(arg)) && PyBobLearnMiscGMMMachine_Check(PyList_GetItem(arg, 0)) && (nargs >= 3) && (nargs<=5) ){ - - char** kwlist = linear_scoring1.kwlist(0); - - PyObject* gmm_list_o = 0; - PyBobLearnMiscGMMMachineObject* ubm = 0; - PyObject* stats_list_o = 0; - PyObject* channel_offset_list_o = 0; - PyObject* frame_length_normalisation = Py_False; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!O!|O!O!", kwlist, &PyList_Type, &gmm_list_o, - &PyBobLearnMiscGMMMachine_Type, &ubm, - &PyList_Type, &stats_list_o, - &PyList_Type, &channel_offset_list_o, - &PyBool_Type, &frame_length_normalisation)){ - linear_scoring1.print_usage(); - Py_RETURN_NONE; - } - - std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> > stats_list; - if(extract_gmmstats_list(stats_list_o ,stats_list)!=0) - Py_RETURN_NONE; - - std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> > gmm_list; - if(extract_gmmmachine_list(gmm_list_o ,gmm_list)!=0) - Py_RETURN_NONE; - - std::vector<blitz::Array<double,1> > channel_offset_list; - if(extract_array_list(channel_offset_list_o ,channel_offset_list)!=0) - Py_RETURN_NONE; - - blitz::Array<double, 2> scores = blitz::Array<double, 2>(gmm_list.size(), stats_list.size()); - if(channel_offset_list.size()==0) - bob::learn::misc::linearScoring(gmm_list, *ubm->cxx, stats_list, f(frame_length_normalisation),scores); - else - bob::learn::misc::linearScoring(gmm_list, *ubm->cxx, stats_list, channel_offset_list, f(frame_length_normalisation),scores); - - return PyBlitzArrayCxx_AsConstNumpy(scores); - } - - //Checking the signature of the method (list of arrays as input - else if ((PyList_Check(arg)) && PyArray_Check(PyList_GetItem(arg, 0)) && (nargs >= 4) && (nargs<=6) ){ - - char** kwlist = linear_scoring2.kwlist(0); - - PyObject* model_supervector_list_o = 0; - PyBlitzArrayObject* ubm_means = 0; - PyBlitzArrayObject* ubm_variances = 0; - PyObject* stats_list_o = 0; - PyObject* channel_offset_list_o = 0; - PyObject* frame_length_normalisation = Py_False; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&O&O!|O!O!", kwlist, &PyList_Type, &model_supervector_list_o, - &PyBlitzArray_Converter, &ubm_means, - &PyBlitzArray_Converter, &ubm_variances, - &PyList_Type, &stats_list_o, - &PyList_Type, &channel_offset_list_o, - &PyBool_Type, &frame_length_normalisation)){ - linear_scoring2.print_usage(); - Py_RETURN_NONE; - } - - //protects acquired resources through this scope - auto ubm_means_ = make_safe(ubm_means); - auto ubm_variances_ = make_safe(ubm_variances); - - std::vector<blitz::Array<double,1> > model_supervector_list; - if(extract_array_list(model_supervector_list_o ,model_supervector_list)!=0) - Py_RETURN_NONE; - - std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> > stats_list; - if(extract_gmmstats_list(stats_list_o ,stats_list)!=0) - Py_RETURN_NONE; - - std::vector<blitz::Array<double,1> > channel_offset_list; - if(extract_array_list(channel_offset_list_o ,channel_offset_list)!=0) - Py_RETURN_NONE; - - blitz::Array<double, 2> scores = blitz::Array<double, 2>(model_supervector_list.size(), stats_list.size()); - if(channel_offset_list.size()==0) - bob::learn::misc::linearScoring(model_supervector_list, *PyBlitzArrayCxx_AsBlitz<double,1>(ubm_means),*PyBlitzArrayCxx_AsBlitz<double,1>(ubm_variances), stats_list, f(frame_length_normalisation),scores); - else - bob::learn::misc::linearScoring(model_supervector_list, *PyBlitzArrayCxx_AsBlitz<double,1>(ubm_means),*PyBlitzArrayCxx_AsBlitz<double,1>(ubm_variances), stats_list, channel_offset_list, f(frame_length_normalisation),scores); - - return PyBlitzArrayCxx_AsConstNumpy(scores); - - } - - //Checking the signature of the method (list of arrays as input - else if (PyArray_Check(arg) && (nargs >= 5) && (nargs<=6) ){ - - char** kwlist = linear_scoring3.kwlist(0); - - PyBlitzArrayObject* model = 0; - PyBlitzArrayObject* ubm_means = 0; - PyBlitzArrayObject* ubm_variances = 0; - PyBobLearnMiscGMMStatsObject* stats = 0; - PyBlitzArrayObject* channel_offset = 0; - PyObject* frame_length_normalisation = Py_False; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&O!O&|O!", kwlist, &PyBlitzArray_Converter, &model, - &PyBlitzArray_Converter, &ubm_means, - &PyBlitzArray_Converter, &ubm_variances, - &PyBobLearnMiscGMMStats_Type, &stats, - &PyBlitzArray_Converter, &channel_offset, - &PyBool_Type, &frame_length_normalisation)){ - linear_scoring3.print_usage(); - Py_RETURN_NONE; - } - - //protects acquired resources through this scope - auto model_ = make_safe(model); - auto ubm_means_ = make_safe(ubm_means); - auto ubm_variances_ = make_safe(ubm_variances); - auto channel_offset_ = make_safe(channel_offset); - - double score = bob::learn::misc::linearScoring(*PyBlitzArrayCxx_AsBlitz<double,1>(model), *PyBlitzArrayCxx_AsBlitz<double,1>(ubm_means),*PyBlitzArrayCxx_AsBlitz<double,1>(ubm_variances), *stats->cxx, *PyBlitzArrayCxx_AsBlitz<double,1>(channel_offset), f(frame_length_normalisation)); - - return Py_BuildValue("d",score); - } - - - else{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - linear_scoring requires 5 or 6 arguments, but you provided %d (see help)", nargs); - linear_scoring1.print_usage(); - linear_scoring2.print_usage(); - linear_scoring3.print_usage(); - Py_RETURN_NONE; - } - -} - diff --git a/bob/learn/misc/main.cpp b/bob/learn/misc/main.cpp deleted file mode 100644 index 10e1e8a..0000000 --- a/bob/learn/misc/main.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Fri Nov 21 12:39:21 CET 2014 - * - * @brief Bindings to bob::learn::misc routines - */ - -#ifdef NO_IMPORT_ARRAY -#undef NO_IMPORT_ARRAY -#endif -#include "main.h" -#include "ztnorm.cpp" -#include "linear_scoring.cpp" - - -static PyMethodDef module_methods[] = { - { - zt_norm.name(), - (PyCFunction)PyBobLearnMisc_ztNorm, - METH_VARARGS|METH_KEYWORDS, - zt_norm.doc() - }, - { - t_norm.name(), - (PyCFunction)PyBobLearnMisc_tNorm, - METH_VARARGS|METH_KEYWORDS, - t_norm.doc() - }, - { - z_norm.name(), - (PyCFunction)PyBobLearnMisc_zNorm, - METH_VARARGS|METH_KEYWORDS, - z_norm.doc() - }, - { - linear_scoring1.name(), - (PyCFunction)PyBobLearnMisc_linear_scoring, - METH_VARARGS|METH_KEYWORDS, - linear_scoring1.doc() - }, - - {0}//Sentinel -}; - - -PyDoc_STRVAR(module_docstr, "Bob EM based Machine Learning Routines"); - -int PyBobLearnMisc_APIVersion = BOB_LEARN_MISC_API_VERSION; - - -#if PY_VERSION_HEX >= 0x03000000 -static PyModuleDef module_definition = { - PyModuleDef_HEAD_INIT, - BOB_EXT_MODULE_NAME, - module_docstr, - -1, - module_methods, - 0, 0, 0, 0 -}; -#endif - -static PyObject* create_module (void) { - -# if PY_VERSION_HEX >= 0x03000000 - PyObject* module = PyModule_Create(&module_definition); -# else - PyObject* module = Py_InitModule3(BOB_EXT_MODULE_NAME, module_methods, module_docstr); -# endif - if (!module) return 0; - auto module_ = make_safe(module); ///< protects against early returns - - if (PyModule_AddStringConstant(module, "__version__", BOB_EXT_MODULE_VERSION) < 0) return 0; - if (!init_BobLearnMiscGaussian(module)) return 0; - if (!init_BobLearnMiscGMMStats(module)) return 0; - if (!init_BobLearnMiscGMMMachine(module)) return 0; - if (!init_BobLearnMiscKMeansMachine(module)) return 0; - if (!init_BobLearnMiscKMeansTrainer(module)) return 0; - //if (!init_BobLearnMiscGMMBaseTrainer(module)) return 0; - if (!init_BobLearnMiscMLGMMTrainer(module)) return 0; - if (!init_BobLearnMiscMAPGMMTrainer(module)) return 0; - - if (!init_BobLearnMiscJFABase(module)) return 0; - if (!init_BobLearnMiscJFAMachine(module)) return 0; - if (!init_BobLearnMiscJFATrainer(module)) return 0; - - if (!init_BobLearnMiscISVBase(module)) return 0; - if (!init_BobLearnMiscISVMachine(module)) return 0; - if (!init_BobLearnMiscISVTrainer(module)) return 0; - - if (!init_BobLearnMiscIVectorMachine(module)) return 0; - if (!init_BobLearnMiscIVectorTrainer(module)) return 0; - - if (!init_BobLearnMiscPLDABase(module)) return 0; - if (!init_BobLearnMiscPLDAMachine(module)) return 0; - if (!init_BobLearnMiscPLDATrainer(module)) return 0; - - if (!init_BobLearnMiscEMPCATrainer(module)) return 0; - - - static void* PyBobLearnMisc_API[PyBobLearnMisc_API_pointers]; - - /* exhaustive list of C APIs */ - - /************** - * Versioning * - **************/ - - PyBobLearnMisc_API[PyBobLearnMisc_APIVersion_NUM] = (void *)&PyBobLearnMisc_APIVersion; - - -#if PY_VERSION_HEX >= 0x02070000 - - /* defines the PyCapsule */ - - PyObject* c_api_object = PyCapsule_New((void *)PyBobLearnMisc_API, - BOB_EXT_MODULE_PREFIX "." BOB_EXT_MODULE_NAME "._C_API", 0); - -#else - - PyObject* c_api_object = PyCObject_FromVoidPtr((void *)PyBobLearnMisc_API, 0); - -#endif - - if (!c_api_object) return 0; - - if (PyModule_AddObject(module, "_C_API", c_api_object) < 0) return 0; - - - /* imports bob.learn.misc's C-API dependencies */ - if (import_bob_blitz() < 0) return 0; - if (import_bob_core_random() < 0) return 0; - if (import_bob_io_base() < 0) return 0; - //if (import_bob_learn_linear() < 0) return 0; - - Py_INCREF(module); - return module; - -} - -PyMODINIT_FUNC BOB_EXT_ENTRY_NAME (void) { -# if PY_VERSION_HEX >= 0x03000000 - return -# endif - create_module(); -} diff --git a/bob/learn/misc/main.h b/bob/learn/misc/main.h deleted file mode 100644 index 5be119c..0000000 --- a/bob/learn/misc/main.h +++ /dev/null @@ -1,312 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Fri Nov 21 10:31:25 CET 2014 - * - * @brief Header file for bindings to bob::learn::em - */ - -#ifndef BOB_LEARN_EM_MAIN_H -#define BOB_LEARN_EM_MAIN_H - -#include <bob.blitz/cppapi.h> -#include <bob.blitz/cleanup.h> -#include <bob.core/random_api.h> -#include <bob.io.base/api.h> - -#include <bob.learn.linear/api.h> - -#include <bob.extension/documentation.h> - -#define BOB_LEARN_EM_MODULE -#include <bob.learn.misc/api.h> - -#include <bob.learn.misc/Gaussian.h> -#include <bob.learn.misc/GMMStats.h> -#include <bob.learn.misc/GMMMachine.h> -#include <bob.learn.misc/KMeansMachine.h> - -#include <bob.learn.misc/KMeansTrainer.h> -//#include <bob.learn.misc/GMMBaseTrainer.h> -#include <bob.learn.misc/ML_GMMTrainer.h> -#include <bob.learn.misc/MAP_GMMTrainer.h> - -#include <bob.learn.misc/JFABase.h> -#include <bob.learn.misc/JFAMachine.h> -#include <bob.learn.misc/JFATrainer.h> - -#include <bob.learn.misc/ISVBase.h> -#include <bob.learn.misc/ISVMachine.h> -#include <bob.learn.misc/ISVTrainer.h> - - -#include <bob.learn.misc/IVectorMachine.h> -#include <bob.learn.misc/IVectorTrainer.h> - -#include <bob.learn.misc/EMPCATrainer.h> - -#include <bob.learn.misc/PLDAMachine.h> -#include <bob.learn.misc/PLDATrainer.h> - -#include <bob.learn.misc/ZTNorm.h> - - - -#if PY_VERSION_HEX >= 0x03000000 -#define PyInt_Check PyLong_Check -#define PyInt_AS_LONG PyLong_AS_LONG -#define PyString_Check PyUnicode_Check -#define PyString_AS_STRING(x) PyBytes_AS_STRING(make_safe(PyUnicode_AsUTF8String(x)).get()) -#endif - -#define TRY try{ - -#define CATCH(message,ret) }\ - catch (std::exception& e) {\ - PyErr_SetString(PyExc_RuntimeError, e.what());\ - return ret;\ - } \ - catch (...) {\ - PyErr_Format(PyExc_RuntimeError, "%s " message ": unknown exception caught", Py_TYPE(self)->tp_name);\ - return ret;\ - } - -#define CATCH_(message, ret) }\ - catch (std::exception& e) {\ - PyErr_SetString(PyExc_RuntimeError, e.what());\ - return ret;\ - } \ - catch (...) {\ - PyErr_Format(PyExc_RuntimeError, message ": unknown exception caught");\ - return ret;\ - } - -static inline char* c(const char* o){return const_cast<char*>(o);} /* converts const char* to char* */ - -/// inserts the given key, value pair into the given dictionaries -static inline int insert_item_string(PyObject* dict, PyObject* entries, const char* key, Py_ssize_t value){ - auto v = make_safe(Py_BuildValue("n", value)); - if (PyDict_SetItemString(dict, key, v.get()) < 0) return -1; - return PyDict_SetItemString(entries, key, v.get()); -} - -// Gaussian -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::Gaussian> cxx; -} PyBobLearnMiscGaussianObject; - -extern PyTypeObject PyBobLearnMiscGaussian_Type; -bool init_BobLearnMiscGaussian(PyObject* module); -int PyBobLearnMiscGaussian_Check(PyObject* o); - - -// GMMStats -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::GMMStats> cxx; -} PyBobLearnMiscGMMStatsObject; - -extern PyTypeObject PyBobLearnMiscGMMStats_Type; -bool init_BobLearnMiscGMMStats(PyObject* module); -int PyBobLearnMiscGMMStats_Check(PyObject* o); - - -// GMMMachine -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::GMMMachine> cxx; -} PyBobLearnMiscGMMMachineObject; - -extern PyTypeObject PyBobLearnMiscGMMMachine_Type; -bool init_BobLearnMiscGMMMachine(PyObject* module); -int PyBobLearnMiscGMMMachine_Check(PyObject* o); - - -// KMeansMachine -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::KMeansMachine> cxx; -} PyBobLearnMiscKMeansMachineObject; - -extern PyTypeObject PyBobLearnMiscKMeansMachine_Type; -bool init_BobLearnMiscKMeansMachine(PyObject* module); -int PyBobLearnMiscKMeansMachine_Check(PyObject* o); - - -// KMeansTrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::KMeansTrainer> cxx; -} PyBobLearnMiscKMeansTrainerObject; - -extern PyTypeObject PyBobLearnMiscKMeansTrainer_Type; -bool init_BobLearnMiscKMeansTrainer(PyObject* module); -int PyBobLearnMiscKMeansTrainer_Check(PyObject* o); - - -// GMMBaseTrainer -/* -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::GMMBaseTrainer> cxx; -} PyBobLearnMiscGMMBaseTrainerObject; - -extern PyTypeObject PyBobLearnMiscGMMBaseTrainer_Type; -bool init_BobLearnMiscGMMBaseTrainer(PyObject* module); -int PyBobLearnMiscGMMBaseTrainer_Check(PyObject* o); -*/ - -// ML_GMMTrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::ML_GMMTrainer> cxx; -} PyBobLearnMiscMLGMMTrainerObject; - -extern PyTypeObject PyBobLearnMiscMLGMMTrainer_Type; -bool init_BobLearnMiscMLGMMTrainer(PyObject* module); -int PyBobLearnMiscMLGMMTrainer_Check(PyObject* o); - - -// MAP_GMMTrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::MAP_GMMTrainer> cxx; -} PyBobLearnMiscMAPGMMTrainerObject; - -extern PyTypeObject PyBobLearnMiscMAPGMMTrainer_Type; -bool init_BobLearnMiscMAPGMMTrainer(PyObject* module); -int PyBobLearnMiscMAPGMMTrainer_Check(PyObject* o); - - -// JFABase -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::JFABase> cxx; -} PyBobLearnMiscJFABaseObject; - -extern PyTypeObject PyBobLearnMiscJFABase_Type; -bool init_BobLearnMiscJFABase(PyObject* module); -int PyBobLearnMiscJFABase_Check(PyObject* o); - - -// ISVBase -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::ISVBase> cxx; -} PyBobLearnMiscISVBaseObject; - -extern PyTypeObject PyBobLearnMiscISVBase_Type; -bool init_BobLearnMiscISVBase(PyObject* module); -int PyBobLearnMiscISVBase_Check(PyObject* o); - - -// JFAMachine -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::JFAMachine> cxx; -} PyBobLearnMiscJFAMachineObject; - -extern PyTypeObject PyBobLearnMiscJFAMachine_Type; -bool init_BobLearnMiscJFAMachine(PyObject* module); -int PyBobLearnMiscJFAMachine_Check(PyObject* o); - -// JFATrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::JFATrainer> cxx; -} PyBobLearnMiscJFATrainerObject; - - -extern PyTypeObject PyBobLearnMiscJFATrainer_Type; -bool init_BobLearnMiscJFATrainer(PyObject* module); -int PyBobLearnMiscJFATrainer_Check(PyObject* o); - -// ISVMachine -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::ISVMachine> cxx; -} PyBobLearnMiscISVMachineObject; - -extern PyTypeObject PyBobLearnMiscISVMachine_Type; -bool init_BobLearnMiscISVMachine(PyObject* module); -int PyBobLearnMiscISVMachine_Check(PyObject* o); - -// ISVTrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::ISVTrainer> cxx; -} PyBobLearnMiscISVTrainerObject; - -extern PyTypeObject PyBobLearnMiscISVTrainer_Type; -bool init_BobLearnMiscISVTrainer(PyObject* module); -int PyBobLearnMiscISVTrainer_Check(PyObject* o); - -// IVectorMachine -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::IVectorMachine> cxx; -} PyBobLearnMiscIVectorMachineObject; - -extern PyTypeObject PyBobLearnMiscIVectorMachine_Type; -bool init_BobLearnMiscIVectorMachine(PyObject* module); -int PyBobLearnMiscIVectorMachine_Check(PyObject* o); - - -// IVectorTrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::IVectorTrainer> cxx; -} PyBobLearnMiscIVectorTrainerObject; - -extern PyTypeObject PyBobLearnMiscIVectorTrainer_Type; -bool init_BobLearnMiscIVectorTrainer(PyObject* module); -int PyBobLearnMiscIVectorTrainer_Check(PyObject* o); - - -// PLDABase -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::PLDABase> cxx; -} PyBobLearnMiscPLDABaseObject; - -extern PyTypeObject PyBobLearnMiscPLDABase_Type; -bool init_BobLearnMiscPLDABase(PyObject* module); -int PyBobLearnMiscPLDABase_Check(PyObject* o); - - -// PLDAMachine -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::PLDAMachine> cxx; -} PyBobLearnMiscPLDAMachineObject; - -extern PyTypeObject PyBobLearnMiscPLDAMachine_Type; -bool init_BobLearnMiscPLDAMachine(PyObject* module); -int PyBobLearnMiscPLDAMachine_Check(PyObject* o); - - -// PLDATrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::PLDATrainer> cxx; -} PyBobLearnMiscPLDATrainerObject; - -extern PyTypeObject PyBobLearnMiscPLDATrainer_Type; -bool init_BobLearnMiscPLDATrainer(PyObject* module); -int PyBobLearnMiscPLDATrainer_Check(PyObject* o); - - - -// EMPCATrainer -typedef struct { - PyObject_HEAD - boost::shared_ptr<bob::learn::misc::EMPCATrainer> cxx; -} PyBobLearnMiscEMPCATrainerObject; - -extern PyTypeObject PyBobLearnMiscEMPCATrainer_Type; -bool init_BobLearnMiscEMPCATrainer(PyObject* module); -int PyBobLearnMiscEMPCATrainer_Check(PyObject* o); - - - -#endif // BOB_LEARN_EM_MAIN_H diff --git a/bob/learn/misc/old/blitz_numpy.cc b/bob/learn/misc/old/blitz_numpy.cc deleted file mode 100644 index 6354952..0000000 --- a/bob/learn/misc/old/blitz_numpy.cc +++ /dev/null @@ -1,235 +0,0 @@ -/** - * @author Andre Anjos <andre.anjos@idiap.ch> - * @date Mon Sep 26 11:47:30 2011 +0200 - * - * @brief Automatic converters to-from python for blitz::Array's - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" - -template<typename T, int N> -void npy_copy_cast(blitz::Array<T,N>& bz, PyArrayObject* arrobj) { - PYTHON_ERROR(TypeError, "unsupported number of dimensions: %d", N); -} - -template<typename T> -static void npy_copy_cast(blitz::Array<T,1>& bz, PyArrayObject* arrobj) { - for (int i=0; i<PyArray_DIM(arrobj,0); ++i) - bz(i) = *static_cast<T*>(PyArray_GETPTR1(arrobj, i)); -} - -template<typename T> -static void npy_copy_cast(blitz::Array<T,2>& bz, PyArrayObject* arrobj) { - for (int i=0; i<PyArray_DIM(arrobj,0); ++i) - for (int j=0; j<PyArray_DIM(arrobj,1); ++j) - bz(i,j) = *static_cast<T*>(PyArray_GETPTR2(arrobj, i, j)); -} - -template<typename T> -static void npy_copy_cast(blitz::Array<T,3>& bz, PyArrayObject* arrobj) { - for (int i=0; i<PyArray_DIM(arrobj,0); ++i) - for (int j=0; j<PyArray_DIM(arrobj,1); ++j) - for (int k=0; k<PyArray_DIM(arrobj,2); ++k) - bz(i,j,k) = *static_cast<T*>(PyArray_GETPTR3(arrobj, i, j, k)); -} - -template<typename T> -static void npy_copy_cast(blitz::Array<T,4>& bz, PyArrayObject* arrobj) { - for (int i=0; i<PyArray_DIM(arrobj,0); ++i) - for (int j=0; j<PyArray_DIM(arrobj,1); ++j) - for (int k=0; k<PyArray_DIM(arrobj,2); ++k) - for (int l=0; l<PyArray_DIM(arrobj,3); ++l) - bz(i,j,k,l) = *static_cast<T*>(PyArray_GETPTR4(arrobj, i, j, k, l)); -} - -/** - * Objects of this type create a binding between blitz::Array<T,N> and - * NumPy arrays. You can specify a NumPy array as a parameter to a - * bound method that would normally receive a blitz::Array<T,N> or a const - * blitz::Array<T,N>& and the conversion will just magically happen, as - * efficiently as possible. - * - * Please note that passing by value should be avoided as much as possible. In - * this mode, the underlying method will still be able to alter the underlying - * array storage area w/o being able to modify the array itself, causing a - * gigantic mess. If you want to make something close to pass-by-value, just - * pass by non-const reference instead. - */ -template <typename T, int N> struct bz_from_npy { - - typedef typename blitz::Array<T,N> array_type; - typedef typename blitz::TinyVector<int,N> shape_type; - - /** - * Registers converter from numpy array into a blitz::Array<T,N> - */ - bz_from_npy() { - boost::python::converter::registry::push_back(&convertible, &construct, - boost::python::type_id<array_type>()); - } - - /** - * This method will determine if the input python object is convertible into - * a Array<T,N> - */ - static void* convertible(PyObject* obj_ptr) { - boost::python::handle<> hdl(boost::python::borrowed(boost::python::allow_null(obj_ptr))); - boost::python::object obj(hdl); - - bob::io::base::array::typeinfo tinfo(bob::io::base::array::getElementType<T>(), N); - - bob::python::convert_t result = bob::python::convertible_to(obj, tinfo, false, true); - - // we cannot afford copying, only referencing. - if (result == bob::python::BYREFERENCE) return obj_ptr; - - // but, if the user passed an array of the right type, but we still need to - // copy, warn the user as this is a tricky case to debug. - PyArrayObject* arr = reinterpret_cast<PyArrayObject*>(obj_ptr); - if (result == bob::python::WITHARRAYCOPY && - bob::python::ctype_to_num<T>() == PyArray_DESCR(arr)->type_num) { - PYTHON_ERROR(RuntimeError, "The bindings you are trying to use to this C++ method require a numpy.ndarray -> blitz::Array<%s,%d> conversion, but the array you passed, despite the correct type, is not C-style contiguous and/or properly aligned, so I cannot automatically wrap it. You can check this by yourself by printing the flags on such a variable with the command 'print(<varname>.flags)'. The only way to circumvent this problem, from python, is to create a copy the variable by issuing '<varname>.copy()' before calling the bound method. Otherwise, if you wish the copy to be executed automatically, you have to re-bind the method to use our custom 'const_ndarray' type.", bob::io::base::array::stringize<T>(), N); - } - - return 0; - } - - /** - * This method will finally construct the C++ element out of the python - * object that was input. Please note that when boost::python reaches this - * method, the object has already been checked for convertibility. - */ - static void construct(PyObject* obj_ptr, - boost::python::converter::rvalue_from_python_stage1_data* data) { - - //black-magic required to setup the blitz::Array<> storage area - void* storage = ((boost::python::converter::rvalue_from_python_storage<array_type>*)data)->storage.bytes; - - PyArrayObject *arr = reinterpret_cast<PyArrayObject*>(obj_ptr); - - //mounts the numpy memory at the "newly allocated" blitz::Array - shape_type shape; - shape_type stride; - for (int k=0; k<N; ++k) { - shape[k] = PyArray_DIMS(arr)[k]; - stride[k] = (PyArray_STRIDES(arr)[k]/sizeof(T)); - } - new (storage) array_type((T*)PyArray_DATA(arr), shape, stride, - blitz::neverDeleteData); //place operator - data->convertible = storage; - - } - -}; - -/** - * Avoids the big number of warnings... - */ -static PyArrayObject* make_pyarray(int nd, npy_intp* dims, int type) { - return (PyArrayObject*)PyArray_SimpleNew(nd, dims, type); -} - -/** - * Objects of this type bind blitz::Array<T,N> to numpy arrays. Your method - * generates as output an object of this type and the object will be - * automatically converted into a Numpy array. - */ -template <typename T, int N> struct bz_to_npy { - - typedef typename blitz::Array<T,N> array_type; - typedef typename blitz::TinyVector<int,N> shape_type; - - static PyObject* convert(const array_type& tv) { - npy_intp dims[N]; - for (int i=0; i<N; ++i) dims[i] = tv.extent(i); - - PyArrayObject* retval = make_pyarray(N, dims, bob::python::ctype_to_num<T>()); - - //wrap new PyArray in a blitz layer and then copy the data - shape_type shape=0; - for (int k=0; k<PyArray_NDIM(retval); ++k) shape[k] = PyArray_DIMS(retval)[k]; - shape_type stride=0; - for (int k=0; k<PyArray_NDIM(retval); ++k) stride[k] = (PyArray_STRIDES(retval)[k]/sizeof(T)); - array_type bzdest((T*)PyArray_DATA(retval), shape, stride, blitz::neverDeleteData); - bzdest = tv; - - return reinterpret_cast<PyObject*>(retval); - } - - static const PyTypeObject* get_pytype() { return &PyArray_Type; } - -}; - -template <typename T, int N> -void register_bz_to_npy() { - boost::python::to_python_converter<typename blitz::Array<T,N>, bz_to_npy<T,N> -#if defined BOOST_PYTHON_SUPPORTS_PY_SIGNATURES - ,true -#endif - >(); -} - -void bind_core_bz_numpy () { - /** - * The following struct constructors will make sure we can input - * blitz::Array<T,N> in our bound C++ routines w/o needing to specify - * special converters each time. The rvalue converters allow boost::python to - * automatically map the following inputs: - * - * a) const blitz::Array<T,N>& (pass by const reference) - * b) blitz::Array<T,N> (pass by value -- DO NEVER DO THIS!!!) - * - * Please note that the last case: - * - * c) blitz::Array<T,N>& (pass by non-const reference) - * - * is NOT covered by these converters. The reason being that because the - * object may be changed, there is no way for boost::python to update the - * original python object, in a sensible manner, at the return of the method. - * - * Avoid passing by non-const reference in your methods. - */ -# define BOOST_PP_LOCAL_LIMITS (1, BOB_MAX_DIM) -# define BOOST_PP_LOCAL_MACRO(D) \ - bz_from_npy<bool,D>();\ - bz_from_npy<int8_t,D>();\ - bz_from_npy<int16_t,D>();\ - bz_from_npy<int32_t,D>();\ - bz_from_npy<int64_t,D>();\ - bz_from_npy<uint8_t,D>();\ - bz_from_npy<uint16_t,D>();\ - bz_from_npy<uint32_t,D>();\ - bz_from_npy<uint64_t,D>();\ - bz_from_npy<float,D>();\ - bz_from_npy<double,D>();\ - bz_from_npy<long double,D>();\ - bz_from_npy<std::complex<float>,D>();\ - bz_from_npy<std::complex<double>,D>();\ - bz_from_npy<std::complex<long double>,D>(); -# include BOOST_PP_LOCAL_ITERATE() - - /** - * The following struct constructors will make C++ return values of type - * blitz::Array<T,N> to show up in the python side as numpy arrays. - */ -# define BOOST_PP_LOCAL_LIMITS (1, BOB_MAX_DIM) -# define BOOST_PP_LOCAL_MACRO(D) \ - register_bz_to_npy<bool,D>();\ - register_bz_to_npy<int8_t,D>();\ - register_bz_to_npy<int16_t,D>();\ - register_bz_to_npy<int32_t,D>();\ - register_bz_to_npy<int64_t,D>();\ - register_bz_to_npy<uint8_t,D>();\ - register_bz_to_npy<uint16_t,D>();\ - register_bz_to_npy<uint32_t,D>();\ - register_bz_to_npy<uint64_t,D>();\ - register_bz_to_npy<float,D>();\ - register_bz_to_npy<double,D>();\ - register_bz_to_npy<long double,D>();\ - register_bz_to_npy<std::complex<float>,D>();\ - register_bz_to_npy<std::complex<double>,D>();\ - register_bz_to_npy<std::complex<long double>,D>(); -# include BOOST_PP_LOCAL_ITERATE() -} diff --git a/bob/learn/misc/old/empca_trainer.cc b/bob/learn/misc/old/empca_trainer.cc deleted file mode 100644 index 3df1d75..0000000 --- a/bob/learn/misc/old/empca_trainer.cc +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Tue Oct 11 12:32:10 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ -#include "ndarray.h" - -#include <bob.learn.linear/pca.h> -#include <bob.learn.misc/EMPCATrainer.h> - -using namespace boost::python; - -typedef bob::learn::misc::EMTrainer<bob::learn::linear::Machine, blitz::Array<double,2> > EMTrainerLinearBase; - -static void py_train(EMTrainerLinearBase& trainer, - bob::learn::linear::Machine& machine, bob::python::const_ndarray data) -{ - trainer.train(machine, data.bz<double,2>()); -} - -static void py_initialize(EMTrainerLinearBase& trainer, - bob::learn::linear::Machine& machine, bob::python::const_ndarray data) -{ - trainer.initialize(machine, data.bz<double,2>()); -} - -static void py_finalize(EMTrainerLinearBase& trainer, - bob::learn::linear::Machine& machine, bob::python::const_ndarray data) -{ - trainer.finalize(machine, data.bz<double,2>()); -} - -static void py_eStep(EMTrainerLinearBase& trainer, - bob::learn::linear::Machine& machine, bob::python::const_ndarray data) -{ - trainer.eStep(machine, data.bz<double,2>()); -} - -static void py_mStep(EMTrainerLinearBase& trainer, - bob::learn::linear::Machine& machine, bob::python::const_ndarray data) -{ - trainer.mStep(machine, data.bz<double,2>()); -} - -void bind_trainer_empca() -{ - - class_<EMTrainerLinearBase, boost::noncopyable>("EMTrainerLinear", "The base python class for all EM-based trainers.", no_init) - .add_property("convergence_threshold", &EMTrainerLinearBase::getConvergenceThreshold, &EMTrainerLinearBase::setConvergenceThreshold, "Convergence threshold") - .add_property("max_iterations", &EMTrainerLinearBase::getMaxIterations, &EMTrainerLinearBase::setMaxIterations, "Max iterations") - .add_property("compute_likelihood_variable", &EMTrainerLinearBase::getComputeLikelihood, &EMTrainerLinearBase::setComputeLikelihood, "Indicates whether the log likelihood should be computed during EM or not") - .add_property("rng", &EMTrainerLinearBase::getRng, &EMTrainerLinearBase::setRng, "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.") - .def("train", &py_train, (arg("self"), arg("machine"), arg("data")), "Trains a machine using data") - .def("initialize", &py_initialize, (arg("self"), arg("machine"), arg("data")), "This method is called before the EM algorithm") - .def("finalize", &py_finalize, (arg("self"), arg("machine"), arg("data")), "This method is called at the end of the EM algorithm") - .def("e_step", &py_eStep, (arg("self"), arg("machine"), arg("data")), - "Updates the hidden variable distribution (or the sufficient statistics) given the Machine parameters. ") - .def("m_step", &py_mStep, (arg("self"), arg("machine"), arg("data")), "Updates the Machine parameters given the hidden variable distribution (or the sufficient statistics)") - .def("compute_likelihood", &EMTrainerLinearBase::computeLikelihood, (arg("self"), arg("machine")), "Computes the current log likelihood given the hidden variable distribution (or the sufficient statistics)") - ; - - class_<bob::learn::misc::EMPCATrainer, boost::noncopyable, bases<EMTrainerLinearBase> >("EMPCATrainer", - "This class implements the EM algorithm for a Linear Machine (Probabilistic PCA).\n" - "See Section 12.2 of Bishop, \"Pattern recognition and machine learning\", 2006", init<optional<double,size_t,bool> >((arg("self"), arg("convergence_threshold"), arg("max_iterations"), arg("compute_likelihood")))) - .def(init<const bob::learn::misc::EMPCATrainer&>((arg("self"), arg("trainer")), "Copy constructs an EMPCATrainer")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::EMPCATrainer::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this EMPCATrainer with the 'other' one to be approximately the same.") - .add_property("sigma2", &bob::learn::misc::EMPCATrainer::getSigma2, &bob::learn::misc::EMPCATrainer::setSigma2, "The noise sigma2 of the probabilistic model") - ; -} diff --git a/bob/learn/misc/old/exception.h b/bob/learn/misc/old/exception.h deleted file mode 100644 index 7d02a7f..0000000 --- a/bob/learn/misc/old/exception.h +++ /dev/null @@ -1,91 +0,0 @@ -/** - * @file bob/python/exception.h - * @date Fri Mar 25 15:21:36 2011 +0100 - * @author Andre Anjos <andre.anjos@idiap.ch> - * - * @brief Implements a few classes that are useful for binding bob exceptions - * to python. - * - * Copyright (C) 2011-2013 Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_PYTHON_EXCEPTION_H -#define BOB_PYTHON_EXCEPTION_H - -#include <boost/python.hpp> - -/** - * @brief Raises a python exception with a formatted message - */ -#define PYTHON_ERROR(TYPE, ...) \ -{ \ - PyErr_Format(PyExc_##TYPE, __VA_ARGS__); \ - throw boost::python::error_already_set(); \ -} - -/** - * @brief Raises a python warning with a formatted message - */ -#define PYTHON_WARNING(TYPE, MESSAGE) \ -{ \ - PyErr_Warn(PyExc_##TYPE, MESSAGE); \ -} - -namespace bob { namespace python { - - /** - * @brief This is a generalized exception translator for boost python. It - * simplifies translation declaration for as long as you provide a what() - * method in your exception classes that return a const char* with the - * exception description. - * - * If you follow that protocol, you should be able to do something like: - * - * ExceptionTranslator<std::out_of_range> t(PyExc_RuntimeError) - * - * On your boost::python modules. - */ - template <typename T> struct ExceptionTranslator { - - public: - - void operator()(const T& cxx_except) const { - PyErr_SetString(m_py_except, cxx_except.what()); - } - - ExceptionTranslator(PyObject* py_except): m_py_except(py_except) { - boost::python::register_exception_translator<T>(*this); - } - - ExceptionTranslator(const ExceptionTranslator& other): - m_py_except(other.m_py_except) { - //do not re-register the translator here! - } - - private: - - PyObject* m_py_except; - - }; - - /** - * @brief A thin wrapper to call the translator and escape the variable - * naming issue when declaring multiple ExceptionTranslator's on the same - * module. - * - * If you think about it, it would have to look like this: - * - * ExceptionTranslator<MyException1> translator1(PyExc_RuntimeError); - * ExceptionTranslator<MyException2> translator2(PyExc_RuntimeError); - * - * Using this method will make it look like this: - * - * register_exception_translator<MyException1>(PyExc_RuntimeError); - */ - template <typename T> void register_exception_translator(PyObject* e) { - ExceptionTranslator<T> my_translator(e); - } - -}} - -#endif /* BOB_PYTHON_EXCEPTION_H */ diff --git a/bob/learn/misc/old/gaussian.cc b/bob/learn/misc/old/gaussian.cc deleted file mode 100644 index 70a8856..0000000 --- a/bob/learn/misc/old/gaussian.cc +++ /dev/null @@ -1,111 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Tue Jul 26 15:11:33 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> -#include <bob.io.base/api.h> - -#include "ndarray.h" -#include <bob.learn.misc/Gaussian.h> - - -using namespace boost::python; - -static void py_setMean(bob::learn::misc::Gaussian& machine, - bob::python::const_ndarray mean) -{ - machine.setMean(mean.bz<double,1>()); -} - -static void py_setVariance(bob::learn::misc::Gaussian& machine, - bob::python::const_ndarray variance) -{ - machine.setVariance(variance.bz<double,1>()); -} - -static void py_setVarianceThresholds(bob::learn::misc::Gaussian& machine, - bob::python::const_ndarray varianceThresholds) -{ - machine.setVarianceThresholds(varianceThresholds.bz<double,1>()); -} - -static tuple get_shape(const bob::learn::misc::Gaussian& m) -{ - return make_tuple(m.getNInputs()); -} - -static void set_shape(bob::learn::misc::Gaussian& m, - const blitz::TinyVector<int,1>& s) -{ - m.resize(s(0)); -} - -static double py_logLikelihood(const bob::learn::misc::Gaussian& machine, - bob::python::const_ndarray input) -{ - double output; - machine.forward(input.bz<double,1>(), output); - return output; -} - -static double py_logLikelihood_(const bob::learn::misc::Gaussian& machine, - bob::python::const_ndarray input) -{ - double output; - machine.forward_(input.bz<double,1>(), output); - return output; -} - - -static boost::shared_ptr<bob::learn::misc::Gaussian> _init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::Gaussian>(new bob::learn::misc::Gaussian(*hdf5->f)); -} - -static void _load(bob::learn::misc::Gaussian& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void _save(const bob::learn::misc::Gaussian& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - - -void bind_machine_gaussian() -{ - class_<bob::learn::misc::Gaussian, boost::shared_ptr<bob::learn::misc::Gaussian>, bases<bob::learn::misc::Machine<blitz::Array<double,1>, double> > >("Gaussian", - "This class implements a multivariate diagonal Gaussian distribution.", no_init) - .def("__init__", boost::python::make_constructor(&_init)) - .def(init<>(arg("self"))) - .def(init<const size_t>((arg("self"), arg("n_inputs")))) - .def(init<bob::learn::misc::Gaussian&>((arg("self"), arg("other")))) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::Gaussian::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this Gaussian with the 'other' one to be approximately the same.") - .add_property("dim_d", &bob::learn::misc::Gaussian::getNInputs, &bob::learn::misc::Gaussian::setNInputs, - "Dimensionality of the input feature space") - .add_property("mean", make_function(&bob::learn::misc::Gaussian::getMean, return_value_policy<copy_const_reference>()), &py_setMean, "Mean of the Gaussian") - .add_property("variance", make_function(&bob::learn::misc::Gaussian::getVariance, return_value_policy<copy_const_reference>()), &py_setVariance, "The diagonal of the (diagonal) covariance matrix") - .add_property("variance_thresholds", make_function(&bob::learn::misc::Gaussian::getVarianceThresholds, return_value_policy<copy_const_reference>()), &py_setVarianceThresholds, - "The variance flooring thresholds, i.e. the minimum allowed value of variance in each dimension. " - "The variance will be set to this value if an attempt is made to set it to a smaller value.") - .add_property("shape", &get_shape, &set_shape, "A tuple that represents the dimensionality of the Gaussian ``(dim_d,)``.") - .def("set_variance_thresholds", (void (bob::learn::misc::Gaussian::*)(const double))&bob::learn::misc::Gaussian::setVarianceThresholds, (arg("self"), arg("var_thd")), - "Set the variance flooring thresholds equal to the given threshold for all the dimensions.") - .def("resize", &bob::learn::misc::Gaussian::resize, (arg("self"), arg("dim_d")), "Set the input dimensionality, reset the mean to zero and the variance to one.") - .def("log_likelihood", &py_logLikelihood, (arg("self"), arg("sample")), "Output the log likelihood of the sample, x. The input size is checked.") - .def("log_likelihood_", &py_logLikelihood_, (arg("self"), arg("sample")), "Output the log likelihood of the sample, x. The input size is NOT checked.") - .def("save", &_save, (arg("self"), arg("config")), "Save to a Configuration") - .def("load", &_load, (arg("self"), arg("config")),"Load from a Configuration") - .def(self_ns::str(self_ns::self)) - ; -} diff --git a/bob/learn/misc/old/gmm.cc b/bob/learn/misc/old/gmm.cc deleted file mode 100644 index 00b290d..0000000 --- a/bob/learn/misc/old/gmm.cc +++ /dev/null @@ -1,330 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Tue Jul 26 15:11:33 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> -#include <bob.io.base/api.h> - -#include "ndarray.h" - -#include <bob.learn.misc/GMMStats.h> -#include <bob.learn.misc/GMMMachine.h> - -using namespace boost::python; - -static object py_gmmstats_getN(bob::learn::misc::GMMStats& s) -{ - bob::python::ndarray n(bob::io::base::array::t_float64, s.n.extent(0)); - blitz::Array<double,1> n_ = n.bz<double,1>(); - n_ = s.n; - return n.self(); -} - -static void py_gmmstats_setN(bob::learn::misc::GMMStats& s, - bob::python::const_ndarray n) -{ - s.n = n.bz<double,1>(); -} - -static object py_gmmstats_getSumpx(bob::learn::misc::GMMStats& s) -{ - bob::python::ndarray sumpx(bob::io::base::array::t_float64, s.sumPx.extent(0), - s.sumPx.extent(1)); - blitz::Array<double,2> sumpx_ = sumpx.bz<double,2>(); - sumpx_ = s.sumPx; - return sumpx.self(); -} - -static void py_gmmstats_setSumpx(bob::learn::misc::GMMStats& s, - bob::python::const_ndarray sumpx) -{ - s.sumPx = sumpx.bz<double,2>(); -} - -static object py_gmmstats_getSumpxx(bob::learn::misc::GMMStats& s) -{ - bob::python::ndarray sumpxx(bob::io::base::array::t_float64, s.sumPxx.extent(0), - s.sumPxx.extent(1)); - blitz::Array<double,2> sumpxx_ = sumpxx.bz<double,2>(); - sumpxx_ = s.sumPxx; - return sumpxx.self(); -} - -static void py_gmmstats_setSumpxx(bob::learn::misc::GMMStats& s, - bob::python::const_ndarray sumpxx) -{ - s.sumPxx = sumpxx.bz<double,2>(); -} - - -static void py_gmmmachine_setWeights(bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray weights) -{ - machine.setWeights(weights.bz<double,1>()); -} - -static object py_gmmmachine_getMeans(const bob::learn::misc::GMMMachine& machine) -{ - bob::python::ndarray means(bob::io::base::array::t_float64, - machine.getNGaussians(), machine.getNInputs()); - blitz::Array<double,2> means_ = means.bz<double,2>(); - machine.getMeans(means_); - return means.self(); -} - -static void py_gmmmachine_setMeans(bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray means) -{ - machine.setMeans(means.bz<double,2>()); -} - -static void py_gmmmachine_setMeanSupervector(bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray vec) -{ - machine.setMeanSupervector(vec.bz<double,1>()); -} - -static object py_gmmmachine_getVariances(const bob::learn::misc::GMMMachine& machine) -{ - bob::python::ndarray variances(bob::io::base::array::t_float64, - machine.getNGaussians(), machine.getNInputs()); - blitz::Array<double,2> variances_ = variances.bz<double,2>(); - machine.getVariances(variances_); - return variances.self(); -} - -static void py_gmmmachine_setVariances(bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray variances) -{ - machine.setVariances(variances.bz<double,2>()); -} - -static void py_gmmmachine_setVarianceSupervector(bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray vec) -{ - machine.setVarianceSupervector(vec.bz<double,1>()); -} - -static object py_gmmmachine_getVarianceThresholds(const bob::learn::misc::GMMMachine& machine) -{ - bob::python::ndarray varianceThresholds(bob::io::base::array::t_float64, - machine.getNGaussians(), machine.getNInputs()); - blitz::Array<double,2> varianceThresholds_ = varianceThresholds.bz<double,2>(); - machine.getVarianceThresholds(varianceThresholds_); - return varianceThresholds.self(); -} - -static void py_gmmmachine_setVarianceThresholds(bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray varianceThresholds) -{ - machine.setVarianceThresholds(varianceThresholds.bz<double,2>()); -} - -static void py_gmmmachine_setVarianceThresholdsOther(bob::learn::misc::GMMMachine& machine, - object o) -{ - extract<int> int_check(o); - extract<double> float_check(o); - if(int_check.check()) { //is int - machine.setVarianceThresholds(int_check()); - } - else if(float_check.check()) { //is float - machine.setVarianceThresholds(float_check()); - } - else { - //try hard-core extraction - throws TypeError, if not possible - extract<bob::python::const_ndarray> array_check(o); - if (!array_check.check()) - PYTHON_ERROR(TypeError, "Cannot extract an array from this Python object"); - bob::python::const_ndarray ar = array_check(); - machine.setVarianceThresholds(ar.bz<double,1>()); - } -} - -static tuple py_gmmmachine_get_shape(const bob::learn::misc::GMMMachine& m) -{ - return make_tuple(m.getNGaussians(), m.getNInputs()); -} - -static void py_gmmmachine_set_shape(bob::learn::misc::GMMMachine& m, - const blitz::TinyVector<int,2>& s) -{ - m.resize(s(0), s(1)); -} - -static double py_gmmmachine_loglikelihoodA(const bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray x, bob::python::ndarray ll) -{ - blitz::Array<double,1> ll_ = ll.bz<double,1>(); - return machine.logLikelihood(x.bz<double,1>(), ll_); -} - -static double py_gmmmachine_loglikelihoodA_(const bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray x, bob::python::ndarray ll) -{ - blitz::Array<double,1> ll_ = ll.bz<double,1>(); - return machine.logLikelihood_(x.bz<double,1>(), ll_); -} - -static double py_gmmmachine_loglikelihoodB(const bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray x) -{ - return machine.logLikelihood(x.bz<double,1>()); -} - -static double py_gmmmachine_loglikelihoodB_(const bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray x) -{ - return machine.logLikelihood_(x.bz<double,1>()); -} - -static void py_gmmmachine_accStatistics(const bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray x, bob::learn::misc::GMMStats& gs) -{ - const bob::io::base::array::typeinfo& info = x.type(); - switch(info.nd) { - case 1: - machine.accStatistics(x.bz<double,1>(), gs); - break; - case 2: - machine.accStatistics(x.bz<double,2>(), gs); - break; - default: - PYTHON_ERROR(TypeError, "cannot accStatistics of arrays with " SIZE_T_FMT " dimensions (only with 1 or 2 dimensions).", info.nd); - } -} - -static void py_gmmmachine_accStatistics_(const bob::learn::misc::GMMMachine& machine, - bob::python::const_ndarray x, bob::learn::misc::GMMStats& gs) -{ - const bob::io::base::array::typeinfo& info = x.type(); - switch(info.nd) { - case 1: - machine.accStatistics_(x.bz<double,1>(), gs); - break; - case 2: - machine.accStatistics_(x.bz<double,2>(), gs); - break; - default: - PYTHON_ERROR(TypeError, "cannot accStatistics of arrays with " SIZE_T_FMT " dimensions (only with 1 or 2 dimensions).", info.nd); - } -} - -static boost::shared_ptr<bob::learn::misc::GMMStats> s_init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::GMMStats>(new bob::learn::misc::GMMStats(*hdf5->f)); -} - -static void s_load(bob::learn::misc::GMMStats& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void s_save(const bob::learn::misc::GMMStats& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - - -static boost::shared_ptr<bob::learn::misc::GMMMachine> m_init(boost::python::object file){ - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::GMMMachine>(new bob::learn::misc::GMMMachine(*hdf5->f)); -} - -static void m_load(bob::learn::misc::GMMMachine& self, boost::python::object file){ - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void m_save(const bob::learn::misc::GMMMachine& self, boost::python::object file){ - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - -void bind_machine_gmm() -{ - class_<bob::learn::misc::GMMStats, boost::shared_ptr<bob::learn::misc::GMMStats> >("GMMStats", - "A container for GMM statistics.\n" - "With respect to Reynolds, \"Speaker Verification Using Adapted " - "Gaussian Mixture Models\", DSP, 2000:\n" - "Eq (8) is n(i)\n" - "Eq (9) is sumPx(i) / n(i)\n" - "Eq (10) is sumPxx(i) / n(i)\n", - init<>(arg("self"))) - .def("__init__", boost::python::make_constructor(&s_init)) - .def(init<const size_t, const size_t>((arg("self"), arg("n_gaussians"), arg("n_inputs")))) - .def(init<bob::learn::misc::GMMStats&>((arg("self"), arg("other")), "Creates a GMMStats from another GMMStats, using the copy constructor.")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::GMMStats::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this GMMStats with the 'other' one to be approximately the same.") - .def_readwrite("log_likelihood", &bob::learn::misc::GMMStats::log_likelihood, "The accumulated log likelihood of all samples") - .def_readwrite("t", &bob::learn::misc::GMMStats::T, "The accumulated number of samples") - .add_property("n", &py_gmmstats_getN, &py_gmmstats_setN, "For each Gaussian, the accumulated sum of responsibilities, i.e. the sum of P(gaussian_i|x)") - .add_property("sum_px", &py_gmmstats_getSumpx, &py_gmmstats_setSumpx, "For each Gaussian, the accumulated sum of responsibility times the sample ") - .add_property("sum_pxx", &py_gmmstats_getSumpxx, &py_gmmstats_setSumpxx, "For each Gaussian, the accumulated sum of responsibility times the sample squared") - .def("resize", &bob::learn::misc::GMMStats::resize, (arg("self"), arg("n_gaussians"), arg("n_inputs")), - " Allocates space for the statistics and resets to zero.") - .def("init", &bob::learn::misc::GMMStats::init, (arg("self")), "Resets statistics to zero.") - .def("save", &s_save, (arg("self"), arg("config")), "Save to a Configuration") - .def("load", &s_load, (arg("self"), arg("config")), "Load from a Configuration") - .def(self_ns::str(self_ns::self)) - .def(self_ns::self += self_ns::self) - ; - - class_<bob::learn::misc::GMMMachine, boost::shared_ptr<bob::learn::misc::GMMMachine>, bases<bob::learn::misc::Machine<blitz::Array<double,1>, double> > >("GMMMachine", - "This class implements a multivariate diagonal Gaussian distribution.\n" - "See Section 2.3.9 of Bishop, \"Pattern recognition and machine learning\", 2006", - init<>(arg("self"))) - .def("__init__", boost::python::make_constructor(&m_init)) - .def(init<bob::learn::misc::GMMMachine&>((arg("self"), arg("other")), "Creates a GMMMachine from another GMMMachine, using the copy constructor.")) - .def(init<const size_t, const size_t>((arg("self"), arg("n_gaussians"), arg("n_inputs")))) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::GMMMachine::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this GMMMachine with the 'other' one to be approximately the same.") - .add_property("dim_d", &bob::learn::misc::GMMMachine::getNInputs, &bob::learn::misc::GMMMachine::setNInputs, "The feature dimensionality D") - .add_property("dim_c", &bob::learn::misc::GMMMachine::getNGaussians, "The number of Gaussian components C") - .add_property("weights", make_function(&bob::learn::misc::GMMMachine::getWeights, return_value_policy<copy_const_reference>()), &py_gmmmachine_setWeights, "The weights (also known as \"mixing coefficients\")") - .add_property("means", &py_gmmmachine_getMeans, &py_gmmmachine_setMeans, "The means of the gaussians") - .add_property("mean_supervector", make_function((const blitz::Array<double,1>& (bob::learn::misc::GMMMachine::*)(void) const)&bob::learn::misc::GMMMachine::getMeanSupervector, return_value_policy<copy_const_reference>()), &py_gmmmachine_setMeanSupervector, - "The mean supervector of the GMMMachine " - "(concatenation of the mean vectors of each Gaussian of the GMMMachine") - .add_property("variances", &py_gmmmachine_getVariances, &py_gmmmachine_setVariances, "The (diagonal) variances of the Gaussians") - .add_property("variance_supervector", make_function((const blitz::Array<double,1>& (bob::learn::misc::GMMMachine::*)(void) const)&bob::learn::misc::GMMMachine::getVarianceSupervector, return_value_policy<copy_const_reference>()), &py_gmmmachine_setVarianceSupervector, - "The variance supervector of the GMMMachine " - "(concatenation of the variance vectors of each Gaussian of the GMMMachine") - .add_property("variance_thresholds", &py_gmmmachine_getVarianceThresholds, &py_gmmmachine_setVarianceThresholds, - "The variance flooring thresholds for each Gaussian in each dimension") - .add_property("shape", &py_gmmmachine_get_shape, &py_gmmmachine_set_shape, "A tuple that represents the dimensionality of the GMMMachine ``(n_gaussians, n_inputs)``.") - .def("resize", &bob::learn::misc::GMMMachine::resize, (arg("self"), arg("n_gaussians"), arg("n_inputs")), - "Reset the input dimensionality, and the number of Gaussian components.\n" - "Initialises the weights to uniform distribution.") - .def("set_variance_thresholds", &py_gmmmachine_setVarianceThresholdsOther, (arg("self"), arg("variance_threshold")), - "Set the variance flooring thresholds in each dimension to the same vector for all Gaussian components if the argument is a 1D numpy arrray, and equal for all Gaussian components and dimensions if the parameter is a scalar.") - .def("update_gaussian", &bob::learn::misc::GMMMachine::updateGaussian, (arg("self"), arg("i")), - "Get the specified Gaussian component. An exception is thrown if i is out of range.") - - .def("log_likelihood", &py_gmmmachine_loglikelihoodA, args("self", "x", "log_weighted_gaussian_likelihoods"), - "Output the log likelihood of the sample, x, i.e. log(p(x|bob::learn::misc::GMMMachine)). Inputs are checked.") - .def("log_likelihood_", &py_gmmmachine_loglikelihoodA_, args("self", "x", "log_weighted_gaussian_likelihoods"), - "Output the log likelihood of the sample, x, i.e. log(p(x|bob::learn::misc::GMMMachine)). Inputs are NOT checked.") - .def("log_likelihood", &py_gmmmachine_loglikelihoodB, args("self", "x"), - " Output the log likelihood of the sample, x, i.e. log(p(x|GMM)). Inputs are checked.") - .def("log_likelihood_", &py_gmmmachine_loglikelihoodB_, args("self", "x"), - " Output the log likelihood of the sample, x, i.e. log(p(x|GMM)). Inputs are checked.") - .def("acc_statistics", &py_gmmmachine_accStatistics, args("self", "x", "stats"), - "Accumulate the GMM statistics for this sample(s). Inputs are checked.") - .def("acc_statistics_", &py_gmmmachine_accStatistics_, args("self", "x", "stats"), - "Accumulate the GMM statistics for this sample(s). Inputs are NOT checked.") - .def("load", &m_load, (arg("self"), arg("config")), "Load from a Configuration") - .def("save", &m_save, (arg("self"), arg("config")), "Save to a Configuration") - .def(self_ns::str(self_ns::self)) - ; - -} diff --git a/bob/learn/misc/old/gmm_trainer.cc b/bob/learn/misc/old/gmm_trainer.cc deleted file mode 100644 index 9ec49c7..0000000 --- a/bob/learn/misc/old/gmm_trainer.cc +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Thu Jun 9 18:12:33 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" - -#include <limits> -#include <bob.learn.misc/GMMTrainer.h> -#include <bob.learn.misc/MAP_GMMTrainer.h> -#include <bob.learn.misc/ML_GMMTrainer.h> - -using namespace boost::python; - -typedef bob::learn::misc::EMTrainer<bob::learn::misc::GMMMachine, blitz::Array<double,2> > EMTrainerGMMBase; - -static void py_train(EMTrainerGMMBase& trainer, bob::learn::misc::GMMMachine& machine, bob::python::const_ndarray sample) -{ - trainer.train(machine, sample.bz<double,2>()); -} - -static void py_initialize(EMTrainerGMMBase& trainer, bob::learn::misc::GMMMachine& machine, bob::python::const_ndarray sample) -{ - trainer.initialize(machine, sample.bz<double,2>()); -} - -static void py_finalize(EMTrainerGMMBase& trainer, bob::learn::misc::GMMMachine& machine, bob::python::const_ndarray sample) -{ - trainer.finalize(machine, sample.bz<double,2>()); -} - -static void py_eStep(EMTrainerGMMBase& trainer, bob::learn::misc::GMMMachine& machine, bob::python::const_ndarray sample) -{ - trainer.eStep(machine, sample.bz<double,2>()); -} - -static void py_mStep(EMTrainerGMMBase& trainer, bob::learn::misc::GMMMachine& machine, bob::python::const_ndarray sample) -{ - trainer.mStep(machine, sample.bz<double,2>()); -} - -void bind_trainer_gmm() { - - class_<EMTrainerGMMBase, boost::noncopyable>("EMTrainerGMM", "The base python class for all EM-based trainers.", no_init) - .add_property("convergence_threshold", &EMTrainerGMMBase::getConvergenceThreshold, &EMTrainerGMMBase::setConvergenceThreshold, "Convergence threshold") - .add_property("max_iterations", &EMTrainerGMMBase::getMaxIterations, &EMTrainerGMMBase::setMaxIterations, "Max iterations") - .def("train", &py_train, (arg("self"), arg("machine"), arg("data")), "Train a machine using data") - .def("initialize", &py_initialize, (arg("self"), arg("machine"), arg("data")), "This method is called before the EM algorithm") - .def("finalize", &py_finalize, (arg("self"), arg("machine"), arg("data")), "This method is called after the EM algorithm") - .def("e_step", &py_eStep, (arg("self"), arg("machine"), arg("data")), - "Update the hidden variable distribution (or the sufficient statistics) given the Machine parameters. " - "Also, calculate the average output of the Machine given these parameters.\n" - "Return the average output of the Machine across the dataset. " - "The EM algorithm will terminate once the change in average_output " - "is less than the convergence_threshold.") - .def("m_step", &py_mStep, (arg("self"), arg("machine"), arg("data")), "Update the Machine parameters given the hidden variable distribution (or the sufficient statistics)") - .def("compute_likelihood", &EMTrainerGMMBase::computeLikelihood, (arg("self"), arg("machine")), "Returns the likelihood.") - ; - - class_<bob::learn::misc::GMMTrainer, boost::noncopyable, bases<EMTrainerGMMBase> >("GMMTrainer", - "This class implements the E-step of the expectation-maximisation algorithm for a GMM Machine.\n" - "See Section 9.2.2 of Bishop, \"Pattern recognition and machine learning\", 2006", no_init) - .add_property("gmm_statistics", make_function(&bob::learn::misc::GMMTrainer::getGMMStats, return_value_policy<copy_const_reference>()), &bob::learn::misc::GMMTrainer::setGMMStats, "The internal GMM statistics. Useful to parallelize the E-step.") - ; - - class_<bob::learn::misc::MAP_GMMTrainer, boost::noncopyable, bases<bob::learn::misc::GMMTrainer> >("MAP_GMMTrainer", - "This class implements the maximum a posteriori M-step " - "of the expectation-maximisation algorithm for a GMM Machine. " - "The prior parameters are encoded in the form of a GMM (e.g. a universal background model). " - "The EM algorithm thus performs GMM adaptation.\n" - "See Section 3.4 of Reynolds et al., \"Speaker Verification Using Adapted Gaussian Mixture Models\", Digital Signal Processing, 2000. We use a \"single adaptation coefficient\", alpha_i, and thus a single relevance factor, r.", - init<optional<const double, const bool, const bool, const bool, const double> >((arg("self"), arg("relevance_factor")=0, arg("update_means")=true, arg("update_variances")=false, arg("update_weights")=false, arg("responsibilities_threshold")=std::numeric_limits<double>::epsilon()))) - .def("set_prior_gmm", &bob::learn::misc::MAP_GMMTrainer::setPriorGMM, (arg("self"), arg("prior_gmm")), - "Set the GMM to use as a prior for MAP adaptation. " - "Generally, this is a \"universal background model\" (UBM), " - "also referred to as a \"world model\".") - .def("set_t3_map", &bob::learn::misc::MAP_GMMTrainer::setT3MAP, (arg("self"), arg("alpha")), - "Use a torch3-like MAP adaptation rule instead of Reynolds'one.") - .def("unset_t3_map", &bob::learn::misc::MAP_GMMTrainer::unsetT3MAP, (arg("self")), - "Use a Reynolds' MAP adaptation (rather than torch3-like).") - ; - - class_<bob::learn::misc::ML_GMMTrainer, boost::noncopyable, bases<bob::learn::misc::GMMTrainer> >("ML_GMMTrainer", - "This class implements the maximum likelihood M-step of the expectation-maximisation algorithm for a GMM Machine.\n" - "See Section 9.2.2 of Bishop, \"Pattern recognition and machine learning\", 2006", - init<optional<const bool, const bool, const bool, const double> >((arg("self"), arg("update_means")=true, arg("update_variances")=false, arg("update_weights")=false, arg("responsibilities_threshold")=std::numeric_limits<double>::epsilon()))) - ; -} diff --git a/bob/learn/misc/old/ivector.cc b/bob/learn/misc/old/ivector.cc deleted file mode 100644 index b36e66e..0000000 --- a/bob/learn/misc/old/ivector.cc +++ /dev/null @@ -1,136 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Sun Mar 31 18:07:00 2013 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> -#include <bob.io.base/api.h> - -#include "ndarray.h" - -#include <bob.learn.misc/IVectorMachine.h> - -using namespace boost::python; - -static void py_iv_setT(bob::learn::misc::IVectorMachine& machine, - bob::python::const_ndarray T) -{ - machine.setT(T.bz<double,2>()); -} - -static void py_iv_setSigma(bob::learn::misc::IVectorMachine& machine, - bob::python::const_ndarray sigma) -{ - machine.setSigma(sigma.bz<double,1>()); -} - -static void py_computeIdTtSigmaInvT1(const bob::learn::misc::IVectorMachine& machine, - const bob::learn::misc::GMMStats& gs, bob::python::ndarray output) -{ - blitz::Array<double,2> output_ = output.bz<double,2>(); - machine.computeIdTtSigmaInvT(gs, output_); -} - -static object py_computeIdTtSigmaInvT2(const bob::learn::misc::IVectorMachine& machine, - const bob::learn::misc::GMMStats& gs) -{ - bob::python::ndarray output(bob::io::base::array::t_float64, machine.getDimRt(), machine.getDimRt()); - blitz::Array<double,2> output_ = output.bz<double,2>(); - machine.computeIdTtSigmaInvT(gs, output_); - return output.self(); -} - -static void py_computeTtSigmaInvFnorm1(const bob::learn::misc::IVectorMachine& machine, - const bob::learn::misc::GMMStats& gs, bob::python::ndarray output) -{ - blitz::Array<double,1> output_ = output.bz<double,1>(); - machine.computeTtSigmaInvFnorm(gs, output_); -} - -static object py_computeTtSigmaInvFnorm2(const bob::learn::misc::IVectorMachine& machine, - const bob::learn::misc::GMMStats& gs) -{ - bob::python::ndarray output(bob::io::base::array::t_float64, machine.getDimRt()); - blitz::Array<double,1> output_ = output.bz<double,1>(); - machine.computeTtSigmaInvFnorm(gs, output_); - return output.self(); -} - -static void py_iv_forward1(const bob::learn::misc::IVectorMachine& machine, - const bob::learn::misc::GMMStats& gs, bob::python::ndarray ivector) -{ - blitz::Array<double,1> ivector_ = ivector.bz<double,1>(); - machine.forward(gs, ivector_); -} - -static void py_iv_forward1_(const bob::learn::misc::IVectorMachine& machine, - const bob::learn::misc::GMMStats& gs, bob::python::ndarray ivector) -{ - blitz::Array<double,1> ivector_ = ivector.bz<double,1>(); - machine.forward_(gs, ivector_); -} - -static object py_iv_forward2(const bob::learn::misc::IVectorMachine& machine, - const bob::learn::misc::GMMStats& gs) -{ - bob::python::ndarray ivector(bob::io::base::array::t_float64, machine.getDimRt()); - blitz::Array<double,1> ivector_ = ivector.bz<double,1>(); - machine.forward(gs, ivector_); - return ivector.self(); -} - - - -static boost::shared_ptr<bob::learn::misc::IVectorMachine> _init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::IVectorMachine>(new bob::learn::misc::IVectorMachine(*hdf5->f)); -} - -static void _load(bob::learn::misc::IVectorMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void _save(const bob::learn::misc::IVectorMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - -void bind_machine_ivector() -{ - // TODO: reuse binding from generic machine - class_<bob::learn::misc::IVectorMachine, boost::shared_ptr<bob::learn::misc::IVectorMachine> >("IVectorMachine", "An IVectorMachine to extract i-vector.\n\nReferences:\n[1] 'Front End Factor Analysis for Speaker Verification', N. Dehak, P. Kenny, R. Dehak, P. Dumouchel, P. Ouellet, IEEE Transactions on Audio, Speech and Language Processing, 2010, vol. 19, issue 4, pp. 788-798", init<boost::shared_ptr<bob::learn::misc::GMMMachine>, optional<const size_t, const size_t> >((arg("self"), arg("ubm"), arg("rt")=1, arg("variance_threshold")=1e-10), "Builds a new IVectorMachine.")) - .def(init<>((arg("self")), "Constructs a new empty IVectorMachine.")) - .def("__init__", boost::python::make_constructor(&_init), "Constructs a new IVectorMachine from a configuration file.") - .def(init<const bob::learn::misc::IVectorMachine&>((arg("self"), arg("machine")), "Copy constructs an IVectorMachine")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::IVectorMachine::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this IVectorMachine with the 'other' one to be approximately the same.") - .def("load", &_load, (arg("self"), arg("config")), "Loads the configuration parameters from a configuration file.") - .def("save", &_save, (arg("self"), arg("config")), "Saves the configuration parameters to a configuration file.") - .def("resize", &bob::learn::misc::IVectorMachine::resize, (arg("self"), arg("rt")), "Reset the dimensionality of the Total Variability subspace T.") - .add_property("ubm", &bob::learn::misc::IVectorMachine::getUbm, &bob::learn::misc::IVectorMachine::setUbm, "The UBM GMM attached to this Joint Factor Analysis model") - .add_property("t", make_function(&bob::learn::misc::IVectorMachine::getT, return_value_policy<copy_const_reference>()), &py_iv_setT, "The subspace T (Total Variability matrix)") - .add_property("sigma", make_function(&bob::learn::misc::IVectorMachine::getSigma, return_value_policy<copy_const_reference>()), &py_iv_setSigma, "The residual matrix of the model sigma") - .add_property("variance_threshold", &bob::learn::misc::IVectorMachine::getVarianceThreshold, &bob::learn::misc::IVectorMachine::setVarianceThreshold, "Threshold for the variance contained in sigma") - .add_property("dim_c", &bob::learn::misc::IVectorMachine::getDimC, "The number of Gaussian components") - .add_property("dim_d", &bob::learn::misc::IVectorMachine::getDimD, "The dimensionality of the feature space") - .add_property("dim_cd", &bob::learn::misc::IVectorMachine::getDimCD, "The dimensionality of the supervector space") - .add_property("dim_rt", &bob::learn::misc::IVectorMachine::getDimRt, "The dimensionality of the Total Variability subspace (rank of T)") - .def("__compute_Id_TtSigmaInvT__", &py_computeIdTtSigmaInvT1, (arg("self"), arg("gmmstats"), arg("output")), "Computes (Id + sum_{c=1}^{C} N_{i,j,c} T^{T} Sigma_{c}^{-1} T)") - .def("__compute_Id_TtSigmaInvT__", &py_computeIdTtSigmaInvT2, (arg("self"), arg("gmmstats")), "Computes (Id + sum_{c=1}^{C} N_{i,j,c} T^{T} Sigma_{c}^{-1} T)") - .def("__compute_TtSigmaInvFnorm__", &py_computeTtSigmaInvFnorm1, (arg("self"), arg("gmmstats"), arg("output")), "Computes T^{T} Sigma^{-1} sum_{c=1}^{C} (F_c - N_c mean(c))") - .def("__compute_TtSigmaInvFnorm__", &py_computeTtSigmaInvFnorm2, (arg("self"), arg("gmmstats")), "Computes T^{T} Sigma^{-1} sum_{c=1}^{C} (F_c - N_c mean(c))") - .def("__call__", &py_iv_forward1_, (arg("self"), arg("gmmstats"), arg("ivector")), "Executes the machine on the GMMStats, and updates the ivector array. NO CHECK is performed.") - .def("__call__", &py_iv_forward2, (arg("self"), arg("gmmstats")), "Executes the machine on the GMMStats. The ivector is allocated an returned.") - .def("forward", &py_iv_forward1, (arg("self"), arg("gmmstats"), arg("ivector")), "Executes the machine on the GMMStats, and updates the ivector array.") - .def("forward_", &py_iv_forward1_, (arg("self"), arg("gmmstats"), arg("ivector")), "Executes the machine on the GMMStats, and updates the ivector array. NO CHECK is performed.") - .def("forward", &py_iv_forward2, (arg("self"), arg("gmmstats")), "Executes the machine on the GMMStats. The ivector is allocated an returned.") - ; -} diff --git a/bob/learn/misc/old/ivector_trainer.cc b/bob/learn/misc/old/ivector_trainer.cc deleted file mode 100644 index 72328bd..0000000 --- a/bob/learn/misc/old/ivector_trainer.cc +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -* @date Sun Mar 31 19:56:00 2013 +0200 -* -* Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland -*/ - -#include "ndarray.h" - -#include <bob.learn.misc/IVectorTrainer.h> -#include <bob.learn.misc/IVectorMachine.h> -#include <bob.learn.misc/EMTrainer.h> -#include <boost/python/stl_iterator.hpp> - -using namespace boost::python; - -typedef bob::learn::misc::EMTrainer<bob::learn::misc::IVectorMachine, std::vector<bob::learn::misc::GMMStats> > EMTrainerIVectorBase; - -static void py_train(EMTrainerIVectorBase& trainer, - bob::learn::misc::IVectorMachine& machine, object data) -{ - stl_input_iterator<bob::learn::misc::GMMStats> dbegin(data), dend; - std::vector<bob::learn::misc::GMMStats> vdata(dbegin, dend); - trainer.train(machine, vdata); -} - -static void py_initialize(EMTrainerIVectorBase& trainer, - bob::learn::misc::IVectorMachine& machine, object data) -{ - stl_input_iterator<bob::learn::misc::GMMStats> dbegin(data), dend; - std::vector<bob::learn::misc::GMMStats> vdata(dbegin, dend); - trainer.initialize(machine, vdata); -} - -static void py_eStep(EMTrainerIVectorBase& trainer, - bob::learn::misc::IVectorMachine& machine, object data) -{ - stl_input_iterator<bob::learn::misc::GMMStats> dbegin(data), dend; - std::vector<bob::learn::misc::GMMStats> vdata(dbegin, dend); - trainer.eStep(machine, vdata); -} - -static void py_mStep(EMTrainerIVectorBase& trainer, - bob::learn::misc::IVectorMachine& machine, object data) -{ - stl_input_iterator<bob::learn::misc::GMMStats> dbegin(data), dend; - std::vector<bob::learn::misc::GMMStats> vdata(dbegin, dend); - trainer.mStep(machine, vdata); -} - -static void py_finalize(EMTrainerIVectorBase& trainer, - bob::learn::misc::IVectorMachine& machine, object data) -{ - stl_input_iterator<bob::learn::misc::GMMStats> dbegin(data), dend; - std::vector<bob::learn::misc::GMMStats> vdata(dbegin, dend); - trainer.finalize(machine, vdata); -} - -static void py_set_AccNijWij2(bob::learn::misc::IVectorTrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccNijWij2(acc.bz<double,3>()); -} - -static void py_set_AccFnormijWij(bob::learn::misc::IVectorTrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccFnormijWij(acc.bz<double,3>()); -} - -static void py_set_AccNij(bob::learn::misc::IVectorTrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccNij(acc.bz<double,1>()); -} - -static void py_set_AccSnormij(bob::learn::misc::IVectorTrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccSnormij(acc.bz<double,2>()); -} - - - -// include the random API of bob.core -#include <bob.core/random_api.h> -static boost::python::object ITB_getRng(EMTrainerIVectorBase& self){ - // create new object - PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0); - reinterpret_cast<PyBoostMt19937Object*>(o)->rng = self.getRng().get(); - return boost::python::object(boost::python::handle<>(boost::python::borrowed(o))); -} - -#include <boost/make_shared.hpp> -static void ITB_setRng(EMTrainerIVectorBase& self, boost::python::object rng){ - if (!PyBoostMt19937_Check(rng.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.core.random.mt19937 object"); - PyBoostMt19937Object* o = reinterpret_cast<PyBoostMt19937Object*>(rng.ptr()); - self.setRng(boost::make_shared<boost::mt19937>(*o->rng)); -} - - -void bind_trainer_ivector() -{ - class_<EMTrainerIVectorBase, boost::noncopyable>("EMTrainerIVector", "The base python class for all EM-based trainers.", no_init) - .add_property("convergence_threshold", &EMTrainerIVectorBase::getConvergenceThreshold, &EMTrainerIVectorBase::setConvergenceThreshold, "Convergence threshold") - .add_property("max_iterations", &EMTrainerIVectorBase::getMaxIterations, &EMTrainerIVectorBase::setMaxIterations, "Max iterations") - .add_property("compute_likelihood_variable", &EMTrainerIVectorBase::getComputeLikelihood, &EMTrainerIVectorBase::setComputeLikelihood, "Indicates whether the log likelihood should be computed during EM or not") - .add_property("rng", &ITB_getRng, &ITB_setRng, "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.") - .def("train", &py_train, (arg("machine"), arg("data")), "Trains a machine using data") - .def("initialize", &py_initialize, (arg("machine"), arg("data")), "This method is called before the EM algorithm") - .def("finalize", &py_finalize, (arg("machine"), arg("data")), "This method is called at the end of the EM algorithm") - .def("e_step", &py_eStep, (arg("machine"), arg("data")), - "Updates the hidden variable distribution (or the sufficient statistics) given the Machine parameters. ") - .def("m_step", &py_mStep, (arg("machine"), arg("data")), "Updates the Machine parameters given the hidden variable distribution (or the sufficient statistics)") - .def("compute_likelihood", &EMTrainerIVectorBase::computeLikelihood, (arg("machine")), "Computes the current log likelihood given the hidden variable distribution (or the sufficient statistics)") - ; - - - class_<bob::learn::misc::IVectorTrainer, boost::shared_ptr<bob::learn::misc::IVectorTrainer>, boost::noncopyable, bases<EMTrainerIVectorBase> >("IVectorTrainer", "An trainer to extract i-vector (i.e. for training the Total Variability matrix)\n\nReferences:\n[1] 'Front End Factor Analysis for Speaker Verification', N. Dehak, P. Kenny, R. Dehak, P. Dumouchel, P. Ouellet, IEEE Transactions on Audio, Speech and Language Processing, 2010, vol. 19, issue 4, pp. 788-798", init<optional<bool, double, size_t, bool> >((arg("self"), arg("update_sigma")=false, arg("convergence_threshold")=0.001, arg("max_iterations")=10, arg("compute_likelihood")=false), "Builds a new IVectorTrainer.")) - .def(init<const bob::learn::misc::IVectorTrainer&>((arg("self"), arg("trainer")), "Copy constructs an IVectorTrainer")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::IVectorTrainer::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this IVectorTrainer with the 'other' one to be approximately the same.") - .add_property("acc_nij_wij2", make_function(&bob::learn::misc::IVectorTrainer::getAccNijWij2, return_value_policy<copy_const_reference>()), &py_set_AccNijWij2, "Accumulator updated during the E-step") - .add_property("acc_fnormij_wij", make_function(&bob::learn::misc::IVectorTrainer::getAccFnormijWij, return_value_policy<copy_const_reference>()), &py_set_AccFnormijWij, "Accumulator updated during the E-step") - .add_property("acc_nij", make_function(&bob::learn::misc::IVectorTrainer::getAccNij, return_value_policy<copy_const_reference>()), &py_set_AccNij, "Accumulator updated during the E-step") - .add_property("acc_snormij", make_function(&bob::learn::misc::IVectorTrainer::getAccSnormij, return_value_policy<copy_const_reference>()), &py_set_AccSnormij, "Accumulator updated during the E-step") - ; -} diff --git a/bob/learn/misc/old/jfa.cc b/bob/learn/misc/old/jfa.cc deleted file mode 100644 index b5cc24a..0000000 --- a/bob/learn/misc/old/jfa.cc +++ /dev/null @@ -1,321 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Sat Jul 23 21:41:15 2011 +0200 - * - * @brief Python bindings for the FA-related machines - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> -#include <bob.io.base/api.h> - -#include "ndarray.h" - -#include <bob.learn.misc/JFAMachine.h> -#include <bob.learn.misc/GMMMachine.h> - -using namespace boost::python; - -static void py_jfa_setU(bob::learn::misc::JFABase& machine, - bob::python::const_ndarray U) -{ - machine.setU(U.bz<double,2>()); -} - -static void py_jfa_setV(bob::learn::misc::JFABase& machine, - bob::python::const_ndarray V) -{ - machine.setV(V.bz<double,2>()); -} - -static void py_jfa_setD(bob::learn::misc::JFABase& machine, - bob::python::const_ndarray D) -{ - machine.setD(D.bz<double,1>()); -} - -static void py_jfa_setY(bob::learn::misc::JFAMachine& machine, bob::python::const_ndarray Y) { - const blitz::Array<double,1>& Y_ = Y.bz<double,1>(); - machine.setY(Y_); -} - -static void py_jfa_setZ(bob::learn::misc::JFAMachine& machine, bob::python::const_ndarray Z) { - const blitz::Array<double,1> Z_ = Z.bz<double,1>(); - machine.setZ(Z_); -} - -static void py_jfa_estimateX(bob::learn::misc::JFAMachine& machine, - const bob::learn::misc::GMMStats& gmm_stats, bob::python::ndarray x) -{ - blitz::Array<double,1> x_ = x.bz<double,1>(); - machine.estimateX(gmm_stats, x_); -} - -static void py_jfa_estimateUx(bob::learn::misc::JFAMachine& machine, - const bob::learn::misc::GMMStats& gmm_stats, bob::python::ndarray ux) -{ - blitz::Array<double,1> ux_ = ux.bz<double,1>(); - machine.estimateUx(gmm_stats, ux_); -} - -static double py_jfa_forwardUx(bob::learn::misc::JFAMachine& machine, - const bob::learn::misc::GMMStats& gmm_stats, bob::python::const_ndarray ux) -{ - double score; - machine.forward(gmm_stats, ux.bz<double,1>(), score); - return score; -} - - -static void py_isv_setU(bob::learn::misc::ISVBase& machine, - bob::python::const_ndarray U) -{ - machine.setU(U.bz<double,2>()); -} - -static void py_isv_setD(bob::learn::misc::ISVBase& machine, - bob::python::const_ndarray D) -{ - machine.setD(D.bz<double,1>()); -} - -static void py_isv_setZ(bob::learn::misc::ISVMachine& machine, bob::python::const_ndarray Z) { - machine.setZ(Z.bz<double,1>()); -} - -static void py_isv_estimateX(bob::learn::misc::ISVMachine& machine, - const bob::learn::misc::GMMStats& gmm_stats, bob::python::ndarray x) -{ - blitz::Array<double,1> x_ = x.bz<double,1>(); - machine.estimateX(gmm_stats, x_); -} - -static void py_isv_estimateUx(bob::learn::misc::ISVMachine& machine, - const bob::learn::misc::GMMStats& gmm_stats, bob::python::ndarray ux) -{ - blitz::Array<double,1> ux_ = ux.bz<double,1>(); - machine.estimateUx(gmm_stats, ux_); -} - -static double py_isv_forwardUx(bob::learn::misc::ISVMachine& machine, - const bob::learn::misc::GMMStats& gmm_stats, bob::python::const_ndarray ux) -{ - double score; - machine.forward(gmm_stats, ux.bz<double,1>(), score); - return score; -} - - -static double py_gen1_forward(const bob::learn::misc::Machine<bob::learn::misc::GMMStats, double>& m, - const bob::learn::misc::GMMStats& stats) -{ - double output; - m.forward(stats, output); - return output; -} - -static double py_gen1_forward_(const bob::learn::misc::Machine<bob::learn::misc::GMMStats, double>& m, - const bob::learn::misc::GMMStats& stats) -{ - double output; - m.forward_(stats, output); - return output; -} - -static void py_gen2b_forward(const bob::learn::misc::Machine<bob::learn::misc::GMMStats, blitz::Array<double,1> >& m, - const bob::learn::misc::GMMStats& stats, bob::python::const_ndarray output) -{ - blitz::Array<double,1> output_ = output.bz<double,1>(); - m.forward(stats, output_); -} - -static void py_gen2b_forward_(const bob::learn::misc::Machine<bob::learn::misc::GMMStats, blitz::Array<double,1> >& m, - const bob::learn::misc::GMMStats& stats, bob::python::const_ndarray output) -{ - blitz::Array<double,1> output_ = output.bz<double,1>(); - m.forward_(stats, output_); -} - - -static boost::shared_ptr<bob::learn::misc::JFABase> jb_init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::JFABase>(new bob::learn::misc::JFABase(*hdf5->f)); -} - -static void jb_load(bob::learn::misc::JFABase& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void jb_save(const bob::learn::misc::JFABase& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - - -static boost::shared_ptr<bob::learn::misc::JFAMachine> jm_init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::JFAMachine>(new bob::learn::misc::JFAMachine(*hdf5->f)); -} - -static void jm_load(bob::learn::misc::JFAMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void jm_save(const bob::learn::misc::JFAMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - - -static boost::shared_ptr<bob::learn::misc::ISVBase> ib_init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::ISVBase>(new bob::learn::misc::ISVBase(*hdf5->f)); -} - -static void ib_load(bob::learn::misc::ISVBase& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void ib_save(const bob::learn::misc::ISVBase& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - - -static boost::shared_ptr<bob::learn::misc::ISVMachine> im_init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::ISVMachine>(new bob::learn::misc::ISVMachine(*hdf5->f)); -} - -static void im_load(bob::learn::misc::ISVMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void im_save(const bob::learn::misc::ISVMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - -void bind_machine_jfa() -{ - class_<bob::learn::misc::Machine<bob::learn::misc::GMMStats, double>, boost::noncopyable>("MachineGMMStatsScalarBase", - "Root class for all Machine<bob::learn::misc::GMMStats, double>", no_init) - .def("__call__", &py_gen1_forward_, (arg("self"), arg("input")), "Executes the machine on the GMMStats, and returns the (scalar) output. NO CHECK is performed.") - .def("forward", &py_gen1_forward, (arg("self"), arg("input")), "Executes the machine on the GMMStats, and returns the (scalar) output.") - .def("forward_", &py_gen1_forward_, (arg("self"), arg("input")), "Executes the machine on the GMMStats, and returns the (scalar) output. NO CHECK is performed.") - ; - - class_<bob::learn::misc::Machine<bob::learn::misc::GMMStats, blitz::Array<double,1> >, boost::noncopyable>("MachineGMMStatsA1DBase", - "Root class for all Machine<bob::learn::misc::GMMStats, blitz::Array<double,1>", no_init) - .def("__call__", &py_gen2b_forward_, (arg("self"), arg("input"), arg("output")), "Executes the machine on the GMMStats, and returns the (scalar) output. NO CHECK is performed.") - .def("forward", &py_gen2b_forward, (arg("self"), arg("input"), arg("output")), "Executes the machine on the GMMStats, and returns the (scalar) output.") - .def("forward_", &py_gen2b_forward_, (arg("self"), arg("input"), arg("output")), "Executes the machine on the GMMStats, and returns the (scalar) output. NO CHECK is performed.") - ; - - - class_<bob::learn::misc::JFABase, boost::shared_ptr<bob::learn::misc::JFABase>, bases<bob::learn::misc::Machine<bob::learn::misc::GMMStats, double> > >("JFABase", "A JFABase instance can be seen as a container for U, V and D when performing Joint Factor Analysis (JFA).\n\nReferences:\n[1] 'Explicit Modelling of Session Variability for Speaker Verification', R. Vogt, S. Sridharan, Computer Speech & Language, 2008, vol. 22, no. 1, pp. 17-38\n[2] 'Session Variability Modelling for Face Authentication', C. McCool, R. Wallace, M. McLaren, L. El Shafey, S. Marcel, IET Biometrics, 2013", no_init) - .def("__init__", boost::python::make_constructor(&jb_init), "Constructs a new JFABaseMachine from a configuration file.") - .def(init<const boost::shared_ptr<bob::learn::misc::GMMMachine>, optional<const size_t, const size_t> >((arg("self"), arg("ubm"), arg("ru")=1, arg("rv")=1), "Builds a new JFABase.")) - .def(init<>((arg("self")), "Constructs a 1x1 JFABase instance. You have to set a UBM GMM and resize the U, V and D subspaces afterwards.")) - .def(init<const bob::learn::misc::JFABase&>((arg("self"), arg("machine")), "Copy constructs a JFABase")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::JFABase::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this JFABase with the 'other' one to be approximately the same.") - .def("load", &jb_load, (arg("self"), arg("config")), "Loads the configuration parameters from a configuration file.") - .def("save", &jb_save, (arg("self"), arg("config")), "Saves the configuration parameters to a configuration file.") - .def("resize", &bob::learn::misc::JFABase::resize, (arg("self"), arg("ru"), arg("rv")), "Reset the dimensionality of the subspaces U and V.") - .add_property("ubm", &bob::learn::misc::JFABase::getUbm, &bob::learn::misc::JFABase::setUbm, "The UBM GMM attached to this Joint Factor Analysis model") - .add_property("u", make_function(&bob::learn::misc::JFABase::getU, return_value_policy<copy_const_reference>()), &py_jfa_setU, "The subspace U for within-class variations") - .add_property("v", make_function(&bob::learn::misc::JFABase::getV, return_value_policy<copy_const_reference>()), &py_jfa_setV, "The subspace V for between-class variations") - .add_property("d", make_function(&bob::learn::misc::JFABase::getD, return_value_policy<copy_const_reference>()), &py_jfa_setD, "The subspace D for residual variations") - .add_property("dim_c", &bob::learn::misc::JFABase::getDimC, "The number of Gaussian components") - .add_property("dim_d", &bob::learn::misc::JFABase::getDimD, "The dimensionality of the feature space") - .add_property("dim_cd", &bob::learn::misc::JFABase::getDimCD, "The dimensionality of the supervector space") - .add_property("dim_ru", &bob::learn::misc::JFABase::getDimRu, "The dimensionality of the within-class variations subspace (rank of U)") - .add_property("dim_rv", &bob::learn::misc::JFABase::getDimRv, "The dimensionality of the between-class variations subspace (rank of V)") - ; - - class_<bob::learn::misc::JFAMachine, boost::shared_ptr<bob::learn::misc::JFAMachine>, bases<bob::learn::misc::Machine<bob::learn::misc::GMMStats, double> > >("JFAMachine", "A JFAMachine. An attached JFABase should be provided for Joint Factor Analysis. The JFAMachine carries information about the speaker factors y and z, whereas a JFABase carries information about the matrices U, V and D.\n\nReferences:\n[1] 'Explicit Modelling of Session Variability for Speaker Verification', R. Vogt, S. Sridharan, Computer Speech & Language, 2008, vol. 22, no. 1, pp. 17-38\n[2] 'Session Variability Modelling for Face Authentication', C. McCool, R. Wallace, M. McLaren, L. El Shafey, S. Marcel, IET Biometrics, 2013", no_init) - .def("__init__", boost::python::make_constructor(&jm_init), "Constructs a new JFAMachine from a configuration file.") - .def(init<>((arg("self")), "Constructs a 1x1 JFAMachine instance. You have to set a JFABase afterwards.")) - .def(init<const boost::shared_ptr<bob::learn::misc::JFABase> >((arg("self"), arg("jfa_base")), "Builds a new JFAMachine.")) - .def(init<const bob::learn::misc::JFAMachine&>((arg("self"), arg("machine")), "Copy constructs a JFAMachine")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::JFAMachine::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this JFABase with the 'other' one to be approximately the same.") - .def("load", &jm_load, (arg("self"), arg("config")), "Loads the configuration parameters from a configuration file.") - .def("save", &jm_save, (arg("self"), arg("config")), "Saves the configuration parameters to a configuration file.") - .def("estimate_x", &py_jfa_estimateX, (arg("self"), arg("stats"), arg("x")), "Estimates the session offset x (LPT assumption) given GMM statistics.") - .def("estimate_ux", &py_jfa_estimateUx, (arg("self"), arg("stats"), arg("ux")), "Estimates Ux (LPT assumption) given GMM statistics.") - .def("forward_ux", &py_jfa_forwardUx, (arg("self"), arg("stats"), arg("ux")), "Processes the GMM statistics and Ux to return a score.") - .add_property("jfa_base", &bob::learn::misc::JFAMachine::getJFABase, &bob::learn::misc::JFAMachine::setJFABase, "The JFABase attached to this machine") - .add_property("__x__", make_function(&bob::learn::misc::JFAMachine::getX, return_value_policy<copy_const_reference>()), "The latent variable x (last one computed). This is a feature provided for convenience, but this attribute is not 'part' of the machine. The session latent variable x is indeed not class-specific, but depends on the sample considered. Furthermore, it is not saved into the machine or used when comparing machines.") - .add_property("y", make_function(&bob::learn::misc::JFAMachine::getY, return_value_policy<copy_const_reference>()), &py_jfa_setY, "The latent variable y of this machine") - .add_property("z", make_function(&bob::learn::misc::JFAMachine::getZ, return_value_policy<copy_const_reference>()), &py_jfa_setZ, "The latent variable z of this machine") - .add_property("dim_c", &bob::learn::misc::JFAMachine::getDimC, "The number of Gaussian components") - .add_property("dim_d", &bob::learn::misc::JFAMachine::getDimD, "The dimensionality of the feature space") - .add_property("dim_cd", &bob::learn::misc::JFAMachine::getDimCD, "The dimensionality of the supervector space") - .add_property("dim_ru", &bob::learn::misc::JFAMachine::getDimRu, "The dimensionality of the within-class variations subspace (rank of U)") - .add_property("dim_rv", &bob::learn::misc::JFAMachine::getDimRv, "The dimensionality of the between-class variations subspace (rank of V)") - ; - - class_<bob::learn::misc::ISVBase, boost::shared_ptr<bob::learn::misc::ISVBase>, bases<bob::learn::misc::Machine<bob::learn::misc::GMMStats, double> > >("ISVBase", "An ISVBase instance can be seen as a container for U and D when performing Joint Factor Analysis (ISV). \n\nReferences:\n[1] 'Explicit Modelling of Session Variability for Speaker Verification', R. Vogt, S. Sridharan, Computer Speech & Language, 2008, vol. 22, no. 1, pp. 17-38\n[2] 'Session Variability Modelling for Face Authentication', C. McCool, R. Wallace, M. McLaren, L. El Shafey, S. Marcel, IET Biometrics, 2013", no_init) - .def("__init__", boost::python::make_constructor(&ib_init), "Constructs a new ISVBaseMachine from a configuration file.") - .def(init<const boost::shared_ptr<bob::learn::misc::GMMMachine>, optional<const size_t> >((arg("self"), arg("ubm"), arg("ru")=1), "Builds a new ISVBase.")) - .def(init<>((arg("self")), "Constructs a 1 ISVBase instance. You have to set a UBM GMM and resize the U and D subspaces afterwards.")) - .def(init<const bob::learn::misc::ISVBase&>((arg("self"), arg("machine")), "Copy constructs an ISVBase")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::ISVBase::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this ISVBase with the 'other' one to be approximately the same.") - .def("load", &ib_load, (arg("self"), arg("config")), "Loads the configuration parameters from a configuration file.") - .def("save", &ib_save, (arg("self"), arg("config")), "Saves the configuration parameters to a configuration file.") - .def("resize", &bob::learn::misc::ISVBase::resize, (arg("self"), arg("ru")), "Reset the dimensionality of the subspaces U.") - .add_property("ubm", &bob::learn::misc::ISVBase::getUbm, &bob::learn::misc::ISVBase::setUbm, "The UBM GMM attached to this Joint Factor Analysis model") - .add_property("u", make_function(&bob::learn::misc::ISVBase::getU, return_value_policy<copy_const_reference>()), &py_isv_setU, "The subspace U for within-class variations") - .add_property("d", make_function(&bob::learn::misc::ISVBase::getD, return_value_policy<copy_const_reference>()), &py_isv_setD, "The subspace D for residual variations") - .add_property("dim_c", &bob::learn::misc::ISVBase::getDimC, "The number of Gaussian components") - .add_property("dim_d", &bob::learn::misc::ISVBase::getDimD, "The dimensionality of the feature space") - .add_property("dim_cd", &bob::learn::misc::ISVBase::getDimCD, "The dimensionality of the supervector space") - .add_property("dim_ru", &bob::learn::misc::ISVBase::getDimRu, "The dimensionality of the within-class variations subspace (rank of U)") - ; - - class_<bob::learn::misc::ISVMachine, boost::shared_ptr<bob::learn::misc::ISVMachine>, bases<bob::learn::misc::Machine<bob::learn::misc::GMMStats, double> > >("ISVMachine", "An ISVMachine. An attached ISVBase should be provided for Inter-session Variability Modelling. The ISVMachine carries information about the speaker factors z, whereas a ISVBase carries information about the matrices U and D. \n\nReferences:\n[1] 'Explicit Modelling of Session Variability for Speaker Verification', R. Vogt, S. Sridharan, Computer Speech & Language, 2008, vol. 22, no. 1, pp. 17-38\n[2] 'Session Variability Modelling for Face Authentication', C. McCool, R. Wallace, M. McLaren, L. El Shafey, S. Marcel, IET Biometrics, 2013", no_init) - .def("__init__", boost::python::make_constructor(&im_init), "Constructs a new ISVMachine from a configuration file.") - .def(init<>((arg("self")), "Constructs a 1 ISVMachine instance. You have to set a ISVBase afterwards.")) - .def(init<const boost::shared_ptr<bob::learn::misc::ISVBase> >((arg("self"), arg("isv_base")), "Builds a new ISVMachine.")) - .def(init<const bob::learn::misc::ISVMachine&>((arg("self"), arg("machine")), "Copy constructs an ISVMachine")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::ISVMachine::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this ISVBase with the 'other' one to be approximately the same.") - .def("load", &im_load, (arg("self"), arg("config")), "Loads the configuration parameters from a configuration file.") - .def("save", &im_save, (arg("self"), arg("config")), "Saves the configuration parameters to a configuration file.") - .def("estimate_x", &py_isv_estimateX, (arg("self"), arg("stats"), arg("x")), "Estimates the session offset x (LPT assumption) given GMM statistics.") - .def("estimate_ux", &py_isv_estimateUx, (arg("self"), arg("stats"), arg("ux")), "Estimates Ux (LPT assumption) given GMM statistics.") - .def("forward_ux", &py_isv_forwardUx, (arg("self"), arg("stats"), arg("ux")), "Processes the GMM statistics and Ux to return a score.") - .add_property("isv_base", &bob::learn::misc::ISVMachine::getISVBase, &bob::learn::misc::ISVMachine::setISVBase, "The ISVBase attached to this machine") - .add_property("__x__", make_function(&bob::learn::misc::ISVMachine::getX, return_value_policy<copy_const_reference>()), "The latent variable x (last one computed). This is a feature provided for convenience, but this attribute is not 'part' of the machine. The session latent variable x is indeed not class-specific, but depends on the sample considered. Furthermore, it is not saved into the machine or used when comparing machines.") - .add_property("z", make_function(&bob::learn::misc::ISVMachine::getZ, return_value_policy<copy_const_reference>()), &py_isv_setZ, "The latent variable z of this machine") - .add_property("dim_c", &bob::learn::misc::ISVMachine::getDimC, "The number of Gaussian components") - .add_property("dim_d", &bob::learn::misc::ISVMachine::getDimD, "The dimensionality of the feature space") - .add_property("dim_cd", &bob::learn::misc::ISVMachine::getDimCD, "The dimensionality of the supervector space") - .add_property("dim_ru", &bob::learn::misc::ISVMachine::getDimRu, "The dimensionality of the within-class variations subspace (rank of U)") - ; -} diff --git a/bob/learn/misc/old/jfa_trainer.cc b/bob/learn/misc/old/jfa_trainer.cc deleted file mode 100644 index 542c33a..0000000 --- a/bob/learn/misc/old/jfa_trainer.cc +++ /dev/null @@ -1,392 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Tue Jul 19 12:16:17 2011 +0200 - * - * @brief Python bindings to Joint Factor Analysis trainers - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" -#include <boost/python/stl_iterator.hpp> -#include <bob.learn.misc/JFATrainer.h> - -using namespace boost::python; - -template <int N> -static object vector_as_list(const std::vector<blitz::Array<double,N> >& vec) -{ - list retval; - for(size_t k=0; k<vec.size(); ++k) - retval.append(vec[k]); - return tuple(retval); -} - -static void extract_GMMStats(object data, - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > >& training_data) -{ - stl_input_iterator<object> dbegin(data), dend; - std::vector<object> vvdata(dbegin, dend); - for (size_t i=0; i<vvdata.size(); ++i) - { - stl_input_iterator<boost::shared_ptr<bob::learn::misc::GMMStats> > dlbegin(vvdata[i]), dlend; - training_data.push_back(std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> >(dlbegin, dlend)); - } -} - -static void isv_train(bob::learn::misc::ISVTrainer& t, bob::learn::misc::ISVBase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the train function - t.train(m, training_data); -} - -static void isv_initialize(bob::learn::misc::ISVTrainer& t, bob::learn::misc::ISVBase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the initialize function - t.initialize(m, training_data); -} - -static void isv_estep(bob::learn::misc::ISVTrainer& t, bob::learn::misc::ISVBase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the E-Step function - t.eStep(m, training_data); -} - -static void isv_mstep(bob::learn::misc::ISVTrainer& t, bob::learn::misc::ISVBase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the M-Step function - t.mStep(m, training_data); -} - -static void isv_finalize(bob::learn::misc::ISVTrainer& t, bob::learn::misc::ISVBase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the finalization function - t.finalize(m, training_data); -} - -static void isv_enrol(bob::learn::misc::ISVTrainer& t, bob::learn::misc::ISVMachine& m, object data, const size_t n_iter) -{ - stl_input_iterator<boost::shared_ptr<bob::learn::misc::GMMStats> > dlbegin(data), dlend; - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > vdata(dlbegin, dlend); - // Calls the enrol function - t.enrol(m, vdata, n_iter); -} - -static object isv_get_x(const bob::learn::misc::ISVTrainer& t) -{ - return vector_as_list(t.getX()); -} - -static object isv_get_z(const bob::learn::misc::ISVTrainer& t) -{ - return vector_as_list(t.getZ()); -} - -static void isv_set_x(bob::learn::misc::ISVTrainer& t, object data) -{ - stl_input_iterator<bob::python::const_ndarray> vdata(data), dend; - std::vector<blitz::Array<double,2> > vdata_ref; - vdata_ref.reserve(len(data)); - for (; vdata != dend; ++vdata) vdata_ref.push_back((*vdata).bz<double,2>()); - t.setX(vdata_ref); -} - -static void isv_set_z(bob::learn::misc::ISVTrainer& t, object data) -{ - stl_input_iterator<bob::python::const_ndarray> vdata(data), dend; - std::vector<blitz::Array<double,1> > vdata_ref; - vdata_ref.reserve(len(data)); - for (; vdata != dend; ++vdata) vdata_ref.push_back((*vdata).bz<double,1>()); - t.setZ(vdata_ref); -} - - -static void isv_set_accUA1(bob::learn::misc::ISVTrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccUA1(acc.bz<double,3>()); -} - -static void isv_set_accUA2(bob::learn::misc::ISVTrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccUA2(acc.bz<double,2>()); -} - - - -static void jfa_train(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the train function - t.train(m, training_data); -} - -static void jfa_initialize(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the initialize function - t.initialize(m, training_data); -} - -static void jfa_estep1(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the E-Step function - t.eStep1(m, training_data); -} - -static void jfa_mstep1(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the M-Step function - t.mStep1(m, training_data); -} - -static void jfa_finalize1(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the finalization function - t.finalize1(m, training_data); -} - -static void jfa_estep2(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the E-Step function - t.eStep2(m, training_data); -} - -static void jfa_mstep2(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the M-Step function - t.mStep2(m, training_data); -} - -static void jfa_finalize2(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the finalization function - t.finalize2(m, training_data); -} - -static void jfa_estep3(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the E-Step function - t.eStep3(m, training_data); -} - -static void jfa_mstep3(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the M-Step function - t.mStep3(m, training_data); -} - -static void jfa_finalize3(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the finalization function - t.finalize3(m, training_data); -} - -static void jfa_train_loop(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFABase& m, object data) -{ - std::vector<std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > > training_data; - extract_GMMStats(data, training_data); - // Calls the main loop function - t.train_loop(m, training_data); -} - -static void jfa_enrol(bob::learn::misc::JFATrainer& t, bob::learn::misc::JFAMachine& m, object data, const size_t n_iter) -{ - stl_input_iterator<boost::shared_ptr<bob::learn::misc::GMMStats> > dlbegin(data), dlend; - std::vector<boost::shared_ptr<bob::learn::misc::GMMStats> > vdata(dlbegin, dlend); - // Calls the enrol function - t.enrol(m, vdata, n_iter); -} - -static object jfa_get_x(const bob::learn::misc::JFATrainer& t) -{ - return vector_as_list(t.getX()); -} - -static object jfa_get_y(const bob::learn::misc::JFATrainer& t) -{ - return vector_as_list(t.getY()); -} - -static object jfa_get_z(const bob::learn::misc::JFATrainer& t) -{ - return vector_as_list(t.getZ()); -} - -static void jfa_set_x(bob::learn::misc::JFATrainer& t, object data) -{ - stl_input_iterator<bob::python::const_ndarray> vdata(data), dend; - std::vector<blitz::Array<double,2> > vdata_ref; - vdata_ref.reserve(len(data)); - for (; vdata != dend; ++vdata) vdata_ref.push_back((*vdata).bz<double,2>()); - t.setX(vdata_ref); -} - -static void jfa_set_y(bob::learn::misc::JFATrainer& t, object data) -{ - stl_input_iterator<bob::python::const_ndarray> vdata(data), dend; - std::vector<blitz::Array<double,1> > vdata_ref; - vdata_ref.reserve(len(data)); - for (; vdata != dend; ++vdata) vdata_ref.push_back((*vdata).bz<double,1>()); - t.setY(vdata_ref); -} - -static void jfa_set_z(bob::learn::misc::JFATrainer& t, object data) -{ - stl_input_iterator<bob::python::const_ndarray> vdata(data), dend; - std::vector<blitz::Array<double,1> > vdata_ref; - vdata_ref.reserve(len(data)); - for (; vdata != dend; ++vdata) vdata_ref.push_back((*vdata).bz<double,1>()); - t.setZ(vdata_ref); -} - - -static void jfa_set_accUA1(bob::learn::misc::JFATrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccUA1(acc.bz<double,3>()); -} - -static void jfa_set_accUA2(bob::learn::misc::JFATrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccUA2(acc.bz<double,2>()); -} - -static void jfa_set_accVA1(bob::learn::misc::JFATrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccVA1(acc.bz<double,3>()); -} - -static void jfa_set_accVA2(bob::learn::misc::JFATrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccVA2(acc.bz<double,2>()); -} - -static void jfa_set_accDA1(bob::learn::misc::JFATrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccDA1(acc.bz<double,1>()); -} - -static void jfa_set_accDA2(bob::learn::misc::JFATrainer& trainer, - bob::python::const_ndarray acc) -{ - trainer.setAccDA2(acc.bz<double,1>()); -} - - - -// include the random API of bob.core -#include <bob.core/random_api.h> -static boost::python::object isv_getRng(bob::learn::misc::ISVTrainer& self){ - // create new object - PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0); - reinterpret_cast<PyBoostMt19937Object*>(o)->rng = self.getRng().get(); - return boost::python::object(boost::python::handle<>(boost::python::borrowed(o))); -} -static boost::python::object jfa_getRng(bob::learn::misc::JFATrainer& self){ - // create new object - PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0); - reinterpret_cast<PyBoostMt19937Object*>(o)->rng = self.getRng().get(); - return boost::python::object(boost::python::handle<>(boost::python::borrowed(o))); -} - -#include <boost/make_shared.hpp> -static void isv_setRng(bob::learn::misc::ISVTrainer& self, boost::python::object rng){ - if (!PyBoostMt19937_Check(rng.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.core.random.mt19937 object"); - PyBoostMt19937Object* o = reinterpret_cast<PyBoostMt19937Object*>(rng.ptr()); - self.setRng(boost::make_shared<boost::mt19937>(*o->rng)); -} -static void jfa_setRng(bob::learn::misc::JFATrainer& self, boost::python::object rng){ - if (!PyBoostMt19937_Check(rng.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.core.random.mt19937 object"); - PyBoostMt19937Object* o = reinterpret_cast<PyBoostMt19937Object*>(rng.ptr()); - self.setRng(boost::make_shared<boost::mt19937>(*o->rng)); -} - - -void bind_trainer_jfa() -{ - class_<bob::learn::misc::ISVTrainer, boost::noncopyable >("ISVTrainer", "A trainer for Inter-session Variability Modelling (ISV). \n\nReferences:\n[1] 'Explicit Modelling of Session Variability for Speaker Verification', R. Vogt, S. Sridharan, Computer Speech & Language, 2008, vol. 22, no. 1, pp. 17-38\n[2] 'Session Variability Modelling for Face Authentication', C. McCool, R. Wallace, M. McLaren, L. El Shafey, S. Marcel, IET Biometrics, 2013", init<optional<const size_t, const double> >((arg("self"), arg("max_iterations")=10, arg("relevance_factor")=4.),"Initializes a new ISVTrainer.")) - .def(init<const bob::learn::misc::ISVTrainer&>((arg("self"), arg("other")), "Copy constructs an ISVTrainer")) - .add_property("max_iterations", &bob::learn::misc::ISVTrainer::getMaxIterations, &bob::learn::misc::ISVTrainer::setMaxIterations, "Max iterations") - .add_property("rng", &isv_getRng, &isv_setRng, "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.") - .add_property("__X__", &isv_get_x, &isv_set_x) - .add_property("__Z__", &isv_get_z, &isv_set_z) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::ISVTrainer::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this ISVTrainer with the 'other' one to be approximately the same.") - .def("train", &isv_train, (arg("self"), arg("isv_base"), arg("gmm_stats")), "Call the training procedure.") - .def("initialize", &isv_initialize, (arg("self"), arg("isv_base"), arg("gmm_stats")), "Call the initialization procedure.") - .def("e_step", &isv_estep, (arg("self"), arg("isv_base"), arg("gmm_stats")), "Call the e-step procedure.") - .def("m_step", &isv_mstep, (arg("self"), arg("isv_base"), arg("gmm_stats")), "Call the m-step procedure.") - .def("finalize", &isv_finalize, (arg("self"), arg("isv_base"), arg("gmm_stats")), "Call the finalization procedure.") - .def("enrol", &isv_enrol, (arg("self"), arg("isv_machine"), arg("gmm_stats"), arg("n_iter")), "Call the enrolment procedure.") - .add_property("acc_u_a1", make_function(&bob::learn::misc::ISVTrainer::getAccUA1, return_value_policy<copy_const_reference>()), &isv_set_accUA1, "Accumulator updated during the E-step") - .add_property("acc_u_a2", make_function(&bob::learn::misc::ISVTrainer::getAccUA2, return_value_policy<copy_const_reference>()), &isv_set_accUA2, "Accumulator updated during the E-step") - ; - - class_<bob::learn::misc::JFATrainer, boost::noncopyable >("JFATrainer", "A trainer for Joint Factor Analysis (JFA).\n\nReferences:\n[1] 'Explicit Modelling of Session Variability for Speaker Verification', R. Vogt, S. Sridharan, Computer Speech & Language, 2008, vol. 22, no. 1, pp. 17-38\n[2] 'Session Variability Modelling for Face Authentication', C. McCool, R. Wallace, M. McLaren, L. El Shafey, S. Marcel, IET Biometrics, 2013", init<optional<const size_t> >((arg("self"), arg("max_iterations")=10),"Initializes a new JFATrainer.")) - .def(init<const bob::learn::misc::JFATrainer&>((arg("self"), arg("other")), "Copy constructs an JFATrainer")) - .add_property("max_iterations", &bob::learn::misc::JFATrainer::getMaxIterations, &bob::learn::misc::JFATrainer::setMaxIterations, "Max iterations") - .add_property("rng", &jfa_getRng, &jfa_setRng, "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.") - .add_property("__X__", &jfa_get_x, &jfa_set_x) - .add_property("__Y__", &jfa_get_y, &jfa_set_y) - .add_property("__Z__", &jfa_get_z, &jfa_set_z) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::JFATrainer::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this JFATrainer with the 'other' one to be approximately the same.") - .def("train", &jfa_train, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the training procedure.") - .def("initialize", &jfa_initialize, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the initialization procedure.") - .def("train_loop", &jfa_train_loop, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the training procedure (without the initialization). This will train the three subspaces U, V and d.") - .def("e_step1", &jfa_estep1, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 1st e-step procedure (for the V subspace).") - .def("m_step1", &jfa_mstep1, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 1st m-step procedure (for the V subspace).") - .def("finalize1", &jfa_finalize1, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 1st finalization procedure (for the V subspace).") - .def("e_step2", &jfa_estep2, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 2nd e-step procedure (for the U subspace).") - .def("m_step2", &jfa_mstep2, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 2nd m-step procedure (for the U subspace).") - .def("finalize2", &jfa_finalize2, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 2nd finalization procedure (for the U subspace).") - .def("e_step3", &jfa_estep3, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 3rd e-step procedure (for the d subspace).") - .def("m_step3", &jfa_mstep3, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 3rd m-step procedure (for the d subspace).") - .def("finalize3", &jfa_finalize3, (arg("self"), arg("jfa_base"), arg("gmm_stats")), "Call the 3rd finalization procedure (for the d subspace).") - .def("enrol", &jfa_enrol, (arg("self"), arg("jfa_machine"), arg("gmm_stats"), arg("n_iter")), "Call the enrolment procedure.") - .add_property("acc_v_a1", make_function(&bob::learn::misc::JFATrainer::getAccVA1, return_value_policy<copy_const_reference>()), &jfa_set_accVA1, "Accumulator updated during the E-step") - .add_property("acc_v_a2", make_function(&bob::learn::misc::JFATrainer::getAccVA2, return_value_policy<copy_const_reference>()), &jfa_set_accVA2, "Accumulator updated during the E-step") - .add_property("acc_u_a1", make_function(&bob::learn::misc::JFATrainer::getAccUA1, return_value_policy<copy_const_reference>()), &jfa_set_accUA1, "Accumulator updated during the E-step") - .add_property("acc_u_a2", make_function(&bob::learn::misc::JFATrainer::getAccUA2, return_value_policy<copy_const_reference>()), &jfa_set_accUA2, "Accumulator updated during the E-step") - .add_property("acc_d_a1", make_function(&bob::learn::misc::JFATrainer::getAccDA1, return_value_policy<copy_const_reference>()), &jfa_set_accDA1, "Accumulator updated during the E-step") - .add_property("acc_d_a2", make_function(&bob::learn::misc::JFATrainer::getAccDA2, return_value_policy<copy_const_reference>()), &jfa_set_accDA2, "Accumulator updated during the E-step") - ; -} diff --git a/bob/learn/misc/old/kmeans.cc b/bob/learn/misc/old/kmeans.cc deleted file mode 100644 index 96c06ec..0000000 --- a/bob/learn/misc/old/kmeans.cc +++ /dev/null @@ -1,146 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Tue Jul 26 15:11:33 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> -#include <bob.io.base/api.h> - -#include "ndarray.h" - -#include <bob.learn.misc/KMeansMachine.h> - -using namespace boost::python; - -static tuple py_getVariancesAndWeightsForEachCluster(const bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray ar) { - size_t n_means = machine.getNMeans(); - size_t n_inputs = machine.getNInputs(); - bob::python::ndarray variances(bob::io::base::array::t_float64, n_means, n_inputs); - bob::python::ndarray weights(bob::io::base::array::t_float64, n_means); - blitz::Array<double,2> variances_ = variances.bz<double,2>(); - blitz::Array<double,1> weights_ = weights.bz<double,1>(); - machine.getVariancesAndWeightsForEachCluster(ar.bz<double,2>(), variances_, weights_); - return boost::python::make_tuple(variances.self(), weights.self()); -} - -static void py_getVariancesAndWeightsForEachClusterInit(const bob::learn::misc::KMeansMachine& machine, bob::python::ndarray variances, bob::python::ndarray weights) { - blitz::Array<double,2> variances_ = variances.bz<double,2>(); - blitz::Array<double,1> weights_ = weights.bz<double,1>(); - machine.getVariancesAndWeightsForEachClusterInit(variances_, weights_); -} - -static void py_getVariancesAndWeightsForEachClusterAcc(const bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray ar, bob::python::ndarray variances, bob::python::ndarray weights) { - blitz::Array<double,2> variances_ = variances.bz<double,2>(); - blitz::Array<double,1> weights_ = weights.bz<double,1>(); - machine.getVariancesAndWeightsForEachClusterAcc(ar.bz<double,2>(), variances_, weights_); -} - -static void py_getVariancesAndWeightsForEachClusterFin(const bob::learn::misc::KMeansMachine& machine, bob::python::ndarray variances, bob::python::ndarray weights) { - blitz::Array<double,2> variances_ = variances.bz<double,2>(); - blitz::Array<double,1> weights_ = weights.bz<double,1>(); - machine.getVariancesAndWeightsForEachClusterFin(variances_, weights_); -} - -static object py_getMean(const bob::learn::misc::KMeansMachine& kMeansMachine, const size_t i) { - bob::python::ndarray mean(bob::io::base::array::t_float64, kMeansMachine.getNInputs()); - blitz::Array<double,1> mean_ = mean.bz<double,1>(); - kMeansMachine.getMean(i, mean_); - return mean.self(); -} - -static void py_setMean(bob::learn::misc::KMeansMachine& machine, const size_t i, bob::python::const_ndarray mean) { - machine.setMean(i, mean.bz<double,1>()); -} - -static void py_setMeans(bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray means) { - machine.setMeans(means.bz<double,2>()); -} - -static double py_getDistanceFromMean(const bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray x, const size_t i) -{ - return machine.getDistanceFromMean(x.bz<double,1>(), i); -} - -static tuple py_getClosestMean(const bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray x) -{ - size_t closest_mean; - double min_distance; - machine.getClosestMean(x.bz<double,1>(), closest_mean, min_distance); - return boost::python::make_tuple(closest_mean, min_distance); -} - -static double py_getMinDistance(const bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray input) -{ - return machine.getMinDistance(input.bz<double,1>()); -} - -static void py_setCacheMeans(bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray cache_means) { - machine.setCacheMeans(cache_means.bz<double,2>()); -} - - -static boost::shared_ptr<bob::learn::misc::KMeansMachine> _init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::KMeansMachine>(new bob::learn::misc::KMeansMachine(*hdf5->f)); -} - -static void _load(bob::learn::misc::KMeansMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void _save(const bob::learn::misc::KMeansMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - -void bind_machine_kmeans() -{ - class_<bob::learn::misc::KMeansMachine, boost::shared_ptr<bob::learn::misc::KMeansMachine>, - bases<bob::learn::misc::Machine<blitz::Array<double,1>, double> > >("KMeansMachine", - "This class implements a k-means classifier.\n" - "See Section 9.1 of Bishop, \"Pattern recognition and machine learning\", 2006", - init<>((arg("self")))) - .def("__init__", boost::python::make_constructor(&_init)) - .def(init<const size_t, const size_t>((arg("self"), arg("n_means"), arg("n_inputs")))) - .def(init<bob::learn::misc::KMeansMachine&>((arg("self"), arg("other")))) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::KMeansMachine::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this KMeansMachine with the 'other' one to be approximately the same.") - .add_property("means", make_function(&bob::learn::misc::KMeansMachine::getMeans, return_value_policy<copy_const_reference>()), &py_setMeans, "The mean vectors") - .add_property("__cache_means__", make_function(&bob::learn::misc::KMeansMachine::getCacheMeans, return_value_policy<copy_const_reference>()), &py_setCacheMeans, "The cache mean vectors. This should only be used when parallelizing the get_variances_and_weights_for_each_cluster() method") - .add_property("dim_d", &bob::learn::misc::KMeansMachine::getNInputs, "Number of inputs") - .add_property("dim_c", &bob::learn::misc::KMeansMachine::getNMeans, "Number of means (k)") - .def("resize", &bob::learn::misc::KMeansMachine::resize, (arg("self"), arg("n_means"), arg("n_inputs")), "Resize the number of means and inputs") - .def("get_mean", &py_getMean, (arg("self"), arg("i")), "Get the i'th mean") - .def("set_mean", &py_setMean, (arg("self"), arg("i"), arg("mean")), "Set the i'th mean") - .def("get_distance_from_mean", &py_getDistanceFromMean, (arg("self"), arg("x"), arg("i")), - "Return the power of two of the square Euclidean distance of the sample, x, to the i'th mean") - .def("get_closest_mean", &py_getClosestMean, (arg("self"), arg("x")), - "Calculate the index of the mean that is closest (in terms of square Euclidean distance) to the data sample, x") - .def("get_min_distance", &py_getMinDistance, (arg("self"), arg("input")), - "Output the minimum square Euclidean distance between the input and one of the means") - .def("get_variances_and_weights_for_each_cluster", &py_getVariancesAndWeightsForEachCluster, (arg("self"), arg("data")), - "For each mean, find the subset of the samples that is closest to that mean, and calculate\n" - "1) the variance of that subset (the cluster variance)\n" - "2) the proportion of the samples represented by that subset (the cluster weight)") - .def("__get_variances_and_weights_for_each_cluster_init__", &py_getVariancesAndWeightsForEachClusterInit, (arg("self"), arg("variances"), arg("weights")), - "For the parallel version of get_variances_and_weights_for_each_cluster()\n" - "Initialization step") - .def("__get_variances_and_weights_for_each_cluster_acc__", &py_getVariancesAndWeightsForEachClusterAcc, (arg("self"), arg("data"), arg("variances"), arg("weights")), - "For the parallel version of get_variances_and_weights_for_each_cluster()\n" - "Accumulation step") - .def("__get_variances_and_weights_for_each_cluster_fin__", &py_getVariancesAndWeightsForEachClusterFin, (arg("self"), arg("variances"), arg("weights")), - "For the parallel version of get_variances_and_weights_for_each_cluster()\n" - "Finalization step") - .def("load", &_load, (arg("self"), arg("config")), "Load from a Configuration") - .def("save", &_save, (arg("self"), arg("config")), "Save to a Configuration") - .def(self_ns::str(self_ns::self)) - ; -} diff --git a/bob/learn/misc/old/kmeans_trainer.cc b/bob/learn/misc/old/kmeans_trainer.cc deleted file mode 100644 index 0b90db7..0000000 --- a/bob/learn/misc/old/kmeans_trainer.cc +++ /dev/null @@ -1,143 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Thu Jun 9 18:12:33 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" -#include <bob.learn.misc/KMeansTrainer.h> - -using namespace boost::python; - -typedef bob::learn::misc::EMTrainer<bob::learn::misc::KMeansMachine, blitz::Array<double,2> > EMTrainerKMeansBase; - -static void py_setZeroethOrderStats(bob::learn::misc::KMeansTrainer& op, bob::python::const_ndarray stats) { - const bob::io::base::array::typeinfo& info = stats.type(); - if(info.dtype != bob::io::base::array::t_float64 || info.nd != 1) - PYTHON_ERROR(TypeError, "cannot set array of type '%s'", info.str().c_str()); - op.setZeroethOrderStats(stats.bz<double,1>()); -} - -static void py_setFirstOrderStats(bob::learn::misc::KMeansTrainer& op, bob::python::const_ndarray stats) { - const bob::io::base::array::typeinfo& info = stats.type(); - if(info.dtype != bob::io::base::array::t_float64 || info.nd != 2) - PYTHON_ERROR(TypeError, "cannot set array of type '%s'", info.str().c_str()); - op.setFirstOrderStats(stats.bz<double,2>()); -} - -static void py_train(EMTrainerKMeansBase& trainer, - bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray sample) -{ - trainer.train(machine, sample.bz<double,2>()); -} - -static void py_initialize(EMTrainerKMeansBase& trainer, - bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray sample) -{ - trainer.initialize(machine, sample.bz<double,2>()); -} - -static void py_finalize(EMTrainerKMeansBase& trainer, - bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray sample) -{ - trainer.finalize(machine, sample.bz<double,2>()); -} - -static void py_eStep(EMTrainerKMeansBase& trainer, - bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray sample) -{ - trainer.eStep(machine, sample.bz<double,2>()); -} - -static void py_mStep(EMTrainerKMeansBase& trainer, - bob::learn::misc::KMeansMachine& machine, bob::python::const_ndarray sample) -{ - trainer.mStep(machine, sample.bz<double,2>()); -} - -// include the random API of bob.core -#include <bob.core/random_api.h> -static boost::python::object KMTB_getRng(EMTrainerKMeansBase& self){ - // create new object - PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0); - reinterpret_cast<PyBoostMt19937Object*>(o)->rng = self.getRng().get(); - return boost::python::object(boost::python::handle<>(boost::python::borrowed(o))); -} -static boost::python::object KMT_getRng(bob::learn::misc::KMeansTrainer& self){ - // create new object - PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0); - reinterpret_cast<PyBoostMt19937Object*>(o)->rng = self.getRng().get(); - return boost::python::object(boost::python::handle<>(boost::python::borrowed(o))); -} - -#include <boost/make_shared.hpp> -static void KMTB_setRng(EMTrainerKMeansBase& self, boost::python::object rng){ - if (!PyBoostMt19937_Check(rng.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.core.random.mt19937 object"); - PyBoostMt19937Object* o = reinterpret_cast<PyBoostMt19937Object*>(rng.ptr()); - self.setRng(boost::make_shared<boost::mt19937>(*o->rng)); -} -static void KMT_setRng(bob::learn::misc::KMeansTrainer& self, boost::python::object rng){ - if (!PyBoostMt19937_Check(rng.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.core.random.mt19937 object"); - PyBoostMt19937Object* o = reinterpret_cast<PyBoostMt19937Object*>(rng.ptr()); - self.setRng(boost::make_shared<boost::mt19937>(*o->rng)); -} - - -void bind_trainer_kmeans() -{ - class_<EMTrainerKMeansBase, boost::noncopyable>("EMTrainerKMeans", "The base python class for all EM-based trainers.", no_init) - .add_property("convergence_threshold", &EMTrainerKMeansBase::getConvergenceThreshold, &EMTrainerKMeansBase::setConvergenceThreshold, "Convergence threshold") - .add_property("max_iterations", &EMTrainerKMeansBase::getMaxIterations, &EMTrainerKMeansBase::setMaxIterations, "Max iterations") - .add_property("compute_likelihood", &EMTrainerKMeansBase::getComputeLikelihood, &EMTrainerKMeansBase::setComputeLikelihood, "Tells whether we compute the average min (square Euclidean) distance or not.") - .add_property("rng", &KMTB_getRng, &KMTB_setRng, "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.") - .def(self == self) - .def(self != self) - .def("train", &py_train, (arg("self"), arg("machine"), arg("data")), "Train a machine using data") - .def("initialize", &py_initialize, (arg("machine"), arg("data")), "This method is called before the EM algorithm") - .def("e_step", &py_eStep, (arg("self"), arg("machine"), arg("data")), - "Update the hidden variable distribution (or the sufficient statistics) given the Machine parameters. " - "Also, calculate the average output of the Machine given these parameters.\n" - "Return the average output of the Machine across the dataset. " - "The EM algorithm will terminate once the change in average_output " - "is less than the convergence_threshold.") - .def("m_step", &py_mStep, (arg("self"), arg("machine"), arg("data")), "Update the Machine parameters given the hidden variable distribution (or the sufficient statistics)") - .def("compute_likelihood", &EMTrainerKMeansBase::computeLikelihood, (arg("self"), arg("machine")), "Returns the average min (square Euclidean) distance") - .def("finalize", &py_finalize, (arg("self"), arg("machine"), arg("data")), "This method is called after the EM algorithm") - ; - - // Starts binding the KMeansTrainer - class_<bob::learn::misc::KMeansTrainer, boost::shared_ptr<bob::learn::misc::KMeansTrainer>, boost::noncopyable, bases<EMTrainerKMeansBase> > KMT("KMeansTrainer", - "Trains a KMeans machine.\n" - "This class implements the expectation-maximization algorithm for a k-means machine.\n" - "See Section 9.1 of Bishop, \"Pattern recognition and machine learning\", 2006\n" - "It uses a random initialization of the means followed by the expectation-maximization algorithm", - no_init - ); - - // Binds methods that does not have nested enum values as default parameters - KMT.def(self == self) - .def(self != self) - .add_property("initialization_method", &bob::learn::misc::KMeansTrainer::getInitializationMethod, &bob::learn::misc::KMeansTrainer::setInitializationMethod, "The initialization method to generate the initial means.") - .add_property("rng", &KMT_getRng, &KMT_setRng, "The Mersenne Twister mt19937 random generator used for the initialization of the means.") - .add_property("average_min_distance", &bob::learn::misc::KMeansTrainer::getAverageMinDistance, &bob::learn::misc::KMeansTrainer::setAverageMinDistance, "Average min (square Euclidean) distance. Useful to parallelize the E-step.") - .add_property("zeroeth_order_statistics", make_function(&bob::learn::misc::KMeansTrainer::getZeroethOrderStats, return_value_policy<copy_const_reference>()), &py_setZeroethOrderStats, "The zeroeth order statistics. Useful to parallelize the E-step.") - .add_property("first_order_statistics", make_function(&bob::learn::misc::KMeansTrainer::getFirstOrderStats, return_value_policy<copy_const_reference>()), &py_setFirstOrderStats, "The first order statistics. Useful to parallelize the E-step.") - ; - - // Sets the scope to the one of the KMeansTrainer - scope s(KMT); - - // Adds enum in the previously defined current scope - enum_<bob::learn::misc::KMeansTrainer::InitializationMethod>("initialization_method_type") - .value("RANDOM", bob::learn::misc::KMeansTrainer::RANDOM) - .value("RANDOM_NO_DUPLICATE", bob::learn::misc::KMeansTrainer::RANDOM_NO_DUPLICATE) -#if BOOST_VERSION >= 104700 - .value("KMEANS_PLUS_PLUS", bob::learn::misc::KMeansTrainer::KMEANS_PLUS_PLUS) -#endif - .export_values() - ; - - // Binds methods that has nested enum values as default parameters - KMT.def(init<optional<double,int,bool,bob::learn::misc::KMeansTrainer::InitializationMethod> >((arg("self"), arg("convergence_threshold")=0.001, arg("max_iterations")=10, arg("compute_likelihood")=true, arg("initialization_method")=bob::learn::misc::KMeansTrainer::RANDOM))); -} diff --git a/bob/learn/misc/old/linearscoring.cc b/bob/learn/misc/old/linearscoring.cc deleted file mode 100644 index b614879..0000000 --- a/bob/learn/misc/old/linearscoring.cc +++ /dev/null @@ -1,146 +0,0 @@ -/** - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @date Wed Jul 13 16:00:04 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" - -#include <vector> -#include <bob.learn.misc/LinearScoring.h> -#include <boost/python/stl_iterator.hpp> - -using namespace boost::python; - -static void convertGMMMeanList(object models, std::vector<blitz::Array<double,1> >& models_c) { - stl_input_iterator<bob::python::const_ndarray> dbegin(models), dend; - std::vector<bob::python::const_ndarray> vmodels(dbegin, dend); - - for(std::vector<bob::python::const_ndarray>::iterator it=vmodels.begin(); - it!=vmodels.end(); ++it) - models_c.push_back(it->bz<double,1>()); -} - -static void convertGMMStatsList(object test_stats, std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> >& test_stats_c) { - stl_input_iterator<boost::shared_ptr<bob::learn::misc::GMMStats> > dbegin(test_stats), dend; - test_stats_c.assign(dbegin, dend); -} - -static void convertChannelOffsetList(object test_channelOffset, std::vector<blitz::Array<double,1> >& test_channelOffset_c) { - stl_input_iterator<bob::python::const_ndarray> dbegin(test_channelOffset), dend; - std::vector<bob::python::const_ndarray> vtest_channelOffset(dbegin, dend); - - for(std::vector<bob::python::const_ndarray>::iterator it=vtest_channelOffset.begin(); - it!=vtest_channelOffset.end(); ++it) - test_channelOffset_c.push_back(it->bz<double,1>()); -} - -static void convertGMMMachineList(object models, std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> >& models_c) { - stl_input_iterator<boost::shared_ptr<bob::learn::misc::GMMMachine> > dbegin(models), dend; - models_c.assign(dbegin, dend); -} - -static object linearScoring1(object models, - bob::python::const_ndarray ubm_mean, bob::python::const_ndarray ubm_variance, - object test_stats, object test_channelOffset = list(), // Empty list - bool frame_length_normalisation = false) -{ - blitz::Array<double,1> ubm_mean_ = ubm_mean.bz<double,1>(); - blitz::Array<double,1> ubm_variance_ = ubm_variance.bz<double,1>(); - - std::vector<blitz::Array<double,1> > models_c; - convertGMMMeanList(models, models_c); - - std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> > test_stats_c; - convertGMMStatsList(test_stats, test_stats_c); - - bob::python::ndarray ret(bob::io::base::array::t_float64, models_c.size(), test_stats_c.size()); - blitz::Array<double,2> ret_ = ret.bz<double,2>(); - if (test_channelOffset.ptr() == Py_None || len(test_channelOffset) == 0) { //list is empty - bob::learn::misc::linearScoring(models_c, ubm_mean_, ubm_variance_, test_stats_c, frame_length_normalisation, ret_); - } - else { - std::vector<blitz::Array<double,1> > test_channelOffset_c; - convertChannelOffsetList(test_channelOffset, test_channelOffset_c); - bob::learn::misc::linearScoring(models_c, ubm_mean_, ubm_variance_, test_stats_c, test_channelOffset_c, frame_length_normalisation, ret_); - } - - return ret.self(); -} - -static object linearScoring2(object models, - bob::learn::misc::GMMMachine& ubm, - object test_stats, object test_channelOffset = list(), // Empty list - bool frame_length_normalisation = false) -{ - std::vector<boost::shared_ptr<const bob::learn::misc::GMMMachine> > models_c; - convertGMMMachineList(models, models_c); - - std::vector<boost::shared_ptr<const bob::learn::misc::GMMStats> > test_stats_c; - convertGMMStatsList(test_stats, test_stats_c); - - bob::python::ndarray ret(bob::io::base::array::t_float64, models_c.size(), test_stats_c.size()); - blitz::Array<double,2> ret_ = ret.bz<double,2>(); - if (test_channelOffset.ptr() == Py_None || len(test_channelOffset) == 0) { //list is empty - bob::learn::misc::linearScoring(models_c, ubm, test_stats_c, frame_length_normalisation, ret_); - } - else { - std::vector<blitz::Array<double,1> > test_channelOffset_c; - convertChannelOffsetList(test_channelOffset, test_channelOffset_c); - bob::learn::misc::linearScoring(models_c, ubm, test_stats_c, test_channelOffset_c, frame_length_normalisation, ret_); - } - - return ret.self(); -} - -static double linearScoring3(bob::python::const_ndarray model, - bob::python::const_ndarray ubm_mean, bob::python::const_ndarray ubm_var, - const bob::learn::misc::GMMStats& test_stats, bob::python::const_ndarray test_channelOffset, - const bool frame_length_normalisation = false) -{ - return bob::learn::misc::linearScoring(model.bz<double,1>(), ubm_mean.bz<double,1>(), - ubm_var.bz<double,1>(), test_stats, test_channelOffset.bz<double,1>(), frame_length_normalisation); -} - -BOOST_PYTHON_FUNCTION_OVERLOADS(linearScoring1_overloads, linearScoring1, 4, 6) -BOOST_PYTHON_FUNCTION_OVERLOADS(linearScoring2_overloads, linearScoring2, 3, 5) -BOOST_PYTHON_FUNCTION_OVERLOADS(linearScoring3_overloads, linearScoring3, 5, 6) - -void bind_machine_linear_scoring() { - def("linear_scoring", linearScoring1, linearScoring1_overloads(args("models", "ubm_mean", "ubm_variance", "test_stats", "test_channelOffset", "frame_length_normalisation"), - "Compute a matrix of scores using linear scoring.\n" - "Return a 2D matrix of scores, scores[m, s] is the score for model m against statistics s\n" - "\n" - "Warning Each GMM must have the same size.\n" - "\n" - "models -- list of mean supervectors for the client models\n" - "ubm_mean -- mean supervector for the world model\n" - "ubm_variance -- variance supervector for the world model\n" - "test_stats -- list of accumulate statistics for each test trial\n" - "test_channelOffset -- \n" - "frame_length_normlisation -- perform a normalisation by the number of feature vectors\n" - )); - def("linear_scoring", linearScoring2, linearScoring2_overloads(args("models", "ubm", "test_stats", "test_channel_offset", "frame_length_normalisation"), - "Compute a matrix of scores using linear scoring.\n" - "Return a 2D matrix of scores, scores[m, s] is the score for model m against statistics s\n" - "\n" - "Warning Each GMM must have the same size.\n" - "\n" - "models -- list of client models\n" - "ubm -- world model\n" - "test_stats -- list of accumulate statistics for each test trial\n" - "test_channel_offset -- \n" - "frame_length_normlisation -- perform a normalisation by the number of feature vectors\n" - )); - def("linear_scoring", linearScoring3, linearScoring3_overloads(args("model", "ubm_mean", "ubm_variance", "test_stats", "test_channelOffset", "frame_length_normalisation"), - "Compute a score using linear scoring.\n" - "\n" - "model -- mean supervectors for the client model\n" - "ubm_mean -- mean supervector for the world model\n" - "ubm_variance -- variance supervector for the world model\n" - "test_stats -- accumulate statistics for each test trial\n" - "test_channelOffset -- \n" - "frame_length_normlisation -- perform a normalisation by the number of feature vectors\n" - )); -} diff --git a/bob/learn/misc/old/machine.cc b/bob/learn/misc/old/machine.cc deleted file mode 100644 index 31deb42..0000000 --- a/bob/learn/misc/old/machine.cc +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Tue Jul 26 15:11:33 2011 +0200 - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" -#include <bob.learn.misc/Machine.h> - -using namespace boost::python; - -static double forward(const bob::learn::misc::Machine<blitz::Array<double,1>, double>& m, - bob::python::const_ndarray input) { - double output; - m.forward(input.bz<double,1>(), output); - return output; -} - -static double forward_(const bob::learn::misc::Machine<blitz::Array<double,1>, double>& m, - bob::python::const_ndarray input) { - double output; - m.forward_(input.bz<double,1>(), output); - return output; -} - -void bind_machine_base() -{ - class_<bob::learn::misc::Machine<blitz::Array<double,1>, double>, boost::noncopyable>("MachineDoubleBase", - "Root class for all Machine<blitz::Array<double,1>, double>", no_init) - .def("__call__", &forward_, (arg("self"), arg("input")), "Executes the machine on the given 1D numpy array of float64, and returns the output. NO CHECK is performed.") - .def("forward", &forward, (arg("self"), arg("input")), "Executes the machine on the given 1D numpy array of float64, and returns the output.") - .def("forward_", &forward_, (arg("self"), arg("input")), "Executes the machine on the given 1D numpy array of float64, and returns the output. NO CHECK is performed.") - ; -} diff --git a/bob/learn/misc/old/main.cc b/bob/learn/misc/old/main.cc deleted file mode 100644 index f73f4fe..0000000 --- a/bob/learn/misc/old/main.cc +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @author André Anjos <andre.anjos@idiap.ch> - * @date Tue Jan 18 17:07:26 2011 +0100 - * - * @brief Combines all modules to make up the complete bindings - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#ifdef NO_IMPORT_ARRAY -#undef NO_IMPORT_ARRAY -#endif - -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> -#include <bob.io.base/api.h> -#include <bob.core/random_api.h> - -#include "ndarray.h" - -/** extra bindings required for compatibility **/ -void bind_core_tinyvector(); -void bind_core_ndarray_numpy(); -void bind_core_bz_numpy(); - -/** machine bindings **/ -void bind_machine_base(); -void bind_machine_gaussian(); -void bind_machine_gmm(); -void bind_machine_kmeans(); -void bind_machine_linear_scoring(); -void bind_machine_ztnorm(); -void bind_machine_jfa(); -void bind_machine_ivector(); -void bind_machine_plda(); - -/** trainer bindings **/ -void bind_trainer_gmm(); -void bind_trainer_kmeans(); -void bind_trainer_jfa(); -void bind_trainer_ivector(); -void bind_trainer_plda(); -void bind_trainer_empca(); - -BOOST_PYTHON_MODULE(_old_library) { - - if (import_bob_blitz() < 0) { - PyErr_Print(); - PyErr_Format(PyExc_ImportError, "cannot import `bob.blitz'"); - return; - } - - if (import_bob_core_random() < 0) { - PyErr_Print(); - PyErr_Format(PyExc_ImportError, "cannot import `bob.core.random'"); - return; - } - - if (import_bob_io_base() < 0) { - PyErr_Print(); - PyErr_Format(PyExc_ImportError, "cannot import `bob.io.base'"); - return; - } - - boost::python::docstring_options docopt(true, true, false); - - bob::python::setup_python("miscelaneous machines and trainers not yet ported into the new framework"); - - /** extra bindings required for compatibility **/ - bind_core_tinyvector(); - bind_core_ndarray_numpy(); - bind_core_bz_numpy(); - - /** machine bindings **/ - bind_machine_base(); - bind_machine_gaussian(); - bind_machine_gmm(); - bind_machine_kmeans(); - bind_machine_linear_scoring(); - bind_machine_ztnorm(); - bind_machine_jfa(); - bind_machine_ivector(); - bind_machine_plda(); - - /** trainer bindings **/ - bind_trainer_gmm(); - bind_trainer_kmeans(); - bind_trainer_jfa(); - bind_trainer_ivector(); - bind_trainer_plda(); - bind_trainer_empca(); - -} diff --git a/bob/learn/misc/old/ndarray.cc b/bob/learn/misc/old/ndarray.cc deleted file mode 100644 index d5f728f..0000000 --- a/bob/learn/misc/old/ndarray.cc +++ /dev/null @@ -1,1015 +0,0 @@ -/** - * @author André Anjos <andre.anjos@idiap.ch> - * @date Tue Jan 18 17:07:26 2011 +0100 - * - * @brief Implementation of the ndarray class - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <boost/python/numeric.hpp> -#include <boost/format.hpp> -#include <stdexcept> -#include <dlfcn.h> - -//#ifdef NO_IMPORT_ARRAY -//#undef NO_IMPORT_ARRAY -//#endif -#include "ndarray.h" - -#define TP_ARRAY(x) ((PyArrayObject*)x.ptr()) -#define TP_OBJECT(x) (x.ptr()) - -#define NUMPY17_API 0x00000007 -#define NUMPY16_API 0x00000006 -#define NUMPY14_API 0x00000004 - -#include <bob.core/logging.h> - -#if PY_VERSION_HEX >= 0x03000000 -static void* wrap_import_array() { -// import_array(); - return 0; -} -#else -static void wrap_import_array() { -// import_array(); - return; -} -#endif - -void bob::python::setup_python(const char* module_docstring) { - - // Documentation options - if (module_docstring) boost::python::scope().attr("__doc__") = module_docstring; - - // Required for logging C++ <-> Python interaction - if (!PyEval_ThreadsInitialized()) PyEval_InitThreads(); - - // Gets the current dlopenflags and save it - PyThreadState* tstate = PyThreadState_Get(); - int old_value = tstate->interp->dlopenflags; - - // Unsets the RTLD_GLOBAL flag - tstate->interp->dlopenflags = old_value & (~RTLD_GLOBAL); - - // Loads numpy with the RTLD_GLOBAL flag unset - wrap_import_array(); - - // Resets the RTLD_GLOBAL flag - tstate->interp->dlopenflags = old_value; - - //Sets the boost::python::numeric::array interface to use numpy.ndarray - //as basis. This is not strictly required, but good to set as a baseline. - boost::python::numeric::array::set_module_and_type("numpy", "ndarray"); - - // Make sure we are not running against the wrong version of NumPy - if (NPY_VERSION != PyArray_GetNDArrayCVersion()) { - PYTHON_ERROR(ImportError, "module compiled against ABI version 0x%08x but this version of numpy is 0x%08x - make sure you compile and execute against the same or compatible versions", (int) NPY_VERSION, (int) PyArray_GetNDArrayCVersion()); - } - -#if NPY_FEATURE_VERSION >= NUMPY14_API /* NumPy C-API version >= 1.4 */ - if (NPY_FEATURE_VERSION > PyArray_GetNDArrayCFeatureVersion()) { - PYTHON_ERROR(ImportError, "module compiled against API version 0x%08x but this version of numpy is 0x%08x - make sure you compile and execute against the same or compatible versions", (int) NPY_FEATURE_VERSION, (int) PyArray_GetNDArrayCFeatureVersion()); - } -#endif - -} - -/*************************************************************************** - * Dtype (PyArray_Descr) manipulations * - ***************************************************************************/ - -int bob::python::type_to_num(bob::io::base::array::ElementType type) { - - switch(type) { - case bob::io::base::array::t_bool: - return NPY_BOOL; - case bob::io::base::array::t_int8: - return NPY_INT8; - case bob::io::base::array::t_int16: - return NPY_INT16; - case bob::io::base::array::t_int32: - return NPY_INT32; - case bob::io::base::array::t_int64: - return NPY_INT64; - case bob::io::base::array::t_uint8: - return NPY_UINT8; - case bob::io::base::array::t_uint16: - return NPY_UINT16; - case bob::io::base::array::t_uint32: - return NPY_UINT32; - case bob::io::base::array::t_uint64: - return NPY_UINT64; - case bob::io::base::array::t_float32: - return NPY_FLOAT32; - case bob::io::base::array::t_float64: - return NPY_FLOAT64; -#ifdef NPY_FLOAT128 - case bob::io::base::array::t_float128: - return NPY_FLOAT128; -#endif - case bob::io::base::array::t_complex64: - return NPY_COMPLEX64; - case bob::io::base::array::t_complex128: - return NPY_COMPLEX128; -#ifdef NPY_COMPLEX256 - case bob::io::base::array::t_complex256: - return NPY_COMPLEX256; -#endif - default: - PYTHON_ERROR(TypeError, "unsupported C++ element type (%s)", bob::io::base::array::stringize(type)); - } - -} - -static bob::io::base::array::ElementType signed_integer_type(int bits) { - switch(bits) { - case 8: - return bob::io::base::array::t_int8; - case 16: - return bob::io::base::array::t_int16; - case 32: - return bob::io::base::array::t_int32; - case 64: - return bob::io::base::array::t_int64; - default: - PYTHON_ERROR(TypeError, "unsupported signed integer element type with %d bits", bits); - } -} - -static bob::io::base::array::ElementType unsigned_integer_type(int bits) { - switch(bits) { - case 8: - return bob::io::base::array::t_uint8; - case 16: - return bob::io::base::array::t_uint16; - case 32: - return bob::io::base::array::t_uint32; - case 64: - return bob::io::base::array::t_uint64; - default: - PYTHON_ERROR(TypeError, "unsupported unsigned integer element type with %d bits", bits); - } -} - -bob::io::base::array::ElementType bob::python::num_to_type(int num) { - switch(num) { - case NPY_BOOL: - return bob::io::base::array::t_bool; - - //signed integers - case NPY_BYTE: - return signed_integer_type(NPY_BITSOF_CHAR); - case NPY_SHORT: - return signed_integer_type(NPY_BITSOF_SHORT); - case NPY_INT: - return signed_integer_type(NPY_BITSOF_INT); - case NPY_LONG: - return signed_integer_type(NPY_BITSOF_LONG); - case NPY_LONGLONG: - return signed_integer_type(NPY_BITSOF_LONGLONG); - - //unsigned integers - case NPY_UBYTE: - return unsigned_integer_type(NPY_BITSOF_CHAR); - case NPY_USHORT: - return unsigned_integer_type(NPY_BITSOF_SHORT); - case NPY_UINT: - return unsigned_integer_type(NPY_BITSOF_INT); - case NPY_ULONG: - return unsigned_integer_type(NPY_BITSOF_LONG); - case NPY_ULONGLONG: - return unsigned_integer_type(NPY_BITSOF_LONGLONG); - - //floats - case NPY_FLOAT32: - return bob::io::base::array::t_float32; - case NPY_FLOAT64: - return bob::io::base::array::t_float64; -#ifdef NPY_FLOAT128 - case NPY_FLOAT128: - return bob::io::base::array::t_float128; -#endif - - //complex - case NPY_COMPLEX64: - return bob::io::base::array::t_complex64; - case NPY_COMPLEX128: - return bob::io::base::array::t_complex128; -#ifdef NPY_COMPLEX256 - case NPY_COMPLEX256: - return bob::io::base::array::t_complex256; -#endif - - default: - PYTHON_ERROR(TypeError, "unsupported NumPy element type (%d)", num); - } - -} - -template <> int bob::python::ctype_to_num<bool>(void) -{ return NPY_BOOL; } - -//! @cond SKIP_DOXYGEN_WARNINGS -template <> int bob::python::ctype_to_num<int8_t>(void) -{ return NPY_INT8; } -template <> int bob::python::ctype_to_num<uint8_t>(void) -{ return NPY_UINT8; } -template <> int bob::python::ctype_to_num<int16_t>(void) -{ return NPY_INT16; } -template <> int bob::python::ctype_to_num<uint16_t>(void) -{ return NPY_UINT16; } -template <> int bob::python::ctype_to_num<int32_t>(void) -{ return NPY_INT32; } -template <> int bob::python::ctype_to_num<uint32_t>(void) -{ return NPY_UINT32; } -template <> int bob::python::ctype_to_num<int64_t>(void) -{ return NPY_INT64; } -template <> int bob::python::ctype_to_num<uint64_t>(void) -{ return NPY_UINT64; } -template <> int bob::python::ctype_to_num<float>(void) -{ return NPY_FLOAT32; } -template <> int bob::python::ctype_to_num<double>(void) -{ return NPY_FLOAT64; } -#ifdef NPY_FLOAT128 -template <> int bob::python::ctype_to_num<long double>(void) -{ return NPY_FLOAT128; } -#endif -template <> int bob::python::ctype_to_num<std::complex<float> >(void) -{ return NPY_COMPLEX64; } -template <> int bob::python::ctype_to_num<std::complex<double> >(void) -{ return NPY_COMPLEX128; } -#ifdef NPY_COMPLEX256 -template <> int bob::python::ctype_to_num<std::complex<long double> >(void) -{ return NPY_COMPLEX256; } -#endif -//! @endcond SKIP_DOXYGEN_WARNINGS - -bob::io::base::array::ElementType bob::python::array_to_type(const boost::python::numeric::array& a) { - return bob::python::num_to_type(PyArray_DESCR(TP_ARRAY(a))->type_num); -} - -size_t bob::python::array_to_ndim(const boost::python::numeric::array& a) { - return PyArray_NDIM(TP_ARRAY(a)); -} - -#define TP_DESCR(x) ((PyArray_Descr*)x.ptr()) - -bob::python::dtype::dtype (boost::python::object dtype_like) { - PyArray_Descr* tmp = 0; - if (!PyArray_DescrConverter2(dtype_like.ptr(), &tmp)) { - std::string dtype_str = boost::python::extract<std::string>(boost::python::str(dtype_like)); - PYTHON_ERROR(TypeError, "cannot convert input dtype-like object (%s) to proper dtype", dtype_str.c_str()); - } - boost::python::handle<> hdl(boost::python::borrowed((PyObject*)tmp)); - m_self = boost::python::object(hdl); -} - -bob::python::dtype::dtype (PyArray_Descr* descr) { - if (descr) { - boost::python::handle<> hdl((PyObject*)descr); //< raises if NULL - m_self = boost::python::object(hdl); - } -} - -bob::python::dtype::dtype(int typenum) { - PyArray_Descr* tmp = PyArray_DescrFromType(typenum); - boost::python::handle<> hdl(boost::python::borrowed((PyObject*)tmp)); - m_self = boost::python::object(hdl); -} - -bob::python::dtype::dtype(bob::io::base::array::ElementType eltype) { - if (eltype != bob::io::base::array::t_unknown) { - PyArray_Descr* tmp = PyArray_DescrFromType(bob::python::type_to_num(eltype)); - boost::python::handle<> hdl(boost::python::borrowed((PyObject*)tmp)); - m_self = boost::python::object(hdl); - } -} - -bob::python::dtype::dtype(const bob::python::dtype& other): m_self(other.m_self) -{ -} - -bob::python::dtype::dtype() { -} - -bob::python::dtype::~dtype() { } - -bob::python::dtype& bob::python::dtype::operator= (const bob::python::dtype& other) { - m_self = other.m_self; - return *this; -} - -bool bob::python::dtype::has_native_byteorder() const { - return TPY_ISNONE(m_self)? false : (PyArray_EquivByteorders(TP_DESCR(m_self)->byteorder, NPY_NATIVE) || TP_DESCR(m_self)->elsize == 1); -} - -bool bob::python::dtype::has_type(bob::io::base::array::ElementType _eltype) const { - return eltype() == _eltype; -} - -bob::io::base::array::ElementType bob::python::dtype::eltype() const { - return TPY_ISNONE(m_self)? bob::io::base::array::t_unknown : - bob::python::num_to_type(TP_DESCR(m_self)->type_num); -} - -int bob::python::dtype::type_num() const { - return TPY_ISNONE(m_self)? -1 : TP_DESCR(m_self)->type_num; -} - -boost::python::str bob::python::dtype::str() const { - return boost::python::str(m_self); -} - -std::string bob::python::dtype::cxx_str() const { - return boost::python::extract<std::string>(this->str()); -} - -PyArray_Descr* bob::python::dtype::descr() { - return (PyArray_Descr*)m_self.ptr(); -} - -/**************************************************************************** - * Free methods * - ****************************************************************************/ - -void bob::python::typeinfo_ndarray_ (const boost::python::object& o, bob::io::base::array::typeinfo& i) { - PyArrayObject* npy = TP_ARRAY(o); - npy_intp strides[NPY_MAXDIMS]; - for (int k=0; k<PyArray_NDIM(npy); ++k) strides[k] = PyArray_STRIDES(npy)[k]/PyArray_DESCR(npy)->elsize; - i.set<npy_intp>(bob::python::num_to_type(PyArray_DESCR(npy)->type_num), PyArray_NDIM(npy), PyArray_DIMS(npy), strides); -} - -void bob::python::typeinfo_ndarray (const boost::python::object& o, bob::io::base::array::typeinfo& i) { - if (!PyArray_Check(o.ptr())) { - throw std::runtime_error("invalid input: cannot extract typeinfo object from anything else than ndarray"); - } - bob::python::typeinfo_ndarray_(o, i); -} - -#if NPY_FEATURE_VERSION < NUMPY16_API /* NumPy C-API version >= 1.6 */ -/** - * This method emulates the behavior of PyArray_GetArrayParamsFromObject from - * NumPy >= 1.6 and is used when compiling and liking against older versions of - * NumPy. - */ -static int _GetArrayParamsFromObject(PyObject* op, - PyArray_Descr* requested_dtype, - npy_bool writeable, - PyArray_Descr** out_dtype, - int* out_ndim, - npy_intp* out_dims, - PyArrayObject** out_arr, - PyObject*) { - - if (PyArray_Check(op)) { //it is already an array, easy - - PyArrayObject* arr = reinterpret_cast<PyArrayObject*>(op); - - if (requested_dtype && !PyArray_EquivTypes(PyArray_DESCR(arr), requested_dtype)) { - -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - if (PyArray_CanCastTypeTo(PyArray_DESCR(arr), requested_dtype, NPY_SAFE_CASTING)) -#else - if (PyArray_CanCastTo(PyArray_DESCR(arr), requested_dtype)) -#endif - { - (*out_arr) = 0; - (*out_dtype) = PyArray_DESCR(arr); - (*out_ndim) = PyArray_NDIM(arr); - for (int i=0; i<PyArray_NDIM(arr); ++i) - out_dims[i] = PyArray_DIM(arr,i); - // we need to cast the array, write-ability will not hold... - return writeable? 1 : 0; - } - - else { - return 1; - } - - } - - //if you get to this point, the types are equivalent or there was no type - (*out_arr) = (PyArrayObject*)PyArray_FromArray(arr, 0, 0); - (*out_dtype) = 0; - (*out_ndim) = 0; - return writeable? (!PyArray_ISWRITEABLE(arr)) : 0; - - } - - else { //it is not an array -- try a brute-force conversion - - TDEBUG1("[non-optimal] using NumPy version < 1.6 requires we convert input data for convertibility check - compile against NumPy >= 1.6 to improve performance"); - boost::python::handle<> hdl(boost::python::allow_null(PyArray_FromAny(op, requested_dtype, 0, 0, 0, 0))); - boost::python::object array(hdl); - - if (TPY_ISNONE(array)) return 1; - - //if the conversion worked, you can now fill in the parameters - (*out_arr) = 0; - (*out_dtype) = PyArray_DESCR(TP_ARRAY(array)); - (*out_ndim) = PyArray_NDIM(TP_ARRAY(array)); - for (int i=0; i<PyArray_NDIM(TP_ARRAY(array)); ++i) - out_dims[i] = PyArray_DIM(TP_ARRAY(array),i); - - //in this mode, the resulting object will never be write-able. - return writeable? 1 : 0; - - } - - return 0; //turn-off c compiler warnings... - -} -#endif - -bob::python::convert_t bob::python::convertible(boost::python::object array_like, bob::io::base::array::typeinfo& info, - bool writeable, bool behaved) { - - int ndim = 0; - npy_intp dims[NPY_MAXDIMS]; - PyArrayObject* arr = 0; - PyArray_Descr* dtype = 0; - - int not_convertible = -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - PyArray_GetArrayParamsFromObject -#else - _GetArrayParamsFromObject -#endif - (array_like.ptr(), //input object pointer - 0, //requested dtype (if need to enforce) - writeable, //writeable? - &dtype, //dtype assessment - borrowed - &ndim, //assessed number of dimensions - dims, //assessed shape - &arr, //if obj_ptr is ndarray, return it here - 0) //context? - ; - - if (not_convertible) return bob::python::IMPOSSIBLE; - - convert_t retval = bob::python::BYREFERENCE; - - if (arr) { //the passed object is an array - - //checks behavior. - if (behaved && !PyArray_ISCARRAY_RO(arr)) retval = bob::python::WITHARRAYCOPY; - - info.set<npy_intp>(bob::python::num_to_type(PyArray_DESCR(arr)->type_num), - PyArray_NDIM(arr), PyArray_DIMS(arr)); - - Py_XDECREF(arr); - } - - else { //the passed object is not an array - info.set<npy_intp>(bob::python::num_to_type(dtype->type_num), ndim, dims); - retval = bob::python::WITHCOPY; - } - - return retval; -} - -bob::python::convert_t bob::python::convertible_to (boost::python::object array_like, - const bob::io::base::array::typeinfo& info, bool writeable, bool behaved) { - - bob::python::dtype req_dtype(info.dtype); - - int ndim = 0; - npy_intp dims[NPY_MAXDIMS]; - PyArrayObject* arr = 0; - PyArray_Descr* dtype = 0; - - int not_convertible = -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - PyArray_GetArrayParamsFromObject -#else - _GetArrayParamsFromObject -#endif - (array_like.ptr(), //input object pointer - req_dtype.descr(), //requested dtype (if need to enforce) - writeable, //writeable? - &dtype, //dtype assessment - &ndim, //assessed number of dimensions - dims, //assessed shape - &arr, //if obj_ptr is ndarray, return it here - 0) //context? - ; - - if (not_convertible) return bob::python::IMPOSSIBLE; - - convert_t retval = bob::python::BYREFERENCE; - - if (arr) { //the passed object is an array -- check compatibility - - if (info.nd) { //check number of dimensions and shape, if needs to - if (PyArray_NDIM(arr) != (int)info.nd) { - Py_XDECREF(arr); - return bob::python::IMPOSSIBLE; - } - if (info.has_valid_shape()) { - for (size_t i=0; i<info.nd; ++i) - if ((int)info.shape[i] != PyArray_DIM(arr,i)) { - Py_XDECREF(arr); - return bob::python::IMPOSSIBLE; - } - } - } - - //checks dtype - if (PyArray_DESCR(arr)->type_num != req_dtype.descr()->type_num) { - //well... we would need to cast, but maybe possible - check with NumPy -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - if (PyArray_CanCastTypeTo(PyArray_DESCR(arr), req_dtype.descr(), NPY_SAFE_CASTING)) { -#else - if (PyArray_CanCastTo(PyArray_DESCR(arr), req_dtype.descr())) { -#endif - retval = bob::python::WITHARRAYCOPY; - } - else { - //we cannot cast from current to desired type, sorry... - Py_XDECREF(arr); - return bob::python::IMPOSSIBLE; - } - } - - //checks behavior. - if (behaved) { - if (!PyArray_ISCARRAY_RO(arr)) retval = bob::python::WITHARRAYCOPY; - } - - Py_XDECREF(arr); - - } - - else { //the passed object is not an array - - retval = bob::python::WITHCOPY; - - if (info.nd) { //check number of dimensions and shape - if (ndim != (int)info.nd) return bob::python::IMPOSSIBLE; - for (size_t i=0; i<info.nd; ++i) - if (info.shape[i] && - (int)info.shape[i] != dims[i]) return bob::python::IMPOSSIBLE; - } - - //checks dtype - if (dtype->type_num != req_dtype.descr()->type_num) { - //well... we would need to cast, but maybe possible - check with NumPy - if ( -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - !PyArray_CanCastTypeTo(dtype, req_dtype.descr(), NPY_SAFE_CASTING) -#else - !PyArray_CanCastTo(dtype, req_dtype.descr()) -#endif - ) - { - return bob::python::IMPOSSIBLE; - } - - } - - } - - return retval; -} - -bob::python::convert_t bob::python::convertible_to(boost::python::object array_like, boost::python::object dtype_like, - bool writeable, bool behaved) { - - bob::python::dtype req_dtype(dtype_like); - - int ndim = 0; - npy_intp dims[NPY_MAXDIMS]; - PyArrayObject* arr = 0; - PyArray_Descr* dtype = 0; - - int not_convertible = -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - PyArray_GetArrayParamsFromObject -#else - _GetArrayParamsFromObject -#endif - (array_like.ptr(), //input object pointer - req_dtype.descr(), //requested dtype (if need to enforce) - writeable, //writeable? - &dtype, //dtype assessment - &ndim, //assessed number of dimensions - dims, //assessed shape - &arr, //if obj_ptr is ndarray, return it here - 0) //context? - ; - - if (not_convertible) return bob::python::IMPOSSIBLE; - - convert_t retval = bob::python::BYREFERENCE; - - if (arr) { //the passed object is an array -- check compatibility - - //checks dtype - if (PyArray_DESCR(arr)->type_num != req_dtype.descr()->type_num) { - //well... we would need to cast, but maybe possible - check with NumPy - - if ( -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - PyArray_CanCastTypeTo(PyArray_DESCR(arr), req_dtype.descr(), NPY_SAFE_CASTING) -#else - PyArray_CanCastTo(PyArray_DESCR(arr), req_dtype.descr()) -#endif - ) - { - retval = bob::python::WITHARRAYCOPY; - } - else { - //we cannot cast from current to desired type, sorry... - Py_XDECREF(arr); - return bob::python::IMPOSSIBLE; - } - } - - //checks behavior. - if (behaved) { - if (!PyArray_ISCARRAY_RO(arr)) retval = bob::python::WITHARRAYCOPY; - } - - Py_XDECREF(arr); - - } - - else { //the passed object is not an array - - retval = bob::python::WITHCOPY; - - //checks dtype - if (dtype->type_num != req_dtype.descr()->type_num) { - //well... we would need to cast, but maybe possible - check with NumPy - if ( -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - !PyArray_CanCastTypeTo(dtype, req_dtype.descr(), NPY_SAFE_CASTING) -#else - !PyArray_CanCastTo(dtype, req_dtype.descr()) -#endif - ) - { - return bob::python::IMPOSSIBLE; - } - - } - - } - - return retval; -} - -bob::python::convert_t bob::python::convertible_to(boost::python::object array_like, bool writeable, - bool behaved) { - - int ndim = 0; - npy_intp dims[NPY_MAXDIMS]; - PyArrayObject* arr = 0; - PyArray_Descr* dtype = 0; - - int not_convertible = -#if NPY_FEATURE_VERSION >= NUMPY16_API /* NumPy C-API version >= 1.6 */ - PyArray_GetArrayParamsFromObject -#else - _GetArrayParamsFromObject -#endif - (array_like.ptr(), //input object pointer - 0, //requested dtype (if need to enforce) - writeable, //writeable? - &dtype, //dtype assessment - &ndim, //assessed number of dimensions - dims, //assessed shape - &arr, //if obj_ptr is ndarray, return it here - 0) //context? - ; - - if (not_convertible) return bob::python::IMPOSSIBLE; - - convert_t retval = bob::python::BYREFERENCE; - - if (arr) { //the passed object is an array -- check compatibility - - //checks behavior. - if (behaved) { - if (!PyArray_ISCARRAY_RO(arr)) retval = bob::python::WITHARRAYCOPY; - } - - Py_XDECREF(arr); - - } - - else { //the passed object is not an array - - retval = bob::python::WITHCOPY; - - } - - return retval; -} - -/*************************************************************************** - * Ndarray (PyArrayObject) manipulations * - ***************************************************************************/ - -/** - * Returns either a reference or a copy of the given array_like object, - * depending on the following requirements for referral: - * - * 0. The pointed object is a numpy.ndarray - * 1. The array type description type_num matches - * 2. The array is C-style, contiguous and aligned - */ -static boost::python::object try_refer_ndarray (boost::python::object array_like, - boost::python::object dtype_like) { - - PyArrayObject* candidate = TP_ARRAY(array_like); - PyArray_Descr* req_dtype = 0; - PyArray_DescrConverter2(dtype_like.ptr(), &req_dtype); //new ref! - - bool can_refer = true; //< flags a copy of the data - - if (!PyArray_Check((PyObject*)candidate)) can_refer = false; - - if (can_refer && !PyArray_ISCARRAY_RO(candidate)) can_refer = false; - - if (can_refer) { - PyObject* tmp = PyArray_FromArray(candidate, 0, 0); - boost::python::handle<> hdl(tmp); //< raises if NULL - boost::python::object retval(hdl); - return retval; - } - - //copy - TDEBUG1("[non-optimal] copying array-like object - cannot refer"); - PyObject* _ptr = (PyObject*)candidate; -#if NPY_FEATURE_VERSION > NUMPY16_API /* NumPy C-API version > 1.6 */ - int flags = NPY_ARRAY_C_CONTIGUOUS|NPY_ARRAY_ENSURECOPY|NPY_ARRAY_ENSUREARRAY; -#else - int flags = NPY_C_CONTIGUOUS|NPY_ENSURECOPY|NPY_ENSUREARRAY; -#endif - PyObject* tmp = PyArray_FromAny(_ptr, req_dtype, 0, 0, flags, 0); - boost::python::handle<> hdl(tmp); //< raises if NULL - boost::python::object retval(hdl); - return retval; - -} - -static void derefer_ndarray (PyArrayObject* array) { - Py_XDECREF(array); -} - -static boost::shared_ptr<void> shared_from_ndarray (boost::python::object& o) { - boost::shared_ptr<PyArrayObject> cache(TP_ARRAY(o), - std::ptr_fun(derefer_ndarray)); - Py_XINCREF(TP_OBJECT(o)); ///< makes sure it outlives this scope! - return cache; //casts to b::shared_ptr<void> -} - -bob::python::py_array::py_array(boost::python::object o, boost::python::object _dtype): - m_is_numpy(true) -{ - if (TPY_ISNONE(o)) PYTHON_ERROR(TypeError, "You cannot pass 'None' as input parameter to C++-bound bob methods that expect NumPy ndarrays (or blitz::Array<T,N>'s). Double-check your input!"); - boost::python::object mine = try_refer_ndarray(o, _dtype); - - //captures data from a numeric::array - typeinfo_ndarray_(mine, m_type); - - //transforms the from boost::python ref counting to boost::shared_ptr<void> - m_data = shared_from_ndarray(mine); - - //set-up the C-style pointer to this data - m_ptr = static_cast<void*>(PyArray_DATA(TP_ARRAY(mine))); -} - -bob::python::py_array::py_array(const bob::io::base::array::interface& other) { - set(other); -} - -bob::python::py_array::py_array(boost::shared_ptr<bob::io::base::array::interface> other) { - set(other); -} - -bob::python::py_array::py_array(const bob::io::base::array::typeinfo& info) { - set(info); -} - -bob::python::py_array::~py_array() { -} - -/** - * Wrap a C-style pointer with a PyArrayObject - */ -static boost::python::object wrap_data (void* data, const bob::io::base::array::typeinfo& ti, - bool writeable=true) { - - npy_intp shape[NPY_MAXDIMS]; - npy_intp stride[NPY_MAXDIMS]; - for (size_t k=0; k<ti.nd; ++k) { - shape[k] = ti.shape[k]; - stride[k] = ti.item_size()*ti.stride[k]; - } - PyObject* tmp = PyArray_New(&PyArray_Type, ti.nd, - &shape[0], bob::python::type_to_num(ti.dtype), &stride[0], data, 0, -#if NPY_FEATURE_VERSION > NUMPY16_API /* NumPy C-API version > 1.6 */ - writeable? NPY_ARRAY_CARRAY : NPY_ARRAY_CARRAY_RO -#else - writeable? NPY_CARRAY : NPY_CARRAY_RO -#endif - ,0); - - boost::python::handle<> hdl(tmp); - boost::python::object retval(hdl); - return retval; -} - -/** - * Creates a new array from specifications - */ -static boost::python::object make_ndarray(int nd, npy_intp* dims, int type) { - PyObject* tmp = PyArray_SimpleNew(nd, dims, type); - boost::python::handle<> hdl(tmp); //< raises if NULL - boost::python::object retval(hdl); - return retval; -} - -/** - * New copy of the array from another array - */ -static boost::python::object copy_array (const boost::python::object& array) { - PyArrayObject* _p = TP_ARRAY(array); - boost::python::object retval = make_ndarray(PyArray_NDIM(_p), PyArray_DIMS(_p), PyArray_DESCR(_p)->type_num); - PyArray_CopyInto(TP_ARRAY(retval), TP_ARRAY(array)); - return retval; -} - -/** - * Copies a data pointer and type into a new numpy array. - */ -static boost::python::object copy_data (const void* data, const bob::io::base::array::typeinfo& ti) { - boost::python::object wrapped = wrap_data(const_cast<void*>(data), ti); - boost::python::object retval = copy_array (wrapped); - return retval; -} - -void bob::python::py_array::set(const bob::io::base::array::interface& other) { - TDEBUG1("[non-optimal] buffer copying operation being performed for " - << other.type().str()); - - //performs a copy of the data into a numpy array - boost::python::object mine = copy_data(other.ptr(), m_type); - - //captures data from a numeric::array - typeinfo_ndarray_(mine, m_type); - - //transforms the from boost::python ref counting to boost::shared_ptr<void> - m_data = shared_from_ndarray(mine); - - //set-up the C-style pointer to this data - m_ptr = static_cast<void*>(PyArray_DATA(TP_ARRAY(mine))); - - m_is_numpy = true; -} - -void bob::python::py_array::set(boost::shared_ptr<bob::io::base::array::interface> other) { - m_type = other->type(); - m_is_numpy = false; - m_ptr = other->ptr(); - m_data = other->owner(); -} - -/** - * Creates a new numpy array from a bob::io::typeinfo object. - */ -static boost::python::object new_from_type (const bob::io::base::array::typeinfo& ti) { - npy_intp shape[NPY_MAXDIMS]; - npy_intp stride[NPY_MAXDIMS]; - for (size_t k=0; k<ti.nd; ++k) { - shape[k] = ti.shape[k]; - stride[k] = ti.item_size()*ti.stride[k]; - } - PyObject* tmp = PyArray_New(&PyArray_Type, ti.nd, &shape[0], - bob::python::type_to_num(ti.dtype), &stride[0], 0, 0, 0, 0); - boost::python::handle<> hdl(tmp); //< raises if NULL - boost::python::object retval(hdl); - return retval; -} - -void bob::python::py_array::set (const bob::io::base::array::typeinfo& req) { - if (m_type.is_compatible(req)) return; ///< nothing to do! - - TDEBUG1("[non-optimal?] buffer re-size being performed from " << m_type.str() - << " to " << req.str()); - - boost::python::object mine = new_from_type(req); - - //captures data from a numeric::array - typeinfo_ndarray_(mine, m_type); - - //transforms the from boost::python ref counting to boost::shared_ptr<void> - m_data = shared_from_ndarray(mine); - - //set-up the C-style pointer to this data - m_ptr = static_cast<void*>(PyArray_DATA(TP_ARRAY(mine))); - - m_is_numpy = true; -} - -boost::python::object bob::python::py_array::copy(const boost::python::object& dtype) { - return copy_data(m_ptr, m_type); -} - -/** - * Gets a read-only reference to a certain data. This recipe was originally - * posted here: - * http://blog.enthought.com/python/numpy-arrays-with-pre-allocated-memory/ - * - * But a better allocation strategy (that actually works) is posted here: - * http://stackoverflow.com/questions/2924827/numpy-array-c-api - */ -// PyCapsule is only available on Python2.7 or Python3.1 and up -#if ((PY_VERSION_HEX < 0x02070000) \ - || ((PY_VERSION_HEX >= 0x03000000) \ - && (PY_VERSION_HEX < 0x03010000)) ) -static void DeleteSharedPointer (void* ptr) { - typedef boost::shared_ptr<const void> type; - delete static_cast<type*>(ptr); -} -#else -static void DeleteSharedPointer (PyObject* ptr) { - typedef boost::shared_ptr<const void> type; - delete static_cast<type*>(PyCapsule_GetPointer(ptr, NULL)); -} -#endif - -static boost::python::object make_readonly (const void* data, const bob::io::base::array::typeinfo& ti, - boost::shared_ptr<const void> owner) { - - boost::python::object retval = wrap_data(const_cast<void*>(data), ti, false); - - //creates the shared pointer deallocator - boost::shared_ptr<const void>* ptr = new boost::shared_ptr<const void>(owner); -#if ((PY_VERSION_HEX < 0x02070000) \ - || ((PY_VERSION_HEX >= 0x03000000) \ - && (PY_VERSION_HEX < 0x03010000)) ) - PyObject* py_sharedptr = PyCObject_FromVoidPtr(ptr, DeleteSharedPointer); -#else - PyObject* py_sharedptr = PyCapsule_New((void*)ptr, NULL, DeleteSharedPointer); -#endif - - if (!py_sharedptr) { - PYTHON_ERROR(RuntimeError, "could not allocate space for deallocation object in read-only array::interface wrapping"); - } - -# if NPY_FEATURE_VERSION >= NUMPY17_API /* NumPy C-API version >= 1.7 */ - PyArray_SetBaseObject(TP_ARRAY(retval), py_sharedptr); -# else - TP_ARRAY(retval)->base = py_sharedptr; -# endif - - return retval; -} - -boost::python::object bob::python::py_array::pyobject() { - if (m_is_numpy) { - boost::python::handle<> hdl(boost::python::borrowed(boost::static_pointer_cast<PyObject>(m_data).get())); - boost::python::object mine(hdl); - return mine; - } - - //if you really want, I can wrap it for you, but in this case I'll make it - //read-only and will associate the object deletion to my own data pointer. - return make_readonly(m_ptr, m_type, m_data); -} - -bool bob::python::py_array::is_writeable() const { - return (!m_is_numpy || PyArray_ISWRITEABLE(boost::static_pointer_cast<PyArrayObject>(m_data).get())); -} - -bob::python::ndarray::ndarray(boost::python::object array_like, boost::python::object dtype_like) - : px(new bob::python::py_array(array_like, dtype_like)) { -} - -bob::python::ndarray::ndarray(boost::python::object array_like) - : px(new bob::python::py_array(array_like, boost::python::object())) { - } - -bob::python::ndarray::ndarray(const bob::io::base::array::typeinfo& info) - : px(new bob::python::py_array(info)) { - } - -bob::python::ndarray::~ndarray() { } - -const bob::io::base::array::typeinfo& bob::python::ndarray::type() const { - return px->type(); -} - -boost::python::object bob::python::ndarray::self() { return px->pyobject(); } - -bob::python::const_ndarray::const_ndarray(boost::python::object array_like) - : bob::python::ndarray(array_like) { - } - -bob::python::const_ndarray::~const_ndarray() { } - diff --git a/bob/learn/misc/old/ndarray.h b/bob/learn/misc/old/ndarray.h deleted file mode 100644 index 4090a0f..0000000 --- a/bob/learn/misc/old/ndarray.h +++ /dev/null @@ -1,640 +0,0 @@ -/** - * @file bob/python/ndarray.h - * @date Tue Jan 18 17:07:26 2011 +0100 - * @author André Anjos <andre.anjos@idiap.ch> - * - * @brief A boost::python extension object that plays the role of a NumPy - * ndarray (PyArrayObject*) and bob::io::base::array::interface at the same time. - * - * Copyright (C) 2011-2013 Idiap Research Institute, Martigny, Switzerland - */ - -#ifndef BOB_PYTHON_NDARRAY_H -#define BOB_PYTHON_NDARRAY_H - -#include <boost/python.hpp> //this has to come before the next declaration! -#include <boost/format.hpp> - -// Define the numpy C-API we are compatible with -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include <numpy/arrayobject.h> - -#include "exception.h" -#include <bob.io.base/array.h> -#include <bob.core/cast.h> - -#include <blitz/array.h> -#include <stdint.h> - -/** - * The method object::is_none() was only introduced in boost v1.43. - */ -#if defined(BOOST_VERSION) -# undef BOOST_VERSION -# include <boost/version.hpp> -# if BOOST_VERSION >= 104300 -# define TPY_ISNONE(x) x.is_none() -# else -# define TPY_ISNONE(x) (x.ptr() == Py_None) -# endif -#endif - -/** - * A macro that is replaced by the proper format definition for size_t - */ -#ifdef __LP64__ -# define SIZE_T_FMT "%lu" -#else -# define SIZE_T_FMT "%u" -#endif - -namespace bob { namespace python { - - /** - * @brief Initializes numpy and boost bindings. Should be called once per - * module. - * - * Pass to it the module doc string and it will also update the module - * documentation string. - */ - void setup_python(const char* module_docstring); - - /** - * @brief A generic method to convert from ndarray type_num to bob's - * ElementType - */ - bob::io::base::array::ElementType num_to_type(int num); - - /** - * @brief A method to retrieve the type of element of an array - */ - bob::io::base::array::ElementType array_to_type(const boost::python::numeric::array& a); - - /** - * @brief Retrieves the number of dimensions in an array - */ - size_t array_to_ndim(const boost::python::numeric::array& a); - - /** - * @brief Converts from C/C++ type to ndarray type_num. - */ - template <typename T> int ctype_to_num(void) { - PYTHON_ERROR(TypeError, "unsupported C/C++ type (%s)", bob::io::base::array::stringize<T>()); - } - - // The C/C++ types we support should be declared here. - template <> int ctype_to_num<bool>(void); - template <> int ctype_to_num<signed char>(void); - template <> int ctype_to_num<unsigned char>(void); - template <> int ctype_to_num<short>(void); - template <> int ctype_to_num<unsigned short>(void); - template <> int ctype_to_num<int>(void); - template <> int ctype_to_num<unsigned int>(void); - template <> int ctype_to_num<long>(void); - template <> int ctype_to_num<unsigned long>(void); - template <> int ctype_to_num<long long>(void); - template <> int ctype_to_num<unsigned long long>(void); - template <> int ctype_to_num<float>(void); - template <> int ctype_to_num<double>(void); -#ifdef NPY_FLOAT128 - template <> int ctype_to_num<long double>(void); -#endif - template <> int ctype_to_num<std::complex<float> >(void); - template <> int ctype_to_num<std::complex<double> >(void); -#ifdef NPY_COMPLEX256 - template <> int ctype_to_num<std::complex<long double> >(void); -#endif - - /** - * @brief Converts from bob's Element type to ndarray type_num - */ - int type_to_num(bob::io::base::array::ElementType type); - - /** - * @brief Handles conversion checking possibilities - */ - typedef enum { - IMPOSSIBLE = 0, ///< not possible to get array from object - BYREFERENCE = 1, ///< possible, by only referencing the array - WITHARRAYCOPY = 2, ///< possible, object is an array, but has to copy - WITHCOPY = 3 ///< possible, object is not an array, has to copy - } convert_t; - - /** - * @brief Extracts the typeinfo object from a numeric::array (passed as - * boost::python::object). We check the input object to assure it is a valid - * ndarray. An exception may be thrown otherwise. - */ - void typeinfo_ndarray (const boost::python::object& o, - bob::io::base::array::typeinfo& i); - - /** - * @brief This is the same as above, but does not run any check on the input - * object "o". - */ - void typeinfo_ndarray_ (const boost::python::object& o, - bob::io::base::array::typeinfo& i); - - /** - * @brief Checks if an array-like object is convertible to become a NumPy - * ndarray (boost::python::numeric::array). If so, write the typeinfo - * information that such array would have upon automatic conversion to "info". - * - * Optionally, you can specify you do *not* want writeable or behavior to be - * checked. Write-ability means that an array area can be extracted from the - * "array_like" object and changes done to the converted ndarray will be - * reflected upon the original object. - * - * Behavior refers to two settings: first, the data type byte-order should be - * native (i.e., little-endian on little-endian machines and big-endian on - * big-endian machines). Secondly, the array must be C-Style, have its memory - * aligned and on a contiguous block. - * - * This method is more efficient than actually performing the conversion, - * unless you compile the project against NumPy < 1.6 in which case the - * built-in checks are not available and you we will emulate them with - * brute-force conversion if required. A level-1 DEBUG message will be output - * if a brute-force copy is required so you can debug for that. - * - * This method returns the convertibility status for the array-like object, - * which is one of: - * - * * IMPOSSIBLE: The object cannot, possibly, be converted into an ndarray - * * BYREFERENCE: The object will successfuly be converted to a ndarray, i.e. - * in the most optimal way - by referring to it. - * * WITHARRAYCOPY: The object will successfuly be converted to a ndarray, - * but that will require an array copy. That means the - * object is already an array, but not of the type you - * requested. - * * WITHCOPY: The object will successfuly be converted to a ndarray, but - * we will need to convert the object from its current format - * (non-ndarray) to a ndarray format. In this case, we will not - * be able to implement write-back. - */ - convert_t convertible(boost::python::object array_like, - bob::io::base::array::typeinfo& info, bool writeable=true, - bool behaved=true); - - /** - * @brief This method does the same as convertible(), but specifies a type - * information to which the destination array needs to have. Same rules - * apply. - * - * The typeinfo input is honoured like this: - * - * 1. The "dtype" component is enforced on the array object - * 2. If "nd" != 0, the number of dimensions is checked. - * 3. If 2. holds, shape values are checked if has_valid_shape() is 'true' - */ - convert_t convertible_to (boost::python::object array_like, - const bob::io::base::array::typeinfo& info, bool writeable=true, - bool behaved=true); - - /** - * @brief Same as above, but only requires dtype convertibility. - */ - convert_t convertible_to (boost::python::object array_like, - boost::python::object dtype_like, bool writeable=true, - bool behaved=true); - - /** - * @brief Same as above, but requires nothing, just simple convertibility. - */ - convert_t convertible_to (boost::python::object array_like, - bool writeable=true, bool behaved=true); - - class dtype { - - public: //api - - /** - * @brief Builds a new dtype object from another object. - */ - dtype (boost::python::object dtype_like); - - /** - * @brief Builds a new dtype object from a PyArray_Descr object that - * will have its own reference counting increased internally. So, the - * object is *not* stolen and you can Py_(X)DECREF() it when done if - * you so wish. - */ - dtype (PyArray_Descr* descr); - - /** - * @brief Builds a new dtype object from a numpy type_num integer - */ - dtype(int npy_typenum); - - /** - * @brief Builds a new dtype object from a bob element type - */ - dtype(bob::io::base::array::ElementType eltype); - - /** - * @brief Copy constructor - */ - dtype(const dtype& other); - - /** - * @brief Default constructor -- use default dtype from NumPy - */ - dtype(); - - /** - * @brief D'tor virtualization - */ - virtual ~dtype(); - - /** - * @brief Assignment - */ - dtype& operator= (const dtype& other); - - /** - * @brief Some checks - */ - bool has_native_byteorder() const; ///< byte order is native - bool has_type(bob::io::base::array::ElementType eltype) const; ///< matches - - /** - * @brief Returns the current element type - */ - bob::io::base::array::ElementType eltype() const; - - /** - * @brief Returns the current type num or -1, if I'm None - */ - int type_num() const; - - /** - * @brief Returns a boost::python representation of this object - maybe - * None. - */ - inline boost::python::object self() const { return m_self; } - - /** - * @brief Returns a borrowed reference to my PyArray_Descr* object. - */ - inline PyArray_Descr* descr(); - - /** - * @brief Returns the bp::str() object for myself - */ - boost::python::str str() const; - - /** - * @brief Returns str(*this) as a std::string - */ - std::string cxx_str() const; - - private: //representation - - boost::python::object m_self; - - }; - - class py_array: public bob::io::base::array::interface { - - public: //api - - /** - * @brief Builds a new array from an array-like object but coerces to a - * certain type. - * - * @param array_like An ndarray object, inherited type or any object that - * can be cast into an array. Note that, in case of casting, we will need - * to copy the data. Otherwise, we just refer. - * - * @param dtype_like Anything that can be cast to a description type. - */ - py_array(boost::python::object array_like, - boost::python::object dtype_like); - - /** - * @brief Builds a new array copying the data of an existing buffer. - */ - py_array(const bob::io::base::array::interface& buffer); - - /** - * @brief Builds a new array by referring to the data of an existing - * buffer. - */ - py_array(boost::shared_ptr<bob::io::base::array::interface> buffer); - - /** - * @brief Builds a new array from scratch using the typeinfo. This array - * will be a NumPy ndarray internally. - */ - py_array(const bob::io::base::array::typeinfo& info); - - template <typename T> - py_array(bob::io::base::array::ElementType t, T d0) { - set(bob::io::base::array::typeinfo(t, (T)1, &d0)); - } - template <typename T> - py_array(bob::io::base::array::ElementType t, T d0, T d1) { - T shape[2] = {d0, d1}; - set(bob::io::base::array::typeinfo(t, (T)2, &shape[0])); - } - template <typename T> - py_array(bob::io::base::array::ElementType t, T d0, T d1, T d2) { - T shape[3] = {d0, d1, d2}; - set(bob::io::base::array::typeinfo(t, (T)3, &shape[0])); - } - template <typename T> - py_array(bob::io::base::array::ElementType t, T d0, T d1, T d2, T d3) { - T shape[4] = {d0, d1, d2, d3}; - set(bob::io::base::array::typeinfo(t, (T)4, &shape[0])); - } - template <typename T> - py_array(bob::io::base::array::ElementType t, T d0, T d1, T d2, T d3, T d4) - { - T shape[5] = {d0, d1, d2, d3, d4}; - set(bob::io::base::array::typeinfo(t, (T)5, &shape[0])); - } - - /** - * @brief D'tor virtualization - */ - virtual ~py_array(); - - /** - * @brief Copies the data from another buffer. - */ - virtual void set(const bob::io::base::array::interface& buffer); - - /** - * @brief Refers to the data of another buffer. - */ - virtual void set(boost::shared_ptr<bob::io::base::array::interface> buffer); - - /** - * @brief Re-allocates this buffer taking into consideration new - * requirements. The internal memory should be considered uninitialized. - */ - virtual void set (const bob::io::base::array::typeinfo& req); - - /** - * @brief Type information for this buffer. - */ - virtual const bob::io::base::array::typeinfo& type() const { return m_type; } - - /** - * @brief Borrows a reference from the underlying memory. This means - * this object continues to be responsible for deleting the memory and - * you should make sure that it outlives the usage of the returned - * pointer. - */ - virtual void* ptr() { return m_ptr; } - virtual const void* ptr() const { return m_ptr; } - - /** - * @brief Gets a handle to the owner of this buffer. - */ - virtual boost::shared_ptr<void> owner() { return m_data; } - virtual boost::shared_ptr<const void> owner() const { return m_data; } - - /** - * @brief Cast the array to a different type by copying. If the type is - * omitted, we just make a plain copy of this array. - */ - virtual boost::python::object copy - (const boost::python::object& dtype = boost::python::object()); - - /** - * @brief Gets a shallow copy of this array, if internally it is a NumPy - * array. Otherwise, returns a wrapper around the internal buffer memory - * and correctly reference counts it so the given object becomes - * responsible for the internal buffer as well. - * - * For this technique to always succeed, we use the recommendation for - * generating the numpy arrays with a special de-allocator as found here: - * http://blog.enthought.com/python/numpy-arrays-with-pre-allocated-memory - */ - virtual boost::python::object pyobject(); - - /** - * @brief type cast operator converting this object into a boost::python::object - */ - operator boost::python::object(){return pyobject();} - - /** - * @brief Tells if the buffer is writeable - */ - virtual bool is_writeable() const; ///< PyArray_ISWRITEABLE - - private: //representation - - bob::io::base::array::typeinfo m_type; ///< type information - void* m_ptr; ///< pointer to the data - bool m_is_numpy; ///< true if initiated with a NumPy array - boost::shared_ptr<void> m_data; ///< Pointer to the data owner - - }; - - /** - * @brief The ndarray class is just a smart pointer wrapper over the - * concrete implementation of py_array. - */ - class ndarray { - - public: //api - - /** - * @brief Builds a new array from an array-like object but coerces to a - * certain type. - * - * @param array_like An ndarray object, inherited type or any object that - * can be cast into an array. Note that, in case of casting, we will need - * to copy the data. Otherwise, we just refer. - * - * @param dtype_like Anything that can be cast to a description type. - */ - ndarray(boost::python::object array_like, - boost::python::object dtype_like); - - /** - * @brief Builds a new array from an array-like object but coerces to a - * certain type. - * - * @param array_like An ndarray object, inherited type or any object that - * can be cast into an array. Note that, in case of casting, we will need - * to copy the data. Otherwise, we just refer. - */ - ndarray(boost::python::object array_like); - - /** - * @brief Builds a new array from scratch using a type and shape - */ - ndarray(const bob::io::base::array::typeinfo& info); - - template <typename T> - ndarray(bob::io::base::array::ElementType t, T d0) - : px(new py_array(t, d0)) { } - template <typename T> - ndarray(bob::io::base::array::ElementType t, T d0, T d1) - : px(new py_array(t, d0, d1)) { } - template <typename T> - ndarray(bob::io::base::array::ElementType t, T d0, T d1, T d2) - : px(new py_array(t, d0, d1, d2)) { } - template <typename T> - ndarray(bob::io::base::array::ElementType t, T d0, T d1, T d2, T d3) - : px(new py_array(t, d0, d1, d2, d3)) { } - template <typename T> - ndarray(bob::io::base::array::ElementType t, T d0, T d1, T d2, T d3, T d4) - : px(new py_array(t, d0, d1, d2, d3, d4)) { } - - /** - * @brief D'tor virtualization - */ - virtual ~ndarray(); - - /** - * @brief Returns the type information - */ - virtual const bob::io::base::array::typeinfo& type() const; - - /** - * @brief Returns the underlying python representation. - */ - virtual boost::python::object self(); - - /** - * @brief type cast operator converting this object into a boost::python::object - */ - operator boost::python::object(){return self();} - - /** - * @brief Returns a temporary blitz::Array<> skin over this ndarray. - * - * Attention: If you use this method, you have to make sure that this - * ndarray outlives the blitz::Array<> and that such blitz::Array<> will - * not be re-allocated or have any other changes made to it, except for - * the data contents. - */ - template <typename T, int N> blitz::Array<T,N> bz () { - - typedef blitz::Array<T,N> array_type; - typedef blitz::TinyVector<int,N> shape_type; - - const bob::io::base::array::typeinfo& info = px->type(); - - if (info.nd != N) { - boost::format mesg("cannot wrap numpy.ndarray(%s,%d) as blitz::Array<%s,%s> - dimensions do not match"); - mesg % bob::io::base::array::stringize(info.dtype) % info.nd; - mesg % bob::io::base::array::stringize<T>() % N; - throw std::runtime_error(mesg.str().c_str()); - } - - if (info.dtype != bob::io::base::array::getElementType<T>()) { - boost::format mesg("cannot wrap numpy.ndarray(%s,%d) as blitz::Array<%s,%s> - data type does not match"); - mesg % bob::io::base::array::stringize(info.dtype) % info.nd; - mesg % bob::io::base::array::stringize<T>() % N; - throw std::runtime_error(mesg.str().c_str()); - } - - shape_type shape; - shape_type stride; - for (size_t k=0; k<info.nd; ++k) { - shape[k] = info.shape[k]; - stride[k] = info.stride[k]; - } - - //finally, we return the wrapper. - return array_type((T*)px->ptr(), shape, stride, blitz::neverDeleteData); - } - - protected: //representation - - boost::shared_ptr<py_array> px; - - }; - - /** - * @brief A specialization of ndarray that is used to cast types from python - * that will **not** be modified in C++. - * - * Conversion requirements for this type can be made less restrictive since - * we consider the user just wants to pass a value to the method or function - * using this type. This opposes to the plain ndarray, in which the user may - * want to modify its contents by skinning it with a blitz::Array<> layer. - */ - class const_ndarray: public ndarray { - - public: //api - - /** - * @brief Builds a new array from an array-like object but coerces to a - * certain type. - * - * @param array_like An ndarray object, inherited type or any object that - * can be cast into an array. Note that, in case of casting, we will need - * to copy the data. Otherwise, we just refer. - */ - const_ndarray(boost::python::object array_like); - - /** - * @brief D'tor virtualization - */ - virtual ~const_ndarray(); - - /** - * @brief Returns a temporary blitz::Array<> skin over this const_ndarray, - * if possible, otherwise it will COPY the array to the requested type - * and returns the copy. - * - * Attention: If you use this method, you have to make sure that this - * ndarray outlives the blitz::Array<>, in case the data is not copied. - */ - template <typename T, int N> const blitz::Array<T,N> cast() { - const bob::io::base::array::typeinfo& info = px->type(); - - if (info.nd != N) { - boost::format mesg("cannot wrap numpy.ndarray(%s,%d) as blitz::Array<%s,%s> - dimensions do not match"); - mesg % bob::io::base::array::stringize(info.dtype) % info.nd; - mesg % bob::io::base::array::stringize<T>() % N; - throw std::runtime_error(mesg.str().c_str()); - } - - if (info.dtype == bob::io::base::array::getElementType<T>()) { - // Type and shape matches, return the shallow copy of the array. - return bz<T,N>(); - } - - // if we got here, we have to copy-cast - // call the correct version of the cast function - switch(info.dtype){ - // boolean types - case bob::io::base::array::t_bool: return bob::core::array::cast<T>(bz<bool,N>()); - - // integral types - case bob::io::base::array::t_int8: return bob::core::array::cast<T>(bz<int8_t,N>()); - case bob::io::base::array::t_int16: return bob::core::array::cast<T>(bz<int16_t,N>()); - case bob::io::base::array::t_int32: return bob::core::array::cast<T>(bz<int32_t,N>()); - case bob::io::base::array::t_int64: return bob::core::array::cast<T>(bz<int64_t,N>()); - - // unsigned integral types - case bob::io::base::array::t_uint8: return bob::core::array::cast<T>(bz<uint8_t,N>()); - case bob::io::base::array::t_uint16: return bob::core::array::cast<T>(bz<uint16_t,N>()); - case bob::io::base::array::t_uint32: return bob::core::array::cast<T>(bz<uint32_t,N>()); - case bob::io::base::array::t_uint64: return bob::core::array::cast<T>(bz<uint64_t,N>()); - - // floating point types - case bob::io::base::array::t_float32: return bob::core::array::cast<T>(bz<float,N>()); - case bob::io::base::array::t_float64: return bob::core::array::cast<T>(bz<double,N>()); - case bob::io::base::array::t_float128: return bob::core::array::cast<T>(bz<long double,N>()); - - // complex types - case bob::io::base::array::t_complex64: return bob::core::array::cast<T>(bz<std::complex<float>,N>()); - case bob::io::base::array::t_complex128: return bob::core::array::cast<T>(bz<std::complex<double>,N>()); - case bob::io::base::array::t_complex256: return bob::core::array::cast<T>(bz<std::complex<long double>,N>()); - - default: throw std::runtime_error("cast to the given (unknown) data type is not possible yet"); - } - } - - }; - -}} - -#endif /* BOB_PYTHON_NDARRAY_H */ diff --git a/bob/learn/misc/old/ndarray_numpy.cc b/bob/learn/misc/old/ndarray_numpy.cc deleted file mode 100644 index 3b69a0a..0000000 --- a/bob/learn/misc/old/ndarray_numpy.cc +++ /dev/null @@ -1,162 +0,0 @@ -/** - * @author Andre Anjos <andre.anjos@idiap.ch> - * @date Thu Nov 17 14:33:20 2011 +0100 - * - * @brief Automatic converters to-from python for bob::python::ndarray - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" - -/** - * Objects of this type create a binding between bob::python::ndarray and - * NumPy arrays. You can specify a NumPy array as a parameter to a - * bound method that would normally receive a blitz::Array<T,N> or a const - * blitz::Array<T,N>& and the conversion will just magically happen, as - * efficiently as possible. - * - * Please note that passing by value should be avoided as much as possible. In - * this mode, the underlying method will still be able to alter the underlying - * array storage area w/o being able to modify the array itself, causing a - * gigantic mess. If you want to make something close to pass-by-value, just - * pass by non-const reference instead. - */ -struct ndarray_from_npy { - - /** - * Registers converter from numpy array into a bob::python::ndarray - */ - ndarray_from_npy() { - boost::python::converter::registry::push_back(&convertible, &construct, - boost::python::type_id<bob::python::ndarray>()); - } - - /** - * This method will determine if the input python object is convertible into - * an ndarray. To do that, the object has to be of type PyArrayObject - */ - static void* convertible(PyObject* obj_ptr) { - if (PyArray_Check(obj_ptr)) return obj_ptr; - return 0; - } - - /** - * This method will finally construct the C++ element out of the python - * object that was input. Please note that when boost::python reaches this - * method, the object has already been checked for convertibility. - */ - static void construct(PyObject* obj_ptr, - boost::python::converter::rvalue_from_python_stage1_data* data) { - - //black-magic required to setup the bob::python::ndarray storage area - void* storage = ((boost::python::converter::rvalue_from_python_storage<bob::python::ndarray>*)data)->storage.bytes; - - boost::python::handle<> hdl(boost::python::borrowed(obj_ptr)); - boost::python::object tmp(hdl); - new (storage) bob::python::ndarray(tmp); - data->convertible = storage; - - } - -}; - -/** - * Objects of this type bind bob::python::ndarray's to numpy arrays. Your method - * generates as output an object of this type and the object will be - * automatically converted into a Numpy array. - */ -struct ndarray_to_npy { - - static PyObject* convert(const bob::python::ndarray& tv) { - return boost::python::incref(const_cast<bob::python::ndarray*>(&tv)->self().ptr()); - } - - static const PyTypeObject* get_pytype() { return &PyArray_Type; } - -}; - -void register_ndarray_to_npy() { - boost::python::to_python_converter<bob::python::ndarray, ndarray_to_npy -#if defined BOOST_PYTHON_SUPPORTS_PY_SIGNATURES - ,true -#endif - >(); -} - -/** - * The same as for ndarray_from_npy, but bindings the const specialization. The - * difference is that we don't require that the object given as input to be, - * strictly, a NumPy ndarray, but are more relaxed. - */ -struct const_ndarray_from_npy { - - /** - * Registers converter from numpy array into a bob::python::ndarray - */ - const_ndarray_from_npy() { - boost::python::converter::registry::push_back(&convertible, &construct, - boost::python::type_id<bob::python::const_ndarray>()); - } - - /** - * This method will determine if the input python object is convertible into - * an ndarray. To do that, the object has to convertible to a NumPy ndarray. - */ - static void* convertible(PyObject* obj_ptr) { - boost::python::handle<> hdl(boost::python::borrowed(obj_ptr)); - boost::python::object obj(hdl); - if (bob::python::convertible_to(obj, false, true)) //writeable=false, behaved=true - return obj_ptr; - return 0; - } - - /** - * This method will finally construct the C++ element out of the python - * object that was input. Please note that when boost::python reaches this - * method, the object has already been checked for convertibility. - */ - static void construct(PyObject* obj_ptr, - boost::python::converter::rvalue_from_python_stage1_data* data) { - - //black-magic required to setup the bob::python::ndarray storage area - void* storage = ((boost::python::converter::rvalue_from_python_storage<bob::python::const_ndarray>*)data)->storage.bytes; - - boost::python::handle<> hdl(boost::python::borrowed(obj_ptr)); - boost::python::object tmp(hdl); - new (storage) bob::python::const_ndarray(tmp); - data->convertible = storage; - - } - -}; - -/** - * Objects of this type bind bob::python::ndarray's to numpy arrays. Your method - * generates as output an object of this type and the object will be - * automatically converted into a Numpy array. - */ -struct const_ndarray_to_npy { - - static PyObject* convert(const bob::python::const_ndarray& tv) { - return boost::python::incref(const_cast<bob::python::const_ndarray*>(&tv)->self().ptr()); - } - - static const PyTypeObject* get_pytype() { return &PyArray_Type; } - -}; - -void register_const_ndarray_to_npy() { - boost::python::to_python_converter<bob::python::const_ndarray, const_ndarray_to_npy -#if defined BOOST_PYTHON_SUPPORTS_PY_SIGNATURES - ,true -#endif - >(); -} - -void bind_core_ndarray_numpy () { - ndarray_from_npy(); - register_ndarray_to_npy(); - const_ndarray_from_npy(); - register_const_ndarray_to_npy(); -} diff --git a/bob/learn/misc/old/plda.cc b/bob/learn/misc/old/plda.cc deleted file mode 100644 index 64d94ed..0000000 --- a/bob/learn/misc/old/plda.cc +++ /dev/null @@ -1,216 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Fri Oct 14 18:07:56 2011 +0200 - * - * @brief Python bindings for the PLDABase/PLDAMachine - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> -#include <bob.io.base/api.h> - -#include "ndarray.h" -#include <bob.learn.misc/PLDAMachine.h> - -using namespace boost::python; - -static void py_set_dim_d(bob::learn::misc::PLDABase& machine, const size_t dim_d) -{ - machine.resize(dim_d, machine.getDimF(), machine.getDimG()); -} -static void py_set_dim_f(bob::learn::misc::PLDABase& machine, const size_t dim_f) -{ - machine.resize(machine.getDimD(), dim_f, machine.getDimG()); -} -static void py_set_dim_g(bob::learn::misc::PLDABase& machine, const size_t dim_g) -{ - machine.resize(machine.getDimD(), machine.getDimF(), dim_g); -} - -// Set methods that uses blitz::Arrays -static void py_set_mu(bob::learn::misc::PLDABase& machine, - bob::python::const_ndarray mu) -{ - machine.setMu(mu.bz<double,1>()); -} - -static void py_set_f(bob::learn::misc::PLDABase& machine, - bob::python::const_ndarray f) -{ - machine.setF(f.bz<double,2>()); -} - -static void py_set_g(bob::learn::misc::PLDABase& machine, - bob::python::const_ndarray g) -{ - machine.setG(g.bz<double,2>()); -} - -static void py_set_sigma(bob::learn::misc::PLDABase& machine, - bob::python::const_ndarray sigma) -{ - machine.setSigma(sigma.bz<double,1>()); -} - - -static double computeLogLikelihood(bob::learn::misc::PLDAMachine& plda, - bob::python::const_ndarray samples, bool with_enrolled_samples=true) -{ - const bob::io::base::array::typeinfo& info = samples.type(); - switch (info.nd) { - case 1: - return plda.computeLogLikelihood(samples.bz<double,1>(), with_enrolled_samples); - case 2: - return plda.computeLogLikelihood(samples.bz<double,2>(), with_enrolled_samples); - default: - PYTHON_ERROR(TypeError, "PLDA log-likelihood computation does not accept input array with '" SIZE_T_FMT "' dimensions (only 1D or 2D arrays)", info.nd); - } -} - -static double plda_forward_sample(bob::learn::misc::PLDAMachine& m, - bob::python::const_ndarray samples) -{ - const bob::io::base::array::typeinfo& info = samples.type(); - switch (info.nd) { - case 1: - { - double score; - // Calls the forward function - m.forward(samples.bz<double,1>(), score); - return score; - } - case 2: - { - double score; - // Calls the forward function - m.forward(samples.bz<double,2>(), score); - return score; - } - default: - PYTHON_ERROR(TypeError, "PLDA forwarding does not accept input array with '" SIZE_T_FMT "' dimensions (only 1D or 2D arrays)", info.nd); - } -} - -static double py_log_likelihood_point_estimate(bob::learn::misc::PLDABase& plda, - bob::python::const_ndarray xij, bob::python::const_ndarray hi, - bob::python::const_ndarray wij) -{ - return plda.computeLogLikelihoodPointEstimate(xij.bz<double,1>(), - hi.bz<double,1>(), wij.bz<double,1>()); -} - -BOOST_PYTHON_FUNCTION_OVERLOADS(computeLogLikelihood_overloads, computeLogLikelihood, 2, 3) - - -static boost::shared_ptr<bob::learn::misc::PLDABase> b_init(boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::PLDABase>(new bob::learn::misc::PLDABase(*hdf5->f)); -} - -static void b_load(bob::learn::misc::PLDABase& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void b_save(const bob::learn::misc::PLDABase& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - - -static boost::shared_ptr<bob::learn::misc::PLDAMachine> m_init(boost::python::object file, boost::shared_ptr<bob::learn::misc::PLDABase> b){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - return boost::shared_ptr<bob::learn::misc::PLDAMachine>(new bob::learn::misc::PLDAMachine(*hdf5->f, b)); -} - -static void m_load(bob::learn::misc::PLDAMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.load(*hdf5->f); -} - -static void m_save(const bob::learn::misc::PLDAMachine& self, boost::python::object file){ - if (!PyBobIoHDF5File_Check(file.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.io.base.HDF5File"); - PyBobIoHDF5FileObject* hdf5 = (PyBobIoHDF5FileObject*) file.ptr(); - self.save(*hdf5->f); -} - -void bind_machine_plda() -{ - class_<bob::learn::misc::PLDABase, boost::shared_ptr<bob::learn::misc::PLDABase> >("PLDABase", "A PLDABase can be seen as a container for the subspaces F, G, the diagonal covariance matrix sigma (stored as a 1D array) and the mean vector mu when performing Probabilistic Linear Discriminant Analysis (PLDA). PLDA is a probabilistic model that incorporates components describing both between-class and within-class variations. A PLDABase can be shared between several PLDAMachine that contains class-specific information (information about the enrolment samples).\n\nReferences:\n1. 'A Scalable Formulation of Probabilistic Linear Discriminant Analysis: Applied to Face Recognition', Laurent El Shafey, Chris McCool, Roy Wallace, Sebastien Marcel, TPAMI'2013\n2. 'Probabilistic Linear Discriminant Analysis for Inference About Identity', Prince and Elder, ICCV'2007.\n3. 'Probabilistic Models for Inference about Identity', Li, Fu, Mohammed, Elder and Prince, TPAMI'2012.", init<const size_t, const size_t, const size_t, optional<const double> >((arg("self"), arg("dim_d"), arg("dim_f"), arg("dim_g"), arg("variance_flooring")=0.), "Builds a new PLDABase. dim_d is the dimensionality of the input features, dim_f is the dimensionality of the F subspace and dim_g the dimensionality of the G subspace. The variance flooring threshold is the minimum value that the variance sigma can reach, as this diagonal matrix is inverted.")) - .def(init<>((arg("self")), "Constructs a new empty PLDABase.")) - .def("__init__", boost::python::make_constructor(&b_init), "Constructs a new PLDABase from a configuration file.") - .def(init<const bob::learn::misc::PLDABase&>((arg("self"), arg("machine")), "Copy constructs a PLDABase")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::PLDABase::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this PLDABase with the 'other' one to be approximately the same.") - .def("load", &b_load, (arg("self"), arg("config")), "Loads the configuration parameters from a configuration file.") - .def("save", &b_save, (arg("self"), arg("config")), "Saves the configuration parameters to a configuration file.") - .add_property("dim_d", &bob::learn::misc::PLDABase::getDimD, &py_set_dim_d, "Dimensionality of the input feature vectors") - .add_property("dim_f", &bob::learn::misc::PLDABase::getDimF, &py_set_dim_f, "Dimensionality of the F subspace/matrix of the PLDA model") - .add_property("dim_g", &bob::learn::misc::PLDABase::getDimG, &py_set_dim_g, "Dimensionality of the G subspace/matrix of the PLDA model") - .add_property("mu", make_function(&bob::learn::misc::PLDABase::getMu, return_value_policy<copy_const_reference>()), &py_set_mu, "The mean vector mu of the PLDA model") - .add_property("f", make_function(&bob::learn::misc::PLDABase::getF, return_value_policy<copy_const_reference>()), &py_set_f, "The subspace/matrix F of the PLDA model") - .add_property("g", make_function(&bob::learn::misc::PLDABase::getG, return_value_policy<copy_const_reference>()), &py_set_g, "The subspace/matrix G of the PLDA model") - .add_property("sigma", make_function(&bob::learn::misc::PLDABase::getSigma, return_value_policy<copy_const_reference>()), &py_set_sigma, "The diagonal covariance matrix (represented by a 1D numpy array) sigma of the PLDA model") - .add_property("variance_threshold", &bob::learn::misc::PLDABase::getVarianceThreshold, &bob::learn::misc::PLDABase::setVarianceThreshold, - "The variance flooring threshold, i.e. the minimum allowed value of variance (sigma) in each dimension. " - "The variance sigma will be set to this value if an attempt is made to set it to a smaller value.") - .def("resize", &bob::learn::misc::PLDABase::resize, (arg("self"), arg("dim_d"), arg("dim_f"), arg("dim_g")), "Resizes the dimensionality of the PLDA model. Paramaters mu, F, G and sigma are reinitialized.") - .def("has_gamma", &bob::learn::misc::PLDABase::hasGamma, (arg("self"), arg("a")), "Tells if the gamma matrix for the given number of samples has already been computed. (gamma = inverse(I+a.F^T.beta.F), please check the documentation/source code for more details.") - .def("compute_gamma", &bob::learn::misc::PLDABase::computeGamma, (arg("self"), arg("a"), arg("gamma")), "Computes the gamma matrix for the given number of samples. (gamma = inverse(I+a.F^T.beta.F), please check the documentation/source code for more details.") - .def("get_add_gamma", make_function(&bob::learn::misc::PLDABase::getAddGamma, return_value_policy<copy_const_reference>(), (arg("self"), arg("a"))), "Computes the gamma matrix for the given number of samples. (gamma = inverse(I+a.F^T.beta.F), please check the documentation/source code for more details.") - .def("get_gamma", make_function(&bob::learn::misc::PLDABase::getGamma, return_value_policy<copy_const_reference>(), (arg("self"), arg("a"))), "Returns the gamma matrix for the given number of samples if it has already been put in cache. Throws an exception otherwise. (gamma = inverse(I+a.F^T.beta.F), please check the documentation/source code for more details.") - .def("has_log_like_const_term", &bob::learn::misc::PLDABase::hasLogLikeConstTerm, (arg("self"), arg("a")), "Tells if the log likelihood constant term for the given number of samples has already been computed.") - .def("compute_log_like_const_term", (double (bob::learn::misc::PLDABase::*)(const size_t, const blitz::Array<double,2>&) const)&bob::learn::misc::PLDABase::computeLogLikeConstTerm, (arg("self"), arg("a"), arg("gamma")), "Computes the log likelihood constant term for the given number of samples.") - .def("get_add_log_like_const_term", &bob::learn::misc::PLDABase::getAddLogLikeConstTerm, (arg("self"), arg("a")), "Computes the log likelihood constant term for the given number of samples, and adds it to the machine (as well as gamma), if it does not already exist.") - .def("get_log_like_const_term", &bob::learn::misc::PLDABase::getLogLikeConstTerm, (arg("self"), arg("a")), "Returns the log likelihood constant term for the given number of samples if it has already been put in cache. Throws an exception otherwise.") - .def("clear_maps", &bob::learn::misc::PLDABase::clearMaps, (arg("self")), "Clear the maps containing the gamma's as well as the log likelihood constant term for few number of samples. These maps are used to make likelihood computations faster.") - .def("compute_log_likelihood_point_estimate", &py_log_likelihood_point_estimate, (arg("self"), arg("xij"), arg("hi"), arg("wij")), "Computes the log-likelihood of a sample given the latent variables hi and wij (point estimate rather than Bayesian-like full integration).") - .def(self_ns::str(self_ns::self)) - .add_property("__isigma__", make_function(&bob::learn::misc::PLDABase::getISigma, return_value_policy<copy_const_reference>()), "sigma^{-1} matrix stored in cache") - .add_property("__alpha__", make_function(&bob::learn::misc::PLDABase::getAlpha, return_value_policy<copy_const_reference>()), "alpha matrix stored in cache") - .add_property("__beta__", make_function(&bob::learn::misc::PLDABase::getBeta, return_value_policy<copy_const_reference>()), "beta matrix stored in cache") - .add_property("__ft_beta__", make_function(&bob::learn::misc::PLDABase::getFtBeta, return_value_policy<copy_const_reference>()), "F^T.beta matrix stored in cache") - .add_property("__gt_i_sigma__", make_function(&bob::learn::misc::PLDABase::getGtISigma, return_value_policy<copy_const_reference>()), "G^T.sigma^{-1} matrix stored in cache") - .add_property("__logdet_alpha__", &bob::learn::misc::PLDABase::getLogDetAlpha, "Logarithm of the determinant of the alpha matrix stored in cache.") - .add_property("__logdet_sigma__", &bob::learn::misc::PLDABase::getLogDetSigma, "Logarithm of the determinant of the sigma matrix stored in cache.") - .def("__precompute__", &bob::learn::misc::PLDABase::precompute, (arg("self")), "Precomputes useful values such as alpha and beta.") - .def("__precompute_log_like__", &bob::learn::misc::PLDABase::precomputeLogLike, (arg("self")), "Precomputes useful values for log-likelihood computations.") - ; - - class_<bob::learn::misc::PLDAMachine, boost::shared_ptr<bob::learn::misc::PLDAMachine> >("PLDAMachine", "A PLDAMachine contains class-specific information (from the enrolment samples) when performing Probabilistic Linear Discriminant Analysis (PLDA). It should be attached to a PLDABase that contains information such as the subspaces F and G.\n\nReferences:\n1. 'A Scalable Formulation of Probabilistic Linear Discriminant Analysis: Applied to Face Recognition', Laurent El Shafey, Chris McCool, Roy Wallace, Sebastien Marcel, TPAMI'2013\n2. 'Probabilistic Linear Discriminant Analysis for Inference About Identity', Prince and Elder, ICCV'2007.\n3. 'Probabilistic Models for Inference about Identity', Li, Fu, Mohammed, Elder and Prince, TPAMI'2012.", init<boost::shared_ptr<bob::learn::misc::PLDABase> >((arg("self"), arg("plda_base")), "Builds a new PLDAMachine. An attached PLDABase should be provided, that can be shared by several PLDAMachine.")) - .def(init<>((arg("self")), "Constructs a new empty (invalid) PLDAMachine. A PLDABase should then be set using the 'plda_base' attribute of this object.")) - .def("__init__", make_constructor(&m_init), "Constructs a new PLDAMachine from a configuration file (and a PLDABase object).") - .def(init<const bob::learn::misc::PLDAMachine&>((arg("self"), arg("machine")), "Copy constructs a PLDAMachine")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::PLDAMachine::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this PLDAMachine with the 'other' one to be approximately the same.") - .def("load", &m_load, (arg("self"), arg("config")), "Loads the configuration parameters from a configuration file. The PLDABase will not be loaded, and has to be set manually using the 'plda_base' attribute.") - .def("save", &m_save, (arg("self"), arg("config")), "Saves the configuration parameters to a configuration file. The PLDABase will not be saved, and has to be saved separately, as it can be shared by several PLDAMachines.") - .add_property("plda_base", &bob::learn::misc::PLDAMachine::getPLDABase, &bob::learn::misc::PLDAMachine::setPLDABase) - .add_property("dim_d", &bob::learn::misc::PLDAMachine::getDimD, "Dimensionality of the input feature vectors") - .add_property("dim_f", &bob::learn::misc::PLDAMachine::getDimF, "Dimensionality of the F subspace/matrix of the PLDA model") - .add_property("dim_g", &bob::learn::misc::PLDAMachine::getDimG, "Dimensionality of the G subspace/matrix of the PLDA model") - .add_property("n_samples", &bob::learn::misc::PLDAMachine::getNSamples, &bob::learn::misc::PLDAMachine::setNSamples, "Number of enrolled samples") - .add_property("w_sum_xit_beta_xi", &bob::learn::misc::PLDAMachine::getWSumXitBetaXi, &bob::learn::misc::PLDAMachine::setWSumXitBetaXi) - .add_property("weighted_sum", make_function(&bob::learn::misc::PLDAMachine::getWeightedSum, return_value_policy<copy_const_reference>()), &bob::learn::misc::PLDAMachine::setWeightedSum) - .add_property("log_likelihood", &bob::learn::misc::PLDAMachine::getLogLikelihood, &bob::learn::misc::PLDAMachine::setLogLikelihood) - .def("has_gamma", &bob::learn::misc::PLDAMachine::hasGamma, (arg("self"), arg("a")), "Tells if the gamma matrix for the given number of samples has already been computed. (gamma = inverse(I+a.F^T.beta.F), please check the documentation/source code for more details.") - .def("get_add_gamma", make_function(&bob::learn::misc::PLDAMachine::getAddGamma, return_value_policy<copy_const_reference>(), (arg("self"), arg("a"))), "Computes the gamma matrix for the given number of samples. (gamma = inverse(I+a.F^T.beta.F), please check the documentation/source code for more details.") - .def("get_gamma", make_function(&bob::learn::misc::PLDAMachine::getGamma, return_value_policy<copy_const_reference>(), (arg("self"), arg("a"))), "Returns the gamma matrix for the given number of samples if it has already been put in cache. Throws an exception otherwise. (gamma = inverse(I+a.F^T.beta.F), please check the documentation/source code for more details.") - .def("has_log_like_const_term", &bob::learn::misc::PLDAMachine::hasLogLikeConstTerm, (arg("self"), arg("a")), "Tells if the log likelihood constant term for the given number of samples has already been computed.") - .def("get_add_log_like_const_term", &bob::learn::misc::PLDAMachine::getAddLogLikeConstTerm, (arg("self"), arg("a")), "Computes the log likelihood constant term for the given number of samples, and adds it to the machine (as well as gamma), if it does not already exist.") - .def("get_log_like_const_term", &bob::learn::misc::PLDAMachine::getLogLikeConstTerm, (arg("self"), arg("a")), "Returns the log likelihood constant term for the given number of samples if it has already been put in cache. Throws an exception otherwise.") - .def("clear_maps", &bob::learn::misc::PLDAMachine::clearMaps, (arg("self")), "Clears the maps containing the gamma's as well as the log likelihood constant term for few number of samples. These maps are used to make likelihood computations faster.") - .def("compute_log_likelihood", &computeLogLikelihood, computeLogLikelihood_overloads((arg("self"), arg("sample"), arg("use_enrolled_samples")=true), "Computes the log-likelihood considering only the probe sample(s) or jointly the probe sample(s) and the enrolled samples.")) - .def("__call__", &plda_forward_sample, (arg("self"), arg("sample")), "Processes a sample and returns a log-likelihood ratio score.") - .def("forward", &plda_forward_sample, (arg("self"), arg("sample")), "Processes a sample and returns a log-likelihood ratio score.") - ; -} diff --git a/bob/learn/misc/old/plda_trainer.cc b/bob/learn/misc/old/plda_trainer.cc deleted file mode 100644 index c684444..0000000 --- a/bob/learn/misc/old/plda_trainer.cc +++ /dev/null @@ -1,171 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Fri Oct 14 18:07:56 2011 +0200 - * - * @brief Python bindings to Probabilistic Linear Discriminant Analysis - * trainers. - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" -#include <boost/python/stl_iterator.hpp> -#include <bob.learn.misc/PLDAMachine.h> -#include <bob.learn.misc/PLDATrainer.h> - -using namespace boost::python; - -typedef bob::learn::misc::EMTrainer<bob::learn::misc::PLDABase, std::vector<blitz::Array<double,2> > > EMTrainerPLDA; - -static void plda_train(EMTrainerPLDA& t, bob::learn::misc::PLDABase& m, object data) -{ - stl_input_iterator<bob::python::const_ndarray> dbegin(data), dend; - std::vector<bob::python::const_ndarray> vdata(dbegin, dend); - std::vector<blitz::Array<double,2> > vdata_ref; - for(std::vector<bob::python::const_ndarray>::iterator it=vdata.begin(); - it!=vdata.end(); ++it) - vdata_ref.push_back(it->bz<double,2>()); - // Calls the train function - t.train(m, vdata_ref); -} - -static void plda_initialize(EMTrainerPLDA& t, bob::learn::misc::PLDABase& m, object data) -{ - stl_input_iterator<bob::python::const_ndarray> dbegin(data), dend; - std::vector<bob::python::const_ndarray> vdata(dbegin, dend); - std::vector<blitz::Array<double,2> > vdata_ref; - for(std::vector<bob::python::const_ndarray>::iterator it=vdata.begin(); - it!=vdata.end(); ++it) - vdata_ref.push_back(it->bz<double,2>()); - // Calls the initialization function - t.initialize(m, vdata_ref); -} - -static void plda_eStep(EMTrainerPLDA& t, bob::learn::misc::PLDABase& m, object data) -{ - stl_input_iterator<bob::python::const_ndarray> dbegin(data), dend; - std::vector<bob::python::const_ndarray> vdata(dbegin, dend); - std::vector<blitz::Array<double,2> > vdata_ref; - for(std::vector<bob::python::const_ndarray>::iterator it=vdata.begin(); - it!=vdata.end(); ++it) - vdata_ref.push_back(it->bz<double,2>()); - // Calls the eStep function - t.eStep(m, vdata_ref); -} - -static void plda_mStep(EMTrainerPLDA& t, bob::learn::misc::PLDABase& m, object data) -{ - stl_input_iterator<bob::python::const_ndarray> dbegin(data), dend; - std::vector<bob::python::const_ndarray> vdata(dbegin, dend); - std::vector<blitz::Array<double,2> > vdata_ref; - for(std::vector<bob::python::const_ndarray>::iterator it=vdata.begin(); - it!=vdata.end(); ++it) - vdata_ref.push_back(it->bz<double,2>()); - // Calls the mStep function - t.mStep(m, vdata_ref); -} - -static void plda_finalize(EMTrainerPLDA& t, bob::learn::misc::PLDABase& m, object data) -{ - stl_input_iterator<bob::python::const_ndarray> dbegin(data), dend; - std::vector<bob::python::const_ndarray> vdata(dbegin, dend); - std::vector<blitz::Array<double,2> > vdata_ref; - for(std::vector<bob::python::const_ndarray>::iterator it=vdata.begin(); - it!=vdata.end(); ++it) - vdata_ref.push_back(it->bz<double,2>()); - // Calls the finalization function - t.finalize(m, vdata_ref); -} - -static object get_z_first_order(bob::learn::misc::PLDATrainer& m) { - const std::vector<blitz::Array<double,2> >& v = m.getZFirstOrder(); - list retval; - for (size_t k=0; k<v.size(); ++k) retval.append(v[k]); //copy - return tuple(retval); -} - -static object get_z_second_order(bob::learn::misc::PLDATrainer& m) { - const std::vector<blitz::Array<double,3> >& v = m.getZSecondOrder(); - list retval; - for (size_t k=0; k<v.size(); ++k) retval.append(v[k]); //copy - return tuple(retval); -} - - -// include the random API of bob.core -#include <bob.core/random_api.h> -static boost::python::object TB_getRng(EMTrainerPLDA& self){ - // create new object - PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0); - reinterpret_cast<PyBoostMt19937Object*>(o)->rng = self.getRng().get(); - return boost::python::object(boost::python::handle<>(boost::python::borrowed(o))); -} - -#include <boost/make_shared.hpp> -static void TB_setRng(EMTrainerPLDA& self, boost::python::object rng){ - if (!PyBoostMt19937_Check(rng.ptr())) PYTHON_ERROR(TypeError, "Would have expected a bob.core.random.mt19937 object"); - PyBoostMt19937Object* o = reinterpret_cast<PyBoostMt19937Object*>(rng.ptr()); - self.setRng(boost::make_shared<boost::mt19937>(*o->rng)); -} - - -void bind_trainer_plda() -{ - class_<EMTrainerPLDA, boost::noncopyable>("EMTrainerPLDA", "The base python class for all EM/PLDA-based trainers.", no_init) - .add_property("max_iterations", &EMTrainerPLDA::getMaxIterations, &EMTrainerPLDA::setMaxIterations, "Max iterations") - .add_property("rng", &TB_getRng, &TB_setRng, "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.") - .def("train", &plda_train, (arg("self"), arg("machine"), arg("data")), "Trains a PLDABase using data (mu, F, G and sigma are learnt).") - .def("initialize", &plda_initialize, (arg("self"), arg("machine"), arg("data")), "This method is called before the EM algorithm") - .def("finalize", &plda_finalize, (arg("self"), arg("machine"), arg("data")), "This method is called at the end of the EM algorithm") - .def("e_step", &plda_eStep, (arg("self"), arg("machine"), arg("data")), - "Updates the hidden variable distribution (or the sufficient statistics) given the Machine parameters. ") - .def("m_step", &plda_mStep, (arg("self"), arg("machine"), arg("data")), "Updates the Machine parameters given the hidden variable distribution (or the sufficient statistics)") - ; - - class_<bob::learn::misc::PLDATrainer, boost::noncopyable, bases<EMTrainerPLDA> > PLDAT("PLDATrainer", "A trainer for Probabilistic Linear Discriminant Analysis (PLDA). The train() method will learn the mu, F, G and Sigma of the model, whereas the enrol() method, will store model information about the enrolment samples for a specific class.\n\nReferences:\n1. 'A Scalable Formulation of Probabilistic Linear Discriminant Analysis: Applied to Face Recognition', Laurent El Shafey, Chris McCool, Roy Wallace, Sebastien Marcel, TPAMI'2013\n2. 'Probabilistic Linear Discriminant Analysis for Inference About Identity', Prince and Elder, ICCV'2007.\n3. 'Probabilistic Models for Inference about Identity', Li, Fu, Mohammed, Elder and Prince, TPAMI'2012.", no_init); - - PLDAT.def(init<optional<const size_t, const bool> >((arg("self"), arg("max_iterations")=100, arg("use_sum_second_order")=true),"Initializes a new PLDATrainer.")) - .def(init<const bob::learn::misc::PLDATrainer&>((arg("self"), arg("trainer")), "Copy constructs a PLDATrainer")) - .def(self == self) - .def(self != self) - .def("is_similar_to", &bob::learn::misc::PLDATrainer::is_similar_to, (arg("self"), arg("other"), arg("r_epsilon")=1e-5, arg("a_epsilon")=1e-8), "Compares this PLDATrainer with the 'other' one to be approximately the same.") - .def("enrol", &bob::learn::misc::PLDATrainer::enrol, (arg("self"), arg("plda_machine"), arg("data")), "Enrol a class-specific model (PLDAMachine) given a set of enrolment samples.") - .add_property("use_sum_second_order", &bob::learn::misc::PLDATrainer::getUseSumSecondOrder, &bob::learn::misc::PLDATrainer::setUseSumSecondOrder, "Tells whether the second order statistics are stored during the training procedure, or only their sum.") - .add_property("z_first_order", &get_z_first_order) - .add_property("z_second_order", &get_z_second_order) - .add_property("z_second_order_sum", make_function(&bob::learn::misc::PLDATrainer::getZSecondOrderSum, return_value_policy<copy_const_reference>())) - ; - - // Sets the scope to the one of the PLDATrainer - scope s(PLDAT); - - // Adds enums in the previously defined current scope - enum_<bob::learn::misc::PLDATrainer::InitFMethod>("init_f_method") - .value("RANDOM_F", bob::learn::misc::PLDATrainer::RANDOM_F) - .value("BETWEEN_SCATTER", bob::learn::misc::PLDATrainer::BETWEEN_SCATTER) - .export_values() - ; - - enum_<bob::learn::misc::PLDATrainer::InitGMethod>("init_g_method") - .value("RANDOM_G", bob::learn::misc::PLDATrainer::RANDOM_G) - .value("WITHIN_SCATTER", bob::learn::misc::PLDATrainer::WITHIN_SCATTER) - .export_values() - ; - - enum_<bob::learn::misc::PLDATrainer::InitSigmaMethod>("init_sigma_method") - .value("RANDOM_SIGMA", bob::learn::misc::PLDATrainer::RANDOM_SIGMA) - .value("VARIANCE_G", bob::learn::misc::PLDATrainer::VARIANCE_G) - .value("CONSTANT", bob::learn::misc::PLDATrainer::CONSTANT) - .value("VARIANCE_DATA", bob::learn::misc::PLDATrainer::VARIANCE_DATA) - .export_values() - ; - - // Binds randomization/enumration-related methods - PLDAT.add_property("init_f_method", &bob::learn::misc::PLDATrainer::getInitFMethod, &bob::learn::misc::PLDATrainer::setInitFMethod, "The method used for the initialization of F.") - .add_property("init_f_ratio", &bob::learn::misc::PLDATrainer::getInitFRatio, &bob::learn::misc::PLDATrainer::setInitFRatio, "The ratio used for the initialization of F.") - .add_property("init_g_method", &bob::learn::misc::PLDATrainer::getInitGMethod, &bob::learn::misc::PLDATrainer::setInitGMethod, "The method used for the initialization of G.") - .add_property("init_g_ratio", &bob::learn::misc::PLDATrainer::getInitGRatio, &bob::learn::misc::PLDATrainer::setInitGRatio, "The ratio used for the initialization of G.") - .add_property("init_sigma_method", &bob::learn::misc::PLDATrainer::getInitSigmaMethod, &bob::learn::misc::PLDATrainer::setInitSigmaMethod, "The method used for the initialization of sigma.") - .add_property("init_sigma_ratio", &bob::learn::misc::PLDATrainer::getInitSigmaRatio, &bob::learn::misc::PLDATrainer::setInitSigmaRatio, "The ratio used for the initialization of sigma.") - ; -} diff --git a/bob/learn/misc/old/tinyvector.cc b/bob/learn/misc/old/tinyvector.cc deleted file mode 100644 index f992e10..0000000 --- a/bob/learn/misc/old/tinyvector.cc +++ /dev/null @@ -1,290 +0,0 @@ -/** - * @author André Anjos <andre.anjos@idiap.ch> - * @date Tue Jan 18 17:07:26 2011 +0100 - * - * @brief Automatic converters to-from python for blitz::TinyVectors - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include <boost/python.hpp> -#include <boost/format.hpp> -#include <blitz/tinyvec2.h> - -/** - * Objects of this type create a binding between blitz::TinyVector<T,N> and - * python iterables. You can specify a python iterable as a parameter to a - * bound method that would normally receive a TinyVector<T,N> or a const - * TinyVector<T,N>& and the conversion will just magically happen. - */ -template <typename T, int N> -struct tinyvec_from_sequence { - typedef typename blitz::TinyVector<T,N> container_type; - - /** - * Registers converter from any python sequence into a blitz::TinyVector<T,N> - */ - tinyvec_from_sequence() { - boost::python::converter::registry::push_back(&convertible, &construct, - boost::python::type_id<container_type>()); - } - - /** - * This method will determine if the input python object is convertible into - * a TinyVector<T,N> - * - * Conditions: - * - The input object has to have N elements. - * - The input object has to be iterable. - * - All elements in the input object have to be convertible to T objects - */ - static void* convertible(PyObject* obj_ptr) { - - /** - * this bit will check if the input obj is one of the expected input types - * It will return 0 if the element in question is neither: - * - a list - * - a tuple - * - an iterable - * - a range - * - is not a string _and_ is not an unicode string _and_ - * (is a valid object pointer _or_ (too long to continue... ;-) - */ - if (!(PyList_Check(obj_ptr) - || PyTuple_Check(obj_ptr) - || PyIter_Check(obj_ptr) - || PyRange_Check(obj_ptr) - || ( -#if PY_VERSION_HEX < 0x03000000 - !PyString_Check(obj_ptr) -#else - !PyBytes_Check(obj_ptr) -#endif - && !PyUnicode_Check(obj_ptr) - && ( Py_TYPE(obj_ptr) == 0 - || Py_TYPE(Py_TYPE(obj_ptr)) == 0 - || Py_TYPE(Py_TYPE(obj_ptr))->tp_name == 0 - || std::strcmp( - Py_TYPE(Py_TYPE(obj_ptr))->tp_name, "Boost.Python.class") != 0) - && PyObject_HasAttrString(obj_ptr, "__len__") - && PyObject_HasAttrString(obj_ptr, "__getitem__")))) return 0; - - //this bit will check if we have exactly N - if(PyObject_Length(obj_ptr) != N) { - PyErr_Clear(); - return 0; - } - - //this bit will make sure we can extract an interator from the object - boost::python::handle<> obj_iter( - boost::python::allow_null(PyObject_GetIter(obj_ptr))); - if (!obj_iter.get()) { // must be convertible to an iterator - PyErr_Clear(); - return 0; - } - - //this bit will check every element for convertibility into "T" - bool is_range = PyRange_Check(obj_ptr); - std::size_t i=0; - for(;;++i) { //if everything ok, should leave for loop with i == N - boost::python::handle<> py_elem_hdl( - boost::python::allow_null(PyIter_Next(obj_iter.get()))); - if (PyErr_Occurred()) { - PyErr_Clear(); - return 0; - } - if (!py_elem_hdl.get()) break; // end of iteration - boost::python::object py_elem_obj(py_elem_hdl); - boost::python::extract<T> elem_proxy(py_elem_obj); - if (!elem_proxy.check()) return 0; - if (is_range) break; // in a range all elements are of the same type - } - if (!is_range) assert(i == N); - - return obj_ptr; - } - - /** - * This method will finally construct the C++ element out of the python - * object that was input. Please note that when boost::python reaches this - * method, the object has already been checked for convertibility. - */ - static void construct(PyObject* obj_ptr, - boost::python::converter::rvalue_from_python_stage1_data* data) { - boost::python::handle<> obj_iter(PyObject_GetIter(obj_ptr)); - void* storage = ((boost::python::converter::rvalue_from_python_storage<container_type>*)data)->storage.bytes; - new (storage) container_type(); - data->convertible = storage; - container_type& result = *((container_type*)storage); - std::size_t i=0; - for(;;++i) { - boost::python::handle<> py_elem_hdl( - boost::python::allow_null(PyIter_Next(obj_iter.get()))); - if (PyErr_Occurred()) boost::python::throw_error_already_set(); - if (!py_elem_hdl.get()) break; // end of iteration - boost::python::object py_elem_obj(py_elem_hdl); - typename boost::python::extract<T> elem_proxy(py_elem_obj); - result[i] = elem_proxy(); - } - if (i != N) { - boost::format s("expected %d elements for TinyVector<T,%d>, got %d"); - s % N % N % i; - PyErr_SetString(PyExc_RuntimeError, s.str().c_str()); - boost::python::throw_error_already_set(); - } - } - -}; - -/** - * Objects of this type bind TinyVector<T,N> to python tuples. Your method - * generates as output an object of this type and the object will be - * automatically converted into a python tuple. - */ -template <typename T, int N> -struct tinyvec_to_tuple { - typedef typename blitz::TinyVector<T,N> container_type; - - static PyObject* convert(const container_type& tv) { - boost::python::list result; - typedef typename container_type::const_iterator const_iter; - for(const_iter p=tv.begin();p!=tv.end();++p) { - result.append(boost::python::object(*p)); - } - return boost::python::incref(boost::python::tuple(result).ptr()); - } - - static const PyTypeObject* get_pytype() { return &PyTuple_Type; } - -}; - -template <typename T, int N> -void register_tinyvec_to_tuple() { - boost::python::to_python_converter<typename blitz::TinyVector<T,N>, - tinyvec_to_tuple<T,N> -#if defined BOOST_PYTHON_SUPPORTS_PY_SIGNATURES - ,true -#endif - >(); -} - -void bind_core_tinyvector () { - - /** - * The following struct constructors will make sure we can input - * blitz::TinyVector<T,N> in our bound C++ routines w/o needing to specify - * special converters each time. The rvalue converters allow boost::python to - * automatically map the following inputs: - * - * a) const blitz::TinyVector<T,N>& (pass by const reference) - * b) blitz::TinyVector<T,N> (pass by value) - * - * Please note that the last case: - * - * c) blitz::TinyVector<T,N>& (pass by non-const reference) - * - * is NOT covered by these converters. The reason being that because the - * object may be changed, there is no way for boost::python to update the - * original python object, in a sensible manner, at the return of the method. - * - * Avoid passing by non-const reference in your methods. - */ - tinyvec_from_sequence<int,1>(); - tinyvec_from_sequence<int,2>(); - tinyvec_from_sequence<int,3>(); - tinyvec_from_sequence<int,4>(); - tinyvec_from_sequence<int,5>(); - tinyvec_from_sequence<int,6>(); - tinyvec_from_sequence<int,7>(); - tinyvec_from_sequence<int,8>(); - tinyvec_from_sequence<int,9>(); - tinyvec_from_sequence<int,10>(); - tinyvec_from_sequence<int,11>(); - tinyvec_from_sequence<uint64_t,1>(); - tinyvec_from_sequence<uint64_t,2>(); - tinyvec_from_sequence<uint64_t,3>(); - tinyvec_from_sequence<uint64_t,4>(); - tinyvec_from_sequence<uint64_t,5>(); - tinyvec_from_sequence<uint64_t,6>(); - tinyvec_from_sequence<uint64_t,7>(); - tinyvec_from_sequence<uint64_t,8>(); - tinyvec_from_sequence<uint64_t,9>(); - tinyvec_from_sequence<uint64_t,10>(); - tinyvec_from_sequence<uint64_t,11>(); - tinyvec_from_sequence<double,1>(); - tinyvec_from_sequence<double,2>(); - tinyvec_from_sequence<double,3>(); - tinyvec_from_sequence<double,4>(); - tinyvec_from_sequence<double,5>(); - tinyvec_from_sequence<double,6>(); - tinyvec_from_sequence<double,7>(); - tinyvec_from_sequence<double,8>(); - tinyvec_from_sequence<double,9>(); - tinyvec_from_sequence<double,10>(); - tinyvec_from_sequence<double,11>(); - if (typeid(int) != typeid(blitz::diffType)) { - tinyvec_from_sequence<blitz::diffType,1>(); - tinyvec_from_sequence<blitz::diffType,2>(); - tinyvec_from_sequence<blitz::diffType,3>(); - tinyvec_from_sequence<blitz::diffType,4>(); - tinyvec_from_sequence<blitz::diffType,5>(); - tinyvec_from_sequence<blitz::diffType,6>(); - tinyvec_from_sequence<blitz::diffType,7>(); - tinyvec_from_sequence<blitz::diffType,8>(); - tinyvec_from_sequence<blitz::diffType,9>(); - tinyvec_from_sequence<blitz::diffType,10>(); - tinyvec_from_sequence<blitz::diffType,11>(); - } - - /** - * The following struct constructors will make C++ return values of type - * blitz::TinyVector<T,N> to show up in the python side as tuples. - */ - register_tinyvec_to_tuple<int,1>(); - register_tinyvec_to_tuple<int,2>(); - register_tinyvec_to_tuple<int,3>(); - register_tinyvec_to_tuple<int,4>(); - register_tinyvec_to_tuple<int,5>(); - register_tinyvec_to_tuple<int,6>(); - register_tinyvec_to_tuple<int,7>(); - register_tinyvec_to_tuple<int,8>(); - register_tinyvec_to_tuple<int,9>(); - register_tinyvec_to_tuple<int,10>(); - register_tinyvec_to_tuple<int,11>(); - register_tinyvec_to_tuple<uint64_t,1>(); - register_tinyvec_to_tuple<uint64_t,2>(); - register_tinyvec_to_tuple<uint64_t,3>(); - register_tinyvec_to_tuple<uint64_t,4>(); - register_tinyvec_to_tuple<uint64_t,5>(); - register_tinyvec_to_tuple<uint64_t,6>(); - register_tinyvec_to_tuple<uint64_t,7>(); - register_tinyvec_to_tuple<uint64_t,8>(); - register_tinyvec_to_tuple<uint64_t,9>(); - register_tinyvec_to_tuple<uint64_t,10>(); - register_tinyvec_to_tuple<uint64_t,11>(); - register_tinyvec_to_tuple<double,1>(); - register_tinyvec_to_tuple<double,2>(); - register_tinyvec_to_tuple<double,3>(); - register_tinyvec_to_tuple<double,4>(); - register_tinyvec_to_tuple<double,5>(); - register_tinyvec_to_tuple<double,6>(); - register_tinyvec_to_tuple<double,7>(); - register_tinyvec_to_tuple<double,8>(); - register_tinyvec_to_tuple<double,9>(); - register_tinyvec_to_tuple<double,10>(); - register_tinyvec_to_tuple<double,11>(); - if (typeid(int) != typeid(blitz::diffType)) { - register_tinyvec_to_tuple<blitz::diffType,1>(); - register_tinyvec_to_tuple<blitz::diffType,2>(); - register_tinyvec_to_tuple<blitz::diffType,3>(); - register_tinyvec_to_tuple<blitz::diffType,4>(); - register_tinyvec_to_tuple<blitz::diffType,5>(); - register_tinyvec_to_tuple<blitz::diffType,6>(); - register_tinyvec_to_tuple<blitz::diffType,7>(); - register_tinyvec_to_tuple<blitz::diffType,8>(); - register_tinyvec_to_tuple<blitz::diffType,9>(); - register_tinyvec_to_tuple<blitz::diffType,10>(); - register_tinyvec_to_tuple<blitz::diffType,11>(); - } - -} diff --git a/bob/learn/misc/old/ztnorm.cc b/bob/learn/misc/old/ztnorm.cc deleted file mode 100644 index 9affb8f..0000000 --- a/bob/learn/misc/old/ztnorm.cc +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @author Francois Moulin <Francois.Moulin@idiap.ch> - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Tue Jul 19 15:33:20 2011 +0200 - * - * @brief Binds ZT-normalization to python - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "ndarray.h" - -#include <bob.learn.misc/ZTNorm.h> - -using namespace boost::python; - -static object ztnorm1( - bob::python::const_ndarray rawscores_probes_vs_models, - bob::python::const_ndarray rawscores_zprobes_vs_models, - bob::python::const_ndarray rawscores_probes_vs_tmodels, - bob::python::const_ndarray rawscores_zprobes_vs_tmodels, - bob::python::const_ndarray mask_zprobes_vs_tmodels_istruetrial) -{ - const blitz::Array<double,2> rawscores_probes_vs_models_ = - rawscores_probes_vs_models.bz<double,2>(); - const blitz::Array<double,2> rawscores_zprobes_vs_models_ = - rawscores_zprobes_vs_models.bz<double,2>(); - const blitz::Array<double,2> rawscores_probes_vs_tmodels_ = - rawscores_probes_vs_tmodels.bz<double,2>(); - const blitz::Array<double,2> rawscores_zprobes_vs_tmodels_ = - rawscores_zprobes_vs_tmodels.bz<double,2>(); - const blitz::Array<bool,2> mask_zprobes_vs_tmodels_istruetrial_ = - mask_zprobes_vs_tmodels_istruetrial.bz<bool,2>(); - - // allocate output - bob::python::ndarray ret(bob::io::base::array::t_float64, rawscores_probes_vs_models_.extent(0), rawscores_probes_vs_models_.extent(1)); - blitz::Array<double, 2> ret_ = ret.bz<double,2>(); - - bob::learn::misc::ztNorm(rawscores_probes_vs_models_, - rawscores_zprobes_vs_models_, - rawscores_probes_vs_tmodels_, - rawscores_zprobes_vs_tmodels_, - mask_zprobes_vs_tmodels_istruetrial_, - ret_); - - return ret.self(); -} - -static object ztnorm2( - bob::python::const_ndarray rawscores_probes_vs_models, - bob::python::const_ndarray rawscores_zprobes_vs_models, - bob::python::const_ndarray rawscores_probes_vs_tmodels, - bob::python::const_ndarray rawscores_zprobes_vs_tmodels) -{ - const blitz::Array<double,2> rawscores_probes_vs_models_ = - rawscores_probes_vs_models.bz<double,2>(); - const blitz::Array<double,2> rawscores_zprobes_vs_models_ = - rawscores_zprobes_vs_models.bz<double,2>(); - const blitz::Array<double,2> rawscores_probes_vs_tmodels_ = - rawscores_probes_vs_tmodels.bz<double,2>(); - const blitz::Array<double,2> rawscores_zprobes_vs_tmodels_ = - rawscores_zprobes_vs_tmodels.bz<double,2>(); - - // allocate output - bob::python::ndarray ret(bob::io::base::array::t_float64, rawscores_probes_vs_models_.extent(0), rawscores_probes_vs_models_.extent(1)); - blitz::Array<double, 2> ret_ = ret.bz<double,2>(); - - bob::learn::misc::ztNorm(rawscores_probes_vs_models_, - rawscores_zprobes_vs_models_, - rawscores_probes_vs_tmodels_, - rawscores_zprobes_vs_tmodels_, - ret_); - - return ret.self(); -} - -static object tnorm( - bob::python::const_ndarray rawscores_probes_vs_models, - bob::python::const_ndarray rawscores_probes_vs_tmodels) -{ - const blitz::Array<double,2> rawscores_probes_vs_models_ = - rawscores_probes_vs_models.bz<double,2>(); - const blitz::Array<double,2> rawscores_probes_vs_tmodels_ = - rawscores_probes_vs_tmodels.bz<double,2>(); - - // allocate output - bob::python::ndarray ret(bob::io::base::array::t_float64, rawscores_probes_vs_models_.extent(0), rawscores_probes_vs_models_.extent(1)); - blitz::Array<double, 2> ret_ = ret.bz<double,2>(); - - bob::learn::misc::tNorm(rawscores_probes_vs_models_, - rawscores_probes_vs_tmodels_, - ret_); - - return ret.self(); -} - -static object znorm( - bob::python::const_ndarray rawscores_probes_vs_models, - bob::python::const_ndarray rawscores_zprobes_vs_models) -{ - const blitz::Array<double,2> rawscores_probes_vs_models_ = - rawscores_probes_vs_models.bz<double,2>(); - const blitz::Array<double,2> rawscores_zprobes_vs_models_ = - rawscores_zprobes_vs_models.bz<double,2>(); - - // allocate output - bob::python::ndarray ret(bob::io::base::array::t_float64, rawscores_probes_vs_models_.extent(0), rawscores_probes_vs_models_.extent(1)); - blitz::Array<double, 2> ret_ = ret.bz<double,2>(); - - bob::learn::misc::zNorm(rawscores_probes_vs_models_, - rawscores_zprobes_vs_models_, - ret_); - - return ret.self(); -} - -void bind_machine_ztnorm() -{ - def("ztnorm", - ztnorm1, - args("rawscores_probes_vs_models", - "rawscores_zprobes_vs_models", - "rawscores_probes_vs_tmodels", - "rawscores_zprobes_vs_tmodels", - "mask_zprobes_vs_tmodels_istruetrial"), - "Normalise raw scores with ZT-Norm" - ); - - def("ztnorm", - ztnorm2, - args("rawscores_probes_vs_models", - "rawscores_zprobes_vs_models", - "rawscores_probes_vs_tmodels", - "rawscores_zprobes_vs_tmodels"), - "Normalise raw scores with ZT-Norm. Assume that znorm and tnorm have no common subject id." - ); - - def("tnorm", - tnorm, - args("rawscores_probes_vs_models", - "rawscores_probes_vs_tmodels"), - "Normalise raw scores with T-Norm." - ); - - def("znorm", - znorm, - args("rawscores_probes_vs_models", - "rawscores_zprobes_vs_models"), - "Normalise raw scores with Z-Norm." - ); - -} diff --git a/bob/learn/misc/plda_base.cpp b/bob/learn/misc/plda_base.cpp deleted file mode 100644 index 2e3d972..0000000 --- a/bob/learn/misc/plda_base.cpp +++ /dev/null @@ -1,1097 +0,0 @@ -/** - * @date Thu Jan 29 15:44:15 2015 +0200 - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static auto PLDABase_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".PLDABase", - - "This class is a container for the :math:`F` (between class variantion matrix), :math:`G` (within class variantion matrix) and :math:`\\Sigma` " - "matrices and the mean vector :math:`\\mu` of a PLDA model. This also" - "precomputes useful matrices to make the model scalable." - "References: [ElShafey2014,PrinceElder2007,LiFu2012]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - - "Constructor, builds a new PLDABase. :math:`F`, :math:`G` " - "and :math:`\\Sigma` are initialized to the 'eye' matrix (matrix with 1's " - "on the diagonal and 0 outside), and :math:`\\mu` is initialized to 0.", - - "", - true - ) - .add_prototype("dim_d,dim_f,dim_g,variance_threshold","") - .add_prototype("other","") - .add_prototype("hdf5","") - - .add_parameter("dim_D", "int", "Dimensionality of the feature vector.") - .add_parameter("dim_F", "int", "Size of :math:`F`(between class variantion matrix).") - .add_parameter("dim_G", "int", "Size of :math:`G`(within class variantion matrix).") - .add_parameter("variance_threshold", "double", "The smallest possible value of the variance (Ignored if set to 0.)") - - .add_parameter("other", ":py:class:`bob.learn.misc.PLDABase`", "A PLDABase object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscPLDABase_init_copy(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDABase_doc.kwlist(1); - PyBobLearnMiscPLDABaseObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscPLDABase_Type, &o)){ - PLDABase_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::PLDABase(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscPLDABase_init_hdf5(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDABase_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBobIoHDF5File_Converter, &config)){ - PLDABase_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::PLDABase(*(config->f))); - - return 0; -} - - -static int PyBobLearnMiscPLDABase_init_dim(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDABase_doc.kwlist(0); - - int dim_D, dim_F, dim_G = 1; - double variance_threshold = 0.0; - - //Here we have to select which keyword argument to read - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iii|d", kwlist, &dim_D, &dim_F, &dim_G, &variance_threshold)){ - PLDABase_doc.print_usage(); - return -1; - } - - if(dim_D <= 0){ - PyErr_Format(PyExc_TypeError, "dim_D argument must be greater than or equal to one"); - return -1; - } - - if(dim_F <= 0){ - PyErr_Format(PyExc_TypeError, "dim_F argument must be greater than or equal to one"); - return -1; - } - - if(dim_G <= 0){ - PyErr_Format(PyExc_TypeError, "dim_G argument must be greater than or equal to one"); - return -1; - } - - if(variance_threshold < 0){ - PyErr_Format(PyExc_TypeError, "variance_threshold argument must be greater than or equal to zero"); - return -1; - } - - - self->cxx.reset(new bob::learn::misc::PLDABase(dim_D, dim_F, dim_G, variance_threshold)); - return 0; -} - -static int PyBobLearnMiscPLDABase_init(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if(nargs==1){ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscPLDABase_Check(arg)) - return PyBobLearnMiscPLDABase_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobIoHDF5File_Check(arg)) - return PyBobLearnMiscPLDABase_init_hdf5(self, args, kwargs); - } - else if((nargs==3)||(nargs==4)) - return PyBobLearnMiscPLDABase_init_dim(self, args, kwargs); - else{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 1, 3 or 4 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - PLDABase_doc.print_usage(); - return -1; - } - BOB_CATCH_MEMBER("cannot create PLDABase", 0) - return 0; -} - - - -static void PyBobLearnMiscPLDABase_delete(PyBobLearnMiscPLDABaseObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscPLDABase_RichCompare(PyBobLearnMiscPLDABaseObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscPLDABase_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscPLDABaseObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare PLDABase objects", 0) -} - -int PyBobLearnMiscPLDABase_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscPLDABase_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int, int)", - "A tuple that represents the dimensionality of the feature vector :math:`dim_d`, the :math:`F` matrix and the :math:`G` matrix.", - "" -); -PyObject* PyBobLearnMiscPLDABase_getShape(PyBobLearnMiscPLDABaseObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i,i)", self->cxx->getDimD(), self->cxx->getDimF(), self->cxx->getDimG()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - - -/***** F *****/ -static auto F = bob::extension::VariableDoc( - "f", - "array_like <float, 2D>", - "Returns the :math:`F` matrix (between class variantion matrix)", - "" -); -PyObject* PyBobLearnMiscPLDABase_getF(PyBobLearnMiscPLDABaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getF()); - BOB_CATCH_MEMBER("`f` could not be read", 0) -} -int PyBobLearnMiscPLDABase_setF(PyBobLearnMiscPLDABaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, F.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "f"); - if (!b) return -1; - self->cxx->setF(*b); - return 0; - BOB_CATCH_MEMBER("`f` vector could not be set", -1) -} - -/***** G *****/ -static auto G = bob::extension::VariableDoc( - "g", - "array_like <float, 2D>", - "Returns the :math:`G` matrix (between class variantion matrix)", - "" -); -PyObject* PyBobLearnMiscPLDABase_getG(PyBobLearnMiscPLDABaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getG()); - BOB_CATCH_MEMBER("`g` could not be read", 0) -} -int PyBobLearnMiscPLDABase_setG(PyBobLearnMiscPLDABaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, G.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,2>(o, "g"); - if (!b) return -1; - self->cxx->setG(*b); - return 0; - BOB_CATCH_MEMBER("`g` vector could not be set", -1) -} - - -/***** mu *****/ -static auto mu = bob::extension::VariableDoc( - "mu", - "array_like <float, 1D>", - "Gets the :math:`mu` mean vector of the PLDA model", - "" -); -PyObject* PyBobLearnMiscPLDABase_getMu(PyBobLearnMiscPLDABaseObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getMu()); - BOB_CATCH_MEMBER("`mu` could not be read", 0) -} -int PyBobLearnMiscPLDABase_setMu(PyBobLearnMiscPLDABaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, mu.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "mu"); - if (!b) return -1; - self->cxx->setMu(*b); - return 0; - BOB_CATCH_MEMBER("`mu` vector could not be set", -1) -} - - -/***** __isigma__ *****/ -static auto __isigma__ = bob::extension::VariableDoc( - "__isigma__", - "array_like <float, 1D>", - "Gets the inverse vector/diagonal matrix of :math:`\\Sigma^{-1}`", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getISigma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getISigma()); - BOB_CATCH_MEMBER("__isigma__ could not be read", 0) -} - - -/***** __alpha__ *****/ -static auto __alpha__ = bob::extension::VariableDoc( - "__alpha__", - "array_like <float, 2D>", - "Gets the \f$\alpha\f$ matrix." - ":math:`\\alpha = (Id + G^T \\Sigma^{-1} G)^{-1} = \\mathcal{G}`", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getAlpha(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAlpha()); - BOB_CATCH_MEMBER("__alpha__ could not be read", 0) -} - - -/***** __beta__ *****/ -static auto __beta__ = bob::extension::VariableDoc( - "__beta__", - "array_like <float, 2D>", - "Gets the :math:`\\beta` matrix " - ":math:`\\beta = (\\Sigma + G G^T)^{-1} = \\mathcal{S} = \\Sigma^{-1} - \\Sigma^{-1} G \\mathcal{G} G^{T} \\Sigma^{-1}`", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getBeta(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getBeta()); - BOB_CATCH_MEMBER("__beta__ could not be read", 0) -} - - -/***** __ft_beta__ *****/ -static auto __ft_beta__ = bob::extension::VariableDoc( - "__ft_beta__", - "array_like <float, 2D>", - "Gets the :math:`F^T \\beta' matrix", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getFtBeta(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getFtBeta()); - BOB_CATCH_MEMBER("__ft_beta__ could not be read", 0) -} - - -/***** __gt_i_sigma__ *****/ -static auto __gt_i_sigma__ = bob::extension::VariableDoc( - "__gt_i_sigma__", - "array_like <float, 2D>", - "Gets the :math:`G^T \\Sigma^{-1}` matrix", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getGtISigma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getGtISigma()); - BOB_CATCH_MEMBER("__gt_i_sigma__ could not be read", 0) -} - - -/***** __logdet_alpha__ *****/ -static auto __logdet_alpha__ = bob::extension::VariableDoc( - "__logdet_alpha__", - "double", - "Gets :math:`\\log(\\det(\\alpha))`", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getLogDetAlpha(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return Py_BuildValue("d",self->cxx->getLogDetAlpha()); - BOB_CATCH_MEMBER("__logdet_alpha__ could not be read", 0) -} - -/***** __logdet_sigma__ *****/ -static auto __logdet_sigma__ = bob::extension::VariableDoc( - "__logdet_sigma__", - "double", - "Gets :math:`\\log(\\det(\\Sigma))`", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getLogDetSigma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return Py_BuildValue("d",self->cxx->getLogDetSigma()); - BOB_CATCH_MEMBER("__logdet_sigma__ could not be read", 0) -} - - -/***** variance_threshold *****/ -static auto variance_threshold = bob::extension::VariableDoc( - "variance_threshold", - "double", - "", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getVarianceThreshold(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return Py_BuildValue("d",self->cxx->getVarianceThreshold()); - BOB_CATCH_MEMBER("variance_threshold could not be read", 0) -} -int PyBobLearnMiscPLDABase_setVarianceThreshold(PyBobLearnMiscPLDABaseObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an float", Py_TYPE(self)->tp_name, variance_threshold.name()); - return -1; - } - - self->cxx->setVarianceThreshold(PyFloat_AS_DOUBLE(value)); - BOB_CATCH_MEMBER("variance_threshold could not be set", -1) - return 0; -} - - - - -/***** sigma *****/ -static auto sigma = bob::extension::VariableDoc( - "sigma", - "array_like <float, 1D>", - "Gets the :math:`\\sigma` (diagonal) covariance matrix of the PLDA model", - "" -); -static PyObject* PyBobLearnMiscPLDABase_getSigma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getSigma()); - BOB_CATCH_MEMBER("sigma could not be read", 0) -} -int PyBobLearnMiscPLDABase_setSigma(PyBobLearnMiscPLDABaseObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, sigma.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "sigma"); - if (!b) return -1; - self->cxx->setSigma(*b); - return 0; - BOB_CATCH_MEMBER("`sigma` vector could not be set", -1) -} - - -static PyGetSetDef PyBobLearnMiscPLDABase_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscPLDABase_getShape, - 0, - shape.doc(), - 0 - }, - { - F.name(), - (getter)PyBobLearnMiscPLDABase_getF, - (setter)PyBobLearnMiscPLDABase_setF, - F.doc(), - 0 - }, - { - G.name(), - (getter)PyBobLearnMiscPLDABase_getG, - (setter)PyBobLearnMiscPLDABase_setG, - G.doc(), - 0 - }, - { - mu.name(), - (getter)PyBobLearnMiscPLDABase_getMu, - (setter)PyBobLearnMiscPLDABase_setMu, - mu.doc(), - 0 - }, - { - __isigma__.name(), - (getter)PyBobLearnMiscPLDABase_getISigma, - 0, - __isigma__.doc(), - 0 - }, - { - __alpha__.name(), - (getter)PyBobLearnMiscPLDABase_getAlpha, - 0, - __alpha__.doc(), - 0 - }, - { - __beta__.name(), - (getter)PyBobLearnMiscPLDABase_getBeta, - 0, - __beta__.doc(), - 0 - }, - { - __ft_beta__.name(), - (getter)PyBobLearnMiscPLDABase_getFtBeta, - 0, - __ft_beta__.doc(), - 0 - }, - { - __gt_i_sigma__.name(), - (getter)PyBobLearnMiscPLDABase_getGtISigma, - 0, - __gt_i_sigma__.doc(), - 0 - }, - { - __logdet_alpha__.name(), - (getter)PyBobLearnMiscPLDABase_getLogDetAlpha, - 0, - __logdet_alpha__.doc(), - 0 - }, - { - __logdet_sigma__.name(), - (getter)PyBobLearnMiscPLDABase_getLogDetSigma, - 0, - __logdet_sigma__.doc(), - 0 - }, - { - sigma.name(), - (getter)PyBobLearnMiscPLDABase_getSigma, - (setter)PyBobLearnMiscPLDABase_setSigma, - sigma.doc(), - 0 - }, - { - variance_threshold.name(), - (getter)PyBobLearnMiscPLDABase_getVarianceThreshold, - (setter)PyBobLearnMiscPLDABase_setVarianceThreshold, - variance_threshold.doc(), - 0 - }, - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the PLDABase to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscPLDABase_Save(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the PLDABase to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscPLDABase_Load(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this PLDABase with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.PLDABase`", "A PLDABase object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscPLDABase_IsSimilarTo(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscPLDABaseObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscPLDABase_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/*** resize ***/ -static auto resize = bob::extension::FunctionDoc( - "resize", - "Resizes the dimensionality of the PLDA model. Paramaters :math:`\\mu`, :math:`\\F`, :math:`\\G` and :math:`\\Sigma` are reinitialized.", - 0, - true -) -.add_prototype("dim_D,dim_F,dim_G") -.add_parameter("dim_D", "int", "Dimensionality of the feature vector.") -.add_parameter("dim_F", "int", "Size of :math:`F`(between class variantion matrix).") -.add_parameter("dim_G", "int", "Size of :math:`F`(within class variantion matrix)."); -static PyObject* PyBobLearnMiscPLDABase_resize(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = resize.kwlist(0); - - int dim_D, dim_F, dim_G = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iii", kwlist, &dim_D, &dim_F, &dim_G)) Py_RETURN_NONE; - - if(dim_D <= 0){ - PyErr_Format(PyExc_TypeError, "dim_D argument must be greater than or equal to one"); - Py_RETURN_NONE; - } - - if(dim_F <= 0){ - PyErr_Format(PyExc_TypeError, "dim_F argument must be greater than or equal to one"); - Py_RETURN_NONE; - } - - if(dim_G <= 0){ - PyErr_Format(PyExc_TypeError, "dim_G argument must be greater than or equal to one"); - Py_RETURN_NONE; - } - - self->cxx->resize(dim_D, dim_F, dim_G); - - BOB_CATCH_MEMBER("cannot perform the resize method", 0) - - Py_RETURN_NONE; -} - - -/***** get_gamma *****/ -static auto get_gamma = bob::extension::FunctionDoc( - "get_gamma", - "Gets the :math:`\\gamma_a` matrix for a given :math:`a` (number of samples). " - ":math:`gamma_{a} = (Id + a F^T \beta F)^{-1} = \\mathcal{F}_{a}`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","array_like <float, 2D>","Get the :math:`\\gamma` matrix"); -static PyObject* PyBobLearnMiscPLDABase_getGamma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_gamma.kwlist(0); - - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getGamma(i)); - BOB_CATCH_MEMBER("`get_gamma` could not be read", 0) -} - - -/***** has_gamma *****/ -static auto has_gamma = bob::extension::FunctionDoc( - "has_gamma", - "Tells if the :math:`gamma_a` matrix for a given a (number of samples) exists. " - ":math:`gamma_a=(Id + a F^T \\beta F)^{-1}`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","bool",""); -static PyObject* PyBobLearnMiscPLDABase_hasGamma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = has_gamma.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - if(self->cxx->hasGamma(i)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; - BOB_CATCH_MEMBER("`has_gamma` could not be read", 0) -} - - -/***** compute_gamma *****/ -static auto compute_gamma = bob::extension::FunctionDoc( - "compute_gamma", - "Tells if the :math:`gamma_a` matrix for a given a (number of samples) exists." - ":math:`gamma_a = (Id + a F^T \\beta F)^{-1}`", - 0, - true -) -.add_prototype("a,res","") -.add_parameter("a", "int", "Index") -.add_parameter("res", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscPLDABase_computeGamma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = compute_gamma.kwlist(0); - int i = 0; - PyBlitzArrayObject* res = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iO&", kwlist, &i, &PyBlitzArray_Converter, &res)) Py_RETURN_NONE; - - auto res_ = make_safe(res); - - self->cxx->computeGamma(i,*PyBlitzArrayCxx_AsBlitz<double,2>(res)); - Py_RETURN_NONE; - BOB_CATCH_MEMBER("`compute_gamma` could not be read", 0) -} - -/***** get_add_gamma *****/ -static auto get_add_gamma = bob::extension::FunctionDoc( - "get_add_gamma", - "Gets the :math:`gamma_a` matrix for a given :math:`f_a` (number of samples)." - ":math:`gamma_a = (Id + a F^T \\beta F)^{-1} = \\mathcal{F}_{a}`." - "Tries to find it from the base machine and then from this machine.", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","array_like <float, 2D>",""); -static PyObject* PyBobLearnMiscPLDABase_getAddGamma(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_add_gamma.kwlist(0); - - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAddGamma(i)); - BOB_CATCH_MEMBER("`get_add_gamma` could not be read", 0) -} - - -/***** has_log_like_const_term *****/ -static auto has_log_like_const_term = bob::extension::FunctionDoc( - "has_log_like_const_term", - "Tells if the log likelihood constant term for a given :math:`a` (number of samples) exists in this machine (does not check the base machine). " - ":math:`l_{a}=\\frac{a}{2} ( -D log(2\\pi) -log|\\Sigma| +log|\\alpha| +log|\\gamma_a|)`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","bool",""); -static PyObject* PyBobLearnMiscPLDABase_hasLogLikeConstTerm(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = has_log_like_const_term.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - if(self->cxx->hasLogLikeConstTerm(i)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; - BOB_CATCH_MEMBER("`has_log_like_const_term` could not be read", 0) -} - - -/***** compute_log_like_const_term" *****/ -static auto compute_log_like_const_term = bob::extension::FunctionDoc( - "compute_log_like_const_term", - "Computes the log likelihood constant term for a given :math:`a` (number of samples), given the provided :math:`gamma_a` matrix. " - ":math:`l_{a} = \\frac{a}{2} ( -D log(2\\pi) -log|\\Sigma| +log|\\alpha| +log|\\gamma_a|)`", - - 0, - true -) -.add_prototype("a,res","") -.add_parameter("a", "int", "Index") -.add_parameter("res", "array_like <float, 2D>", "Input data"); -static PyObject* PyBobLearnMiscPLDABase_computeLogLikeConstTerm(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = compute_log_like_const_term.kwlist(0); - int i = 0; - PyBlitzArrayObject* res = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iO&", kwlist, &i, &PyBlitzArray_Converter, &res)) Py_RETURN_NONE; - - auto res_ = make_safe(res); - - self->cxx->computeLogLikeConstTerm(i,*PyBlitzArrayCxx_AsBlitz<double,2>(res)); - Py_RETURN_NONE; - BOB_CATCH_MEMBER("`compute_gamma` could not be read", 0) -} - - -/***** get_add_log_like_const_term *****/ -static auto get_add_log_like_const_term = bob::extension::FunctionDoc( - "get_add_log_like_const_term", - - "Gets the log likelihood constant term for a given :math:`a` (number of samples). " - ":math:`l_{a} = \\frac{a}{2} ( -D log(2\\pi) -log|\\Sigma| +log|\\alpha| +log|\\gamma_a|)`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","double",""); -static PyObject* PyBobLearnMiscPLDABase_getAddLogLikeConstTerm(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_add_log_like_const_term.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return Py_BuildValue("d",self->cxx->getAddLogLikeConstTerm(i)); - - BOB_CATCH_MEMBER("`get_add_log_like_const_term` could not be read", 0) -} - - -/***** get_log_like_const_term *****/ -static auto get_log_like_const_term = bob::extension::FunctionDoc( - "get_log_like_const_term", - "Gets the log likelihood constant term for a given :math:`a` (number of samples). " - ":math:`l_{a} = \\frac{a}{2} ( -D log(2\\pi) -log|\\Sigma| +log|\\alpha| +log|\\gamma_a|)", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","double",""); -static PyObject* PyBobLearnMiscPLDABase_getLogLikeConstTerm(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_log_like_const_term.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return Py_BuildValue("d",self->cxx->getLogLikeConstTerm(i)); - - BOB_CATCH_MEMBER("`get_log_like_const_term` could not be read", 0) -} - -/***** clear_maps *****/ -static auto clear_maps = bob::extension::FunctionDoc( - "clear_maps", - "Clears the maps (:math:`gamma_a` and loglike_constterm_a).", - 0, - true -); -static PyObject* PyBobLearnMiscPLDABase_clearMaps(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - self->cxx->clearMaps(); - Py_RETURN_NONE; - - BOB_CATCH_MEMBER("`clear_maps` could not be read", 0) -} - - -/***** compute_log_likelihood_point_estimate *****/ -static auto compute_log_likelihood_point_estimate = bob::extension::FunctionDoc( - "compute_log_likelihood_point_estimate", - "Gets the log-likelihood of an observation, given the current model and the latent variables (point estimate)." - "This will basically compute :math:`p(x_{ij} | h_{i}, w_{ij}, \\Theta)`, given by " - ":math:`\\mathcal{N}(x_{ij}|[\\mu + F h_{i} + G w_{ij} + \\epsilon_{ij}, \\Sigma])`, which is in logarithm, " - ":math:`\\frac{D}{2} log(2\\pi) -\\frac{1}{2} log(det(\\Sigma)) -\\frac{1}{2} {(x_{ij}-(\\mu+F h_{i}+G w_{ij}))^{T}\\Sigma^{-1}(x_{ij}-(\\mu+F h_{i}+G w_{ij}))}`", - 0, - true -) -.add_prototype("xij,hi,wij","output") -.add_parameter("xij", "array_like <float, 1D>", "") -.add_parameter("hi", "array_like <float, 1D>", "") -.add_parameter("wij", "array_like <float, 1D>", "") -.add_return("output", "double", ""); -static PyObject* PyBobLearnMiscPLDABase_computeLogLikelihoodPointEstimate(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = compute_log_likelihood_point_estimate.kwlist(0); - PyBlitzArrayObject* xij, *hi, *wij; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&", kwlist, &PyBlitzArray_Converter, &xij, - &PyBlitzArray_Converter, &hi, - &PyBlitzArray_Converter, &wij)) return 0; - - auto xij_ = make_safe(xij); - auto hi_ = make_safe(hi); - auto wij_ = make_safe(wij); - - return Py_BuildValue("d", self->cxx->computeLogLikelihoodPointEstimate(*PyBlitzArrayCxx_AsBlitz<double,1>(xij), *PyBlitzArrayCxx_AsBlitz<double,1>(hi), *PyBlitzArrayCxx_AsBlitz<double,1>(wij))); - - BOB_CATCH_MEMBER("`compute_log_likelihood_point_estimate` could not be read", 0) -} - -/***** __precompute__ *****/ -static auto __precompute__ = bob::extension::FunctionDoc( - "__precompute__", - "Precomputes useful values for the log likelihood " - ":math:`\\log(\\det(\\alpha))` and :math:`\\log(\\det(\\Sigma))`.", - 0, - true -); -static PyObject* PyBobLearnMiscPLDABase_precompute(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - self->cxx->precompute(); - Py_RETURN_NONE; - - BOB_CATCH_MEMBER("`precompute` could not be read", 0) -} - - -/***** __precompute_log_like__ *****/ -static auto __precompute_log_like__ = bob::extension::FunctionDoc( - "__precompute_log_like__", - - "Precomputes useful values for the log likelihood " - ":math:`\\log(\\det(\\alpha))` and :math:`\\log(\\det(\\Sigma))`.", - - 0, - true -); -static PyObject* PyBobLearnMiscPLDABase_precomputeLogLike(PyBobLearnMiscPLDABaseObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - self->cxx->precomputeLogLike(); - Py_RETURN_NONE; - - BOB_CATCH_MEMBER("`__precompute_log_like__` could not be read", 0) -} - - -static PyMethodDef PyBobLearnMiscPLDABase_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscPLDABase_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscPLDABase_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscPLDABase_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - resize.name(), - (PyCFunction)PyBobLearnMiscPLDABase_resize, - METH_VARARGS|METH_KEYWORDS, - resize.doc() - }, - { - get_gamma.name(), - (PyCFunction)PyBobLearnMiscPLDABase_getGamma, - METH_VARARGS|METH_KEYWORDS, - get_gamma.doc() - }, - { - has_gamma.name(), - (PyCFunction)PyBobLearnMiscPLDABase_hasGamma, - METH_VARARGS|METH_KEYWORDS, - has_gamma.doc() - }, - { - compute_gamma.name(), - (PyCFunction)PyBobLearnMiscPLDABase_computeGamma, - METH_VARARGS|METH_KEYWORDS, - compute_gamma.doc() - }, - { - get_add_gamma.name(), - (PyCFunction)PyBobLearnMiscPLDABase_getAddGamma, - METH_VARARGS|METH_KEYWORDS, - get_add_gamma.doc() - }, - { - has_log_like_const_term.name(), - (PyCFunction)PyBobLearnMiscPLDABase_hasLogLikeConstTerm, - METH_VARARGS|METH_KEYWORDS, - has_log_like_const_term.doc() - }, - { - compute_log_like_const_term.name(), - (PyCFunction)PyBobLearnMiscPLDABase_computeLogLikeConstTerm, - METH_VARARGS|METH_KEYWORDS, - compute_log_like_const_term.doc() - }, - { - get_add_log_like_const_term.name(), - (PyCFunction)PyBobLearnMiscPLDABase_getAddLogLikeConstTerm, - METH_VARARGS|METH_KEYWORDS, - get_add_log_like_const_term.doc() - }, - { - get_log_like_const_term.name(), - (PyCFunction)PyBobLearnMiscPLDABase_getLogLikeConstTerm, - METH_VARARGS|METH_KEYWORDS, - get_log_like_const_term.doc() - }, - { - clear_maps.name(), - (PyCFunction)PyBobLearnMiscPLDABase_clearMaps, - METH_NOARGS, - clear_maps.doc() - }, - { - compute_log_likelihood_point_estimate.name(), - (PyCFunction)PyBobLearnMiscPLDABase_computeLogLikelihoodPointEstimate, - METH_VARARGS|METH_KEYWORDS, - compute_log_likelihood_point_estimate.doc() - }, - { - __precompute__.name(), - (PyCFunction)PyBobLearnMiscPLDABase_precompute, - METH_NOARGS, - __precompute__.doc() - }, - { - __precompute_log_like__.name(), - (PyCFunction)PyBobLearnMiscPLDABase_precomputeLogLike, - METH_NOARGS, - __precompute_log_like__.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the JFA type struct; will be initialized later -PyTypeObject PyBobLearnMiscPLDABase_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscPLDABase(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscPLDABase_Type.tp_name = PLDABase_doc.name(); - PyBobLearnMiscPLDABase_Type.tp_basicsize = sizeof(PyBobLearnMiscPLDABaseObject); - PyBobLearnMiscPLDABase_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscPLDABase_Type.tp_doc = PLDABase_doc.doc(); - - // set the functions - PyBobLearnMiscPLDABase_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscPLDABase_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscPLDABase_init); - PyBobLearnMiscPLDABase_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscPLDABase_delete); - PyBobLearnMiscPLDABase_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscPLDABase_RichCompare); - PyBobLearnMiscPLDABase_Type.tp_methods = PyBobLearnMiscPLDABase_methods; - PyBobLearnMiscPLDABase_Type.tp_getset = PyBobLearnMiscPLDABase_getseters; - //PyBobLearnMiscPLDABase_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscPLDABase_forward); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscPLDABase_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscPLDABase_Type); - return PyModule_AddObject(module, "PLDABase", (PyObject*)&PyBobLearnMiscPLDABase_Type) >= 0; -} - diff --git a/bob/learn/misc/plda_machine.cpp b/bob/learn/misc/plda_machine.cpp deleted file mode 100644 index d5cd1c8..0000000 --- a/bob/learn/misc/plda_machine.cpp +++ /dev/null @@ -1,801 +0,0 @@ -/** - * @date Thu Jan 30 11:10:15 2015 +0200 - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - -static inline bool f(PyObject* o){return o != 0 && PyObject_IsTrue(o) > 0;} /* converts PyObject to bool and returns false if object is NULL */ - -static auto PLDAMachine_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".PLDAMachine", - - "This class is a container for an enrolled identity/class. It contains information extracted from the enrollment samples. " - "It should be used in combination with a PLDABase instance." - "References: [ElShafey2014,PrinceElder2007,LiFu2012]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - - "Constructor, builds a new PLDAMachine.", - - "", - true - ) - .add_prototype("plda_base","") - .add_prototype("other","") - .add_prototype("hdf5,plda_base","") - - .add_parameter("plda_base", "`bob.learn.misc.PLDABase`", "") - .add_parameter("other", ":py:class:`bob.learn.misc.PLDAMachine`", "A PLDAMachine object to be copied.") - .add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading") - -); - - -static int PyBobLearnMiscPLDAMachine_init_copy(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDAMachine_doc.kwlist(1); - PyBobLearnMiscPLDAMachineObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscPLDAMachine_Type, &o)){ - PLDAMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::PLDAMachine(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscPLDAMachine_init_hdf5(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDAMachine_doc.kwlist(2); - - PyBobIoHDF5FileObject* config = 0; - PyBobLearnMiscPLDABaseObject* plda_base; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O!", kwlist, &PyBobIoHDF5File_Converter, &config, - &PyBobLearnMiscPLDABase_Type, &plda_base)){ - PLDAMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::PLDAMachine(*(config->f),plda_base->cxx)); - - return 0; -} - - -static int PyBobLearnMiscPLDAMachine_init_pldabase(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDAMachine_doc.kwlist(0); - PyBobLearnMiscPLDABaseObject* plda_base; - - //Here we have to select which keyword argument to read - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscPLDABase_Type, &plda_base)){ - PLDAMachine_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::PLDAMachine(plda_base->cxx)); - return 0; -} - -static int PyBobLearnMiscPLDAMachine_init(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if(nargs==1){ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - // If the constructor input is Gaussian object - if (PyBobLearnMiscPLDAMachine_Check(arg)) - return PyBobLearnMiscPLDAMachine_init_copy(self, args, kwargs); - // If the constructor input is a HDF5 - else if (PyBobLearnMiscPLDABase_Check(arg)) - return PyBobLearnMiscPLDAMachine_init_pldabase(self, args, kwargs); - } - else if(nargs==2) - return PyBobLearnMiscPLDAMachine_init_hdf5(self, args, kwargs); - else{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires 1 or 2 arguments, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - PLDAMachine_doc.print_usage(); - return -1; - } - BOB_CATCH_MEMBER("cannot create PLDAMachine", 0) - return 0; -} - - - -static void PyBobLearnMiscPLDAMachine_delete(PyBobLearnMiscPLDAMachineObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyObject* PyBobLearnMiscPLDAMachine_RichCompare(PyBobLearnMiscPLDAMachineObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscPLDAMachine_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscPLDAMachineObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare PLDAMachine objects", 0) -} - -int PyBobLearnMiscPLDAMachine_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscPLDAMachine_Type)); -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -/***** shape *****/ -static auto shape = bob::extension::VariableDoc( - "shape", - "(int,int, int)", - "A tuple that represents the dimensionality of the feature vector :math:`dim_d`, the :math:`F` matrix and the :math:`G` matrix.", - "" -); -PyObject* PyBobLearnMiscPLDAMachine_getShape(PyBobLearnMiscPLDAMachineObject* self, void*) { - BOB_TRY - return Py_BuildValue("(i,i,i)", self->cxx->getDimD(), self->cxx->getDimF(), self->cxx->getDimG()); - BOB_CATCH_MEMBER("shape could not be read", 0) -} - - -/***** n_samples *****/ -static auto n_samples = bob::extension::VariableDoc( - "n_samples", - "int", - "Number of enrolled samples", - "" -); -static PyObject* PyBobLearnMiscPLDAMachine_getNSamples(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return Py_BuildValue("i",self->cxx->getNSamples()); - BOB_CATCH_MEMBER("n_samples could not be read", 0) -} -int PyBobLearnMiscPLDAMachine_setNSamples(PyBobLearnMiscPLDAMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyInt_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an int", Py_TYPE(self)->tp_name, n_samples.name()); - return -1; - } - - if (PyInt_AS_LONG(value) < 0){ - PyErr_Format(PyExc_TypeError, "n_samples must be greater than or equal to zero"); - return -1; - } - - self->cxx->setNSamples(PyInt_AS_LONG(value)); - BOB_CATCH_MEMBER("n_samples could not be set", -1) - return 0; -} - - -/***** w_sum_xit_beta_xi *****/ -static auto w_sum_xit_beta_xi = bob::extension::VariableDoc( - "w_sum_xit_beta_xi", - "double", - "Gets the :math:`A = -0.5 \\sum_{i} x_{i}^T \\beta x_{i}` value", - "" -); -static PyObject* PyBobLearnMiscPLDAMachine_getWSumXitBetaXi(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return Py_BuildValue("d",self->cxx->getWSumXitBetaXi()); - BOB_CATCH_MEMBER("w_sum_xit_beta_xi could not be read", 0) -} -int PyBobLearnMiscPLDAMachine_setWSumXitBetaXi(PyBobLearnMiscPLDAMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an float", Py_TYPE(self)->tp_name, w_sum_xit_beta_xi.name()); - return -1; - } - - self->cxx->setWSumXitBetaXi(PyFloat_AS_DOUBLE(value)); - BOB_CATCH_MEMBER("w_sum_xit_beta_xi could not be set", -1) - return 0; -} - - -/***** plda_base *****/ -static auto plda_base = bob::extension::VariableDoc( - "plda_base", - ":py:class:`bob.learn.misc.PLDABase`", - "The PLDABase attached to this machine", - "" -); -PyObject* PyBobLearnMiscPLDAMachine_getPLDABase(PyBobLearnMiscPLDAMachineObject* self, void*){ - BOB_TRY - - boost::shared_ptr<bob::learn::misc::PLDABase> plda_base_o = self->cxx->getPLDABase(); - - //Allocating the correspondent python object - PyBobLearnMiscPLDABaseObject* retval = - (PyBobLearnMiscPLDABaseObject*)PyBobLearnMiscPLDABase_Type.tp_alloc(&PyBobLearnMiscPLDABase_Type, 0); - retval->cxx = plda_base_o; - - return Py_BuildValue("O",retval); - BOB_CATCH_MEMBER("plda_base could not be read", 0) -} -int PyBobLearnMiscPLDAMachine_setPLDABase(PyBobLearnMiscPLDAMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyBobLearnMiscPLDABase_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a :py:class:`bob.learn.misc.PLDABase`", Py_TYPE(self)->tp_name, plda_base.name()); - return -1; - } - - PyBobLearnMiscPLDABaseObject* plda_base_o = 0; - PyArg_Parse(value, "O!", &PyBobLearnMiscPLDABase_Type,&plda_base_o); - - self->cxx->setPLDABase(plda_base_o->cxx); - - return 0; - BOB_CATCH_MEMBER("plda_base could not be set", -1) -} - - -/***** weighted_sum *****/ -static auto weighted_sum = bob::extension::VariableDoc( - "weighted_sum", - "array_like <float, 1D>", - "Get/Set :math:``\\sum_{i} F^T \\beta x_{i}` value", - "" -); -static PyObject* PyBobLearnMiscPLDAMachine_getWeightedSum(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getWeightedSum()); - BOB_CATCH_MEMBER("weighted_sum could not be read", 0) -} -int PyBobLearnMiscPLDAMachine_setWeightedSum(PyBobLearnMiscPLDAMachineObject* self, PyObject* value, void*){ - BOB_TRY - PyBlitzArrayObject* o; - if (!PyBlitzArray_Converter(value, &o)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects a 2D array of floats", Py_TYPE(self)->tp_name, weighted_sum.name()); - return -1; - } - auto o_ = make_safe(o); - auto b = PyBlitzArrayCxx_AsBlitz<double,1>(o, "weighted_sum"); - if (!b) return -1; - self->cxx->setWeightedSum(*b); - return 0; - BOB_CATCH_MEMBER("`weighted_sum` vector could not be set", -1) -} - - -/***** log_likelihood *****/ -static auto log_likelihood = bob::extension::VariableDoc( - "log_likelihood", - "double", - "", - "" -); -static PyObject* PyBobLearnMiscPLDAMachine_getLogLikelihood(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - return Py_BuildValue("d",self->cxx->getLogLikelihood()); - BOB_CATCH_MEMBER("log_likelihood could not be read", 0) -} -int PyBobLearnMiscPLDAMachine_setLogLikelihood(PyBobLearnMiscPLDAMachineObject* self, PyObject* value, void*){ - BOB_TRY - - if (!PyNumber_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an double", Py_TYPE(self)->tp_name, log_likelihood.name()); - return -1; - } - - self->cxx->setLogLikelihood(PyFloat_AS_DOUBLE(value)); - BOB_CATCH_MEMBER("log_likelihood could not be set", -1) - return 0; -} - - -static PyGetSetDef PyBobLearnMiscPLDAMachine_getseters[] = { - { - shape.name(), - (getter)PyBobLearnMiscPLDAMachine_getShape, - 0, - shape.doc(), - 0 - }, - { - n_samples.name(), - (getter)PyBobLearnMiscPLDAMachine_getNSamples, - (setter)PyBobLearnMiscPLDAMachine_setNSamples, - n_samples.doc(), - 0 - }, - { - w_sum_xit_beta_xi.name(), - (getter)PyBobLearnMiscPLDAMachine_getWSumXitBetaXi, - (setter)PyBobLearnMiscPLDAMachine_setWSumXitBetaXi, - w_sum_xit_beta_xi.doc(), - 0 - }, - { - plda_base.name(), - (getter)PyBobLearnMiscPLDAMachine_getPLDABase, - (setter)PyBobLearnMiscPLDAMachine_setPLDABase, - plda_base.doc(), - 0 - }, - { - weighted_sum.name(), - (getter)PyBobLearnMiscPLDAMachine_getWeightedSum, - (setter)PyBobLearnMiscPLDAMachine_setWeightedSum, - weighted_sum.doc(), - 0 - }, - { - log_likelihood.name(), - (getter)PyBobLearnMiscPLDAMachine_getLogLikelihood, - (setter)PyBobLearnMiscPLDAMachine_setLogLikelihood, - log_likelihood.doc(), - 0 - }, - {0} // Sentinel -}; - - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - - -/*** save ***/ -static auto save = bob::extension::FunctionDoc( - "save", - "Save the configuration of the PLDAMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for writing"); -static PyObject* PyBobLearnMiscPLDAMachine_Save(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - - BOB_TRY - - // get list of arguments - char** kwlist = save.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->save(*hdf5->f); - - BOB_CATCH_MEMBER("cannot save the data", 0) - Py_RETURN_NONE; -} - -/*** load ***/ -static auto load = bob::extension::FunctionDoc( - "load", - "Load the configuration of the PLDAMachine to a given HDF5 file" -) -.add_prototype("hdf5") -.add_parameter("hdf5", ":py:class:`bob.io.base.HDF5File`", "An HDF5 file open for reading"); -static PyObject* PyBobLearnMiscPLDAMachine_Load(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = load.kwlist(0); - PyBobIoHDF5FileObject* hdf5; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, PyBobIoHDF5File_Converter, &hdf5)) return 0; - - auto hdf5_ = make_safe(hdf5); - self->cxx->load(*hdf5->f); - - BOB_CATCH_MEMBER("cannot load the data", 0) - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this PLDAMachine with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.PLDAMachine`", "A PLDAMachine object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscPLDAMachine_IsSimilarTo(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscPLDAMachineObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscPLDAMachine_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - -/***** get_gamma *****/ -static auto get_gamma = bob::extension::FunctionDoc( - "get_gamma", - "Gets the :math:`\\gamma_a` matrix for a given :math:`a` (number of samples). " - ":math:`gamma_{a} = (Id + a F^T \beta F)^{-1} = \\mathcal{F}_{a}`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","array_like <float, 2D>","Get the :math:`\\gamma` matrix"); -static PyObject* PyBobLearnMiscPLDAMachine_getGamma(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_gamma.kwlist(0); - - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getGamma(i)); - BOB_CATCH_MEMBER("`get_gamma` could not be read", 0) -} - - -/***** has_gamma *****/ -static auto has_gamma = bob::extension::FunctionDoc( - "has_gamma", - "Tells if the :math:`gamma_a` matrix for a given a (number of samples) exists. " - ":math:`gamma_a=(Id + a F^T \\beta F)^{-1}`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","bool",""); -static PyObject* PyBobLearnMiscPLDAMachine_hasGamma(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = has_gamma.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - if(self->cxx->hasGamma(i)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; - BOB_CATCH_MEMBER("`has_gamma` could not be read", 0) -} - - -/***** get_add_gamma *****/ -static auto get_add_gamma = bob::extension::FunctionDoc( - "get_add_gamma", - "Gets the :math:`gamma_a` matrix for a given :math:`f_a` (number of samples)." - ":math:`gamma_a = (Id + a F^T \\beta F)^{-1} = \\mathcal{F}_{a}`." - "Tries to find it from the base machine and then from this machine.", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","array_like <float, 2D>",""); -static PyObject* PyBobLearnMiscPLDAMachine_getAddGamma(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_add_gamma.kwlist(0); - - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getAddGamma(i)); - BOB_CATCH_MEMBER("`get_add_gamma` could not be read", 0) -} - - -/***** has_log_like_const_term *****/ -static auto has_log_like_const_term = bob::extension::FunctionDoc( - "has_log_like_const_term", - "Tells if the log likelihood constant term for a given :math:`a` (number of samples) exists in this machine (does not check the base machine). " - ":math:`l_{a}=\\frac{a}{2} ( -D log(2\\pi) -log|\\Sigma| +log|\\alpha| +log|\\gamma_a|)`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","bool",""); -static PyObject* PyBobLearnMiscPLDAMachine_hasLogLikeConstTerm(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = has_log_like_const_term.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - if(self->cxx->hasLogLikeConstTerm(i)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; - BOB_CATCH_MEMBER("`has_log_like_const_term` could not be read", 0) -} - - -/***** get_add_log_like_const_term *****/ -static auto get_add_log_like_const_term = bob::extension::FunctionDoc( - "get_add_log_like_const_term", - - "Gets the log likelihood constant term for a given :math:`a` (number of samples). " - ":math:`l_{a} = \\frac{a}{2} ( -D log(2\\pi) -log|\\Sigma| +log|\\alpha| +log|\\gamma_a|)`", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","double",""); -static PyObject* PyBobLearnMiscPLDAMachine_getAddLogLikeConstTerm(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_add_log_like_const_term.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return Py_BuildValue("d",self->cxx->getAddLogLikeConstTerm(i)); - - BOB_CATCH_MEMBER("`get_add_log_like_const_term` could not be read", 0) -} - - -/***** get_log_like_const_term *****/ -static auto get_log_like_const_term = bob::extension::FunctionDoc( - "get_log_like_const_term", - "Gets the log likelihood constant term for a given :math:`a` (number of samples). " - ":math:`l_{a} = \\frac{a}{2} ( -D log(2\\pi) -log|\\Sigma| +log|\\alpha| +log|\\gamma_a|)", - 0, - true -) -.add_prototype("a","output") -.add_parameter("a", "int", "Index") -.add_return("output","double",""); -static PyObject* PyBobLearnMiscPLDAMachine_getLogLikeConstTerm(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = get_log_like_const_term.kwlist(0); - int i = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &i)) Py_RETURN_NONE; - - return Py_BuildValue("d",self->cxx->getLogLikeConstTerm(i)); - - BOB_CATCH_MEMBER("`get_log_like_const_term` could not be read", 0) -} - -/***** clear_maps *****/ -static auto clear_maps = bob::extension::FunctionDoc( - "clear_maps", - "Clears the maps (:math:`gamma_a` and loglike_constterm_a).", - 0, - true -); -static PyObject* PyBobLearnMiscPLDAMachine_clearMaps(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - self->cxx->clearMaps(); - Py_RETURN_NONE; - - BOB_CATCH_MEMBER("`clear_maps` could not be read", 0) -} - - -/***** compute_log_likelihood *****/ -static auto compute_log_likelihood = bob::extension::FunctionDoc( - "compute_log_likelihood", - "Compute the log-likelihood of the given sample and (optionally) the enrolled samples", - 0, - true -) -.add_prototype("sample,with_enrolled_samples","output") -.add_parameter("sample", "array_like <float, 1D>", "Sample") -.add_parameter("with_enrolled_samples", "bool", "") -.add_return("output","double","The log-likelihood"); -static PyObject* PyBobLearnMiscPLDAMachine_computeLogLikelihood(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = compute_log_likelihood.kwlist(0); - - PyBlitzArrayObject* samples; - PyObject* with_enrolled_samples = Py_True; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|O!", kwlist, &PyBlitzArray_Converter, &samples, - &PyBool_Type, &with_enrolled_samples)) Py_RETURN_NONE; - auto samples_ = make_safe(samples); - - blitz::Array<double,2> blitz_test = *PyBlitzArrayCxx_AsBlitz<double,2>(samples); - - //There are 2 methods in C++, one <double,1> and the another <double,2> - if (blitz_test.extent(1)==0) - return Py_BuildValue("d",self->cxx->computeLogLikelihood(*PyBlitzArrayCxx_AsBlitz<double,1>(samples), f(with_enrolled_samples))); - else - return Py_BuildValue("d",self->cxx->computeLogLikelihood(*PyBlitzArrayCxx_AsBlitz<double,2>(samples), f(with_enrolled_samples))); - - BOB_CATCH_MEMBER("`compute_log_likelihood` could not be read", 0) -} - - -/***** forward *****/ -static auto forward = bob::extension::FunctionDoc( - "forward", - "Computes a log likelihood ratio from a 1D or 2D blitz::Array", - 0, - true -) -.add_prototype("samples","output") -.add_parameter("samples", "array_like <float, 1D>", "Sample") -.add_return("output","double","The log-likelihood ratio"); -static PyObject* PyBobLearnMiscPLDAMachine_forward(PyBobLearnMiscPLDAMachineObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - char** kwlist = forward.kwlist(0); - - PyBlitzArrayObject* samples; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &samples)) Py_RETURN_NONE; - auto samples_ = make_safe(samples); - blitz::Array<double,2> blitz_test = *PyBlitzArrayCxx_AsBlitz<double,2>(samples); - - //There are 2 methods in C++, one <double,1> and the another <double,2> - if (blitz_test.extent(1)==0) - return Py_BuildValue("d",self->cxx->forward(*PyBlitzArrayCxx_AsBlitz<double,1>(samples))); - else - return Py_BuildValue("d",self->cxx->forward(*PyBlitzArrayCxx_AsBlitz<double,2>(samples))); - - BOB_CATCH_MEMBER("`forward` could not be read", 0) -} - - -static PyMethodDef PyBobLearnMiscPLDAMachine_methods[] = { - { - save.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_Save, - METH_VARARGS|METH_KEYWORDS, - save.doc() - }, - { - load.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_Load, - METH_VARARGS|METH_KEYWORDS, - load.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - { - get_gamma.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_getGamma, - METH_VARARGS|METH_KEYWORDS, - get_gamma.doc() - }, - { - has_gamma.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_hasGamma, - METH_VARARGS|METH_KEYWORDS, - has_gamma.doc() - }, - { - get_add_gamma.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_getAddGamma, - METH_VARARGS|METH_KEYWORDS, - get_add_gamma.doc() - }, - { - has_log_like_const_term.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_hasLogLikeConstTerm, - METH_VARARGS|METH_KEYWORDS, - has_log_like_const_term.doc() - }, - { - get_add_log_like_const_term.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_getAddLogLikeConstTerm, - METH_VARARGS|METH_KEYWORDS, - get_add_log_like_const_term.doc() - }, - { - get_log_like_const_term.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_getLogLikeConstTerm, - METH_VARARGS|METH_KEYWORDS, - get_log_like_const_term.doc() - }, - { - clear_maps.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_clearMaps, - METH_NOARGS, - clear_maps.doc() - }, - { - compute_log_likelihood.name(), - (PyCFunction)PyBobLearnMiscPLDAMachine_computeLogLikelihood, - METH_VARARGS|METH_KEYWORDS, - compute_log_likelihood.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the JFA type struct; will be initialized later -PyTypeObject PyBobLearnMiscPLDAMachine_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscPLDAMachine(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscPLDAMachine_Type.tp_name = PLDAMachine_doc.name(); - PyBobLearnMiscPLDAMachine_Type.tp_basicsize = sizeof(PyBobLearnMiscPLDAMachineObject); - PyBobLearnMiscPLDAMachine_Type.tp_flags = Py_TPFLAGS_DEFAULT; - PyBobLearnMiscPLDAMachine_Type.tp_doc = PLDAMachine_doc.doc(); - - // set the functions - PyBobLearnMiscPLDAMachine_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscPLDAMachine_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscPLDAMachine_init); - PyBobLearnMiscPLDAMachine_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscPLDAMachine_delete); - PyBobLearnMiscPLDAMachine_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscPLDAMachine_RichCompare); - PyBobLearnMiscPLDAMachine_Type.tp_methods = PyBobLearnMiscPLDAMachine_methods; - PyBobLearnMiscPLDAMachine_Type.tp_getset = PyBobLearnMiscPLDAMachine_getseters; - PyBobLearnMiscPLDAMachine_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscPLDAMachine_forward); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscPLDAMachine_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscPLDAMachine_Type); - return PyModule_AddObject(module, "PLDAMachine", (PyObject*)&PyBobLearnMiscPLDAMachine_Type) >= 0; -} - diff --git a/bob/learn/misc/plda_trainer.cpp b/bob/learn/misc/plda_trainer.cpp deleted file mode 100644 index 2f76dc3..0000000 --- a/bob/learn/misc/plda_trainer.cpp +++ /dev/null @@ -1,704 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Wed 04 Feb 14:15:00 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" -#include <boost/make_shared.hpp> - -//Defining maps for each initializatio method -static const std::map<std::string, bob::learn::misc::PLDATrainer::InitFMethod> FMethod = {{"RANDOM_F", bob::learn::misc::PLDATrainer::RANDOM_F}, {"BETWEEN_SCATTER", bob::learn::misc::PLDATrainer::BETWEEN_SCATTER}}; - -static const std::map<std::string, bob::learn::misc::PLDATrainer::InitGMethod> GMethod = {{"RANDOM_G", bob::learn::misc::PLDATrainer::RANDOM_G}, {"WITHIN_SCATTER", bob::learn::misc::PLDATrainer::WITHIN_SCATTER}}; - -static const std::map<std::string, bob::learn::misc::PLDATrainer::InitSigmaMethod> SigmaMethod = {{"RANDOM_SIGMA", bob::learn::misc::PLDATrainer::RANDOM_SIGMA}, {"VARIANCE_G", bob::learn::misc::PLDATrainer::VARIANCE_G}, {"CONSTANT", bob::learn::misc::PLDATrainer::CONSTANT}, {"VARIANCE_DATA", bob::learn::misc::PLDATrainer::VARIANCE_DATA}}; - - - -//String to type -static inline bob::learn::misc::PLDATrainer::InitFMethod string2FMethod(const std::string& o){ - auto it = FMethod.find(o); - if (it == FMethod.end()) throw std::runtime_error("The given FMethod '" + o + "' is not known; choose one of ('RANDOM_F','BETWEEN_SCATTER')"); - else return it->second; -} - -static inline bob::learn::misc::PLDATrainer::InitGMethod string2GMethod(const std::string& o){ - auto it = GMethod.find(o); - if (it == GMethod.end()) throw std::runtime_error("The given GMethod '" + o + "' is not known; choose one of ('RANDOM_G','WITHIN_SCATTER')"); - else return it->second; -} - -static inline bob::learn::misc::PLDATrainer::InitSigmaMethod string2SigmaMethod(const std::string& o){ - auto it = SigmaMethod.find(o); - if (it == SigmaMethod.end()) throw std::runtime_error("The given SigmaMethod '" + o + "' is not known; choose one of ('RANDOM_SIGMA','VARIANCE_G', 'CONSTANT', 'VARIANCE_DATA')"); - else return it->second; -} - -//Type to string -static inline const std::string& FMethod2string(bob::learn::misc::PLDATrainer::InitFMethod o){ - for (auto it = FMethod.begin(); it != FMethod.end(); ++it) if (it->second == o) return it->first; - throw std::runtime_error("The given FMethod type is not known"); -} - -static inline const std::string& GMethod2string(bob::learn::misc::PLDATrainer::InitGMethod o){ - for (auto it = GMethod.begin(); it != GMethod.end(); ++it) if (it->second == o) return it->first; - throw std::runtime_error("The given GMethod type is not known"); -} - -static inline const std::string& SigmaMethod2string(bob::learn::misc::PLDATrainer::InitSigmaMethod o){ - for (auto it = SigmaMethod.begin(); it != SigmaMethod.end(); ++it) if (it->second == o) return it->first; - throw std::runtime_error("The given SigmaMethod type is not known"); -} - - -static inline bool f(PyObject* o){return o != 0 && PyObject_IsTrue(o) > 0;} /* converts PyObject to bool and returns false if object is NULL */ - -template <int N> -int list_as_vector(PyObject* list, std::vector<blitz::Array<double,N> >& vec) -{ - for (int i=0; i<PyList_GET_SIZE(list); i++) - { - PyBlitzArrayObject* blitz_object; - if (!PyArg_Parse(PyList_GetItem(list, i), "O&", &PyBlitzArray_Converter, &blitz_object)){ - PyErr_Format(PyExc_RuntimeError, "Expected numpy array object"); - return -1; - } - auto blitz_object_ = make_safe(blitz_object); - vec.push_back(*PyBlitzArrayCxx_AsBlitz<double,N>(blitz_object)); - } - return 0; -} - - -template <int N> -static PyObject* vector_as_list(const std::vector<blitz::Array<double,N> >& vec) -{ - PyObject* list = PyList_New(vec.size()); - for(size_t i=0; i<vec.size(); i++){ - blitz::Array<double,N> numpy_array = vec[i]; - PyObject* numpy_py_object = PyBlitzArrayCxx_AsNumpy(numpy_array); - PyList_SET_ITEM(list, i, numpy_py_object); - } - return list; -} - - -/******************************************************************/ -/************ Constructor Section *********************************/ -/******************************************************************/ - - -static auto PLDATrainer_doc = bob::extension::ClassDoc( - BOB_EXT_MODULE_PREFIX ".PLDATrainer", - "This class can be used to train the :math:`$F$`, :math:`$G$ and " - " :math:`$\\Sigma$` matrices and the mean vector :math:`$\\mu$` of a PLDA model." - "References: [ElShafey2014,PrinceElder2007,LiFu2012]", - "" -).add_constructor( - bob::extension::FunctionDoc( - "__init__", - "Default constructor.\n Initializes a new PLDA trainer. The " - "training stage will place the resulting components in the " - "PLDABase.", - "", - true - ) - .add_prototype("use_sum_second_order","") - .add_prototype("other","") - .add_prototype("","") - - .add_parameter("other", ":py:class:`bob.learn.misc.PLDATrainer`", "A PLDATrainer object to be copied.") - .add_parameter("use_sum_second_order", "bool", "") -); - -static int PyBobLearnMiscPLDATrainer_init_copy(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDATrainer_doc.kwlist(1); - PyBobLearnMiscPLDATrainerObject* o; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscPLDATrainer_Type, &o)){ - PLDATrainer_doc.print_usage(); - return -1; - } - - self->cxx.reset(new bob::learn::misc::PLDATrainer(*o->cxx)); - return 0; -} - - -static int PyBobLearnMiscPLDATrainer_init_bool(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - - char** kwlist = PLDATrainer_doc.kwlist(0); - PyObject* use_sum_second_order; - - //Parsing the input argments - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBool_Type, &use_sum_second_order)) - return -1; - - self->cxx.reset(new bob::learn::misc::PLDATrainer(f(use_sum_second_order))); - return 0; -} - - -static int PyBobLearnMiscPLDATrainer_init(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - // get the number of command line arguments - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if(nargs==1){ - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); - } - - if(PyBobLearnMiscPLDATrainer_Check(arg)) - // If the constructor input is PLDATrainer object - return PyBobLearnMiscPLDATrainer_init_copy(self, args, kwargs); - else - return PyBobLearnMiscPLDATrainer_init_bool(self, args, kwargs); - } - else{ - PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s requires only 0 or 1 argument, but you provided %d (see help)", Py_TYPE(self)->tp_name, nargs); - PLDATrainer_doc.print_usage(); - return -1; - } - - BOB_CATCH_MEMBER("cannot create PLDATrainer", 0) - return 0; -} - - -static void PyBobLearnMiscPLDATrainer_delete(PyBobLearnMiscPLDATrainerObject* self) { - self->cxx.reset(); - Py_TYPE(self)->tp_free((PyObject*)self); -} - - -int PyBobLearnMiscPLDATrainer_Check(PyObject* o) { - return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscPLDATrainer_Type)); -} - - -static PyObject* PyBobLearnMiscPLDATrainer_RichCompare(PyBobLearnMiscPLDATrainerObject* self, PyObject* other, int op) { - BOB_TRY - - if (!PyBobLearnMiscPLDATrainer_Check(other)) { - PyErr_Format(PyExc_TypeError, "cannot compare `%s' with `%s'", Py_TYPE(self)->tp_name, Py_TYPE(other)->tp_name); - return 0; - } - auto other_ = reinterpret_cast<PyBobLearnMiscPLDATrainerObject*>(other); - switch (op) { - case Py_EQ: - if (*self->cxx==*other_->cxx) Py_RETURN_TRUE; else Py_RETURN_FALSE; - case Py_NE: - if (*self->cxx==*other_->cxx) Py_RETURN_FALSE; else Py_RETURN_TRUE; - default: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - BOB_CATCH_MEMBER("cannot compare PLDATrainer objects", 0) -} - - -/******************************************************************/ -/************ Variables Section ***********************************/ -/******************************************************************/ - -static auto z_second_order = bob::extension::VariableDoc( - "z_second_order", - "array_like <float, 3D>", - "", - "" -); -PyObject* PyBobLearnMiscPLDATrainer_get_z_second_order(PyBobLearnMiscPLDATrainerObject* self, void*){ - BOB_TRY - //return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getZSecondOrder()); - return vector_as_list(self->cxx->getZSecondOrder()); - BOB_CATCH_MEMBER("z_second_order could not be read", 0) -} - - -static auto z_second_order_sum = bob::extension::VariableDoc( - "z_second_order_sum", - "array_like <float, 2D>", - "", - "" -); -PyObject* PyBobLearnMiscPLDATrainer_get_z_second_order_sum(PyBobLearnMiscPLDATrainerObject* self, void*){ - BOB_TRY - return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getZSecondOrderSum()); - BOB_CATCH_MEMBER("z_second_order_sum could not be read", 0) -} - - -static auto z_first_order = bob::extension::VariableDoc( - "z_first_order", - "array_like <float, 2D>", - "", - "" -); -PyObject* PyBobLearnMiscPLDATrainer_get_z_first_order(PyBobLearnMiscPLDATrainerObject* self, void*){ - BOB_TRY - //return PyBlitzArrayCxx_AsConstNumpy(self->cxx->getZFirstOrder()); - return vector_as_list(self->cxx->getZFirstOrder()); - BOB_CATCH_MEMBER("z_first_order could not be read", 0) -} - - -/***** rng *****/ -static auto rng = bob::extension::VariableDoc( - "rng", - "str", - "The Mersenne Twister mt19937 random generator used for the initialization of subspaces/arrays before the EM loop.", - "" -); -PyObject* PyBobLearnMiscPLDATrainer_getRng(PyBobLearnMiscPLDATrainerObject* self, void*) { - BOB_TRY - //Allocating the correspondent python object - - PyBoostMt19937Object* retval = - (PyBoostMt19937Object*)PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type, 0); - - retval->rng = self->cxx->getRng().get(); - return Py_BuildValue("O", retval); - BOB_CATCH_MEMBER("Rng method could not be read", 0) -} -int PyBobLearnMiscPLDATrainer_setRng(PyBobLearnMiscPLDATrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyBoostMt19937_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an PyBoostMt19937_Check", Py_TYPE(self)->tp_name, rng.name()); - return -1; - } - - PyBoostMt19937Object* rng_object = 0; - PyArg_Parse(value, "O!", &PyBoostMt19937_Type, &rng_object); - self->cxx->setRng((boost::shared_ptr<boost::mt19937>)rng_object->rng); - - return 0; - BOB_CATCH_MEMBER("Rng could not be set", 0) -} - - -/***** init_f_method *****/ -static auto init_f_method = bob::extension::VariableDoc( - "init_f_method", - "str", - "The method used for the initialization of :math:`$F$`.", - "" -); -PyObject* PyBobLearnMiscPLDATrainer_getFMethod(PyBobLearnMiscPLDATrainerObject* self, void*) { - BOB_TRY - return Py_BuildValue("s", FMethod2string(self->cxx->getInitFMethod()).c_str()); - BOB_CATCH_MEMBER("init_f_method method could not be read", 0) -} -int PyBobLearnMiscPLDATrainer_setFMethod(PyBobLearnMiscPLDATrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyString_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an str", Py_TYPE(self)->tp_name, init_f_method.name()); - return -1; - } - self->cxx->setInitFMethod(string2FMethod(PyString_AS_STRING(value))); - - return 0; - BOB_CATCH_MEMBER("init_f_method method could not be set", 0) -} - - -/***** init_g_method *****/ -static auto init_g_method = bob::extension::VariableDoc( - "init_g_method", - "str", - "The method used for the initialization of :math:`$G$`.", - "" -); -PyObject* PyBobLearnMiscPLDATrainer_getGMethod(PyBobLearnMiscPLDATrainerObject* self, void*) { - BOB_TRY - return Py_BuildValue("s", GMethod2string(self->cxx->getInitGMethod()).c_str()); - BOB_CATCH_MEMBER("init_g_method method could not be read", 0) -} -int PyBobLearnMiscPLDATrainer_setGMethod(PyBobLearnMiscPLDATrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyString_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an str", Py_TYPE(self)->tp_name, init_g_method.name()); - return -1; - } - self->cxx->setInitGMethod(string2GMethod(PyString_AS_STRING(value))); - - return 0; - BOB_CATCH_MEMBER("init_g_method method could not be set", 0) -} - - -/***** init_sigma_method *****/ -static auto init_sigma_method = bob::extension::VariableDoc( - "init_sigma_method", - "str", - "The method used for the initialization of :math:`$\\Sigma$`.", - "" -); -PyObject* PyBobLearnMiscPLDATrainer_getSigmaMethod(PyBobLearnMiscPLDATrainerObject* self, void*) { - BOB_TRY - return Py_BuildValue("s", SigmaMethod2string(self->cxx->getInitSigmaMethod()).c_str()); - BOB_CATCH_MEMBER("init_sigma_method method could not be read", 0) -} -int PyBobLearnMiscPLDATrainer_setSigmaMethod(PyBobLearnMiscPLDATrainerObject* self, PyObject* value, void*) { - BOB_TRY - - if (!PyString_Check(value)){ - PyErr_Format(PyExc_RuntimeError, "%s %s expects an str", Py_TYPE(self)->tp_name, init_sigma_method.name()); - return -1; - } - self->cxx->setInitSigmaMethod(string2SigmaMethod(PyString_AS_STRING(value))); - - return 0; - BOB_CATCH_MEMBER("init_sigma_method method could not be set", 0) -} - - -static PyGetSetDef PyBobLearnMiscPLDATrainer_getseters[] = { - { - z_first_order.name(), - (getter)PyBobLearnMiscPLDATrainer_get_z_first_order, - 0, - z_first_order.doc(), - 0 - }, - { - z_second_order_sum.name(), - (getter)PyBobLearnMiscPLDATrainer_get_z_second_order_sum, - 0, - z_second_order_sum.doc(), - 0 - }, - { - z_second_order.name(), - (getter)PyBobLearnMiscPLDATrainer_get_z_second_order, - 0, - z_second_order.doc(), - 0 - }, - { - rng.name(), - (getter)PyBobLearnMiscPLDATrainer_getRng, - (setter)PyBobLearnMiscPLDATrainer_setRng, - rng.doc(), - 0 - }, - { - init_f_method.name(), - (getter)PyBobLearnMiscPLDATrainer_getFMethod, - (setter)PyBobLearnMiscPLDATrainer_setFMethod, - init_f_method.doc(), - 0 - }, - { - init_g_method.name(), - (getter)PyBobLearnMiscPLDATrainer_getGMethod, - (setter)PyBobLearnMiscPLDATrainer_setGMethod, - init_g_method.doc(), - 0 - }, - { - init_sigma_method.name(), - (getter)PyBobLearnMiscPLDATrainer_getSigmaMethod, - (setter)PyBobLearnMiscPLDATrainer_setSigmaMethod, - init_sigma_method.doc(), - 0 - }, - {0} // Sentinel -}; - - -/******************************************************************/ -/************ Functions Section ***********************************/ -/******************************************************************/ - -/*** initialize ***/ -static auto initialize = bob::extension::FunctionDoc( - "initialize", - "Initialization before the EM steps", - "", - true -) -.add_prototype("plda_base,data") -.add_parameter("plda_base", ":py:class:`bob.learn.misc.PLDABase`", "PLDAMachine Object") -.add_parameter("data", "list", ""); -static PyObject* PyBobLearnMiscPLDATrainer_initialize(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = initialize.kwlist(0); - - PyBobLearnMiscPLDABaseObject* plda_base = 0; - PyObject* data = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscPLDABase_Type, &plda_base, - &PyList_Type, &data)) Py_RETURN_NONE; - - std::vector<blitz::Array<double,2> > data_vector; - if(list_as_vector(data ,data_vector)==0) - self->cxx->initialize(*plda_base->cxx, data_vector); - - BOB_CATCH_MEMBER("cannot perform the initialize method", 0) - - Py_RETURN_NONE; -} - - -/*** e_step ***/ -static auto e_step = bob::extension::FunctionDoc( - "e_step", - "e_step before the EM steps", - "", - true -) -.add_prototype("plda_base,data") -.add_parameter("plda_base", ":py:class:`bob.learn.misc.PLDABase`", "PLDAMachine Object") -.add_parameter("data", "list", ""); -static PyObject* PyBobLearnMiscPLDATrainer_e_step(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = e_step.kwlist(0); - - PyBobLearnMiscPLDABaseObject* plda_base = 0; - PyObject* data = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscPLDABase_Type, &plda_base, - &PyList_Type, &data)) Py_RETURN_NONE; - - std::vector<blitz::Array<double,2> > data_vector; - if(list_as_vector(data ,data_vector)==0) - self->cxx->eStep(*plda_base->cxx, data_vector); - - BOB_CATCH_MEMBER("cannot perform the e_step method", 0) - - Py_RETURN_NONE; -} - - -/*** m_step ***/ -static auto m_step = bob::extension::FunctionDoc( - "m_step", - "m_step before the EM steps", - "", - true -) -.add_prototype("plda_base,data") -.add_parameter("plda_base", ":py:class:`bob.learn.misc.PLDABase`", "PLDAMachine Object") -.add_parameter("data", "list", ""); -static PyObject* PyBobLearnMiscPLDATrainer_m_step(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = m_step.kwlist(0); - - PyBobLearnMiscPLDABaseObject* plda_base = 0; - PyObject* data = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscPLDABase_Type, &plda_base, - &PyList_Type, &data)) Py_RETURN_NONE; - - std::vector<blitz::Array<double,2> > data_vector; - if(list_as_vector(data ,data_vector)==0) - self->cxx->mStep(*plda_base->cxx, data_vector); - - BOB_CATCH_MEMBER("cannot perform the m_step method", 0) - - Py_RETURN_NONE; -} - - -/*** finalize ***/ -static auto finalize = bob::extension::FunctionDoc( - "finalize", - "finalize before the EM steps", - "", - true -) -.add_prototype("plda_base,data") -.add_parameter("plda_base", ":py:class:`bob.learn.misc.PLDABase`", "PLDAMachine Object") -.add_parameter("data", "list", ""); -static PyObject* PyBobLearnMiscPLDATrainer_finalize(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = finalize.kwlist(0); - - PyBobLearnMiscPLDABaseObject* plda_base = 0; - PyObject* data = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!", kwlist, &PyBobLearnMiscPLDABase_Type, &plda_base, - &PyList_Type, &data)) Py_RETURN_NONE; - - std::vector<blitz::Array<double,2> > data_vector; - if(list_as_vector(data ,data_vector)==0) - self->cxx->finalize(*plda_base->cxx, data_vector); - - BOB_CATCH_MEMBER("cannot perform the finalize method", 0) - - Py_RETURN_NONE; -} - - - -/*** enrol ***/ -static auto enrol = bob::extension::FunctionDoc( - "enrol", - "Main procedure for enrolling a PLDAMachine", - "", - true -) -.add_prototype("plda_machine,data") -.add_parameter("plda_machine", ":py:class:`bob.learn.misc.PLDAMachine`", "PLDAMachine Object") -.add_parameter("data", "list", ""); -static PyObject* PyBobLearnMiscPLDATrainer_enrol(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwargs) { - BOB_TRY - - /* Parses input arguments in a single shot */ - char** kwlist = enrol.kwlist(0); - - PyBobLearnMiscPLDAMachineObject* plda_machine = 0; - PyBlitzArrayObject* data = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&", kwlist, &PyBobLearnMiscPLDAMachine_Type, &plda_machine, - &PyBlitzArray_Converter, &data)) Py_RETURN_NONE; - - auto data_ = make_safe(data); - self->cxx->enrol(*plda_machine->cxx, *PyBlitzArrayCxx_AsBlitz<double,2>(data)); - - BOB_CATCH_MEMBER("cannot perform the enrol method", 0) - - Py_RETURN_NONE; -} - - -/*** is_similar_to ***/ -static auto is_similar_to = bob::extension::FunctionDoc( - "is_similar_to", - - "Compares this PLDATrainer with the ``other`` one to be approximately the same.", - "The optional values ``r_epsilon`` and ``a_epsilon`` refer to the " - "relative and absolute precision for the ``weights``, ``biases`` " - "and any other values internal to this machine." -) -.add_prototype("other, [r_epsilon], [a_epsilon]","output") -.add_parameter("other", ":py:class:`bob.learn.misc.PLDAMachine`", "A PLDAMachine object to be compared.") -.add_parameter("r_epsilon", "float", "Relative precision.") -.add_parameter("a_epsilon", "float", "Absolute precision.") -.add_return("output","bool","True if it is similar, otherwise false."); -static PyObject* PyBobLearnMiscPLDATrainer_IsSimilarTo(PyBobLearnMiscPLDATrainerObject* self, PyObject* args, PyObject* kwds) { - - /* Parses input arguments in a single shot */ - char** kwlist = is_similar_to.kwlist(0); - - //PyObject* other = 0; - PyBobLearnMiscPLDATrainerObject* other = 0; - double r_epsilon = 1.e-5; - double a_epsilon = 1.e-8; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|dd", kwlist, - &PyBobLearnMiscPLDATrainer_Type, &other, - &r_epsilon, &a_epsilon)){ - - is_similar_to.print_usage(); - return 0; - } - - if (self->cxx->is_similar_to(*other->cxx, r_epsilon, a_epsilon)) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - - - -static PyMethodDef PyBobLearnMiscPLDATrainer_methods[] = { - { - initialize.name(), - (PyCFunction)PyBobLearnMiscPLDATrainer_initialize, - METH_VARARGS|METH_KEYWORDS, - initialize.doc() - }, - { - e_step.name(), - (PyCFunction)PyBobLearnMiscPLDATrainer_e_step, - METH_VARARGS|METH_KEYWORDS, - e_step.doc() - }, - { - m_step.name(), - (PyCFunction)PyBobLearnMiscPLDATrainer_m_step, - METH_VARARGS|METH_KEYWORDS, - m_step.doc() - }, - { - finalize.name(), - (PyCFunction)PyBobLearnMiscPLDATrainer_finalize, - METH_VARARGS|METH_KEYWORDS, - finalize.doc() - }, - { - enrol.name(), - (PyCFunction)PyBobLearnMiscPLDATrainer_enrol, - METH_VARARGS|METH_KEYWORDS, - enrol.doc() - }, - { - is_similar_to.name(), - (PyCFunction)PyBobLearnMiscPLDATrainer_IsSimilarTo, - METH_VARARGS|METH_KEYWORDS, - is_similar_to.doc() - }, - {0} /* Sentinel */ -}; - - -/******************************************************************/ -/************ Module Section **************************************/ -/******************************************************************/ - -// Define the Gaussian type struct; will be initialized later -PyTypeObject PyBobLearnMiscPLDATrainer_Type = { - PyVarObject_HEAD_INIT(0,0) - 0 -}; - -bool init_BobLearnMiscPLDATrainer(PyObject* module) -{ - // initialize the type struct - PyBobLearnMiscPLDATrainer_Type.tp_name = PLDATrainer_doc.name(); - PyBobLearnMiscPLDATrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscPLDATrainerObject); - PyBobLearnMiscPLDATrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;//Enable the class inheritance; - PyBobLearnMiscPLDATrainer_Type.tp_doc = PLDATrainer_doc.doc(); - - // set the functions - PyBobLearnMiscPLDATrainer_Type.tp_new = PyType_GenericNew; - PyBobLearnMiscPLDATrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscPLDATrainer_init); - PyBobLearnMiscPLDATrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscPLDATrainer_delete); - PyBobLearnMiscPLDATrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscPLDATrainer_RichCompare); - PyBobLearnMiscPLDATrainer_Type.tp_methods = PyBobLearnMiscPLDATrainer_methods; - PyBobLearnMiscPLDATrainer_Type.tp_getset = PyBobLearnMiscPLDATrainer_getseters; - //PyBobLearnMiscPLDATrainer_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscPLDATrainer_compute_likelihood); - - - // check that everything is fine - if (PyType_Ready(&PyBobLearnMiscPLDATrainer_Type) < 0) return false; - - // add the type to the module - Py_INCREF(&PyBobLearnMiscPLDATrainer_Type); - return PyModule_AddObject(module, "_PLDATrainer", (PyObject*)&PyBobLearnMiscPLDATrainer_Type) >= 0; -} - diff --git a/bob/learn/misc/test_em.py b/bob/learn/misc/test_em.py deleted file mode 100644 index 88070de..0000000 --- a/bob/learn/misc/test_em.py +++ /dev/null @@ -1,252 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Francois Moulin <Francois.Moulin@idiap.ch> -# Tue May 10 11:35:58 2011 +0200 -# -# Copyright (C) 2011-2013 Idiap Research Institute, Martigny, Switzerland - -"""Test trainer package -""" -import unittest -import numpy - -import bob.io.base -from bob.io.base.test_utils import datafile - -from . import KMeansMachine, GMMMachine, KMeansTrainer, \ - ML_GMMTrainer, MAP_GMMTrainer - -#, MAP_GMMTrainer - -def loadGMM(): - gmm = GMMMachine(2, 2) - - gmm.weights = bob.io.base.load(datafile('gmm.init_weights.hdf5', __name__)) - gmm.means = bob.io.base.load(datafile('gmm.init_means.hdf5', __name__)) - gmm.variances = bob.io.base.load(datafile('gmm.init_variances.hdf5', __name__)) - #gmm.variance_thresholds = numpy.array([[0.001, 0.001],[0.001, 0.001]], 'float64') - - return gmm - -def equals(x, y, epsilon): - return (abs(x - y) < epsilon).all() - -class MyTrainer1(KMeansTrainer): - """Simple example of python trainer: """ - - def __init__(self): - KMeansTrainer.__init__(self) - - def train(self, machine, data): - a = numpy.ndarray((2, 2), 'float64') - a[0, :] = data[1] - a[1, :] = data[2] - machine.means = a - -def test_gmm_ML_1(): - - # Trains a GMMMachine with ML_GMMTrainer - - ar = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__)) - gmm = loadGMM() - - ml_gmmtrainer = ML_GMMTrainer(True, True, True) - ml_gmmtrainer.train(gmm, ar) - - #config = bob.io.base.HDF5File(datafile('gmm_ML.hdf5", __name__), 'w') - #gmm.save(config) - - gmm_ref = GMMMachine(bob.io.base.HDF5File(datafile('gmm_ML.hdf5', __name__))) - gmm_ref_32bit_debug = GMMMachine(bob.io.base.HDF5File(datafile('gmm_ML_32bit_debug.hdf5', __name__))) - gmm_ref_32bit_release = GMMMachine(bob.io.base.HDF5File(datafile('gmm_ML_32bit_release.hdf5', __name__))) - - assert (gmm == gmm_ref) or (gmm == gmm_ref_32bit_release) or (gmm == gmm_ref_32bit_release) - - -def test_gmm_ML_2(): - - # Trains a GMMMachine with ML_GMMTrainer; compares to an old reference - - ar = bob.io.base.load(datafile('dataNormalized.hdf5', __name__)) - - # Initialize GMMMachine - gmm = GMMMachine(5, 45) - gmm.means = bob.io.base.load(datafile('meansAfterKMeans.hdf5', __name__)).astype('float64') - gmm.variances = bob.io.base.load(datafile('variancesAfterKMeans.hdf5', __name__)).astype('float64') - gmm.weights = numpy.exp(bob.io.base.load(datafile('weightsAfterKMeans.hdf5', __name__)).astype('float64')) - - threshold = 0.001 - gmm.set_variance_thresholds(threshold) - - # Initialize ML Trainer - prior = 0.001 - max_iter_gmm = 25 - accuracy = 0.00001 - ml_gmmtrainer = ML_GMMTrainer(True, True, True, prior, converge_by_likelihood=True) - ml_gmmtrainer.max_iterations = max_iter_gmm - ml_gmmtrainer.convergence_threshold = accuracy - - # Run ML - ml_gmmtrainer.train(gmm, ar) - - - # Test results - # Load torch3vision reference - meansML_ref = bob.io.base.load(datafile('meansAfterML.hdf5', __name__)) - variancesML_ref = bob.io.base.load(datafile('variancesAfterML.hdf5', __name__)) - weightsML_ref = bob.io.base.load(datafile('weightsAfterML.hdf5', __name__)) - - - # Compare to current results - assert equals(gmm.means, meansML_ref, 3e-3) - assert equals(gmm.variances, variancesML_ref, 3e-3) - assert equals(gmm.weights, weightsML_ref, 1e-4) - - - -def test_gmm_MAP_1(): - - # Train a GMMMachine with MAP_GMMTrainer - - ar = bob.io.base.load(datafile('faithful.torch3_f64.hdf5', __name__)) - - gmm = GMMMachine(bob.io.base.HDF5File(datafile("gmm_ML.hdf5", __name__))) - gmmprior = GMMMachine(bob.io.base.HDF5File(datafile("gmm_ML.hdf5", __name__))) - - map_gmmtrainer = MAP_GMMTrainer(update_means=True, update_variances=False, update_weights=False, prior_gmm=gmmprior, relevance_factor=4.) - #map_gmmtrainer.set_prior_gmm(gmmprior) - map_gmmtrainer.train(gmm, ar) - - #config = bob.io.base.HDF5File(datafile('gmm_MAP.hdf5", 'w', __name__)) - #gmm.save(config) - - gmm_ref = GMMMachine(bob.io.base.HDF5File(datafile('gmm_MAP.hdf5', __name__))) - - assert (equals(gmm.means,gmm_ref.means,1e-3) and equals(gmm.variances,gmm_ref.variances,1e-3) and equals(gmm.weights,gmm_ref.weights,1e-3)) - - -def test_gmm_MAP_2(): - - # Train a GMMMachine with MAP_GMMTrainer and compare with matlab reference - - data = bob.io.base.load(datafile('data.hdf5', __name__)) - data = data.reshape((1, data.shape[0])) # make a 2D array out of it - means = bob.io.base.load(datafile('means.hdf5', __name__)) - variances = bob.io.base.load(datafile('variances.hdf5', __name__)) - weights = bob.io.base.load(datafile('weights.hdf5', __name__)) - - gmm = GMMMachine(2,50) - gmm.means = means - gmm.variances = variances - gmm.weights = weights - - map_adapt = MAP_GMMTrainer(update_means=True, update_variances=False, update_weights=False, mean_var_update_responsibilities_threshold=0.,prior_gmm=gmm, relevance_factor=4.) - #map_adapt.set_prior_gmm(gmm) - - gmm_adapted = GMMMachine(2,50) - gmm_adapted.means = means - gmm_adapted.variances = variances - gmm_adapted.weights = weights - - map_adapt.max_iterations = 1 - map_adapt.train(gmm_adapted, data) - - new_means = bob.io.base.load(datafile('new_adapted_mean.hdf5', __name__)) - - # print new_means[0,:] - # print gmm_adapted.means[:,0] - - # Compare to matlab reference - assert equals(new_means[0,:], gmm_adapted.means[:,0], 1e-4) - assert equals(new_means[1,:], gmm_adapted.means[:,1], 1e-4) - - -def test_gmm_MAP_3(): - - # Train a GMMMachine with MAP_GMMTrainer; compares to old reference - - ar = bob.io.base.load(datafile('dataforMAP.hdf5', __name__)) - - # Initialize GMMMachine - n_gaussians = 5 - n_inputs = 45 - prior_gmm = GMMMachine(n_gaussians, n_inputs) - prior_gmm.means = bob.io.base.load(datafile('meansAfterML.hdf5', __name__)) - prior_gmm.variances = bob.io.base.load(datafile('variancesAfterML.hdf5', __name__)) - prior_gmm.weights = bob.io.base.load(datafile('weightsAfterML.hdf5', __name__)) - - threshold = 0.001 - prior_gmm.set_variance_thresholds(threshold) - - # Initialize MAP Trainer - relevance_factor = 0.1 - prior = 0.001 - max_iter_gmm = 1 - accuracy = 0.00001 - map_factor = 0.5 - map_gmmtrainer = MAP_GMMTrainer(update_means=True, update_variances=False, update_weights=False, convergence_threshold=prior, prior_gmm=prior_gmm, alpha=map_factor) - map_gmmtrainer.max_iterations = max_iter_gmm - map_gmmtrainer.convergence_threshold = accuracy - - gmm = GMMMachine(n_gaussians, n_inputs) - gmm.set_variance_thresholds(threshold) - - # Train - map_gmmtrainer.train(gmm, ar) - - # Test results - # Load torch3vision reference - meansMAP_ref = bob.io.base.load(datafile('meansAfterMAP.hdf5', __name__)) - variancesMAP_ref = bob.io.base.load(datafile('variancesAfterMAP.hdf5', __name__)) - weightsMAP_ref = bob.io.base.load(datafile('weightsAfterMAP.hdf5', __name__)) - - # Compare to current results - # Gaps are quite large. This might be explained by the fact that there is no - # adaptation of a given Gaussian in torch3 when the corresponding responsibilities - # are below the responsibilities threshold - assert equals(gmm.means, meansMAP_ref, 2e-1) - assert equals(gmm.variances, variancesMAP_ref, 1e-4) - assert equals(gmm.weights, weightsMAP_ref, 1e-4) - - -def test_gmm_test(): - - # Tests a GMMMachine by computing scores against a model and compare to - # an old reference - - ar = bob.io.base.load(datafile('dataforMAP.hdf5', __name__)) - - # Initialize GMMMachine - n_gaussians = 5 - n_inputs = 45 - gmm = GMMMachine(n_gaussians, n_inputs) - gmm.means = bob.io.base.load(datafile('meansAfterML.hdf5', __name__)) - gmm.variances = bob.io.base.load(datafile('variancesAfterML.hdf5', __name__)) - gmm.weights = bob.io.base.load(datafile('weightsAfterML.hdf5', __name__)) - - threshold = 0.001 - gmm.set_variance_thresholds(threshold) - - # Test against the model - score_mean_ref = -1.50379e+06 - score = 0. - for v in ar: score += gmm(v) - score /= len(ar) - - # Compare current results to torch3vision - assert abs(score-score_mean_ref)/score_mean_ref<1e-4 - - -def test_custom_trainer(): - - # Custom python trainer - - ar = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__)) - - mytrainer = MyTrainer1() - - machine = KMeansMachine(2, 2) - mytrainer.train(machine, ar) - - for i in range(0, 2): - assert (ar[i+1] == machine.means[i, :]).all() diff --git a/bob/learn/misc/test_gaussian.py b/bob/learn/misc/test_gaussian.py deleted file mode 100644 index eb2b0fa..0000000 --- a/bob/learn/misc/test_gaussian.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Thu Feb 16 16:54:45 2012 +0200 -# -# Copyright (C) 2011-2013 Idiap Research Institute, Martigny, Switzerland - -"""Tests the Gaussian machine -""" - -import os -import numpy -import tempfile - -import bob.io.base - -from bob.learn.misc import Gaussian - -def equals(x, y, epsilon): - return (abs(x - y) < epsilon) - -def test_GaussianNormal(): - # Test the likelihood computation of a simple normal Gaussian - gaussian = Gaussian(2) - # By default, initialized with zero mean and unit variance - logLH = gaussian.log_likelihood(numpy.array([0.4, 0.2], 'float64')) - assert equals(logLH, -1.93787706641, 1e-10) - -def test_GaussianMachine(): - # Test a GaussianMachine more thoroughly - - # Initializes a Gaussian with zero mean and unit variance - g = Gaussian(3) - assert (g.mean == 0.0).all() - assert (g.variance == 1.0).all() - assert g.shape == (3,) - - # Set and check mean, variance, variance thresholds - mean = numpy.array([0, 1, 2], 'float64') - variance = numpy.array([3, 2, 1], 'float64') - g.mean = mean - g.variance = variance - g.set_variance_thresholds(0.0005) - assert (g.mean == mean).all() - assert (g.variance == variance).all() - assert (g.variance_thresholds == 0.0005).all() - - # Save and read from file - filename = str(tempfile.mkstemp(".hdf5")[1]) - g.save(bob.io.base.HDF5File(filename, 'w')) - g_loaded = Gaussian(bob.io.base.HDF5File(filename)) - assert g == g_loaded - assert (g != g_loaded ) is False - assert g.is_similar_to(g_loaded) - - # Save and read from file using the keyword argument - filename = str(tempfile.mkstemp(".hdf5")[1]) - g.save(hdf5=bob.io.base.HDF5File(filename, 'w')) - g_loaded = Gaussian(hdf5=bob.io.base.HDF5File(filename)) - assert g == g_loaded - assert (g != g_loaded ) is False - assert g.is_similar_to(g_loaded) - - # Save and loading from file using the keyword argument - filename = str(tempfile.mkstemp(".hdf5")[1]) - g.save(bob.io.base.HDF5File(filename, 'w')) - g_loaded = bob.learn.misc.Gaussian() - g_loaded.load(bob.io.base.HDF5File(filename)) - assert g == g_loaded - assert (g != g_loaded ) is False - assert g.is_similar_to(g_loaded) - - # Save and loading from file using the keyword argument - filename = str(tempfile.mkstemp(".hdf5")[1]) - g.save(bob.io.base.HDF5File(filename, 'w')) - g_loaded = bob.learn.misc.Gaussian() - g_loaded.load(hdf5=bob.io.base.HDF5File(filename)) - assert g == g_loaded - assert (g != g_loaded ) is False - assert g.is_similar_to(g_loaded) - - - # Make them different - g_loaded.set_variance_thresholds(0.001) - assert (g == g_loaded ) is False - assert g != g_loaded - - # Check likelihood computation - sample1 = numpy.array([0, 1, 2], 'float64') - sample2 = numpy.array([1, 2, 3], 'float64') - sample3 = numpy.array([2, 3, 4], 'float64') - ref1 = -3.652695334228046 - ref2 = -4.569362000894712 - ref3 = -7.319362000894712 - eps = 1e-10 - assert equals(g.log_likelihood(sample1), ref1, eps) - assert equals(g.log_likelihood(sample2), ref2, eps) - assert equals(g.log_likelihood(sample3), ref3, eps) - - # Check resize and assignment - g.resize(5) - assert g.shape == (5,) - g2 = Gaussian() - g2 = g - assert g == g2 - assert (g != g2 ) is False - g3 = Gaussian(g) - assert g == g3 - assert (g != g3 ) is False - - # Clean-up - os.unlink(filename) diff --git a/bob/learn/misc/test_gmm.py b/bob/learn/misc/test_gmm.py deleted file mode 100644 index a9e0910..0000000 --- a/bob/learn/misc/test_gmm.py +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Thu Feb 16 17:57:10 2012 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests the GMM machine and the GMMStats container -""" - -import os -import numpy -import tempfile - -import bob.io.base -from bob.io.base.test_utils import datafile - -from . import GMMStats, GMMMachine - -def test_GMMStats(): - # Test a GMMStats - # Initializes a GMMStats - gs = GMMStats(2,3) - log_likelihood = -3. - T = 57 - n = numpy.array([4.37, 5.31], 'float64') - sumpx = numpy.array([[1., 2., 3.], [4., 5., 6.]], 'float64') - sumpxx = numpy.array([[10., 20., 30.], [40., 50., 60.]], 'float64') - gs.log_likelihood = log_likelihood - gs.t = T - gs.n = n - gs.sum_px = sumpx - gs.sum_pxx = sumpxx - assert gs.log_likelihood == log_likelihood - assert gs.t == T - assert (gs.n == n).all() - assert (gs.sum_px == sumpx).all() - assert (gs.sum_pxx == sumpxx).all() - assert gs.shape==(2,3) - - # Saves and reads from file - filename = str(tempfile.mkstemp(".hdf5")[1]) - gs.save(bob.io.base.HDF5File(filename, 'w')) - gs_loaded = GMMStats(bob.io.base.HDF5File(filename)) - assert gs == gs_loaded - assert (gs != gs_loaded ) is False - assert gs.is_similar_to(gs_loaded) - - # Saves and reads from file using the keyword argument - filename = str(tempfile.mkstemp(".hdf5")[1]) - gs.save(hdf5=bob.io.base.HDF5File(filename, 'w')) - gs_loaded = GMMStats(bob.io.base.HDF5File(filename)) - assert gs == gs_loaded - assert (gs != gs_loaded ) is False - assert gs.is_similar_to(gs_loaded) - - # Saves and load from file using the keyword argument - filename = str(tempfile.mkstemp(".hdf5")[1]) - gs.save(hdf5=bob.io.base.HDF5File(filename, 'w')) - gs_loaded = GMMStats() - gs_loaded.load(bob.io.base.HDF5File(filename)) - assert gs == gs_loaded - assert (gs != gs_loaded ) is False - assert gs.is_similar_to(gs_loaded) - - # Saves and load from file using the keyword argument - filename = str(tempfile.mkstemp(".hdf5")[1]) - gs.save(hdf5=bob.io.base.HDF5File(filename, 'w')) - gs_loaded = GMMStats() - gs_loaded.load(hdf5=bob.io.base.HDF5File(filename)) - assert gs == gs_loaded - assert (gs != gs_loaded ) is False - assert gs.is_similar_to(gs_loaded) - - - # Makes them different - gs_loaded.t = 58 - assert (gs == gs_loaded ) is False - assert gs != gs_loaded - assert (gs.is_similar_to(gs_loaded)) is False - # Accumulates from another GMMStats - gs2 = GMMStats(2,3) - gs2.log_likelihood = log_likelihood - gs2.t = T - gs2.n = n - gs2.sum_px = sumpx - gs2.sum_pxx = sumpxx - gs2 += gs - eps = 1e-8 - assert gs2.log_likelihood == 2*log_likelihood - assert gs2.t == 2*T - assert numpy.allclose(gs2.n, 2*n, eps) - assert numpy.allclose(gs2.sum_px, 2*sumpx, eps) - assert numpy.allclose(gs2.sum_pxx, 2*sumpxx, eps) - - # Reinit and checks for zeros - gs_loaded.init() - assert gs_loaded.log_likelihood == 0 - assert gs_loaded.t == 0 - assert (gs_loaded.n == 0).all() - assert (gs_loaded.sum_px == 0).all() - assert (gs_loaded.sum_pxx == 0).all() - # Resize and checks size - assert gs_loaded.shape==(2,3) - gs_loaded.resize(4,5) - assert gs_loaded.shape==(4,5) - assert gs_loaded.sum_px.shape[0] == 4 - assert gs_loaded.sum_px.shape[1] == 5 - - # Clean-up - os.unlink(filename) - -def test_GMMMachine_1(): - # Test a GMMMachine basic features - - weights = numpy.array([0.5, 0.5], 'float64') - weights2 = numpy.array([0.6, 0.4], 'float64') - means = numpy.array([[3, 70, 0], [4, 72, 0]], 'float64') - means2 = numpy.array([[3, 7, 0], [4, 72, 0]], 'float64') - variances = numpy.array([[1, 10, 1], [2, 5, 2]], 'float64') - variances2 = numpy.array([[10, 10, 1], [2, 5, 2]], 'float64') - varianceThresholds = numpy.array([[0, 0, 0], [0, 0, 0]], 'float64') - varianceThresholds2 = numpy.array([[0.0005, 0.0005, 0.0005], [0, 0, 0]], 'float64') - - # Initializes a GMMMachine - gmm = GMMMachine(2,3) - # Sets the weights, means, variances and varianceThresholds and - # Checks correctness - gmm.weights = weights - gmm.means = means - gmm.variances = variances - gmm.variance_thresholds = varianceThresholds - assert gmm.shape == (2,3) - assert (gmm.weights == weights).all() - assert (gmm.means == means).all() - assert (gmm.variances == variances).all() - assert (gmm.variance_thresholds == varianceThresholds).all() - - # Checks supervector-like accesses - assert (gmm.mean_supervector == means.reshape(means.size)).all() - assert (gmm.variance_supervector == variances.reshape(variances.size)).all() - newMeans = numpy.array([[3, 70, 2], [4, 72, 2]], 'float64') - newVariances = numpy.array([[1, 1, 1], [2, 2, 2]], 'float64') - - - # Checks particular varianceThresholds-related methods - varianceThresholds1D = numpy.array([0.3, 1, 0.5], 'float64') - gmm.set_variance_thresholds(varianceThresholds1D) - assert (gmm.variance_thresholds[0,:] == varianceThresholds1D).all() - assert (gmm.variance_thresholds[1,:] == varianceThresholds1D).all() - - gmm.set_variance_thresholds(0.005) - assert (gmm.variance_thresholds == 0.005).all() - - # Checks Gaussians access - gmm.means = newMeans - gmm.variances = newVariances - assert (gmm.get_gaussian(0).mean == newMeans[0,:]).all() - assert (gmm.get_gaussian(1).mean == newMeans[1,:]).all() - assert (gmm.get_gaussian(0).variance == newVariances[0,:]).all() - assert (gmm.get_gaussian(1).variance == newVariances[1,:]).all() - - # Checks resize - gmm.resize(4,5) - assert gmm.shape == (4,5) - - # Checks comparison - gmm2 = GMMMachine(gmm) - gmm3 = GMMMachine(2,3) - gmm3.weights = weights2 - gmm3.means = means - gmm3.variances = variances - #gmm3.varianceThresholds = varianceThresholds - gmm4 = GMMMachine(2,3) - gmm4.weights = weights - gmm4.means = means2 - gmm4.variances = variances - #gmm4.varianceThresholds = varianceThresholds - gmm5 = GMMMachine(2,3) - gmm5.weights = weights - gmm5.means = means - gmm5.variances = variances2 - #gmm5.varianceThresholds = varianceThresholds - gmm6 = GMMMachine(2,3) - gmm6.weights = weights - gmm6.means = means - gmm6.variances = variances - #gmm6.varianceThresholds = varianceThresholds2 - - assert gmm == gmm2 - assert (gmm != gmm2) is False - assert gmm.is_similar_to(gmm2) - assert gmm != gmm3 - assert (gmm == gmm3) is False - assert gmm.is_similar_to(gmm3) is False - assert gmm != gmm4 - assert (gmm == gmm4) is False - assert gmm.is_similar_to(gmm4) is False - assert gmm != gmm5 - assert (gmm == gmm5) is False - assert gmm.is_similar_to(gmm5) is False - assert gmm != gmm6 - assert (gmm == gmm6) is False - assert gmm.is_similar_to(gmm6) is False - -def test_GMMMachine_2(): - # Test a GMMMachine (statistics) - - arrayset = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__)) - gmm = GMMMachine(2, 2) - gmm.weights = numpy.array([0.5, 0.5], 'float64') - gmm.means = numpy.array([[3, 70], [4, 72]], 'float64') - gmm.variances = numpy.array([[1, 10], [2, 5]], 'float64') - gmm.variance_thresholds = numpy.array([[0, 0], [0, 0]], 'float64') - - stats = GMMStats(2, 2) - gmm.acc_statistics(arrayset, stats) - - stats_ref = GMMStats(bob.io.base.HDF5File(datafile("stats.hdf5",__name__))) - - assert stats.t == stats_ref.t - assert numpy.allclose(stats.n, stats_ref.n, atol=1e-10) - #assert numpy.array_equal(stats.sumPx, stats_ref.sumPx) - #Note AA: precision error above - assert numpy.allclose(stats.sum_px, stats_ref.sum_px, atol=1e-10) - assert numpy.allclose(stats.sum_pxx, stats_ref.sum_pxx, atol=1e-10) - -def test_GMMMachine_3(): - # Test a GMMMachine (log-likelihood computation) - - data = bob.io.base.load(datafile('data.hdf5', __name__)) - gmm = GMMMachine(2, 50) - gmm.weights = bob.io.base.load(datafile('weights.hdf5', __name__)) - gmm.means = bob.io.base.load(datafile('means.hdf5', __name__)) - gmm.variances = bob.io.base.load(datafile('variances.hdf5', __name__)) - - # Compare the log-likelihood with the one obtained using Chris Matlab - # implementation - matlab_ll_ref = -2.361583051672024e+02 - assert abs(gmm(data) - matlab_ll_ref) < 1e-10 diff --git a/bob/learn/misc/test_ivector.py b/bob/learn/misc/test_ivector.py deleted file mode 100644 index fb9c8b2..0000000 --- a/bob/learn/misc/test_ivector.py +++ /dev/null @@ -1,159 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Mon Apr 2 11:19:00 2013 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - - -"""Tests the I-Vector machine -""" - -import numpy -import numpy.linalg -import numpy.random - -from . import GMMMachine, GMMStats, IVectorMachine - - -### Test class inspired by an implementation of Chris McCool -### Chris McCool (chris.mccool@nicta.com.au) -class IVectorMachinePy(): - """An IVector extractor""" - - def __init__(self, ubm=None, dim_t=1): - # Our state - self.m_ubm = ubm - self.m_dim_t = dim_t - # Resize the matrices T and sigma - self.resize() - # Precompute - self.precompute() - - def resize(self): - if self.m_ubm: - dim_cd = self.m_ubm.shape[0] * self.m_ubm.shape[1] - self.m_t = numpy.random.randn(dim_cd, self.m_dim_t) - self.m_sigma = numpy.random.randn(dim_cd) - - def precompute(self): - if self.m_ubm and self.m_t is not None and self.m_sigma is not None: - #dim_c = self.m_ubm.dim_c - #dim_d = self.m_ubm.dim_d - dim_c,dim_d = self.m_ubm.shape - self.m_cache_TtSigmaInv = {} - self.m_cache_TtSigmaInvT = {} - for c in range(dim_c): - start = c*dim_d - end = (c+1)*dim_d - Tc = self.m_t[start:end,:] - self.m_cache_TtSigmaInv[c] = Tc.transpose() / self.m_sigma[start:end] - self.m_cache_TtSigmaInvT[c] = numpy.dot(self.m_cache_TtSigmaInv[c], Tc); - - def set_ubm(self, ubm): - self.m_ubm = ubm - # Precompute - self.precompute() - - def get_ubm(self): - return self.m_ubm - - def set_t(self, t): - # @warning: no dimensions check - self.m_t = t - # Precompute - self.precompute() - - def get_t(self): - return self.m_t - - def set_sigma(self, sigma): - # @warning: no dimensions check - self.m_sigma = sigma - # Precompute - self.precompute() - - def get_sigma(self): - return self.m_sigma - - - def _get_TtSigmaInv_Fnorm(self, N, F): - # Initialization - #dim_c = self.m_ubm.dim_c - #dim_d = self.m_ubm.dim_d - dim_c,dim_d = self.m_ubm.shape - mean_supervector = self.m_ubm.mean_supervector - TtSigmaInv_Fnorm = numpy.zeros(shape=(self.m_dim_t,), dtype=numpy.float64) - - # Loop over each Gaussian component - dim_c = self.m_ubm.shape[0] - for c in range(dim_c): - start = c*dim_d - end = (c+1)*dim_d - Fnorm = F[c,:] - N[c] * mean_supervector[start:end] - TtSigmaInv_Fnorm = TtSigmaInv_Fnorm + numpy.dot(self.m_cache_TtSigmaInv[c], Fnorm) - return TtSigmaInv_Fnorm - - def _get_I_TtSigmaInvNT(self, N): - # Initialization - #dim_c = self.m_ubm.dim_c - #dim_d = self.m_ubm.dim_d - dim_c, dim_d = self.m_ubm.shape - - TtSigmaInvNT = numpy.eye(self.m_dim_t, dtype=numpy.float64) - for c in range(dim_c): - TtSigmaInvNT = TtSigmaInvNT + self.m_cache_TtSigmaInvT[c] * N[c] - - return TtSigmaInvNT - - def forward(self, gmmstats): - if self.m_ubm and not (self.m_t == None) and not (self.m_sigma == None): - N = gmmstats.n - F = gmmstats.sum_px - - TtSigmaInv_Fnorm = self._get_TtSigmaInv_Fnorm(N, F) - TtSigmaInvNT = self._get_I_TtSigmaInvNT(N) - - return numpy.linalg.solve(TtSigmaInvNT, TtSigmaInv_Fnorm) - - -def test_machine(): - - # Ubm - ubm = GMMMachine(2,3) - ubm.weights = numpy.array([0.4,0.6]) - ubm.means = numpy.array([[1.,7,4],[4,5,3]]) - ubm.variances = numpy.array([[0.5,1.,1.5],[1.,1.5,2.]]) - - # Defines GMMStats - gs = GMMStats(2,3) - log_likelihood = -3. - T = 1 - n = numpy.array([0.4, 0.6], numpy.float64) - sumpx = numpy.array([[1., 2., 3.], [2., 4., 3.]], numpy.float64) - sumpxx = numpy.array([[10., 20., 30.], [40., 50., 60.]], numpy.float64) - gs.log_likelihood = log_likelihood - gs.t = T - gs.n = n - gs.sum_px = sumpx - gs.sum_pxx = sumpxx - - # IVector (Python) - m = IVectorMachinePy(ubm, 2) - t = numpy.array([[1.,2],[4,1],[0,3],[5,8],[7,10],[11,1]]) - m.set_t(t) - sigma = numpy.array([1.,2.,1.,3.,2.,4.]) - m.set_sigma(sigma) - - wij_ref = numpy.array([-0.04213415, 0.21463343]) # Reference from original Chris implementation - wij = m.forward(gs) - assert numpy.allclose(wij_ref, wij, 1e-5) - - # IVector (C++) - mc = IVectorMachine(ubm, 2) - mc.t = t - mc.sigma = sigma - - wij_ref = numpy.array([-0.04213415, 0.21463343]) # Reference from original Chris implementation - wij = mc(gs) - assert numpy.allclose(wij_ref, wij, 1e-5) diff --git a/bob/learn/misc/test_ivector_trainer.py b/bob/learn/misc/test_ivector_trainer.py deleted file mode 100644 index 17a7c3e..0000000 --- a/bob/learn/misc/test_ivector_trainer.py +++ /dev/null @@ -1,363 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests the I-Vector trainer -""" - -import numpy -import numpy.linalg -import numpy.random - -from bob.learn.misc import GMMMachine, GMMStats, IVectorMachine, IVectorTrainer - -### Test class inspired by an implementation of Chris McCool -### Chris McCool (chris.mccool@nicta.com.au) -class IVectorTrainerPy(): - """An IVector extractor""" - - def __init__(self, convergence_threshold=0.001, max_iterations=10, - compute_likelihood=False, sigma_update=False, variance_floor=1e-5): - self.m_convergence_threshold = convergence_threshold - self.m_max_iterations = max_iterations - self.m_compute_likelihood = compute_likelihood - self.m_sigma_update = sigma_update - self.m_variance_floor = variance_floor - - def initialize(self, machine, data): - ubm = machine.ubm - self.m_dim_c = ubm.shape[0] - self.m_dim_d = ubm.shape[1] - self.m_dim_t = machine.t.shape[1] - self.m_meansupervector = ubm.mean_supervector - t = numpy.random.randn(self.m_dim_c*self.m_dim_d, self.m_dim_t) - machine.t = t - machine.sigma = machine.ubm.variance_supervector - - def e_step(self, machine, data): - n_samples = len(data) - self.m_acc_Nij_Sigma_wij2 = {} - self.m_acc_Fnorm_Sigma_wij = {} - self.m_acc_Snorm = numpy.zeros(shape=(self.m_dim_c*self.m_dim_d,), dtype=numpy.float64) - self.m_N = numpy.zeros(shape=(self.m_dim_c,), dtype=numpy.float64) - - for c in range(self.m_dim_c): - self.m_acc_Nij_Sigma_wij2[c] = numpy.zeros(shape=(self.m_dim_t,self.m_dim_t), dtype=numpy.float64) - self.m_acc_Fnorm_Sigma_wij[c] = numpy.zeros(shape=(self.m_dim_d,self.m_dim_t), dtype=numpy.float64) - - for n in range(n_samples): - Nij = data[n].n - Fij = data[n].sum_px - Sij = data[n].sum_pxx - - # Estimate latent variables - TtSigmaInv_Fnorm = machine.__compute_TtSigmaInvFnorm__(data[n]) - I_TtSigmaInvNT = machine.__compute_Id_TtSigmaInvT__(data[n]) - - Fnorm = numpy.zeros(shape=(self.m_dim_c*self.m_dim_d,), dtype=numpy.float64) - Snorm = numpy.zeros(shape=(self.m_dim_c*self.m_dim_d,), dtype=numpy.float64) - - # Compute normalized statistics - for c in range(self.m_dim_c): - start = c*self.m_dim_d - end = (c+1)*self.m_dim_d - - Fc = Fij[c,:] - Sc = Sij[c,:] - mc = self.m_meansupervector[start:end] - - Fc_mc = Fc * mc - Nc_mc_mcT = Nij[c] * mc * mc - - Fnorm[start:end] = Fc - Nij[c] * mc - Snorm[start:end] = Sc - (2 * Fc_mc) + Nc_mc_mcT - - # Latent variables - I_TtSigmaInvNT_inv = numpy.linalg.inv(I_TtSigmaInvNT) - E_w_ij = numpy.dot(I_TtSigmaInvNT_inv, TtSigmaInv_Fnorm) - E_w_ij2 = I_TtSigmaInvNT_inv + numpy.outer(E_w_ij, E_w_ij) - - # Do the accumulation for each component - self.m_acc_Snorm = self.m_acc_Snorm + Snorm # (dim_c*dim_d) - for c in range(self.m_dim_c): - start = c*self.m_dim_d - end = (c+1)*self.m_dim_d - current_Fnorm = Fnorm[start:end] # (dim_d) - self.m_acc_Nij_Sigma_wij2[c] = self.m_acc_Nij_Sigma_wij2[c] + Nij[c] * E_w_ij2 # (dim_t, dim_t) - self.m_acc_Fnorm_Sigma_wij[c] = self.m_acc_Fnorm_Sigma_wij[c] + numpy.outer(current_Fnorm, E_w_ij) # (dim_d, dim_t) - self.m_N[c] = self.m_N[c] + Nij[c] - - - def m_step(self, machine, data): - A = self.m_acc_Nij_Sigma_wij2 - - T = numpy.zeros(shape=(self.m_dim_c*self.m_dim_d,self.m_dim_t), dtype=numpy.float64) - Told = machine.t - if self.m_sigma_update: - sigma = numpy.zeros(shape=self.m_acc_Snorm.shape, dtype=numpy.float64) - for c in range(self.m_dim_c): - start = c*self.m_dim_d; - end = (c+1)*self.m_dim_d; - # T update - A = self.m_acc_Nij_Sigma_wij2[c].transpose() - B = self.m_acc_Fnorm_Sigma_wij[c].transpose() - if numpy.array_equal(A, numpy.zeros(A.shape)): - X = numpy.zeros(shape=(self.m_dim_t,self.m_dim_d), dtype=numpy.float64) - else: - X = numpy.linalg.solve(A, B) - T[start:end,:] = X.transpose() - # Sigma update - if self.m_sigma_update: - Told_c = Told[start:end,:].transpose() - # warning: Use of the new T estimate! (revert second next line if you don't want that) - Fnorm_Ewij_Tt = numpy.diag(numpy.dot(self.m_acc_Fnorm_Sigma_wij[c], X)) - #Fnorm_Ewij_Tt = numpy.diag(numpy.dot(self.m_acc_Fnorm_Sigma_wij[c], Told_c)) - sigma[start:end] = (self.m_acc_Snorm[start:end] - Fnorm_Ewij_Tt) / self.m_N[c] - - machine.t = T - if self.m_sigma_update: - sigma[sigma < self.m_variance_floor] = self.m_variance_floor - machine.sigma = sigma - - def finalize(self, machine, data): - pass - - def train(self, machine, data): - self.initialize(machine, data) - average_output_previous = -sys.maxsize - average_output = -sys.maxsize - self.e_step(machine, data) - - i = 0 - while True: - average_output_previous = average_output - self.m_step(machine, data) - self.e_step(machine, data) - if(self.m_max_iterations > 0 and i+1 >= self.m_max_iterations): - break - i += 1 - - -def test_trainer_nosigma(): - # Ubm - ubm = GMMMachine(2,3) - ubm.weights = numpy.array([0.4,0.6]) - ubm.means = numpy.array([[1.,7,4],[4,5,3]]) - ubm.variances = numpy.array([[0.5,1.,1.5],[1.,1.5,2.]]) - - # Defines GMMStats - gs1 = GMMStats(2,3) - log_likelihood1 = -3. - T1 = 1 - n1 = numpy.array([0.4, 0.6], numpy.float64) - sumpx1 = numpy.array([[1., 2., 3.], [2., 4., 3.]], numpy.float64) - sumpxx1 = numpy.array([[10., 20., 30.], [40., 50., 60.]], numpy.float64) - gs1.log_likelihood = log_likelihood1 - gs1.t = T1 - gs1.n = n1 - gs1.sum_px = sumpx1 - gs1.sum_pxx = sumpxx1 - - gs2 = GMMStats(2,3) - log_likelihood2 = -4. - T2 = 1 - n2 = numpy.array([0.2, 0.8], numpy.float64) - sumpx2 = numpy.array([[2., 1., 3.], [3., 4.1, 3.2]], numpy.float64) - sumpxx2 = numpy.array([[12., 15., 25.], [39., 51., 62.]], numpy.float64) - gs2.log_likelihood = log_likelihood2 - gs2.t = T2 - gs2.n = n2 - gs2.sum_px = sumpx2 - gs2.sum_pxx = sumpxx2 - - data = [gs1, gs2] - - - acc_Nij_Sigma_wij2_ref1 = {0: numpy.array([[ 0.03202305, -0.02947769], [-0.02947769, 0.0561132 ]]), - 1: numpy.array([[ 0.07953279, -0.07829414], [-0.07829414, 0.13814242]])} - acc_Fnorm_Sigma_wij_ref1 = {0: numpy.array([[-0.29622691, 0.61411796], [ 0.09391764, -0.27955961], [-0.39014455, 0.89367757]]), - 1: numpy.array([[ 0.04695882, -0.13977981], [-0.05718673, 0.24159665], [-0.17098161, 0.47326585]])} - acc_Snorm_ref1 = numpy.array([16.6, 22.4, 16.6, 61.4, 55., 97.4]) - N_ref1 = numpy.array([0.6, 1.4]) - t_ref1 = numpy.array([[ 1.59543739, 11.78239235], [ -3.20130371, -6.66379081], [ 4.79674111, 18.44618316], - [ -0.91765407, -1.5319461 ], [ 2.26805901, 3.03434944], [ 2.76600031, 4.9935962 ]]) - - acc_Nij_Sigma_wij2_ref2 = {0: numpy.array([[ 0.37558389, -0.15405228], [-0.15405228, 0.1421269 ]]), - 1: numpy.array([[ 1.02076081, -0.57683953], [-0.57683953, 0.53912239]])} - acc_Fnorm_Sigma_wij_ref2 = {0: numpy.array([[-1.1261668 , 1.46496753], [-0.03579289, -0.37875811], [-1.09037391, 1.84372565]]), - 1: numpy.array([[-0.01789645, -0.18937906], [ 0.35221084, 0.15854126], [-0.10004552, 0.72559036]])} - acc_Snorm_ref2 = numpy.array([16.6, 22.4, 16.6, 61.4, 55., 97.4]) - N_ref2 = numpy.array([0.6, 1.4]) - t_ref2 = numpy.array([[ 2.2133685, 12.70654597], [ -2.13959381, -4.98404887], [ 4.35296231, 17.69059484], - [ -0.54644055, -0.93594252], [ 1.29308324, 1.67762053], [ 1.67583072, 3.13894546]]) - acc_Nij_Sigma_wij2_ref = [acc_Nij_Sigma_wij2_ref1, acc_Nij_Sigma_wij2_ref2] - acc_Fnorm_Sigma_wij_ref = [acc_Fnorm_Sigma_wij_ref1, acc_Fnorm_Sigma_wij_ref2] - acc_Snorm_ref = [acc_Snorm_ref1, acc_Snorm_ref2] - N_ref = [N_ref1, N_ref2] - t_ref = [t_ref1, t_ref2] - - # Python implementation - # Machine - m = IVectorMachine(ubm, 2) - t = numpy.array([[1.,2],[4,1],[0,3],[5,8],[7,10],[11,1]]) - sigma = numpy.array([1.,2.,1.,3.,2.,4.]) - - # Initialization - trainer = IVectorTrainerPy() - trainer.initialize(m, data) - m.t = t - m.sigma = sigma - for it in range(2): - # E-Step - trainer.e_step(m, data) - for k in acc_Nij_Sigma_wij2_ref[it]: - assert numpy.allclose(acc_Nij_Sigma_wij2_ref[it][k], trainer.m_acc_Nij_Sigma_wij2[k], 1e-5) - for k in acc_Fnorm_Sigma_wij_ref[it]: - assert numpy.allclose(acc_Fnorm_Sigma_wij_ref[it][k], trainer.m_acc_Fnorm_Sigma_wij[k], 1e-5) - assert numpy.allclose(acc_Snorm_ref[it], trainer.m_acc_Snorm, 1e-5) - assert numpy.allclose(N_ref[it], trainer.m_N, 1e-5) - - # M-Step - trainer.m_step(m, data) - assert numpy.allclose(t_ref[it], m.t, 1e-5) - - # C++ implementation - # Machine - m = IVectorMachine(ubm, 2) - - # Initialization - trainer = IVectorTrainer() - trainer.initialize(m) - m.t = t - m.sigma = sigma - for it in range(2): - # E-Step - trainer.e_step(m, data) - for k in acc_Nij_Sigma_wij2_ref[it]: - assert numpy.allclose(acc_Nij_Sigma_wij2_ref[it][k], trainer.acc_nij_wij2[k], 1e-5) - for k in acc_Fnorm_Sigma_wij_ref[it]: - assert numpy.allclose(acc_Fnorm_Sigma_wij_ref[it][k], trainer.acc_fnormij_wij[k], 1e-5) - - # M-Step - trainer.m_step(m) - assert numpy.allclose(t_ref[it], m.t, 1e-5) - -def test_trainer_update_sigma(): - # Ubm - dim_c = 2 - dim_d = 3 - ubm = GMMMachine(dim_c,dim_d) - ubm.weights = numpy.array([0.4,0.6]) - ubm.means = numpy.array([[1.,7,4],[4,5,3]]) - ubm.variances = numpy.array([[0.5,1.,1.5],[1.,1.5,2.]]) - - # Defines GMMStats - gs1 = GMMStats(dim_c,dim_d) - log_likelihood1 = -3. - T1 = 1 - n1 = numpy.array([0.4, 0.6], numpy.float64) - sumpx1 = numpy.array([[1., 2., 3.], [2., 4., 3.]], numpy.float64) - sumpxx1 = numpy.array([[10., 20., 30.], [40., 50., 60.]], numpy.float64) - gs1.log_likelihood = log_likelihood1 - gs1.t = T1 - gs1.n = n1 - gs1.sum_px = sumpx1 - gs1.sum_pxx = sumpxx1 - - gs2 = GMMStats(dim_c,dim_d) - log_likelihood2 = -4. - T2 = 1 - n2 = numpy.array([0.2, 0.8], numpy.float64) - sumpx2 = numpy.array([[2., 1., 3.], [3., 4.1, 3.2]], numpy.float64) - sumpxx2 = numpy.array([[12., 15., 25.], [39., 51., 62.]], numpy.float64) - gs2.log_likelihood = log_likelihood2 - gs2.t = T2 - gs2.n = n2 - gs2.sum_px = sumpx2 - gs2.sum_pxx = sumpxx2 - - data = [gs1, gs2] - - # Reference values - acc_Nij_Sigma_wij2_ref1 = {0: numpy.array([[ 0.03202305, -0.02947769], [-0.02947769, 0.0561132 ]]), - 1: numpy.array([[ 0.07953279, -0.07829414], [-0.07829414, 0.13814242]])} - acc_Fnorm_Sigma_wij_ref1 = {0: numpy.array([[-0.29622691, 0.61411796], [ 0.09391764, -0.27955961], [-0.39014455, 0.89367757]]), - 1: numpy.array([[ 0.04695882, -0.13977981], [-0.05718673, 0.24159665], [-0.17098161, 0.47326585]])} - acc_Snorm_ref1 = numpy.array([16.6, 22.4, 16.6, 61.4, 55., 97.4]) - N_ref1 = numpy.array([0.6, 1.4]) - t_ref1 = numpy.array([[ 1.59543739, 11.78239235], [ -3.20130371, -6.66379081], [ 4.79674111, 18.44618316], - [ -0.91765407, -1.5319461 ], [ 2.26805901, 3.03434944], [ 2.76600031, 4.9935962 ]]) - sigma_ref1 = numpy.array([ 16.39472121, 34.72955353, 3.3108037, 43.73496916, 38.85472445, 68.22116903]) - - acc_Nij_Sigma_wij2_ref2 = {0: numpy.array([[ 0.50807426, -0.11907756], [-0.11907756, 0.12336544]]), - 1: numpy.array([[ 1.18602399, -0.2835859 ], [-0.2835859 , 0.39440498]])} - acc_Fnorm_Sigma_wij_ref2 = {0: numpy.array([[ 0.07221453, 1.1189786 ], [-0.08681275, -0.35396112], [ 0.15902728, 1.47293972]]), - 1: numpy.array([[-0.04340637, -0.17698056], [ 0.10662127, 0.21484933],[ 0.13116645, 0.64474271]])} - acc_Snorm_ref2 = numpy.array([16.6, 22.4, 16.6, 61.4, 55., 97.4]) - N_ref2 = numpy.array([0.6, 1.4]) - t_ref2 = numpy.array([[ 2.93105054, 11.89961223], [ -1.08988119, -3.92120757], [ 4.02093173, 15.82081981], - [ -0.17376634, -0.57366984], [ 0.26585634, 0.73589952], [ 0.60557877, 2.07014704]]) - sigma_ref2 = numpy.array([5.12154025e+00, 3.48623823e+01, 1.00000000e-05, 4.37792350e+01, 3.91525332e+01, 6.85613258e+01]) - - acc_Nij_Sigma_wij2_ref = [acc_Nij_Sigma_wij2_ref1, acc_Nij_Sigma_wij2_ref2] - acc_Fnorm_Sigma_wij_ref = [acc_Fnorm_Sigma_wij_ref1, acc_Fnorm_Sigma_wij_ref2] - acc_Snorm_ref = [acc_Snorm_ref1, acc_Snorm_ref2] - N_ref = [N_ref1, N_ref2] - t_ref = [t_ref1, t_ref2] - sigma_ref = [sigma_ref1, sigma_ref2] - - - # Python implementation - # Machine - m = IVectorMachine(ubm, 2) - t = numpy.array([[1.,2],[4,1],[0,3],[5,8],[7,10],[11,1]]) - sigma = numpy.array([1.,2.,1.,3.,2.,4.]) - - # Initialization - trainer = IVectorTrainerPy(sigma_update=True) - trainer.initialize(m, data) - m.t = t - m.sigma = sigma - for it in range(2): - # E-Step - trainer.e_step(m, data) - for k in acc_Nij_Sigma_wij2_ref[it]: - assert numpy.allclose(acc_Nij_Sigma_wij2_ref[it][k], trainer.m_acc_Nij_Sigma_wij2[k], 1e-5) - for k in acc_Fnorm_Sigma_wij_ref[it]: - assert numpy.allclose(acc_Fnorm_Sigma_wij_ref[it][k], trainer.m_acc_Fnorm_Sigma_wij[k], 1e-5) - assert numpy.allclose(acc_Snorm_ref[it], trainer.m_acc_Snorm, 1e-5) - assert numpy.allclose(N_ref[it], trainer.m_N, 1e-5) - - # M-Step - trainer.m_step(m, data) - assert numpy.allclose(t_ref[it], m.t, 1e-5) - assert numpy.allclose(sigma_ref[it], m.sigma, 1e-5) - - - # C++ implementation - # Machine - m = IVectorMachine(ubm, 2) - m.variance_threshold = 1e-5 - - # Initialization - trainer = IVectorTrainer(update_sigma=True) - trainer.initialize(m) - m.t = t - m.sigma = sigma - for it in range(2): - # E-Step - trainer.e_step(m, data) - for k in acc_Nij_Sigma_wij2_ref[it]: - assert numpy.allclose(acc_Nij_Sigma_wij2_ref[it][k], trainer.acc_nij_wij2[k], 1e-5) - for k in acc_Fnorm_Sigma_wij_ref[it]: - assert numpy.allclose(acc_Fnorm_Sigma_wij_ref[it][k], trainer.acc_fnormij_wij[k], 1e-5) - assert numpy.allclose(acc_Snorm_ref[it].reshape(dim_c,dim_d), trainer.acc_snormij, 1e-5) - assert numpy.allclose(N_ref[it], trainer.acc_nij, 1e-5) - - # M-Step - trainer.m_step(m) - assert numpy.allclose(t_ref[it], m.t, 1e-5) - assert numpy.allclose(sigma_ref[it], m.sigma, 1e-5) - diff --git a/bob/learn/misc/test_jfa.py b/bob/learn/misc/test_jfa.py deleted file mode 100644 index 594ada4..0000000 --- a/bob/learn/misc/test_jfa.py +++ /dev/null @@ -1,396 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Wed Feb 15 23:24:35 2012 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests on the JFA-based machines -""" - -import os -import numpy -import numpy.linalg -import tempfile - -import bob.io.base - -from . import GMMMachine, GMMStats, JFABase, ISVBase, ISVMachine, JFAMachine - -def estimate_x(dim_c, dim_d, mean, sigma, U, N, F): - # Compute helper values - UtSigmaInv = {} - UtSigmaInvU = {} - dim_ru = U.shape[1] - for c in range(dim_c): - start = c*dim_d - end = (c+1)*dim_d - Uc = U[start:end,:] - UtSigmaInv[c] = Uc.transpose() / sigma[start:end] - UtSigmaInvU[c] = numpy.dot(UtSigmaInv[c], Uc); - - # I + (U^{T} \Sigma^-1 N U) - I_UtSigmaInvNU = numpy.eye(dim_ru, dtype=numpy.float64) - for c in range(dim_c): - I_UtSigmaInvNU = I_UtSigmaInvNU + UtSigmaInvU[c] * N[c] - - # U^{T} \Sigma^-1 F - UtSigmaInv_Fnorm = numpy.zeros((dim_ru,), numpy.float64) - for c in range(dim_c): - start = c*dim_d - end = (c+1)*dim_d - Fnorm = F[c,:] - N[c] * mean[start:end] - UtSigmaInv_Fnorm = UtSigmaInv_Fnorm + numpy.dot(UtSigmaInv[c], Fnorm) - - return numpy.linalg.solve(I_UtSigmaInvNU, UtSigmaInv_Fnorm) - -def estimate_ux(dim_c, dim_d, mean, sigma, U, N, F): - return numpy.dot(U, estimate_x(dim_c, dim_d, mean, sigma, U, N, F)) - - -def test_JFABase(): - - # Creates a UBM - weights = numpy.array([0.4, 0.6], 'float64') - means = numpy.array([[1, 6, 2], [4, 3, 2]], 'float64') - variances = numpy.array([[1, 2, 1], [2, 1, 2]], 'float64') - ubm = GMMMachine(2,3) - ubm.weights = weights - ubm.means = means - ubm.variances = variances - - # Creates a JFABase - U = numpy.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]], 'float64') - V = numpy.array([[6, 5], [4, 3], [2, 1], [1, 2], [3, 4], [5, 6]], 'float64') - d = numpy.array([0, 1, 0, 1, 0, 1], 'float64') - m = JFABase(ubm, ru=1, rv=1) - - _,_,ru,rv = m.shape - assert ru == 1 - assert rv == 1 - - # Checks for correctness - m.resize(2,2) - m.u = U - m.v = V - m.d = d - n_gaussians,dim,ru,rv = m.shape - supervector_length = m.supervector_length - - assert (m.u == U).all() - assert (m.v == V).all() - assert (m.d == d).all() - assert n_gaussians == 2 - assert dim == 3 - assert supervector_length == 6 - assert ru == 2 - assert rv == 2 - - # Saves and loads - filename = str(tempfile.mkstemp(".hdf5")[1]) - m.save(bob.io.base.HDF5File(filename, 'w')) - m_loaded = JFABase(bob.io.base.HDF5File(filename)) - m_loaded.ubm = ubm - assert m == m_loaded - assert (m != m_loaded) is False - assert m.is_similar_to(m_loaded) - - # Copy constructor - mc = JFABase(m) - assert m == mc - - # Variant - #mv = JFABase() - # Checks for correctness - #mv.ubm = ubm - #mv.resize(2,2) - #mv.u = U - #mv.v = V - #mv.d = d - #assert (m.u == U).all() - #assert (m.v == V).all() - #assert (m.d == d).all() - #assert m.dim_c == 2 - #assert m.dim_d == 3 - #assert m.dim_cd == 6 - #assert m.dim_ru == 2 - #assert m.dim_rv == 2 - - # Clean-up - os.unlink(filename) - -def test_ISVBase(): - - # Creates a UBM - weights = numpy.array([0.4, 0.6], 'float64') - means = numpy.array([[1, 6, 2], [4, 3, 2]], 'float64') - variances = numpy.array([[1, 2, 1], [2, 1, 2]], 'float64') - ubm = GMMMachine(2,3) - ubm.weights = weights - ubm.means = means - ubm.variances = variances - - # Creates a ISVBase - U = numpy.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]], 'float64') - d = numpy.array([0, 1, 0, 1, 0, 1], 'float64') - m = ISVBase(ubm, ru=1) - _,_,ru = m.shape - assert ru == 1 - - # Checks for correctness - m.resize(2) - m.u = U - m.d = d - n_gaussians,dim,ru = m.shape - supervector_length = m.supervector_length - assert (m.u == U).all() - assert (m.d == d).all() - assert n_gaussians == 2 - assert dim == 3 - assert supervector_length == 6 - assert ru == 2 - - # Saves and loads - filename = str(tempfile.mkstemp(".hdf5")[1]) - m.save(bob.io.base.HDF5File(filename, 'w')) - m_loaded = ISVBase(bob.io.base.HDF5File(filename)) - m_loaded.ubm = ubm - assert m == m_loaded - assert (m != m_loaded) is False - assert m.is_similar_to(m_loaded) - - # Copy constructor - mc = ISVBase(m) - assert m == mc - - # Variant - #mv = ISVBase() - # Checks for correctness - #mv.ubm = ubm - #mv.resize(2) - #mv.u = U - #mv.d = d - #assert (m.u == U).all() - #assert (m.d == d).all() - #ssert m.dim_c == 2 - #assert m.dim_d == 3 - #assert m.dim_cd == 6 - #assert m.dim_ru == 2 - - # Clean-up - os.unlink(filename) - -def test_JFAMachine(): - - # Creates a UBM - weights = numpy.array([0.4, 0.6], 'float64') - means = numpy.array([[1, 6, 2], [4, 3, 2]], 'float64') - variances = numpy.array([[1, 2, 1], [2, 1, 2]], 'float64') - ubm = GMMMachine(2,3) - ubm.weights = weights - ubm.means = means - ubm.variances = variances - - # Creates a JFABase - U = numpy.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]], 'float64') - V = numpy.array([[6, 5], [4, 3], [2, 1], [1, 2], [3, 4], [5, 6]], 'float64') - d = numpy.array([0, 1, 0, 1, 0, 1], 'float64') - base = JFABase(ubm,2,2) - base.u = U - base.v = V - base.d = d - - # Creates a JFAMachine - y = numpy.array([1,2], 'float64') - z = numpy.array([3,4,1,2,0,1], 'float64') - m = JFAMachine(base) - m.y = y - m.z = z - n_gaussians,dim,ru,rv = m.shape - supervector_length = m.supervector_length - - assert n_gaussians == 2 - assert dim == 3 - assert supervector_length == 6 - assert ru == 2 - assert rv == 2 - assert (m.y == y).all() - assert (m.z == z).all() - - # Saves and loads - filename = str(tempfile.mkstemp(".hdf5")[1]) - m.save(bob.io.base.HDF5File(filename, 'w')) - m_loaded = JFAMachine(bob.io.base.HDF5File(filename)) - m_loaded.jfa_base = base - assert m == m_loaded - assert (m != m_loaded) is False - assert m.is_similar_to(m_loaded) - - # Copy constructor - mc = JFAMachine(m) - assert m == mc - - # Variant - #mv = JFAMachine() - # Checks for correctness - #mv.jfa_base = base - #m.y = y - #m.z = z - #assert m.dim_c == 2 - #assert m.dim_d == 3 - #assert m.dim_cd == 6 - #assert m.dim_ru == 2 - #assert m.dim_rv == 2 - #assert (m.y == y).all() - #assert (m.z == z).all() - - # Defines GMMStats - gs = GMMStats(2,3) - log_likelihood = -3. - T = 1 - n = numpy.array([0.4, 0.6], 'float64') - sumpx = numpy.array([[1., 2., 3.], [4., 5., 6.]], 'float64') - sumpxx = numpy.array([[10., 20., 30.], [40., 50., 60.]], 'float64') - gs.log_likelihood = log_likelihood - gs.t = T - gs.n = n - gs.sum_px = sumpx - gs.sum_pxx = sumpxx - - # Forward GMMStats and check estimated value of the x speaker factor - eps = 1e-10 - x_ref = numpy.array([0.291042849767692, 0.310273618998444], 'float64') - score_ref = -2.111577181208289 - score = m(gs) - assert numpy.allclose(m.x, x_ref, eps) - assert abs(score_ref-score) < eps - - # x and Ux - x = numpy.ndarray((2,), numpy.float64) - m.estimate_x(gs, x) - n_gaussians, dim,_,_ = m.shape - x_py = estimate_x(n_gaussians, dim, ubm.mean_supervector, ubm.variance_supervector, U, n, sumpx) - assert numpy.allclose(x, x_py, eps) - - ux = numpy.ndarray((6,), numpy.float64) - m.estimate_ux(gs, ux) - n_gaussians, dim,_,_ = m.shape - ux_py = estimate_ux(n_gaussians, dim, ubm.mean_supervector, ubm.variance_supervector, U, n, sumpx) - assert numpy.allclose(ux, ux_py, eps) - assert numpy.allclose(m.x, x, eps) - - score = m.forward_ux(gs, ux) - - assert abs(score_ref-score) < eps - - # Clean-up - os.unlink(filename) - -def test_ISVMachine(): - - # Creates a UBM - weights = numpy.array([0.4, 0.6], 'float64') - means = numpy.array([[1, 6, 2], [4, 3, 2]], 'float64') - variances = numpy.array([[1, 2, 1], [2, 1, 2]], 'float64') - ubm = GMMMachine(2,3) - ubm.weights = weights - ubm.means = means - ubm.variances = variances - - # Creates a ISVBaseMachine - U = numpy.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]], 'float64') - #V = numpy.array([[0], [0], [0], [0], [0], [0]], 'float64') - d = numpy.array([0, 1, 0, 1, 0, 1], 'float64') - base = ISVBase(ubm,2) - base.u = U - #base.v = V - base.d = d - - # Creates a JFAMachine - z = numpy.array([3,4,1,2,0,1], 'float64') - m = ISVMachine(base) - m.z = z - - n_gaussians,dim,ru = m.shape - supervector_length = m.supervector_length - assert n_gaussians == 2 - assert dim == 3 - assert supervector_length == 6 - assert ru == 2 - assert (m.z == z).all() - - # Saves and loads - filename = str(tempfile.mkstemp(".hdf5")[1]) - m.save(bob.io.base.HDF5File(filename, 'w')) - m_loaded = ISVMachine(bob.io.base.HDF5File(filename)) - m_loaded.isv_base = base - assert m == m_loaded - assert (m != m_loaded) is False - assert m.is_similar_to(m_loaded) - - # Copy constructor - mc = ISVMachine(m) - assert m == mc - - # Variant - mv = ISVMachine(base) - # Checks for correctness - #mv.isv_base = base - m.z = z - - n_gaussians,dim,ru = m.shape - supervector_length = m.supervector_length - assert n_gaussians == 2 - assert dim == 3 - assert supervector_length == 6 - assert ru == 2 - assert (m.z == z).all() - - # Defines GMMStats - gs = GMMStats(2,3) - log_likelihood = -3. - T = 1 - n = numpy.array([0.4, 0.6], 'float64') - sumpx = numpy.array([[1., 2., 3.], [4., 5., 6.]], 'float64') - sumpxx = numpy.array([[10., 20., 30.], [40., 50., 60.]], 'float64') - gs.log_likelihood = log_likelihood - gs.t = T - gs.n = n - gs.sum_px = sumpx - gs.sum_pxx = sumpxx - - # Forward GMMStats and check estimated value of the x speaker factor - eps = 1e-10 - x_ref = numpy.array([0.291042849767692, 0.310273618998444], 'float64') - score_ref = -3.280498193082100 - - score = m(gs) - assert numpy.allclose(m.x, x_ref, eps) - assert abs(score_ref-score) < eps - - # Check using alternate forward() method - supervector_length = m.supervector_length - Ux = numpy.ndarray(shape=(supervector_length,), dtype=numpy.float64) - m.estimate_ux(gs, Ux) - score = m.forward_ux(gs, Ux) - assert abs(score_ref-score) < eps - - # x and Ux - x = numpy.ndarray((2,), numpy.float64) - m.estimate_x(gs, x) - n_gaussians,dim,_ = m.shape - x_py = estimate_x(n_gaussians, dim, ubm.mean_supervector, ubm.variance_supervector, U, n, sumpx) - assert numpy.allclose(x, x_py, eps) - - ux = numpy.ndarray((6,), numpy.float64) - m.estimate_ux(gs, ux) - n_gaussians,dim,_ = m.shape - ux_py = estimate_ux(n_gaussians, dim, ubm.mean_supervector, ubm.variance_supervector, U, n, sumpx) - assert numpy.allclose(ux, ux_py, eps) - assert numpy.allclose(m.x, x, eps) - - score = m.forward_ux(gs, ux) - assert abs(score_ref-score) < eps - - # Clean-up - os.unlink(filename) diff --git a/bob/learn/misc/test_jfa_trainer.py b/bob/learn/misc/test_jfa_trainer.py deleted file mode 100644 index 4df6d00..0000000 --- a/bob/learn/misc/test_jfa_trainer.py +++ /dev/null @@ -1,316 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Tue Jul 19 12:16:17 2011 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Test JFA trainer package -""" - -import numpy -import numpy.linalg - -import bob.core.random - -from . import GMMStats, GMMMachine, JFABase, JFAMachine, ISVBase, ISVMachine, JFATrainer, ISVTrainer - - -def equals(x, y, epsilon): - return (abs(x - y) < epsilon).all() - -# Define Training set and initial values for tests -F1 = numpy.array( [0.3833, 0.4516, 0.6173, 0.2277, 0.5755, 0.8044, 0.5301, - 0.9861, 0.2751, 0.0300, 0.2486, 0.5357]).reshape((6,2)) -F2 = numpy.array( [0.0871, 0.6838, 0.8021, 0.7837, 0.9891, 0.5341, 0.0669, - 0.8854, 0.9394, 0.8990, 0.0182, 0.6259]).reshape((6,2)) -F=[F1, F2] - -N1 = numpy.array([0.1379, 0.1821, 0.2178, 0.0418]).reshape((2,2)) -N2 = numpy.array([0.1069, 0.9397, 0.6164, 0.3545]).reshape((2,2)) -N=[N1, N2] - -gs11 = GMMStats(2,3) -gs11.n = N1[:,0] -gs11.sum_px = F1[:,0].reshape(2,3) -gs12 = GMMStats(2,3) -gs12.n = N1[:,1] -gs12.sum_px = F1[:,1].reshape(2,3) - -gs21 = GMMStats(2,3) -gs21.n = N2[:,0] -gs21.sum_px = F2[:,0].reshape(2,3) -gs22 = GMMStats(2,3) -gs22.n = N2[:,1] -gs22.sum_px = F2[:,1].reshape(2,3) - -TRAINING_STATS = [[gs11, gs12], [gs21, gs22]] -UBM_MEAN = numpy.array([0.1806, 0.0451, 0.7232, 0.3474, 0.6606, 0.3839]) -UBM_VAR = numpy.array([0.6273, 0.0216, 0.9106, 0.8006, 0.7458, 0.8131]) -M_d = numpy.array([0.4106, 0.9843, 0.9456, 0.6766, 0.9883, 0.7668]) -M_v = numpy.array( [0.3367, 0.4116, 0.6624, 0.6026, 0.2442, 0.7505, 0.2955, - 0.5835, 0.6802, 0.5518, 0.5278,0.5836]).reshape((6,2)) -M_u = numpy.array( [0.5118, 0.3464, 0.0826, 0.8865, 0.7196, 0.4547, 0.9962, - 0.4134, 0.3545, 0.2177, 0.9713, 0.1257]).reshape((6,2)) - -z1 = numpy.array([0.3089, 0.7261, 0.7829, 0.6938, 0.0098, 0.8432]) -z2 = numpy.array([0.9223, 0.7710, 0.0427, 0.3782, 0.7043, 0.7295]) -y1 = numpy.array([0.2243, 0.2691]) -y2 = numpy.array([0.6730, 0.4775]) -x1 = numpy.array([0.9976, 0.8116, 0.1375, 0.3900]).reshape((2,2)) -x2 = numpy.array([0.4857, 0.8944, 0.9274, 0.9175]).reshape((2,2)) -M_z=[z1, z2] -M_y=[y1, y2] -M_x=[x1, x2] - - -def test_JFATrainer_updateYandV(): - # test the JFATrainer for updating Y and V - - v_ref = numpy.array( [0.7228, 0.7892, 0.6475, 0.6080, 0.8631, 0.8416, - 1.6512, 1.6068, 0.0500, 0.0101, 0.4325, 0.6719]).reshape((6,2)) - - y1 = numpy.array([0., 0.]) - y2 = numpy.array([0., 0.]) - y3 = numpy.array([0.9630, 1.3868]) - y4 = numpy.array([0.0426, -0.3721]) - y=[y1, y2] - - # call the updateY function - ubm = GMMMachine(2,3) - ubm.mean_supervector = UBM_MEAN - ubm.variance_supervector = UBM_VAR - m = JFABase(ubm,2,2) - t = JFATrainer(10) - t.initialize(m, TRAINING_STATS) - m.u = M_u - m.v = M_v - m.d = M_d - t.__X__ = M_x - t.__Y__ = y - t.__Z__ = M_z - t.e_step1(m, TRAINING_STATS) - t.m_step1(m, TRAINING_STATS) - - # Expected results(JFA cookbook, matlab) - assert equals(t.__Y__[0], y3, 2e-4) - assert equals(t.__Y__[1], y4, 2e-4) - assert equals(m.v, v_ref, 2e-4) - - -def test_JFATrainer_updateXandU(): - # test the JFATrainer for updating X and U - - u_ref = numpy.array( [0.6729, 0.3408, 0.0544, 1.0653, 0.5399, 1.3035, - 2.4995, 0.4385, 0.1292, -0.0576, 1.1962, 0.0117]).reshape((6,2)) - - x1 = numpy.array([0., 0., 0., 0.]).reshape((2,2)) - x2 = numpy.array([0., 0., 0., 0.]).reshape((2,2)) - x3 = numpy.array([0.2143, 1.8275, 3.1979, 0.1227]).reshape((2,2)) - x4 = numpy.array([-1.3861, 0.2359, 5.3326, -0.7914]).reshape((2,2)) - x = [x1, x2] - - # call the updateX function - ubm = GMMMachine(2,3) - ubm.mean_supervector = UBM_MEAN - ubm.variance_supervector = UBM_VAR - m = JFABase(ubm,2,2) - t = JFATrainer(10) - t.initialize(m, TRAINING_STATS) - m.u = M_u - m.v = M_v - m.d = M_d - t.__X__ = x - t.__Y__ = M_y - t.__Z__ = M_z - t.e_step2(m, TRAINING_STATS) - t.m_step2(m, TRAINING_STATS) - - # Expected results(JFA cookbook, matlab) - assert equals(t.__X__[0], x3, 2e-4) - assert equals(t.__X__[1], x4, 2e-4) - assert equals(m.u, u_ref, 2e-4) - - -def test_JFATrainer_updateZandD(): - # test the JFATrainer for updating Z and D - - d_ref = numpy.array([0.3110, 1.0138, 0.8297, 1.0382, 0.0095, 0.6320]) - - z1 = numpy.array([0., 0., 0., 0., 0., 0.]) - z2 = numpy.array([0., 0., 0., 0., 0., 0.]) - z3_ref = numpy.array([0.3256, 1.8633, 0.6480, 0.8085, -0.0432, 0.2885]) - z4_ref = numpy.array([-0.3324, -0.1474, -0.4404, -0.4529, 0.0484, -0.5848]) - z=[z1, z2] - - # call the updateZ function - ubm = GMMMachine(2,3) - ubm.mean_supervector = UBM_MEAN - ubm.variance_supervector = UBM_VAR - m = JFABase(ubm,2,2) - t = JFATrainer(10) - t.initialize(m, TRAINING_STATS) - m.u = M_u - m.v = M_v - m.d = M_d - t.__X__ = M_x - t.__Y__ = M_y - t.__Z__ = z - t.e_step3(m, TRAINING_STATS) - t.m_step3(m, TRAINING_STATS) - - # Expected results(JFA cookbook, matlab) - assert equals(t.__Z__[0], z3_ref, 2e-4) - assert equals(t.__Z__[1], z4_ref, 2e-4) - assert equals(m.d, d_ref, 2e-4) - - -def test_JFATrainAndEnrol(): - # Train and enrol a JFAMachine - - # Calls the train function - ubm = GMMMachine(2,3) - ubm.mean_supervector = UBM_MEAN - ubm.variance_supervector = UBM_VAR - mb = JFABase(ubm, 2, 2) - t = JFATrainer(10) - t.initialize(mb, TRAINING_STATS) - mb.u = M_u - mb.v = M_v - mb.d = M_d - t.train_loop(mb, TRAINING_STATS) - - v_ref = numpy.array([[0.245364911936476, 0.978133261775424], [0.769646805052223, 0.940070736856596], [0.310779202800089, 1.456332053893072], - [0.184760934399551, 2.265139705602147], [0.701987784039800, 0.081632150899400], [0.074344030229297, 1.090248340917255]], 'float64') - u_ref = numpy.array([[0.049424652628448, 0.060480486336896], [0.178104127464007, 1.884873813495153], [1.204011484266777, 2.281351307871720], - [7.278512126426286, -0.390966087173334], [-0.084424326581145, -0.081725474934414], [4.042143689831097, -0.262576386580701]], 'float64') - d_ref = numpy.array([9.648467e-18, 2.63720683155e-12, 2.11822157653706e-10, 9.1047243e-17, 1.41163442535567e-10, 3.30581e-19], 'float64') - - eps = 1e-10 - assert numpy.allclose(mb.v, v_ref, eps) - assert numpy.allclose(mb.u, u_ref, eps) - assert numpy.allclose(mb.d, d_ref, eps) - - # Calls the enrol function - m = JFAMachine(mb) - - Ne = numpy.array([0.1579, 0.9245, 0.1323, 0.2458]).reshape((2,2)) - Fe = numpy.array([0.1579, 0.1925, 0.3242, 0.1234, 0.2354, 0.2734, 0.2514, 0.5874, 0.3345, 0.2463, 0.4789, 0.5236]).reshape((6,2)) - gse1 = GMMStats(2,3) - gse1.n = Ne[:,0] - gse1.sum_px = Fe[:,0].reshape(2,3) - gse2 = GMMStats(2,3) - gse2.n = Ne[:,1] - gse2.sum_px = Fe[:,1].reshape(2,3) - - gse = [gse1, gse2] - t.enrol(m, gse, 5) - - y_ref = numpy.array([0.555991469319657, 0.002773650670010], 'float64') - z_ref = numpy.array([8.2228e-20, 3.15216909492e-13, -1.48616735364395e-10, 1.0625905e-17, 3.7150503117895e-11, 1.71104e-19], 'float64') - assert numpy.allclose(m.y, y_ref, eps) - assert numpy.allclose(m.z, z_ref, eps) - - -def test_ISVTrainAndEnrol(): - # Train and enrol an 'ISVMachine' - - eps = 1e-10 - d_ref = numpy.array([0.39601136, 0.07348469, 0.47712682, 0.44738127, 0.43179856, 0.45086029], 'float64') - u_ref = numpy.array([[0.855125642430777, 0.563104284748032], [-0.325497865404680, 1.923598985291687], [0.511575659503837, 1.964288663083095], [9.330165761678115, 1.073623827995043], [0.511099245664012, 0.278551249248978], [5.065578541930268, 0.509565618051587]], 'float64') - z_ref = numpy.array([-0.079315777443826, 0.092702428248543, -0.342488761656616, -0.059922635809136 , 0.133539981073604, 0.213118695516570], 'float64') - - # Calls the train function - ubm = GMMMachine(2,3) - ubm.mean_supervector = UBM_MEAN - ubm.variance_supervector = UBM_VAR - mb = ISVBase(ubm,2) - t = ISVTrainer(10, 4.) - #t.train(mb, TRAINING_STATS) - t.initialize(mb, TRAINING_STATS) - mb.u = M_u - for i in range(10): - t.e_step(mb, TRAINING_STATS) - t.m_step(mb) - - assert numpy.allclose(mb.d, d_ref, eps) - assert numpy.allclose(mb.u, u_ref, eps) - - # Calls the enrol function - m = ISVMachine(mb) - - Ne = numpy.array([0.1579, 0.9245, 0.1323, 0.2458]).reshape((2,2)) - Fe = numpy.array([0.1579, 0.1925, 0.3242, 0.1234, 0.2354, 0.2734, 0.2514, 0.5874, 0.3345, 0.2463, 0.4789, 0.5236]).reshape((6,2)) - gse1 = GMMStats(2,3) - gse1.n = Ne[:,0] - gse1.sum_px = Fe[:,0].reshape(2,3) - gse2 = GMMStats(2,3) - gse2.n = Ne[:,1] - gse2.sum_px = Fe[:,1].reshape(2,3) - - gse = [gse1, gse2] - t.enrol(m, gse, 5) - assert numpy.allclose(m.z, z_ref, eps) - -def test_JFATrainInitialize(): - # Check that the initialization is consistent and using the rng (cf. issue #118) - - eps = 1e-10 - - # UBM GMM - ubm = GMMMachine(2,3) - ubm.mean_supervector = UBM_MEAN - ubm.variance_supervector = UBM_VAR - - ## JFA - jb = JFABase(ubm, 2, 2) - # first round - rng = bob.core.random.mt19937(0) - jt = JFATrainer(10) - jt.rng = rng - jt.initialize(jb, TRAINING_STATS) - u1 = jb.u - v1 = jb.v - d1 = jb.d - - # second round - rng = bob.core.random.mt19937(0) - jt.rng = rng - jt.initialize(jb, TRAINING_STATS) - u2 = jb.u - v2 = jb.v - d2 = jb.d - - assert numpy.allclose(u1, u2, eps) - assert numpy.allclose(v1, v2, eps) - assert numpy.allclose(d1, d2, eps) - -def test_ISVTrainInitialize(): - - # Check that the initialization is consistent and using the rng (cf. issue #118) - eps = 1e-10 - - # UBM GMM - ubm = GMMMachine(2,3) - ubm.mean_supervector = UBM_MEAN - ubm.variance_supervector = UBM_VAR - - ## ISV - ib = ISVBase(ubm, 2) - # first round - rng = bob.core.random.mt19937(0) - it = ISVTrainer(10) - it.rng = rng - it.initialize(ib, TRAINING_STATS) - u1 = ib.u - d1 = ib.d - - # second round - rng = bob.core.random.mt19937(0) - it.rng = rng - it.initialize(ib, TRAINING_STATS) - u2 = ib.u - d2 = ib.d - - assert numpy.allclose(u1, u2, eps) - assert numpy.allclose(d1, d2, eps) diff --git a/bob/learn/misc/test_kmeans.py b/bob/learn/misc/test_kmeans.py deleted file mode 100644 index 0c6cc25..0000000 --- a/bob/learn/misc/test_kmeans.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Thu Feb 16 17:57:10 2012 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests the KMeans machine -""" - -import os -import numpy -import tempfile - -import bob.io.base -from . import KMeansMachine - -def equals(x, y, epsilon): - return (abs(x - y) < epsilon) - -def test_KMeansMachine(): - # Test a KMeansMachine - - means = numpy.array([[3, 70, 0], [4, 72, 0]], 'float64') - mean = numpy.array([3,70,1], 'float64') - - # Initializes a KMeansMachine - km = KMeansMachine(2,3) - km.means = means - assert km.shape == (2,3) - - # Sets and gets - assert (km.means == means).all() - assert (km.get_mean(0) == means[0,:]).all() - assert (km.get_mean(1) == means[1,:]).all() - km.set_mean(0, mean) - assert (km.get_mean(0) == mean).all() - - # Distance and closest mean - eps = 1e-10 - - assert equals( km.get_distance_from_mean(mean, 0), 0, eps) - assert equals( km.get_distance_from_mean(mean, 1), 6, eps) - - (index, dist) = km.get_closest_mean(mean) - - assert index == 0 - assert equals( dist, 0, eps) - assert equals( km.get_min_distance(mean), 0, eps) - - # Loads and saves - filename = str(tempfile.mkstemp(".hdf5")[1]) - km.save(bob.io.base.HDF5File(filename, 'w')) - km_loaded = KMeansMachine(bob.io.base.HDF5File(filename)) - assert km == km_loaded - - # Resize - km.resize(4,5) - assert km.shape == (4,5) - - # Copy constructor and comparison operators - km.resize(2,3) - km2 = KMeansMachine(km) - assert km2 == km - assert (km2 != km) is False - assert km2.is_similar_to(km) - means2 = numpy.array([[3, 70, 0], [4, 72, 2]], 'float64') - km2.means = means2 - assert (km2 == km) is False - assert km2 != km - assert (km2.is_similar_to(km)) is False - - # Clean-up - os.unlink(filename) - - -def test_KMeansMachine2(): - kmeans = bob.learn.misc.KMeansMachine(2,2) - kmeans.means = numpy.array([[1.2,1.3],[0.2,-0.3]]) - - data = numpy.array([ - [1.,1], - [1.2, 3], - [0,0], - [0.3,0.2], - [0.2,0] - ]) - variances, weights = kmeans.get_variances_and_weights_for_each_cluster(data) - - variances_result = numpy.array([[ 0.01,1.], - [ 0.01555556, 0.00888889]]) - weights_result = numpy.array([ 0.4, 0.6]) - - assert equals(weights_result,weights, 1e-3).all() - assert equals(variances_result,variances,1e-3).all() - diff --git a/bob/learn/misc/test_kmeans_trainer.py b/bob/learn/misc/test_kmeans_trainer.py deleted file mode 100644 index 89f18e5..0000000 --- a/bob/learn/misc/test_kmeans_trainer.py +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Fri Jan 18 12:46:00 2013 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Test K-Means algorithm -""" -import numpy - -import bob.core -import bob.io -from bob.io.base.test_utils import datafile - -from bob.learn.misc import KMeansMachine, KMeansTrainer - -def equals(x, y, epsilon): - return (abs(x - y) < epsilon).all() - -def kmeans_plus_plus(machine, data, seed): - """Python implementation of K-Means++ (initialization)""" - n_data = data.shape[0] - rng = bob.core.random.mt19937(seed) - u = bob.core.random.uniform('int32', 0, n_data-1) - index = u(rng) - machine.set_mean(0, data[index,:]) - weights = numpy.zeros(shape=(n_data,), dtype=numpy.float64) - - for m in range(1,machine.dim_c): - for s in range(n_data): - s_cur = data[s,:] - w_cur = machine.get_distance_from_mean(s_cur, 0) - for i in range(m): - w_cur = min(machine.get_distance_from_mean(s_cur, i), w_cur) - weights[s] = w_cur - weights *= weights - weights /= numpy.sum(weights) - d = bob.core.random.discrete('int32', weights) - index = d(rng) - machine.set_mean(m, data[index,:]) - - -def NormalizeStdArray(path): - array = bob.io.base.load(path).astype('float64') - std = array.std(axis=0) - return (array/std, std) - -def multiplyVectorsByFactors(matrix, vector): - for i in range(0, matrix.shape[0]): - for j in range(0, matrix.shape[1]): - matrix[i, j] *= vector[j] - -def flipRows(array): - if len(array.shape) == 2: - return numpy.array([numpy.array(array[1, :]), numpy.array(array[0, :])], 'float64') - elif len(array.shape) == 1: - return numpy.array([array[1], array[0]], 'float64') - else: - raise Exception('Input type not supportd by flipRows') - -if hasattr(KMeansTrainer, 'KMEANS_PLUS_PLUS'): - def test_kmeans_plus_plus(): - - # Tests the K-Means++ initialization - dim_c = 5 - dim_d = 7 - n_samples = 150 - data = numpy.random.randn(n_samples,dim_d) - seed = 0 - - # C++ implementation - machine = KMeansMachine(dim_c, dim_d) - trainer = KMeansTrainer() - trainer.rng = bob.core.random.mt19937(seed) - trainer.initialization_method = 'KMEANS_PLUS_PLUS' - trainer.initialize(machine, data) - - # Python implementation - py_machine = KMeansMachine(dim_c, dim_d) - kmeans_plus_plus(py_machine, data, seed) - assert equals(machine.means, py_machine.means, 1e-8) - -def test_kmeans_noduplicate(): - # Data/dimensions - dim_c = 2 - dim_d = 3 - seed = 0 - data = numpy.array([[1,2,3],[1,2,3],[1,2,3],[4,5,6.]]) - # Defines machine and trainer - machine = KMeansMachine(dim_c, dim_d) - trainer = KMeansTrainer() - trainer.rng = bob.core.random.mt19937(seed) - trainer.initialization_method = 'RANDOM_NO_DUPLICATE' - trainer.initialize(machine, data) - # Makes sure that the two initial mean vectors selected are different - assert equals(machine.get_mean(0), machine.get_mean(1), 1e-8) == False - - -def test_kmeans_a(): - - # Trains a KMeansMachine - # This files contains draws from two 1D Gaussian distributions: - # * 100 samples from N(-10,1) - # * 100 samples from N(10,1) - data = bob.io.base.load(datafile("samplesFrom2G_f64.hdf5", __name__)) - - machine = KMeansMachine(2, 1) - - trainer = KMeansTrainer() - trainer.train(machine, data) - - [variances, weights] = machine.get_variances_and_weights_for_each_cluster(data) - variances_b = numpy.ndarray(shape=(2,1), dtype=numpy.float64) - weights_b = numpy.ndarray(shape=(2,), dtype=numpy.float64) - machine.__get_variances_and_weights_for_each_cluster_init__(variances_b, weights_b) - machine.__get_variances_and_weights_for_each_cluster_acc__(data, variances_b, weights_b) - machine.__get_variances_and_weights_for_each_cluster_fin__(variances_b, weights_b) - m1 = machine.get_mean(0) - m2 = machine.get_mean(1) - - ## Check means [-10,10] / variances [1,1] / weights [0.5,0.5] - if(m1<m2): means=numpy.array(([m1[0],m2[0]]), 'float64') - else: means=numpy.array(([m2[0],m1[0]]), 'float64') - assert equals(means, numpy.array([-10.,10.]), 2e-1) - assert equals(variances, numpy.array([1.,1.]), 2e-1) - assert equals(weights, numpy.array([0.5,0.5]), 1e-3) - - assert equals(variances, variances_b, 1e-8) - assert equals(weights, weights_b, 1e-8) - - - -def test_kmeans_b(): - - # Trains a KMeansMachine - (arStd,std) = NormalizeStdArray(datafile("faithful.torch3.hdf5", __name__)) - - machine = KMeansMachine(2, 2) - - trainer = KMeansTrainer() - #trainer.seed = 1337 - trainer.train(machine, arStd) - - [variances, weights] = machine.get_variances_and_weights_for_each_cluster(arStd) - means = machine.means - - multiplyVectorsByFactors(means, std) - multiplyVectorsByFactors(variances, std ** 2) - - gmmWeights = bob.io.base.load(datafile('gmm.init_weights.hdf5', __name__)) - gmmMeans = bob.io.base.load(datafile('gmm.init_means.hdf5', __name__)) - gmmVariances = bob.io.base.load(datafile('gmm.init_variances.hdf5', __name__)) - - if (means[0, 0] < means[1, 0]): - means = flipRows(means) - variances = flipRows(variances) - weights = flipRows(weights) - - assert equals(means, gmmMeans, 1e-3) - assert equals(weights, gmmWeights, 1e-3) - assert equals(variances, gmmVariances, 1e-3) - - # Check comparison operators - trainer1 = KMeansTrainer() - trainer2 = KMeansTrainer() - #trainer1.rng = trainer2.rng - - #assert trainer1 == trainer2 - #assert (trainer1 != trainer2) is False - trainer1.max_iterations = 1337 - #assert (trainer1 == trainer2) is False - #assert trainer1 != trainer2 - - # Check that there is no duplicate means during initialization - machine = KMeansMachine(2, 1) - trainer = KMeansTrainer() - trainer.initialization_method = 'RANDOM_NO_DUPLICATE' - data = numpy.array([[1.], [1.], [1.], [1.], [1.], [1.], [2.], [3.]]) - trainer.train(machine, data) - assert (numpy.isnan(machine.means).any()) == False \ No newline at end of file diff --git a/bob/learn/misc/test_linearscoring.py b/bob/learn/misc/test_linearscoring.py deleted file mode 100644 index 8a96a01..0000000 --- a/bob/learn/misc/test_linearscoring.py +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Francois Moulin <Francois.Moulin@idiap.ch> -# Wed Jul 13 16:00:04 2011 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests on the LinearScoring function -""" - -import numpy - -from . import GMMMachine, GMMStats, linear_scoring - -def test_LinearScoring(): - - ubm = GMMMachine(2, 2) - ubm.weights = numpy.array([0.5, 0.5], 'float64') - ubm.means = numpy.array([[3, 70], [4, 72]], 'float64') - ubm.variances = numpy.array([[1, 10], [2, 5]], 'float64') - ubm.variance_thresholds = numpy.array([[0, 0], [0, 0]], 'float64') - - model1 = GMMMachine(2, 2) - model1.weights = numpy.array([0.5, 0.5], 'float64') - model1.means = numpy.array([[1, 2], [3, 4]], 'float64') - model1.variances = numpy.array([[9, 10], [11, 12]], 'float64') - model1.variance_thresholds = numpy.array([[0, 0], [0, 0]], 'float64') - - model2 = GMMMachine(2, 2) - model2.weights = numpy.array([0.5, 0.5], 'float64') - model2.means = numpy.array([[5, 6], [7, 8]], 'float64') - model2.variances = numpy.array([[13, 14], [15, 16]], 'float64') - model2.variance_thresholds = numpy.array([[0, 0], [0, 0]], 'float64') - - stats1 = GMMStats(2, 2) - stats1.sum_px = numpy.array([[1, 2], [3, 4]], 'float64') - stats1.n = numpy.array([1, 2], 'float64') - stats1.t = 1+2 - - stats2 = GMMStats(2, 2) - stats2.sum_px = numpy.array([[5, 6], [7, 8]], 'float64') - stats2.n = numpy.array([3, 4], 'float64') - stats2.t = 3+4 - - stats3 = GMMStats(2, 2) - stats3.sum_px = numpy.array([[5, 6], [7, 3]], 'float64') - stats3.n = numpy.array([3, 4], 'float64') - stats3.t = 3+4 - - test_channeloffset = [numpy.array([9, 8, 7, 6], 'float64'), numpy.array([5, 4, 3, 2], 'float64'), numpy.array([1, 0, 1, 2], 'float64')] - - # Reference scores (from Idiap internal matlab implementation) - ref_scores_00 = numpy.array([[2372.9, 5207.7, 5275.7], [2215.7, 4868.1, 4932.1]], 'float64') - ref_scores_01 = numpy.array( [[790.9666666666667, 743.9571428571428, 753.6714285714285], [738.5666666666667, 695.4428571428572, 704.5857142857144]], 'float64') - ref_scores_10 = numpy.array([[2615.5, 5434.1, 5392.5], [2381.5, 4999.3, 5022.5]], 'float64') - ref_scores_11 = numpy.array([[871.8333333333332, 776.3000000000001, 770.3571428571427], [793.8333333333333, 714.1857142857143, 717.5000000000000]], 'float64') - - - # 1/ Use GMMMachines - # 1/a/ Without test_channelOffset, without frame-length normalisation - scores = linear_scoring([model1, model2], ubm, [stats1, stats2, stats3]) - assert (abs(scores - ref_scores_00) < 1e-7).all() - - # 1/b/ Without test_channelOffset, with frame-length normalisation - scores = linear_scoring([model1, model2], ubm, [stats1, stats2, stats3], [], True) - assert (abs(scores - ref_scores_01) < 1e-7).all() - #scores = linear_scoring([model1, model2], ubm, [stats1, stats2, stats3], (), True) - #assert (abs(scores - ref_scores_01) < 1e-7).all() - #scores = linear_scoring([model1, model2], ubm, [stats1, stats2, stats3], None, True) - #assert (abs(scores - ref_scores_01) < 1e-7).all() - - # 1/c/ With test_channelOffset, without frame-length normalisation - scores = linear_scoring([model1, model2], ubm, [stats1, stats2, stats3], test_channeloffset) - assert (abs(scores - ref_scores_10) < 1e-7).all() - - # 1/d/ With test_channelOffset, with frame-length normalisation - scores = linear_scoring([model1, model2], ubm, [stats1, stats2, stats3], test_channeloffset, True) - assert (abs(scores - ref_scores_11) < 1e-7).all() - - - # 2/ Use mean/variance supervectors - # 2/a/ Without test_channelOffset, without frame-length normalisation - scores = linear_scoring([model1.mean_supervector, model2.mean_supervector], ubm.mean_supervector, ubm.variance_supervector, [stats1, stats2, stats3]) - assert (abs(scores - ref_scores_00) < 1e-7).all() - - # 2/b/ Without test_channelOffset, with frame-length normalisation - scores = linear_scoring([model1.mean_supervector, model2.mean_supervector], ubm.mean_supervector, ubm.variance_supervector, [stats1, stats2, stats3], [], True) - assert (abs(scores - ref_scores_01) < 1e-7).all() - - # 2/c/ With test_channelOffset, without frame-length normalisation - scores = linear_scoring([model1.mean_supervector, model2.mean_supervector], ubm.mean_supervector, ubm.variance_supervector, [stats1, stats2, stats3], test_channeloffset) - assert (abs(scores - ref_scores_10) < 1e-7).all() - - # 2/d/ With test_channelOffset, with frame-length normalisation - scores = linear_scoring([model1.mean_supervector, model2.mean_supervector], ubm.mean_supervector, ubm.variance_supervector, [stats1, stats2, stats3], test_channeloffset, True) - assert (abs(scores - ref_scores_11) < 1e-7).all() - - - # 3/ Using single model/sample - # 3/a/ without frame-length normalisation - score = linear_scoring(model1.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats1, test_channeloffset[0]) - assert abs(score - ref_scores_10[0,0]) < 1e-7 - score = linear_scoring(model1.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats2, test_channeloffset[1]) - assert abs(score - ref_scores_10[0,1]) < 1e-7 - score = linear_scoring(model1.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats3, test_channeloffset[2]) - assert abs(score - ref_scores_10[0,2]) < 1e-7 - score = linear_scoring(model2.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats1, test_channeloffset[0]) - assert abs(score - ref_scores_10[1,0]) < 1e-7 - score = linear_scoring(model2.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats2, test_channeloffset[1]) - assert abs(score - ref_scores_10[1,1]) < 1e-7 - score = linear_scoring(model2.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats3, test_channeloffset[2]) - assert abs(score - ref_scores_10[1,2]) < 1e-7 - - - # 3/b/ without frame-length normalisation - score = linear_scoring(model1.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats1, test_channeloffset[0], True) - assert abs(score - ref_scores_11[0,0]) < 1e-7 - score = linear_scoring(model1.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats2, test_channeloffset[1], True) - assert abs(score - ref_scores_11[0,1]) < 1e-7 - score = linear_scoring(model1.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats3, test_channeloffset[2], True) - assert abs(score - ref_scores_11[0,2]) < 1e-7 - score = linear_scoring(model2.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats1, test_channeloffset[0], True) - assert abs(score - ref_scores_11[1,0]) < 1e-7 - score = linear_scoring(model2.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats2, test_channeloffset[1], True) - assert abs(score - ref_scores_11[1,1]) < 1e-7 - score = linear_scoring(model2.mean_supervector, ubm.mean_supervector, ubm.variance_supervector, stats3, test_channeloffset[2], True) - assert abs(score - ref_scores_11[1,2]) < 1e-7 - diff --git a/bob/learn/misc/test_plda.py b/bob/learn/misc/test_plda.py deleted file mode 100644 index 37f9c33..0000000 --- a/bob/learn/misc/test_plda.py +++ /dev/null @@ -1,565 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Sat Oct 22 23:01:09 2011 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests PLDA machine -""" - -import numpy -import os -import tempfile -import nose.tools -import math - -import bob.io.base - -from . import PLDABase, PLDAMachine - -# Defines common variables globally -# Dimensionalities -C_dim_d = 7 -C_dim_f = 2 -C_dim_g = 3 -# Values for F and G -C_G=numpy.array([-1.1424, -0.5044, -0.1917, - -0.6249, 0.1021, -0.8658, - -1.1687, 1.1963, 0.1807, - 0.3926, 0.1203, 1.2665, - 1.3018, -1.0368, -0.2512, - -0.5936, -0.8571, -0.2046, - 0.4364, -0.1699, -2.2015], 'float64').reshape(C_dim_d, C_dim_g) -# F <-> PCA on G -C_F=numpy.array([-0.054222647972093, -0.000000000783146, - 0.596449127693018, 0.000000006265167, - 0.298224563846509, 0.000000003132583, - 0.447336845769764, 0.000000009397750, - -0.108445295944185, -0.000000001566292, - -0.501559493741856, -0.000000006265167, - -0.298224563846509, -0.000000003132583], 'float64').reshape(C_dim_d, C_dim_f) - -def equals(x, y, epsilon): - return (abs(x - y) < epsilon).all() - -def compute_i_sigma(sigma): - # Inverse of a diagonal matrix (represented by a 1D numpy array) - return (1. / sigma) - -def compute_alpha(G, sigma): - # alpha = (Id + G^T.sigma^-1.G)^-1 = \mathcal{G} - dim_g = G.shape[1] - isigma = numpy.diag(compute_i_sigma(sigma)) - return numpy.linalg.inv(numpy.eye(dim_g) + numpy.dot(numpy.dot(G.transpose(), isigma), G)) - -def compute_beta(G, sigma): - # beta = (sigma + G.G^T)^-1 = sigma^-1 - sigma^-1.G.alpha.G^T.sigma^-1 = \mathcal{S} - isigma = numpy.diag(compute_i_sigma(sigma)) - gt_isigma = numpy.dot(G.transpose(), isigma) - alpha = compute_alpha(G, sigma) - return (isigma - numpy.dot(numpy.dot(gt_isigma.transpose(), alpha), gt_isigma)) - -def compute_gamma(F, G, sigma, a): - # gamma_a = (Id + a.F^T.beta.F)^-1 = \mathcal{F}_{a} - dim_f = F.shape[1] - beta = compute_beta(G, sigma) - return numpy.linalg.inv(numpy.eye(dim_f) + a * numpy.dot(numpy.dot(F.transpose(), beta), F)) - -def compute_ft_beta(F, G, sigma): - # F^T.beta = F^T.\mathcal{S} - beta = compute_beta(G, sigma) - return numpy.dot(numpy.transpose(F), beta) - -def compute_gt_i_sigma(G, sigma): - # G^T.sigma^-1 - isigma = compute_i_sigma(sigma) - return numpy.transpose(G) * isigma - -def compute_logdet_alpha(G, sigma): - # \log(\det(\alpha)) = \log(\det(\mathcal{G})) - alpha = compute_alpha(G, sigma) - return math.log(numpy.linalg.det(alpha)) - -def compute_logdet_sigma(sigma): - # \log(\det(\sigma)) = \log(\det(\sigma)) = \log(\prod(\sigma_{i})) - return math.log(numpy.prod(sigma)) - -def compute_loglike_constterm(F, G, sigma, a): - # loglike_constterm[a] = a/2 * ( -D*\log(2*pi) -\log|\sigma| +\log|\alpha| +\log|\gamma_a|) - gamma_a = compute_gamma(F, G, sigma, a) - logdet_gamma_a = math.log(abs(numpy.linalg.det(gamma_a))) - ah = a/2. - dim_d = F.shape[0] - logdet_sigma = compute_logdet_sigma(sigma) - logdet_alpha = compute_logdet_alpha(G, sigma) - res = -ah*dim_d*math.log(2*math.pi) - ah*logdet_sigma + ah*logdet_alpha + logdet_gamma_a/2. - return res; - -def compute_log_likelihood_point_estimate(observation, mu, F, G, sigma, hi, wij): - """ - This function computes p(x_{ij} | h_{i}, w_{ij}, \Theta), which is given by - N_{x}[\mu + Fh_{i} + Gw_{ij} + epsilon_{ij}, \Sigma], N_{x} being a - Gaussian distribution. As it returns the corresponding log likelihood, - this is given by the sum of the following three terms: - C1 = -dim_d/2 log(2pi) - C2 = -1/2 log(det(\Sigma)) - C3 = -1/2 (x_{ij}-\mu-Fh_{i}-Gw_{ij})^{T}\Sigma^{-1}(x_{ij}-\mu-Fh_{i}-Gw_{ij}) - """ - - ### Pre-computes some of the constants - dim_d = observation.shape[0] # A scalar - log_2pi = numpy.log(2. * numpy.pi) # A scalar - C1 = -(dim_d / 2.) * log_2pi # A scalar - C2 = -(1. / 2.) * numpy.sum( numpy.log(sigma) ) # (dim_d, 1) - - ### Subtract the identity and session components from the observed vector. - session_plus_identity = numpy.dot(F, hi) + numpy.dot(G, wij) - normalised_observation = numpy.reshape(observation - mu - session_plus_identity, (dim_d,1)) - ### Now calculate C3 - sigma_inverse = numpy.reshape(1. / sigma, (dim_d,1)) # (dim_d, 1) - C3 = -(1. / 2.) * numpy.sum(normalised_observation * sigma_inverse * normalised_observation) - - ### Returns the log likelihood - log_likelihood = C1 + C2 + C3 - return (log_likelihood) - - -def compute_log_likelihood(observations, mu, F, G, sigma): - """ - This function computes the log-likelihood of the observations given the parameters - of the PLDA model. This is done by fulling integrating out the latent variables. - """ - # Work out the number of samples that we have and normalise the data. - J_i = observations.shape[0]; # An integer > 0 - norm_observations = observations - numpy.tile(mu, [J_i,1]); # (J_i, D_x) - - # There are three terms that need to be computed: C1, C2 and C3 - - # 1. Computes C1 - # C1 = - J_{i} * dim_d/2 log(2*pi) - dim_d = observations.shape[1] # A scalar - dim_f = F.shape[1] - log_2pi = numpy.log(2. * numpy.pi); # A scalar - C1 = - J_i * (dim_d / 2.) * log_2pi; # A scalar - - # 2. Computes C2 - # C2 = - J_i/2 * [log(det(sigma)) - log(det(alpha^-1))] + log(det(gamma_{J_i}))/2 - ld_sigma = compute_logdet_sigma(sigma) - ld_alpha = compute_logdet_alpha(G, sigma) - gamma = compute_gamma(F, G, sigma, J_i) - ld_gamma = math.log(numpy.linalg.det(gamma)) - C2 = - J_i/2.*(ld_sigma - ld_alpha) + ld_gamma/2. - - # 3. Computes C3 - # This is a quadratic part and consists of - # C3 = -0.5 * sum x^T beta x + 0.5 * Quadratic term in x - # C3 = -0.5 * (C3a - C3b) - C3a = 0.0; - C3b_sum_part = numpy.zeros((dim_f,1)); - isigma = numpy.diag(compute_i_sigma(sigma)) - beta = compute_beta(G, sigma) - ft_beta = numpy.dot(numpy.transpose(F), beta) - for j in range(0, J_i): - ### Calculations for C3a - current_vector = numpy.reshape(norm_observations[j,:], (dim_d,1)); # (D_x, 1) - vector_E = numpy.dot(beta, current_vector); # (D_x, 1) - current_result = numpy.dot(current_vector.transpose(), vector_E); # A floating point value - C3a = C3a + current_result[0][0]; # A floating point value - ### Calculations for C3b - C3b_sum_part = C3b_sum_part + numpy.dot(ft_beta, current_vector); # (nf, 1) - - ### Final calculations for C3b, using the matrix gamma_{J_i} - C3b = numpy.dot(numpy.dot(C3b_sum_part.transpose(), gamma), C3b_sum_part); - C3 = -0.5 * (C3a - C3b[0][0]); - - return C1 + C2 + C3 - - -def test_plda_basemachine(): - # Data used for performing the tests - sigma = numpy.ndarray(C_dim_d, 'float64') - sigma.fill(0.01) - mu = numpy.ndarray(C_dim_d, 'float64') - mu.fill(0) - - # Defines reference results based on matlab - alpha_ref = numpy.array([ 0.002189051545735, 0.001127099941432, - -0.000145483208153, 0.001127099941432, 0.003549267943741, - -0.000552001405453, -0.000145483208153, -0.000552001405453, - 0.001440505362615], 'float64').reshape(C_dim_g, C_dim_g) - beta_ref = numpy.array([ 50.587191765140361, -14.512478352504877, - -0.294799164567830, 13.382002504394316, 9.202063877660278, - -43.182264846086497, 11.932345916716455, -14.512478352504878, - 82.320149045633045, -12.605578822979698, 19.618675892079366, - 13.033691341150439, -8.004874490989799, -21.547363307109187, - -0.294799164567832, -12.605578822979696, 52.123885798398241, - 4.363739008635009, 44.847177605628545, 16.438137537463710, - 5.137421840557050, 13.382002504394316, 19.618675892079366, - 4.363739008635011, 75.070401560513488, -4.515472972526140, - 9.752862741017488, 34.196127678931106, 9.202063877660285, - 13.033691341150439, 44.847177605628552, -4.515472972526142, - 56.189416227691098, -7.536676357632515, -10.555735414707383, - -43.182264846086497, -8.004874490989799, 16.438137537463703, - 9.752862741017490, -7.536676357632518, 56.430571485722126, - 9.471758169835317, 11.932345916716461, -21.547363307109187, - 5.137421840557051, 34.196127678931099, -10.555735414707385, - 9.471758169835320, 27.996266602110637], 'float64').reshape(C_dim_d, C_dim_d) - gamma3_ref = numpy.array([ 0.005318799462241, -0.000000012993151, - -0.000000012993151, 0.999999999999996], 'float64').reshape(C_dim_f, C_dim_f) - - # Constructor tests - #m = PLDABase() - #assert m.dim_d == 0 - #assert m.dim_f == 0 - #assert m.dim_g == 0 - #del m - m = PLDABase(C_dim_d, C_dim_f, C_dim_g) - assert m.shape[0] == C_dim_d - assert m.shape[1] == C_dim_f - assert m.shape[2] == C_dim_g - assert abs(m.variance_threshold - 0.) < 1e-10 - del m - m = PLDABase(C_dim_d, C_dim_f, C_dim_g, 1e-2) - assert m.shape[0] == C_dim_d - assert m.shape[1] == C_dim_f - assert m.shape[2] == C_dim_g - assert abs(m.variance_threshold - 1e-2) < 1e-10 - del m - - # Defines base machine - m = PLDABase(C_dim_d, C_dim_f, C_dim_g) - #m.resize(C_dim_d, C_dim_f, C_dim_g) - # Sets the current mu, F, G and sigma - m.mu = mu - m.f = C_F - m.g = C_G - m.sigma = sigma - gamma3 = m.get_add_gamma(3).copy() - constTerm3 = m.get_add_log_like_const_term(3) - - # Compares precomputed values to matlab reference - for ii in range(m.__alpha__.shape[0]): - for jj in range(m.__alpha__.shape[1]): - absdiff = abs(m.__alpha__[ii,jj]- alpha_ref[ii,jj]) - assert absdiff < 1e-10, 'PLDABase alpha matrix does not match reference at (%d,%d) to 10^-10: |%g-%g| = %g' % (ii, jj, m.__alpha__[ii,jj], alpha_ref[ii,jj], absdiff) - assert equals(m.__alpha__, alpha_ref, 1e-10) - assert equals(m.__beta__, beta_ref, 1e-10) - assert equals(gamma3, gamma3_ref, 1e-10) - - # Compares precomputed values to the ones returned by python implementation - assert equals(m.__isigma__, compute_i_sigma(sigma), 1e-10) - assert equals(m.__alpha__, compute_alpha(C_G,sigma), 1e-10) - assert equals(m.__beta__, compute_beta(C_G,sigma), 1e-10) - assert equals(m.get_add_gamma(3), compute_gamma(C_F,C_G,sigma,3), 1e-10) - assert m.has_gamma(3) - assert equals(m.get_gamma(3), compute_gamma(C_F,C_G,sigma,3), 1e-10) - assert equals(m.__ft_beta__, compute_ft_beta(C_F,C_G,sigma), 1e-10) - assert equals(m.__gt_i_sigma__, compute_gt_i_sigma(C_G,sigma), 1e-10) - assert math.fabs(m.__logdet_alpha__ - compute_logdet_alpha(C_G,sigma)) < 1e-10 - assert math.fabs(m.__logdet_sigma__ - compute_logdet_sigma(sigma)) < 1e-10 - assert abs(m.get_add_log_like_const_term(3) - compute_loglike_constterm(C_F,C_G,sigma,3)) < 1e-10 - assert m.has_log_like_const_term(3) - assert abs(m.get_log_like_const_term(3) - compute_loglike_constterm(C_F,C_G,sigma,3)) < 1e-10 - - # Defines base machine - del m - m = PLDABase(C_dim_d, C_dim_f, C_dim_g) - # Sets the current mu, F, G and sigma - m.mu = mu - m.f = C_F - m.g = C_G - m.sigma = sigma - gamma3 = m.get_add_gamma(3).copy() - constTerm3 = m.get_add_log_like_const_term(3) - - # Compares precomputed values to matlab reference - assert equals(m.__alpha__, alpha_ref, 1e-10) - assert equals(m.__beta__, beta_ref, 1e-10) - assert equals(gamma3, gamma3_ref, 1e-10) - - # values before being saved - isigma = m.__isigma__.copy() - alpha = m.__alpha__.copy() - beta = m.__beta__.copy() - FtBeta = m.__ft_beta__.copy() - GtISigma = m.__gt_i_sigma__.copy() - logdetAlpha = m.__logdet_alpha__ - logdetSigma = m.__logdet_sigma__ - - # Saves to file, loads and compares to original - filename = str(tempfile.mkstemp(".hdf5")[1]) - m.save(bob.io.base.HDF5File(filename, 'w')) - m_loaded = PLDABase(bob.io.base.HDF5File(filename)) - - # Compares the values loaded with the former ones - assert m_loaded == m - assert (m_loaded != m) is False - assert equals(m_loaded.mu, mu, 1e-10) - assert equals(m_loaded.f, C_F, 1e-10) - assert equals(m_loaded.g, C_G, 1e-10) - assert equals(m_loaded.sigma, sigma, 1e-10) - assert equals(m_loaded.__isigma__, isigma, 1e-10) - assert equals(m_loaded.__alpha__, alpha, 1e-10) - assert equals(m_loaded.__beta__, beta, 1e-10) - assert equals(m_loaded.__ft_beta__, FtBeta, 1e-10) - assert equals(m_loaded.__gt_i_sigma__, GtISigma, 1e-10) - assert abs(m_loaded.__logdet_alpha__ - logdetAlpha) < 1e-10 - assert abs(m_loaded.__logdet_sigma__ - logdetSigma) < 1e-10 - assert m_loaded.has_gamma(3) - assert equals(m_loaded.get_gamma(3), gamma3_ref, 1e-10) - assert equals(m_loaded.get_add_gamma(3), gamma3_ref, 1e-10) - assert m_loaded.has_log_like_const_term(3) - assert abs(m_loaded.get_add_log_like_const_term(3) - constTerm3) < 1e-10 - - # Compares the values loaded with the former ones when copying - m_copy = PLDABase(m_loaded) - assert m_loaded == m_copy - assert (m_loaded != m_copy) is False - # Test clear_maps method - assert m_copy.has_gamma(3) - assert m_copy.has_log_like_const_term(3) - m_copy.clear_maps() - assert (m_copy.has_gamma(3)) is False - assert (m_copy.has_log_like_const_term(3)) is False - - # Check variance flooring thresholds-related methods - v_zo = numpy.array([0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]) - v_zo_ = 0.01 - v_zzo = numpy.array([0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001]) - v_zzo_ = 0.001 - m_copy.variance_threshold = v_zo_ - assert (m_loaded == m_copy) is False - assert m_loaded != m_copy - m_copy.variance_threshold = v_zzo_ - m_copy.sigma = v_zo - assert equals(m_copy.sigma, v_zo, 1e-10) - m_copy.variance_threshold = v_zo_ - m_copy.sigma = v_zzo - assert equals(m_copy.sigma, v_zo, 1e-10) - m_copy.variance_threshold = v_zzo_ - m_copy.sigma = v_zzo - assert equals(m_copy.sigma, v_zzo, 1e-10) - m_copy.variance_threshold = v_zo_ - assert equals(m_copy.sigma, v_zo, 1e-10) - - # Clean-up - os.unlink(filename) - - -def test_plda_basemachine_loglikelihood_pointestimate(): - - # Data used for performing the tests - # Features and subspaces dimensionality - sigma = numpy.ndarray(C_dim_d, 'float64') - sigma.fill(0.01) - mu = numpy.ndarray(C_dim_d, 'float64') - mu.fill(0) - xij = numpy.array([0.7, 1.3, 2.5, 0.3, 1.3, 2.7, 0.9]) - hi = numpy.array([-0.5, 0.5]) - wij = numpy.array([-0.1, 0.2, 0.3]) - - m = PLDABase(C_dim_d, C_dim_f, C_dim_g) - # Sets the current mu, F, G and sigma - m.mu = mu - m.f = C_F - m.g = C_G - m.sigma = sigma - - #assert equals(m.compute_log_likelihood_point_estimate(xij, hi, wij), compute_log_likelihood_point_estimate(xij, mu, C_F, C_G, sigma, hi, wij), 1e-6) - log_likelihood_point_estimate = m.compute_log_likelihood_point_estimate(xij, hi, wij) - log_likelihood_point_estimate_python = compute_log_likelihood_point_estimate(xij, mu, C_F, C_G, sigma, hi, wij) - assert equals(log_likelihood_point_estimate, log_likelihood_point_estimate_python, 1e-6) - - -def test_plda_machine(): - - # Data used for performing the tests - # Features and subspaces dimensionality - sigma = numpy.ndarray(C_dim_d, 'float64') - sigma.fill(0.01) - mu = numpy.ndarray(C_dim_d, 'float64') - mu.fill(0) - - # Defines base machine - mb = PLDABase(C_dim_d, C_dim_f, C_dim_g) - # Sets the current mu, F, G and sigma - mb.mu = mu - mb.f = C_F - mb.g = C_G - mb.sigma = sigma - - # Test constructors and dim getters - m = PLDAMachine(mb) - assert m.shape[0] == C_dim_d - assert m.shape[1]== C_dim_f - assert m.shape[2] == C_dim_g - - m0 = PLDAMachine(mb) - #m0.plda_base = mb - assert m0.shape[0] == C_dim_d - assert m0.shape[1] == C_dim_f - assert m0.shape[2] == C_dim_g - - # Defines machine - n_samples = 2 - WSumXitBetaXi = 0.37 - weightedSum = numpy.array([1.39,0.54], 'float64') - log_likelihood = -0.22 - - m.n_samples = n_samples - m.w_sum_xit_beta_xi = WSumXitBetaXi - m.weighted_sum = weightedSum - m.log_likelihood = log_likelihood - - gamma3 = m.get_add_gamma(3).copy() - constTerm3 = m.get_add_log_like_const_term(3) - - # Saves to file, loads and compares to original - filename = str(tempfile.mkstemp(".hdf5")[1]) - m.save(bob.io.base.HDF5File(filename, 'w')) - m_loaded = PLDAMachine(bob.io.base.HDF5File(filename), mb) - - # Compares the values loaded with the former ones - assert m_loaded == m - assert (m_loaded != m) is False - assert abs(m_loaded.n_samples - n_samples) < 1e-10 - assert abs(m_loaded.w_sum_xit_beta_xi - WSumXitBetaXi) < 1e-10 - assert equals(m_loaded.weighted_sum, weightedSum, 1e-10) - assert abs(m_loaded.log_likelihood - log_likelihood) < 1e-10 - assert m_loaded.has_gamma(3) - assert equals(m_loaded.get_add_gamma(3), gamma3, 1e-10) - assert equals(m_loaded.get_gamma(3), gamma3, 1e-10) - assert m_loaded.has_log_like_const_term(3) - assert abs(m_loaded.get_add_log_like_const_term(3) - constTerm3) < 1e-10 - assert abs(m_loaded.get_log_like_const_term(3) - constTerm3) < 1e-10 - - # Test clear_maps method - assert m_loaded.has_gamma(3) - assert m_loaded.has_log_like_const_term(3) - m_loaded.clear_maps() - assert (m_loaded.has_gamma(3)) is False - assert (m_loaded.has_log_like_const_term(3)) is False - - # Check exceptions - #m_loaded2 = PLDAMachine(bob.io.base.HDF5File(filename)) - #m_loaded2.load(bob.io.base.HDF5File(filename)) - #nose.tools.assert_raises(RuntimeError, getattr, m_loaded2, 'shape') - #nose.tools.assert_raises(RuntimeError, getattr, m_loaded2, 'dim_f') - #nose.tools.assert_raises(RuntimeError, getattr, m_loaded2, 'dim_g') - #nose.tools.assert_raises(RuntimeError, m_loaded2.forward, [1.]) - #nose.tools.assert_raises(RuntimeError, m_loaded2.compute_log_likelihood, [1.]) - - # Clean-up - os.unlink(filename) - - -def test_plda_machine_log_likelihood_Python(): - - # Data used for performing the tests - # Features and subspaces dimensionality - sigma = numpy.ndarray(C_dim_d, 'float64') - sigma.fill(0.01) - mu = numpy.ndarray(C_dim_d, 'float64') - mu.fill(0) - - # Defines base machine - mb = PLDABase(C_dim_d, C_dim_f, C_dim_g) - # Sets the current mu, F, G and sigma - mb.mu = mu - mb.f = C_F - mb.g = C_G - mb.sigma = sigma - - # Defines machine - m = PLDAMachine(mb) - - # Defines (random) samples and check compute_log_likelihood method - ar_e = numpy.random.randn(2,C_dim_d) - ar_p = numpy.random.randn(C_dim_d) - ar_s = numpy.vstack([ar_e, ar_p]) - assert abs(m.compute_log_likelihood(ar_s, False) - compute_log_likelihood(ar_s, mu, C_F, C_G, sigma)) < 1e-10 - ar_p2d = numpy.reshape(ar_p, (1,C_dim_d)) - assert abs(m.compute_log_likelihood(ar_p, False) - compute_log_likelihood(ar_p2d, mu, C_F, C_G, sigma)) < 1e-10 - - # Defines (random) samples and check forward method - ar2_e = numpy.random.randn(4,C_dim_d) - ar2_p = numpy.random.randn(C_dim_d) - ar2_s = numpy.vstack([ar2_e, ar2_p]) - m.log_likelihood = m.compute_log_likelihood(ar2_e, False) - llr = m.compute_log_likelihood(ar2_s, True) - (m.compute_log_likelihood(ar2_s, False) + m.log_likelihood) - assert abs(m(ar2_s) - llr) < 1e-10 - ar2_p2d = numpy.random.randn(3,C_dim_d) - ar2_s2d = numpy.vstack([ar2_e, ar2_p2d]) - llr2d = m.compute_log_likelihood(ar2_s2d, True) - (m.compute_log_likelihood(ar2_s2d, False) + m.log_likelihood) - assert abs(m(ar2_s2d) - llr2d) < 1e-10 - -def test_plda_machine_log_likelihood_Prince(): - - # Data used for performing the tests - # Features and subspaces dimensionality - D = 7 - nf = 2 - ng = 3 - - # initial values for F, G and sigma - G_init=numpy.array([-1.1424, -0.5044, -0.1917, - -0.6249, 0.1021, -0.8658, - -1.1687, 1.1963, 0.1807, - 0.3926, 0.1203, 1.2665, - 1.3018, -1.0368, -0.2512, - -0.5936, -0.8571, -0.2046, - 0.4364, -0.1699, -2.2015]).reshape(D,ng) - # F <-> PCA on G - F_init=numpy.array([-0.054222647972093, -0.000000000783146, - 0.596449127693018, 0.000000006265167, - 0.298224563846509, 0.000000003132583, - 0.447336845769764, 0.000000009397750, - -0.108445295944185, -0.000000001566292, - -0.501559493741856, -0.000000006265167, - -0.298224563846509, -0.000000003132583]).reshape(D,nf) - sigma_init = 0.01 * numpy.ones((D,), 'float64') - mean_zero = numpy.zeros((D,), 'float64') - - # base machine - mb = PLDABase(D,nf,ng) - mb.sigma = sigma_init - mb.g = G_init - mb.f = F_init - mb.mu = mean_zero - - # Data for likelihood computation - x1 = numpy.array([0.8032, 0.3503, 0.4587, 0.9511, 0.1330, 0.0703, 0.7061]) - x2 = numpy.array([0.9317, 0.1089, 0.6517, 0.1461, 0.6940, 0.6256, 0.0437]) - x3 = numpy.array([0.7979, 0.9862, 0.4367, 0.3447, 0.0488, 0.2252, 0.5810]) - X = numpy.ndarray((3,D), 'float64') - X[0,:] = x1 - X[1,:] = x2 - X[2,:] = x3 - a = [] - a.append(x1) - a.append(x2) - a.append(x3) - a = numpy.array(a) - - # reference likelihood from Prince implementation - ll_ref = -182.8880743535197 - - # machine - m = PLDAMachine(mb) - ll = m.compute_log_likelihood(X) - assert abs(ll - ll_ref) < 1e-10 - - # log likelihood ratio - Y = numpy.ndarray((2,D), 'float64') - Y[0,:] = x1 - Y[1,:] = x2 - Z = numpy.ndarray((1,D), 'float64') - Z[0,:] = x3 - llX = m.compute_log_likelihood(X) - llY = m.compute_log_likelihood(Y) - llZ = m.compute_log_likelihood(Z) - # reference obtained by computing the likelihood of [x1,x2,x3], [x1,x2] - # and [x3] separately - llr_ref = -4.43695386675 - assert abs((llX - (llY + llZ)) - llr_ref) < 1e-10 diff --git a/bob/learn/misc/test_plda_trainer.py b/bob/learn/misc/test_plda_trainer.py deleted file mode 100644 index 553ff4f..0000000 --- a/bob/learn/misc/test_plda_trainer.py +++ /dev/null @@ -1,741 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Fri Oct 14 18:07:56 2011 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests PLDA trainer -""" - -import sys -import numpy -import numpy.linalg - -from . import PLDATrainer, PLDABase, PLDAMachine - -class PythonPLDATrainer(): - """A simplified (and slower) version of the PLDATrainer""" - - def __init__(self, convergence_threshold=0.001, max_iterations=10, - compute_likelihood=False, use_sum_second_order=True): - # Our state - self.m_convergence_threshold = convergence_threshold - self.m_max_iterations = max_iterations - self.m_compute_likelihood = compute_likelihood - self.m_dim_f = 0 - self.m_dim_g = 0 - self.m_B = numpy.ndarray(shape=(0,0), dtype=numpy.float64) - self.m_n_samples_per_id = numpy.ndarray(shape=(0,), dtype=numpy.float64) - self.m_z_first_order = [] - self.m_z_second_order = [] - self.m_sum_z_second_order = numpy.ndarray(shape=(0,0), dtype=numpy.float64) - - def reset(): - """Resets our internal state""" - self.m_convergence_threshold = 0.001 - self.m_max_iterations = 10 - self.m_compute_likelihood = False - self.m_dim_f = 0 - self.m_dim_g = 0 - self.m_n_samples_per_id = numpy.ndarray(shape=(0,), dtype=numpy.float64) - self.m_z_first_order = [] - self.m_z_second_order = [] - self.m_sum_z_second_order = numpy.ndarray(shape=(0,0), dtype=numpy.float64) - - def __check_training_data__(self, data): - if len(data) == 0: - raise RuntimeError("Training data set is empty") - n_features = data[0].shape[1] - for v in data: - if(v.shape[1] != n_features): - raise RuntimeError("Inconsistent feature dimensionality in training data set") - - def __init_members__(self, data): - n_features = data[0].shape[1] - self.m_z_first_order = [] - df_dg = self.m_dim_f+self.m_dim_g - self.m_sum_z_second_order.resize(df_dg, df_dg) - self.m_n_samples_per_id.resize(len(data)) - self.m_B.resize(n_features, df_dg) - for i in range(len(data)): - ns_i = data[i].shape[0] - self.m_n_samples_per_id[i] = ns_i - self.m_z_first_order.append(numpy.ndarray(shape=(ns_i, df_dg), dtype=numpy.float64)) - self.m_z_second_order.append(numpy.ndarray(shape=(ns_i, df_dg, df_dg), dtype=numpy.float64)) - - def __init_mu__(self, machine, data): - mu = numpy.zeros(shape=machine.mu.shape[0], dtype=numpy.float64) - c = 0 - # Computes the mean of the data - for v in data: - for i in range(v.shape[0]): - mu += v[i,:] - c +=1 - mu /= c - machine.mu = mu - - def __init_f__(self, machine, data): - n_ids = len(data) - S = numpy.zeros(shape=(machine.shape[0], n_ids), dtype=numpy.float64) - Si_sum = numpy.zeros(shape=(machine.shape[0],), dtype=numpy.float64) - for i in range(n_ids): - Si = S[:,i] - data_i = data[i] - for j in range(data_i.shape[0]): - Si += data_i[j,:] - Si /= data_i.shape[0] - Si_sum += Si - Si_sum /= n_ids - - S = S - numpy.tile(Si_sum.reshape([machine.shape[0],1]), [1,n_ids]) - U, sigma, S_ = numpy.linalg.svd(S, full_matrices=False) - U_slice = U[:,0:self.m_dim_f] - sigma_slice = sigma[0:self.m_dim_f] - sigma_slice_sqrt = numpy.sqrt(sigma_slice) - machine.f = U_slice / sigma_slice_sqrt - - def __init_g__(self, machine, data): - n_samples = 0 - for v in data: - n_samples += v.shape[0] - S = numpy.zeros(shape=(machine.shape[0], n_samples), dtype=numpy.float64) - Si_sum = numpy.zeros(shape=(machine.shape[0],), dtype=numpy.float64) - cache = numpy.zeros(shape=(machine.shape[0],), dtype=numpy.float64) - c = 0 - for i in range(len(data)): - cache = 0 - data_i = data[i] - for j in range(data_i.shape[0]): - cache += data_i[j,:] - cache /= data_i.shape[0] - for j in range(data_i.shape[0]): - S[:,c] = data_i[j,:] - cache - Si_sum += S[:,c] - c += 1 - Si_sum /= n_samples - - S = S - numpy.tile(Si_sum.reshape([machine.shape[0],1]), [1,n_samples]) - U, sigma, S_ = numpy.linalg.svd(S, full_matrices=False) - U_slice = U[:,0:self.m_dim_g] - sigma_slice_sqrt = numpy.sqrt(sigma[0:self.m_dim_g]) - machine.g = U_slice / sigma_slice_sqrt - - def __init_sigma__(self, machine, data, factor = 1.): - """As a variance of the data""" - cache1 = numpy.zeros(shape=(machine.shape[0],), dtype=numpy.float64) - cache2 = numpy.zeros(shape=(machine.shape[0],), dtype=numpy.float64) - n_samples = 0 - for v in data: - for j in range(v.shape[0]): - cache1 += v[j,:] - n_samples += v.shape[0] - cache1 /= n_samples - for v in data: - for j in range(v.shape[0]): - cache2 += numpy.square(v[j,:] - cache1) - machine.sigma = factor * cache2 / (n_samples - 1) - - def __init_mu_f_g_sigma__(self, machine, data): - self.__init_mu__(machine, data) - self.__init_f__(machine, data) - self.__init_g__(machine, data) - self.__init_sigma__(machine, data) - - def initialize(self, machine, data): - self.__check_training_data__(data) - n_features = data[0].shape[1] - if(machine.shape[0] != n_features): - raise RuntimeError("Inconsistent feature dimensionality between the machine and the training data set") - self.m_dim_f = machine.shape[1] - self.m_dim_g = machine.shape[2] - self.__init_members__(data) - # Warning: Default initialization of mu, F, G, sigma using scatters - self.__init_mu_f_g_sigma__(machine, data) - # Make sure that the precomputation has been performed - machine.__precompute__() - - def __compute_sufficient_statistics_given_observations__(self, machine, observations): - """ - We compute the expected values of the latent variables given the observations - and parameters of the model. - - First order or the expected value of the latent variables.: - F = (I+A^{T}\Sigma'^{-1}A)^{-1} * A^{T}\Sigma^{-1} (\tilde{x}_{s}-\mu'). - Second order stats: - S = (I+A^{T}\Sigma'^{-1}A)^{-1} + (F*F^{T}). - """ - - # Get the number of observations - J_i = observations.shape[0] # An integer > 0 - dim_d = observations.shape[1] # A scalar - # Useful values - mu = machine.mu - F = machine.f - G = machine.g - sigma = machine.sigma - isigma = machine.__isigma__ - alpha = machine.__alpha__ - ft_beta = machine.__ft_beta__ - gamma = machine.get_add_gamma(J_i) - # Normalise the observations - normalised_observations = observations - numpy.tile(mu, [J_i,1]) # (dim_d, J_i) - - ### Expected value of the latent variables using the scalable solution - # Identity part first - sum_ft_beta_part = numpy.zeros(self.m_dim_f) # (dim_f) - for j in range(0, J_i): - current_observation = normalised_observations[j,:] # (dim_d) - sum_ft_beta_part = sum_ft_beta_part + numpy.dot(ft_beta, current_observation) # (dim_f) - h_i = numpy.dot(gamma, sum_ft_beta_part) # (dim_f) - # Reproject the identity part to work out the session parts - Fh_i = numpy.dot(F, h_i) # (dim_d) - z_first_order = numpy.zeros((J_i, self.m_dim_f+self.m_dim_g)) - for j in range(0, J_i): - current_observation = normalised_observations[j,:] # (dim_d) - w_ij = numpy.dot(alpha, G.transpose()) # (dim_g, dim_d) - w_ij = numpy.multiply(w_ij, isigma) # (dim_g, dim_d) - w_ij = numpy.dot(w_ij, (current_observation - Fh_i)) # (dim_g) - z_first_order[j,:] = numpy.hstack([h_i,w_ij]) # (dim_f+dim_g) - - ### Calculate the expected value of the squared of the latent variables - # The constant matrix we use has the following parts: [top_left, top_right; bottom_left, bottom_right] - # P = Inverse_I_plus_GTEG * G^T * Sigma^{-1} * F (dim_g, dim_f) - # top_left = gamma (dim_f, dim_f) - # bottom_left = top_right^T = P * gamma (dim_g, dim_f) - # bottom_right = Inverse_I_plus_GTEG - bottom_left * P^T (dim_g, dim_g) - top_left = gamma - P = numpy.dot(alpha, G.transpose()) - P = numpy.dot(numpy.dot(P,numpy.diag(isigma)), F) - bottom_left = -1 * numpy.dot(P, top_left) - top_right = bottom_left.transpose() - bottom_right = alpha -1 * numpy.dot(bottom_left, P.transpose()) - constant_matrix = numpy.bmat([[top_left,top_right],[bottom_left, bottom_right]]) - - # Now get the actual expected value - z_second_order = numpy.zeros((J_i, self.m_dim_f+self.m_dim_g, self.m_dim_f+self.m_dim_g)) - for j in range(0, J_i): - z_second_order[j,:,:] = constant_matrix + numpy.outer(z_first_order[j,:],z_first_order[j,:]) # (dim_f+dim_g,dim_f+dim_g) - - ### Return the first and second order statistics - return(z_first_order, z_second_order) - - def e_step(self, machine, data): - self.m_sum_z_second_order.fill(0.) - for i in range(len(data)): - ### Get the observations for this label and the number of observations for this label. - observations_for_h_i = data[i] - J_i = observations_for_h_i.shape[0] # An integer > 0 - - ### Gather the statistics for this identity and then separate them for each observation. - [z_first_order, z_second_order] = self.__compute_sufficient_statistics_given_observations__(machine, observations_for_h_i) - self.m_z_first_order[i] = z_first_order - self.m_z_second_order[i] = z_second_order - J_i = len(z_second_order) - for j in range(0, J_i): - self.m_sum_z_second_order += z_second_order[j] - - def __update_f_and_g__(self, machine, data): - ### Initialise the numerator and the denominator. - dim_d = machine.shape[0] - accumulated_B_numerator = numpy.zeros((dim_d,self.m_dim_f+self.m_dim_g)) - accumulated_B_denominator = numpy.linalg.inv(self.m_sum_z_second_order) - mu = machine.mu - - ### Go through and process on a per subjectid basis - for i in range(len(data)): - # Normalise the observations - J_i = data[i].shape[0] - normalised_observations = data[i] - numpy.tile(mu, [J_i,1]) # (J_i, dim_d) - - ### Gather the statistics for this label - z_first_order_i = self.m_z_first_order[i] # List of (dim_f+dim_g) vectors - - ### Accumulate for the B matrix for this identity (current_label). - for j in range(0, J_i): - current_observation_for_h_i = normalised_observations[j,:] # (dim_d) - accumulated_B_numerator = accumulated_B_numerator + numpy.outer(current_observation_for_h_i, z_first_order_i[j,:]) # (dim_d, dim_f+dim_g); - - ### Update the B matrix which we can then use this to update the F and G matrices. - B = numpy.dot(accumulated_B_numerator,accumulated_B_denominator) - machine.f = B[:,0:self.m_dim_f].copy() - machine.g = B[:,self.m_dim_f:self.m_dim_f+self.m_dim_g].copy() - - def __update_sigma__(self, machine, data): - ### Initialise the accumulated Sigma - dim_d = machine.shape[0] - mu = machine.mu - accumulated_sigma = numpy.zeros(dim_d) # An array (dim_d) - number_of_observations = 0 - B = numpy.hstack([machine.f, machine.g]) - - ### Go through and process on a per subjectid basis (based on the labels we were given. - for i in range(len(data)): - # Normalise the observations - J_i = data[i].shape[0] - normalised_observations = data[i] - numpy.tile(mu, [J_i,1]) # (J_i, dim_d) - - ### Gather the statistics for this identity and then separate them for each - ### observation. - z_first_order_i = self.m_z_first_order[i] # List of (dim_f+dim_g) vectors - - ### Accumulate for the sigma matrix, which will be diagonalised - for j in range(0, J_i): - current_observation_for_h_i = normalised_observations[j,:] # (dim_d) - left = current_observation_for_h_i * current_observation_for_h_i # (dim_d) - projected_direction = numpy.dot(B, z_first_order_i[j,:]) # (dim_d) - right = projected_direction * current_observation_for_h_i # (dim_d) - accumulated_sigma = accumulated_sigma + (left - right) # (dim_d) - number_of_observations = number_of_observations + 1 - - ### Normalise by the number of observations (1/IJ) - machine.sigma = accumulated_sigma / number_of_observations; - - def m_step(self, machine, data): - self.__update_f_and_g__(machine, data) - self.__update_sigma__(machine, data) - machine.__precompute__() - - def finalize(self, machine, data): - machine.__precompute_log_like__() - - def train(self, machine, data): - self.initialize(machine, data) - average_output_previous = -sys.maxsize - average_output = -sys.maxsize - self.e_step(machine, data) - - i = 0 - while True: - average_output_previous = average_output - self.m_step(machine, data) - self.e_step(machine, data) - if(self.m_max_iterations > 0 and i+1 >= self.m_max_iterations): - break - i += 1 - - -def test_plda_EM_vs_Python(): - - # Data used for performing the tests - # Features and subspaces dimensionality - D = 7 - nf = 2 - ng = 3 - - # first identity (4 samples) - a = numpy.array([ - [1,2,3,4,5,6,7], - [7,8,3,3,1,8,2], - [3,2,1,4,5,1,7], - [9,0,3,2,1,4,6], - ], dtype='float64') - - # second identity (3 samples) - b = numpy.array([ - [5,6,3,4,2,0,2], - [1,7,8,9,4,4,8], - [8,7,2,5,1,1,1], - ], dtype='float64') - - # list of arrays (training data) - l = [a,b] - - # initial values for F, G and sigma - G_init=numpy.array([-1.1424, -0.5044, -0.1917, - -0.6249, 0.1021, -0.8658, - -1.1687, 1.1963, 0.1807, - 0.3926, 0.1203, 1.2665, - 1.3018, -1.0368, -0.2512, - -0.5936, -0.8571, -0.2046, - 0.4364, -0.1699, -2.2015]).reshape(D,ng) - - # F <-> PCA on G - F_init=numpy.array([-0.054222647972093, -0.000000000783146, - 0.596449127693018, 0.000000006265167, - 0.298224563846509, 0.000000003132583, - 0.447336845769764, 0.000000009397750, - -0.108445295944185, -0.000000001566292, - -0.501559493741856, -0.000000006265167, - -0.298224563846509, -0.000000003132583]).reshape(D,nf) - sigma_init = 0.01 * numpy.ones(D, 'float64') - - # Runs the PLDA trainer EM-steps (2 steps) - # Defines base trainer and machine - t = PLDATrainer(10) - t_py = PythonPLDATrainer(max_iterations=10) - m = PLDABase(D,nf,ng) - m_py = PLDABase(D,nf,ng) - - # Sets the same initialization methods - t.init_f_method = 'BETWEEN_SCATTER' - t.init_g_method = 'WITHIN_SCATTER' - t.init_sigma_method = 'VARIANCE_DATA' - - t.train(m, l) - t_py.train(m_py, l) - assert numpy.allclose(m.mu, m_py.mu) - assert numpy.allclose(m.f, m_py.f) - assert numpy.allclose(m.g, m_py.g) - assert numpy.allclose(m.sigma, m_py.sigma) - - -def test_plda_EM_vs_Prince(): - # Data used for performing the tests - # Features and subspaces dimensionality - dim_d = 7 - dim_f = 2 - dim_g = 3 - - # first identity (4 samples) - a = numpy.array([ - [1,2,3,4,5,6,7], - [7,8,3,3,1,8,2], - [3,2,1,4,5,1,7], - [9,0,3,2,1,4,6], - ], dtype='float64') - - # second identity (3 samples) - b = numpy.array([ - [5,6,3,4,2,0,2], - [1,7,8,9,4,4,8], - [8,7,2,5,1,1,1], - ], dtype='float64') - - # list of arrays (training data) - l = [a,b] - - # initial values for F, G and sigma - G_init=numpy.array([-1.1424, -0.5044, -0.1917, - -0.6249, 0.1021, -0.8658, - -1.1687, 1.1963, 0.1807, - 0.3926, 0.1203, 1.2665, - 1.3018, -1.0368, -0.2512, - -0.5936, -0.8571, -0.2046, - 0.4364, -0.1699, -2.2015]).reshape(dim_d,dim_g) - - # F <-> PCA on G - F_init=numpy.array([-0.054222647972093, -0.000000000783146, - 0.596449127693018, 0.000000006265167, - 0.298224563846509, 0.000000003132583, - 0.447336845769764, 0.000000009397750, - -0.108445295944185, -0.000000001566292, - -0.501559493741856, -0.000000006265167, - -0.298224563846509, -0.000000003132583]).reshape(dim_d,dim_f) - sigma_init = 0.01 * numpy.ones(dim_d, 'float64') - - # Defines reference results based on Princes'matlab implementation - # After 1 iteration - z_first_order_a_1 = numpy.array( - [-2.624115900658397, -0.000000034277848, 1.554823055585319, 0.627476234024656, -0.264705934182394, - -2.624115900658397, -0.000000034277848, -2.703482671599357, -1.533283607433197, 0.553725774828231, - -2.624115900658397, -0.000000034277848, 2.311647528461115, 1.266362142140170, -0.317378177105131, - -2.624115900658397, -0.000000034277848, -1.163402640008200, -0.372604542926019, 0.025152800097991 - ]).reshape(4, dim_f+dim_g) - z_first_order_b_1 = numpy.array( - [ 3.494168818797438, 0.000000045643026, 0.111295550530958, -0.029241422535725, 0.257045446451067, - 3.494168818797438, 0.000000045643026, 1.102110715965762, 1.481232954001794, -0.970661225144399, - 3.494168818797438, 0.000000045643026, -1.212854031699468, -1.435946529317718, 0.717884143973377 - ]).reshape(3, dim_f+dim_g) - - z_second_order_sum_1 = numpy.array( - [64.203518285366087, 0.000000747228248, 0.002703277337642, 0.078542842475345, 0.020894328259862, - 0.000000747228248, 6.999999999999980, -0.000000003955962, 0.000000002017232, -0.000000003741593, - 0.002703277337642, -0.000000003955962, 19.136889380923918, 11.860493771107487, -4.584339465366988, - 0.078542842475345, 0.000000002017232, 11.860493771107487, 8.771502339750128, -3.905706024997424, - 0.020894328259862, -0.000000003741593, -4.584339465366988, -3.905706024997424, 2.011924970338584 - ]).reshape(dim_f+dim_g, dim_f+dim_g) - - sigma_1 = numpy.array( - [2.193659969999207, 3.748361365521041, 0.237835235737085, - 0.558546035892629, 0.209272700958400, 1.717782807724451, - 0.248414618308223]) - - F_1 = numpy.array( - [-0.059083416465692, 0.000000000751007, - 0.600133217253169, 0.000000006957266, - 0.302789123922871, 0.000000000218947, - 0.454540641429714, 0.000000003342540, - -0.106608957780613, -0.000000001641389, - -0.494267694269430, -0.000000011059552, - -0.295956102084270, -0.000000006718366]).reshape(dim_d,dim_f) - - G_1 = numpy.array( - [-1.836166150865047, 2.491475145758734, 5.095958946372235, - -0.608732205531767, -0.618128420353493, -1.085423135463635, - -0.697390472635929, -1.047900122276840, -6.080211153116984, - 0.769509301515319, -2.763610156675313, -5.972172587527176, - 1.332474692714491, -1.368103875407414, -2.096382536513033, - 0.304135903830416, -5.168096082564016, -9.604769461465978, - 0.597445549865284, -1.347101803379971, -5.900246013340080]).reshape(dim_d,dim_g) - - # After 2 iterations - z_first_order_a_2 = numpy.array( - [-2.144344161196005, -0.000000027851878, 1.217776189037369, 0.232492571855061, -0.212892893868819, - -2.144344161196005, -0.000000027851878, -2.382647766948079, -1.759951013670071, 0.587213207926731, - -2.144344161196005, -0.000000027851878, 2.143294830538722, 0.909307594408923, -0.183752098508072, - -2.144344161196005, -0.000000027851878, -0.662558006326892, 0.717992497547010, -0.202897892977004 - ]).reshape(4, dim_f+dim_g) - z_first_order_b_2 = numpy.array( - [ 2.695117129662246, 0.000000035005543, -0.156173294945791, -0.123083763746364, 0.271123341933619, - 2.695117129662246, 0.000000035005543, 0.690321563509753, 0.944473716646212, -0.850835940962492, - 2.695117129662246, 0.000000035005543, -0.930970138998433, -0.949736472690315, 0.594216348861889 - ]).reshape(3, dim_f+dim_g) - - z_second_order_sum_2 = numpy.array( - [41.602421167226410, 0.000000449434708, -1.513391506933811, -0.477818674270533, 0.059260102368316, - 0.000000449434708, 7.000000000000005, -0.000000023255959, -0.000000005157439, -0.000000003230262, - -1.513391506933810, -0.000000023255959, 14.399631061987494, 8.068678077509025, -3.227586434905497, - -0.477818674270533, -0.000000005157439, 8.068678077509025, 7.263248678863863, -3.060665688064639, - 0.059260102368316, -0.000000003230262, -3.227586434905497, -3.060665688064639, 1.705174220723198 - ]).reshape(dim_f+dim_g, dim_f+dim_g) - - sigma_2 = numpy.array( - [1.120493935052524, 1.777598857891599, 0.197579528599150, - 0.407657093211478, 0.166216300651473, 1.044336960403809, - 0.287856936559308]) - - F_2 = numpy.array( - [-0.111956311978966, 0.000000000781025, - 0.702502767389263, 0.000000007683917, - 0.337823622542517, 0.000000000637302, - 0.551363737526339, 0.000000004854293, - -0.096561040511417, -0.000000001716011, - -0.661587484803602, -0.000000012394362, - -0.346593051621620, -0.000000007134046]).reshape(dim_d,dim_f) - - G_2 = numpy.array( - [-2.266404374274820, 4.089199685832099, 7.023039382876370, - 0.094887459097613, -3.226829318470136, -3.452279917194724, - -0.498398131733141, -1.651712333649899, -6.548008210704172, - 0.574932298590327, -2.198978667003715, -5.131253543126156, - 1.415857426810629, -1.627795701160212, -2.509013676007012, - -0.543552834305580, -3.215063993186718, -7.006305082499653, - 0.562108137758111, -0.785296641855087, -5.318335345720314]).reshape(dim_d,dim_g) - - # Runs the PLDA trainer EM-steps (2 steps) - - # Defines base trainer and machine - t = PLDATrainer() - t0 = PLDATrainer(t) - m = PLDABase(dim_d,dim_f,dim_g) - t.initialize(m,l) - m.sigma = sigma_init - m.g = G_init - m.f = F_init - - # Defines base trainer and machine (for Python implementation - t_py = PythonPLDATrainer() - m_py = PLDABase(dim_d,dim_f,dim_g) - t_py.initialize(m_py,l) - m_py.sigma = sigma_init - m_py.g = G_init - m_py.f = F_init - - # E-step 1 - t.e_step(m,l) - t_py.e_step(m_py,l) - # Compares statistics to Prince matlab reference - assert numpy.allclose(t.z_first_order[0], z_first_order_a_1, 1e-10) - assert numpy.allclose(t.z_first_order[1], z_first_order_b_1, 1e-10) - assert numpy.allclose(t.z_second_order_sum, z_second_order_sum_1, 1e-10) - # Compares statistics against the ones of the python implementation - assert numpy.allclose(t.z_first_order[0], t_py.m_z_first_order[0], 1e-10) - assert numpy.allclose(t.z_first_order[1], t_py.m_z_first_order[1], 1e-10) - assert numpy.allclose(t.z_second_order_sum, t_py.m_sum_z_second_order, 1e-10) - - # M-step 1 - t.m_step(m,l) - t_py.m_step(m_py,l) - # Compares F, G and sigma to Prince matlab reference - assert numpy.allclose(m.f, F_1, 1e-10) - assert numpy.allclose(m.g, G_1, 1e-10) - assert numpy.allclose(m.sigma, sigma_1, 1e-10) - # Compares F, G and sigma to the ones of the python implementation - assert numpy.allclose(m.f, m_py.f, 1e-10) - assert numpy.allclose(m.g, m_py.g, 1e-10) - assert numpy.allclose(m.sigma, m_py.sigma, 1e-10) - - # E-step 2 - t.e_step(m,l) - t_py.e_step(m_py,l) - # Compares statistics to Prince matlab reference - assert numpy.allclose(t.z_first_order[0], z_first_order_a_2, 1e-10) - assert numpy.allclose(t.z_first_order[1], z_first_order_b_2, 1e-10) - assert numpy.allclose(t.z_second_order_sum, z_second_order_sum_2, 1e-10) - # Compares statistics against the ones of the python implementation - assert numpy.allclose(t.z_first_order[0], t_py.m_z_first_order[0], 1e-10) - assert numpy.allclose(t.z_first_order[1], t_py.m_z_first_order[1], 1e-10) - assert numpy.allclose(t.z_second_order_sum, t_py.m_sum_z_second_order, 1e-10) - - # M-step 2 - t.m_step(m,l) - t_py.m_step(m_py,l) - # Compares F, G and sigma to Prince matlab reference - assert numpy.allclose(m.f, F_2, 1e-10) - assert numpy.allclose(m.g, G_2, 1e-10) - assert numpy.allclose(m.sigma, sigma_2, 1e-10) - # Compares F, G and sigma to the ones of the python implementation - assert numpy.allclose(m.f, m_py.f, 1e-10) - assert numpy.allclose(m.g, m_py.g, 1e-10) - assert numpy.allclose(m.sigma, m_py.sigma, 1e-10) - - - # Test the second order statistics computation - # Calls the initialization methods and resets randomly initialized values - # to new reference ones (to make the tests deterministic) - t.use_sum_second_order = False - t.initialize(m,l) - m.sigma = sigma_init - m.g = G_init - m.f = F_init - t_py.initialize(m_py,l) - m_py.sigma = sigma_init - m_py.g = G_init - m_py.f = F_init - - # E-step 1 - t.e_step(m,l) - t_py.e_step(m_py,l) - # Compares statistics to Prince matlab reference - assert numpy.allclose(t.z_first_order[0], z_first_order_a_1, 1e-10) - assert numpy.allclose(t.z_first_order[1], z_first_order_b_1, 1e-10) - # Compares statistics against the ones of the python implementation - assert numpy.allclose(t.z_first_order[0], t_py.m_z_first_order[0], 1e-10) - assert numpy.allclose(t.z_first_order[1], t_py.m_z_first_order[1], 1e-10) - assert numpy.allclose(t.z_second_order[0], t_py.m_z_second_order[0], 1e-10) - assert numpy.allclose(t.z_second_order[1], t_py.m_z_second_order[1], 1e-10) - assert numpy.allclose(t.z_second_order_sum, t_py.m_sum_z_second_order, 1e-10) - - # M-step 1 - t.m_step(m,l) - t_py.m_step(m_py,l) - # Compares F, G and sigma to the ones of the python implementation - assert numpy.allclose(m.f, m_py.f, 1e-10) - assert numpy.allclose(m.g, m_py.g, 1e-10) - assert numpy.allclose(m.sigma, m_py.sigma, 1e-10) - - # E-step 2 - t.e_step(m,l) - t_py.e_step(m_py,l) - # Compares statistics to Prince matlab reference - assert numpy.allclose(t.z_first_order[0], z_first_order_a_2, 1e-10) - assert numpy.allclose(t.z_first_order[1], z_first_order_b_2, 1e-10) - # Compares statistics against the ones of the python implementation - assert numpy.allclose(t.z_first_order[0], t_py.m_z_first_order[0], 1e-10) - assert numpy.allclose(t.z_first_order[1], t_py.m_z_first_order[1], 1e-10) - assert numpy.allclose(t.z_second_order[0], t_py.m_z_second_order[0], 1e-10) - assert numpy.allclose(t.z_second_order[1], t_py.m_z_second_order[1], 1e-10) - assert numpy.allclose(t.z_second_order_sum, t_py.m_sum_z_second_order, 1e-10) - - # M-step 2 - t.m_step(m,l) - t_py.m_step(m_py,l) - # Compares F, G and sigma to the ones of the python implementation - assert numpy.allclose(m.f, m_py.f, 1e-10) - assert numpy.allclose(m.g, m_py.g, 1e-10) - assert numpy.allclose(m.sigma, m_py.sigma, 1e-10) - - -def test_plda_enrollment(): - # Data used for performing the tests - # Features and subspaces dimensionality - dim_d = 7 - dim_f = 2 - dim_g = 3 - - # initial values for F, G and sigma - G_init=numpy.array([-1.1424, -0.5044, -0.1917, - -0.6249, 0.1021, -0.8658, - -1.1687, 1.1963, 0.1807, - 0.3926, 0.1203, 1.2665, - 1.3018, -1.0368, -0.2512, - -0.5936, -0.8571, -0.2046, - 0.4364, -0.1699, -2.2015]).reshape(dim_d,dim_g) - # F <-> PCA on G - F_init=numpy.array([-0.054222647972093, -0.000000000783146, - 0.596449127693018, 0.000000006265167, - 0.298224563846509, 0.000000003132583, - 0.447336845769764, 0.000000009397750, - -0.108445295944185, -0.000000001566292, - -0.501559493741856, -0.000000006265167, - -0.298224563846509, -0.000000003132583]).reshape(dim_d,dim_f) - sigma_init = 0.01 * numpy.ones((dim_d,), 'float64') - mean_zero = numpy.zeros((dim_d,), 'float64') - - # base machine - mb = PLDABase(dim_d,dim_f,dim_g) - mb.sigma = sigma_init - mb.g = G_init - mb.f = F_init - mb.mu = mean_zero - - # Data for likelihood computation - x1 = numpy.array([0.8032, 0.3503, 0.4587, 0.9511, 0.1330, 0.0703, 0.7061]) - x2 = numpy.array([0.9317, 0.1089, 0.6517, 0.1461, 0.6940, 0.6256, 0.0437]) - x3 = numpy.array([0.7979, 0.9862, 0.4367, 0.3447, 0.0488, 0.2252, 0.5810]) - a_enrol = [] - a_enrol.append(x1) - a_enrol.append(x2) - a_enrol = numpy.array(a_enrol) - - # reference likelihood from Prince implementation - ll_ref = -182.8880743535197 - - # Computes the likelihood using x1 and x2 as enrollment samples - # and x3 as a probe sample - m = PLDAMachine(mb) - t = PLDATrainer() - t.enrol(m, a_enrol) - ll = m.compute_log_likelihood(x3) - - assert abs(ll - ll_ref) < 1e-10 - - # reference obtained by computing the likelihood of [x1,x2,x3], [x1,x2] - # and [x3] separately - llr_ref = -4.43695386675 - llr = m(x3) - assert abs(llr - llr_ref) < 1e-10 - # - llr_separate = m.compute_log_likelihood(numpy.array([x1,x2,x3]), False) - \ - (m.compute_log_likelihood(numpy.array([x1,x2]), False) + m.compute_log_likelihood(numpy.array([x3]), False)) - assert abs(llr - llr_separate) < 1e-10 - - - -def test_plda_comparisons(): - - t1 = PLDATrainer() - t2 = PLDATrainer() - - #t2.rng = t1.rng - - assert t1 == t2 - assert (t1 != t2 ) is False - assert t1.is_similar_to(t2) - - training_set = [numpy.array([[1,2,3,4]], numpy.float64), numpy.array([[3,4,3,4]], numpy.float64)] - m = PLDABase(4,1,1,1e-8) - t1.rng.seed(37) - t1.initialize(m, training_set) - t1.e_step(m, training_set) - t1.m_step(m, training_set) - assert (t1 == t2 ) is False - assert t1 != t2 - assert (t1.is_similar_to(t2) ) is False - t2.rng.seed(37) - t2.initialize(m, training_set) - t2.e_step(m, training_set) - t2.m_step(m, training_set) - assert t1 == t2 - assert (t1 != t2 ) is False - assert t1.is_similar_to(t2) - t2.rng.seed(77) - t2.initialize(m, training_set) - t2.e_step(m, training_set) - t2.m_step(m, training_set) - assert (t1 == t2 ) is False - assert t1 != t2 - assert (t1.is_similar_to(t2) ) is False - - diff --git a/bob/learn/misc/test_ztnorm.py b/bob/learn/misc/test_ztnorm.py deleted file mode 100644 index ee74a44..0000000 --- a/bob/learn/misc/test_ztnorm.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Francois Moulin <Francois.Moulin@idiap.ch> -# Laurent El Shafey <Laurent.El-Shafey@idiap.ch> -# Tue Jul 19 15:33:20 2011 +0200 -# -# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - -"""Tests on the ZTNorm function -""" - -import numpy - -from bob.io.base.test_utils import datafile -import bob.io.base - -#from . import znorm, tnorm, ztnorm -import bob.learn.misc - -def sameValue(vect_A, vect_B): - sameMatrix = numpy.zeros((vect_A.shape[0], vect_B.shape[0]), 'bool') - - for j in range(vect_A.shape[0]): - for i in range(vect_B.shape[0]): - sameMatrix[j, i] = (vect_A[j] == vect_B[i]) - - return sameMatrix - -def tnorm(A, C): - Cmean = numpy.mean(C, axis=0) - if C.shape[1] > 1: - Cstd = numpy.sqrt(numpy.sum((C - numpy.tile(Cmean.reshape(1,C.shape[1]), (C.shape[0],1))) ** 2, axis=0) / (C.shape[0]-1)) - else: - Cstd = numpy.ones(shape=(C.shape[1],), dtype=numpy.float64) - return (A - numpy.tile(Cmean.reshape(1,C.shape[1]), (A.shape[0],1))) / numpy.tile(Cstd.reshape(1,C.shape[1]), (A.shape[0],1)) - -def znorm(A, B): - Bmean = numpy.mean(B, axis=1) - if B.shape[1] > 1: - Bstd = numpy.sqrt(numpy.sum((B - numpy.tile(Bmean.reshape(B.shape[0],1), (1,B.shape[1]))) ** 2, axis=1) / (B.shape[1]-1)) - else: - Bstd = numpy.ones(shape=(B.shape[0],), dtype=numpy.float64) - - return (A - numpy.tile(Bmean.reshape(B.shape[0],1), (1,A.shape[1]))) / numpy.tile(Bstd.reshape(B.shape[0],1), (1,A.shape[1])) - - -def test_ztnorm_simple(): - # 3x5 - my_A = numpy.array([[1, 2, 3, 4, 5], - [6, 7, 8, 9, 8], - [7, 6, 5, 4, 3]],'float64') - # 3x4 - my_B = numpy.array([[5, 4, 7, 8],[9, 8, 7, 4],[5, 6, 3, 2]],'float64') - # 2x5 - my_C = numpy.array([[5, 4, 3, 2, 1],[2, 1, 2, 3, 4]],'float64') - # 2x4 - my_D = numpy.array([[8, 6, 4, 2],[0, 2, 4, 6]],'float64') - - # 4x1 - znorm_id = numpy.array([1, 2, 3, 4],'uint32') - # 2x1 - tnorm_id = numpy.array([1, 5],'uint32') - - scores = bob.learn.misc.ztnorm(my_A, my_B, my_C, my_D, - sameValue(tnorm_id, znorm_id)) - - ref_scores = numpy.array([[-4.45473107e+00, -3.29289322e+00, -1.50519101e+01, -8.42086557e-01, 6.46544511e-03], [-8.27619927e-01, 7.07106781e-01, 1.13757710e+01, 2.01641412e+00, 7.63765080e-01], [ 2.52913570e+00, 2.70710678e+00, 1.24400233e+01, 7.07106781e-01, 6.46544511e-03]], 'float64') - - assert (abs(scores - ref_scores) < 1e-7).all() - -def test_ztnorm_big(): - my_A = bob.io.base.load(datafile("ztnorm_eval_eval.hdf5", __name__)) - my_B = bob.io.base.load(datafile("ztnorm_znorm_eval.hdf5", __name__)) - my_C = bob.io.base.load(datafile("ztnorm_eval_tnorm.hdf5", __name__)) - my_D = bob.io.base.load(datafile("ztnorm_znorm_tnorm.hdf5", __name__)) - - # ZT-Norm - ref_scores = bob.io.base.load(datafile("ztnorm_result.hdf5", __name__)) - scores = bob.learn.misc.ztnorm(my_A, my_B, my_C, my_D) - assert (abs(scores - ref_scores) < 1e-7).all() - - # T-Norm - scores = tnorm(my_A, my_C) - scores_py = tnorm(my_A, my_C) - assert (abs(scores - scores_py) < 1e-7).all() - - # Z-Norm - scores = znorm(my_A, my_B) - scores_py = znorm(my_A, my_B) - assert (abs(scores - scores_py) < 1e-7).all() - -def test_tnorm_simple(): - # 3x5 - my_A = numpy.array([[1, 2, 3, 4, 5], - [6, 7, 8, 9, 8], - [7, 6, 5, 4, 3]],'float64') - # 2x5 - my_C = numpy.array([[5, 4, 3, 2, 1],[2, 1, 2, 3, 4]],'float64') - - zC = tnorm(my_A, my_C) - zC_py = tnorm(my_A, my_C) - assert (abs(zC - zC_py) < 1e-7).all() - - empty = numpy.zeros(shape=(0,0), dtype=numpy.float64) - zC = bob.learn.misc.ztnorm(my_A, empty, my_C, empty) - assert (abs(zC - zC_py) < 1e-7).all() - -def test_znorm_simple(): - # 3x5 - my_A = numpy.array([[1, 2, 3, 4, 5], - [6, 7, 8, 9, 8], - [7, 6, 5, 4, 3]], numpy.float64) - # 3x4 - my_B = numpy.array([[5, 4, 7, 8],[9, 8, 7, 4],[5, 6, 3, 2]], numpy.float64) - - zA = znorm(my_A, my_B) - zA_py = znorm(my_A, my_B) - assert (abs(zA - zA_py) < 1e-7).all() - - empty = numpy.zeros(shape=(0,0), dtype=numpy.float64) - zA = bob.learn.misc.ztnorm(my_A, my_B, empty, empty) - assert (abs(zA - zA_py) < 1e-7).all() diff --git a/bob/learn/misc/version.cpp b/bob/learn/misc/version.cpp deleted file mode 100644 index d3c36a9..0000000 --- a/bob/learn/misc/version.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/** - * @author Laurent El Shafey <Laurent.El-Shafey@idiap.ch> - * @date Mon Apr 14 20:43:48 CEST 2014 - * - * @brief Binds configuration information available from bob - */ - -#ifdef NO_IMPORT_ARRAY -#undef NO_IMPORT_ARRAY -#endif -#include <bob.blitz/capi.h> -#include <bob.blitz/cleanup.h> - -#include <bob.core/config.h> -#include <bob.io.base/config.h> -#include <bob.sp/config.h> -#include <bob.math/config.h> -#include <bob.learn.activation/config.h> -#include <bob.learn.linear/config.h> -// TODO: add other dependencies - -#include <string> -#include <cstdlib> -#include <blitz/blitz.h> -#include <boost/preprocessor/stringize.hpp> -#include <boost/version.hpp> -#include <boost/format.hpp> - - -static int dict_set(PyObject* d, const char* key, const char* value) { - PyObject* v = Py_BuildValue("s", value); - if (!v) return 0; - int retval = PyDict_SetItemString(d, key, v); - Py_DECREF(v); - if (retval == 0) return 1; //all good - return 0; //a problem occurred -} - -static int dict_steal(PyObject* d, const char* key, PyObject* value) { - if (!value) return 0; - int retval = PyDict_SetItemString(d, key, value); - Py_DECREF(value); - if (retval == 0) return 1; //all good - return 0; //a problem occurred -} - -/** - * Describes the version of Boost libraries installed - */ -static PyObject* boost_version() { - boost::format f("%d.%d.%d"); - f % (BOOST_VERSION / 100000); - f % (BOOST_VERSION / 100 % 1000); - f % (BOOST_VERSION % 100); - return Py_BuildValue("s", f.str().c_str()); -} - -/** - * Describes the compiler version - */ -static PyObject* compiler_version() { -# if defined(__GNUC__) && !defined(__llvm__) - boost::format f("%s.%s.%s"); - f % BOOST_PP_STRINGIZE(__GNUC__); - f % BOOST_PP_STRINGIZE(__GNUC_MINOR__); - f % BOOST_PP_STRINGIZE(__GNUC_PATCHLEVEL__); - return Py_BuildValue("ss", "gcc", f.str().c_str()); -# elif defined(__llvm__) && !defined(__clang__) - return Py_BuildValue("ss", "llvm-gcc", __VERSION__); -# elif defined(__clang__) - return Py_BuildValue("ss", "clang", __clang_version__); -# else - return Py_BuildValue("s", "unsupported"); -# endif -} - -/** - * Python version with which we compiled the extensions - */ -static PyObject* python_version() { - boost::format f("%s.%s.%s"); - f % BOOST_PP_STRINGIZE(PY_MAJOR_VERSION); - f % BOOST_PP_STRINGIZE(PY_MINOR_VERSION); - f % BOOST_PP_STRINGIZE(PY_MICRO_VERSION); - return Py_BuildValue("s", f.str().c_str()); -} - -/** - * Numpy version - */ -static PyObject* numpy_version() { - return Py_BuildValue("{ssss}", "abi", BOOST_PP_STRINGIZE(NPY_VERSION), - "api", BOOST_PP_STRINGIZE(NPY_API_VERSION)); -} - -/** - * bob.blitz c/c++ api version - */ -static PyObject* bob_blitz_version() { - return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_BLITZ_API_VERSION)); -} - -/** - * bob.core c/c++ api version - */ -static PyObject* bob_core_version() { - return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_CORE_API_VERSION)); -} - -/** - * bob.io.base c/c++ api version - */ -static PyObject* bob_io_base_version() { - return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_IO_BASE_API_VERSION)); -} - -/** - * bob.sp c/c++ api version - */ -static PyObject* bob_sp_version() { - return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_SP_API_VERSION)); -} - -/** - * bob.math c/c++ api version - */ -static PyObject* bob_math_version() { - return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_MATH_API_VERSION)); -} - -/** - * bob.learn.activation c/c++ api version - */ -static PyObject* bob_learn_activation_version() { - return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_LEARN_ACTIVATION_API_VERSION)); -} - -/** - * bob.learn.linear c/c++ api version - */ -static PyObject* bob_learn_linear_version() { - return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_LEARN_LINEAR_API_VERSION)); -} - - -static PyObject* build_version_dictionary() { - - PyObject* retval = PyDict_New(); - if (!retval) return 0; - auto retval_ = make_safe(retval); - - if (!dict_set(retval, "Blitz++", BZ_VERSION)) return 0; - if (!dict_steal(retval, "Boost", boost_version())) return 0; - if (!dict_steal(retval, "Compiler", compiler_version())) return 0; - if (!dict_steal(retval, "Python", python_version())) return 0; - if (!dict_steal(retval, "NumPy", numpy_version())) return 0; - if (!dict_steal(retval, "bob.blitz", bob_blitz_version())) return 0; - if (!dict_steal(retval, "bob.core", bob_core_version())) return 0; - if (!dict_steal(retval, "bob.io.base", bob_io_base_version())) return 0; - if (!dict_steal(retval, "bob.sp", bob_sp_version())) return 0; - if (!dict_steal(retval, "bob.math", bob_math_version())) return 0; - if (!dict_steal(retval, "bob.learn.activation", bob_learn_activation_version())) return 0; - if (!dict_steal(retval, "bob.learn.linear", bob_learn_linear_version())) return 0; - if (!dict_steal(retval, "Bob", bob_core_version())) return 0; - - Py_INCREF(retval); - return retval; -} - -static PyMethodDef module_methods[] = { - {0} /* Sentinel */ -}; - -PyDoc_STRVAR(module_docstr, -"Information about software used to compile the C++ Bob API" -); - -#if PY_VERSION_HEX >= 0x03000000 -static PyModuleDef module_definition = { - PyModuleDef_HEAD_INIT, - BOB_EXT_MODULE_NAME, - module_docstr, - -1, - module_methods, - 0, 0, 0, 0 -}; -#endif - -static PyObject* create_module (void) { - -# if PY_VERSION_HEX >= 0x03000000 - PyObject* m = PyModule_Create(&module_definition); -# else - PyObject* m = Py_InitModule3(BOB_EXT_MODULE_NAME, module_methods, module_docstr); -# endif - if (!m) return 0; - auto m_ = make_safe(m); ///< protects against early returns - - /* register version numbers and constants */ - if (PyModule_AddStringConstant(m, "module", BOB_EXT_MODULE_VERSION) < 0) - return 0; - - PyObject* externals = build_version_dictionary(); - if (!externals) return 0; - if (PyModule_AddObject(m, "externals", externals) < 0) return 0; - - /* imports dependencies */ - if (import_bob_blitz() < 0) { - PyErr_Print(); - PyErr_Format(PyExc_ImportError, "cannot import `%s'", BOB_EXT_MODULE_NAME); - return 0; - } - - Py_INCREF(m); - return m; - -} - -PyMODINIT_FUNC BOB_EXT_ENTRY_NAME (void) { -# if PY_VERSION_HEX >= 0x03000000 - return -# endif - create_module(); -} diff --git a/bob/learn/misc/ztnorm.cpp b/bob/learn/misc/ztnorm.cpp deleted file mode 100644 index 9e2c6ea..0000000 --- a/bob/learn/misc/ztnorm.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/** - * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> - * @date Sat 31 Jan 02:46:48 2015 - * - * @brief Python API for bob::learn::em - * - * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland - */ - -#include "main.h" - -/*** zt_norm ***/ -static auto zt_norm = bob::extension::FunctionDoc( - "ztnorm", - "", - 0, - true -) -.add_prototype("rawscores_probes_vs_models,rawscores_zprobes_vs_models,rawscores_probes_vs_tmodels,rawscores_zprobes_vs_tmodels,mask_zprobes_vs_tmodels_istruetrial", "output") -.add_parameter("rawscores_probes_vs_models", "array_like <float, 2D>", "") -.add_parameter("rawscores_zprobes_vs_models", "array_like <float, 2D>", "") -.add_parameter("rawscores_probes_vs_tmodels", "array_like <float, 2D>", "") -.add_parameter("rawscores_zprobes_vs_tmodels", "array_like <float, 2D>", "") -.add_parameter("mask_zprobes_vs_tmodels_istruetrial", "array_like <float, 2D>", "") -.add_return("output","array_like <float, 2D>",""); -static PyObject* PyBobLearnMisc_ztNorm(PyObject*, PyObject* args, PyObject* kwargs) { - - char** kwlist = zt_norm.kwlist(0); - - PyBlitzArrayObject *rawscores_probes_vs_models_o, *rawscores_zprobes_vs_models_o, *rawscores_probes_vs_tmodels_o, - *rawscores_zprobes_vs_tmodels_o, *mask_zprobes_vs_tmodels_istruetrial_o; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&O&|O&", kwlist, &PyBlitzArray_Converter, &rawscores_probes_vs_models_o, - &PyBlitzArray_Converter, &rawscores_zprobes_vs_models_o, - &PyBlitzArray_Converter, &rawscores_probes_vs_tmodels_o, - &PyBlitzArray_Converter, &rawscores_zprobes_vs_tmodels_o, - &PyBlitzArray_Converter, &mask_zprobes_vs_tmodels_istruetrial_o)){ - zt_norm.print_usage(); - Py_RETURN_NONE; - } - - // get the number of command line arguments - auto rawscores_probes_vs_models_ = make_safe(rawscores_probes_vs_models_o); - auto rawscores_zprobes_vs_models_ = make_safe(rawscores_zprobes_vs_models_o); - auto rawscores_probes_vs_tmodels_ = make_safe(rawscores_probes_vs_tmodels_o); - auto rawscores_zprobes_vs_tmodels_ = make_safe(rawscores_zprobes_vs_tmodels_o); - //auto mask_zprobes_vs_tmodels_istruetrial_ = make_safe(mask_zprobes_vs_tmodels_istruetrial_o); - - blitz::Array<double,2> rawscores_probes_vs_models = *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_models_o); - blitz::Array<double,2> normalized_scores = blitz::Array<double,2>(rawscores_probes_vs_models.extent(0), rawscores_probes_vs_models.extent(1)); - - int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); - - if(nargs==4) - bob::learn::misc::ztNorm(*PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_models_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_zprobes_vs_models_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_tmodels_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_zprobes_vs_tmodels_o), - normalized_scores); - else - bob::learn::misc::ztNorm(*PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_models_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_zprobes_vs_models_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_tmodels_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_zprobes_vs_tmodels_o), - *PyBlitzArrayCxx_AsBlitz<bool,2>(mask_zprobes_vs_tmodels_istruetrial_o), - normalized_scores); - - return PyBlitzArrayCxx_AsConstNumpy(normalized_scores); -} - - - -/*** t_norm ***/ -static auto t_norm = bob::extension::FunctionDoc( - "tnorm", - "", - 0, - true -) -.add_prototype("rawscores_probes_vs_models,rawscores_probes_vs_tmodels", "output") -.add_parameter("rawscores_probes_vs_models", "array_like <float, 2D>", "") -.add_parameter("rawscores_probes_vs_tmodels", "array_like <float, 2D>", "") -.add_return("output","array_like <float, 2D>",""); -static PyObject* PyBobLearnMisc_tNorm(PyObject*, PyObject* args, PyObject* kwargs) { - - char** kwlist = zt_norm.kwlist(0); - - PyBlitzArrayObject *rawscores_probes_vs_models_o, *rawscores_probes_vs_tmodels_o; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&", kwlist, &PyBlitzArray_Converter, &rawscores_probes_vs_models_o, - &PyBlitzArray_Converter, &rawscores_probes_vs_tmodels_o)){ - zt_norm.print_usage(); - Py_RETURN_NONE; - } - - auto rawscores_probes_vs_models_ = make_safe(rawscores_probes_vs_models_o); - auto rawscores_probes_vs_tmodels_ = make_safe(rawscores_probes_vs_tmodels_o); - - blitz::Array<double,2> rawscores_probes_vs_models = *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_models_o); - blitz::Array<double,2> normalized_scores = blitz::Array<double,2>(rawscores_probes_vs_models.extent(0), rawscores_probes_vs_models.extent(1)); - - bob::learn::misc::tNorm(*PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_models_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_tmodels_o), - normalized_scores); - - return PyBlitzArrayCxx_AsConstNumpy(normalized_scores); -} - - -/*** z_norm ***/ -static auto z_norm = bob::extension::FunctionDoc( - "znorm", - "", - 0, - true -) -.add_prototype("rawscores_probes_vs_models,rawscores_zprobes_vs_models", "output") -.add_parameter("rawscores_probes_vs_models", "array_like <float, 2D>", "") -.add_parameter("rawscores_zprobes_vs_models", "array_like <float, 2D>", "") -.add_return("output","array_like <float, 2D>",""); -static PyObject* PyBobLearnMisc_zNorm(PyObject*, PyObject* args, PyObject* kwargs) { - - char** kwlist = zt_norm.kwlist(0); - - PyBlitzArrayObject *rawscores_probes_vs_models_o, *rawscores_zprobes_vs_models_o; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&", kwlist, &PyBlitzArray_Converter, &rawscores_probes_vs_models_o, - &PyBlitzArray_Converter, &rawscores_zprobes_vs_models_o)){ - zt_norm.print_usage(); - Py_RETURN_NONE; - } - - auto rawscores_probes_vs_models_ = make_safe(rawscores_probes_vs_models_o); - auto rawscores_zprobes_vs_models_ = make_safe(rawscores_zprobes_vs_models_o); - - blitz::Array<double,2> rawscores_probes_vs_models = *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_models_o); - blitz::Array<double,2> normalized_scores = blitz::Array<double,2>(rawscores_probes_vs_models.extent(0), rawscores_probes_vs_models.extent(1)); - - - bob::learn::misc::zNorm(*PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_probes_vs_models_o), - *PyBlitzArrayCxx_AsBlitz<double,2>(rawscores_zprobes_vs_models_o), - normalized_scores); - - return PyBlitzArrayCxx_AsConstNumpy(normalized_scores); -} - diff --git a/buildout.cfg b/buildout.cfg index f8fe5d9..be276cd 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -4,7 +4,7 @@ [buildout] parts = scripts -eggs = bob.learn.misc +eggs = bob.learn.em extensions = bob.buildout ; mr.developer diff --git a/doc/conf.py b/doc/conf.py index 1324990..0317ae8 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -58,12 +58,12 @@ source_suffix = '.rst' master_doc = 'index' # General information about the project. -project = u'bob.learn.misc' +project = u'bob.learn.em' import time copyright = u'%s, Idiap Research Institute' % time.strftime('%Y') # Grab the setup entry -distribution = pkg_resources.require('bob.learn.misc')[0] +distribution = pkg_resources.require('bob.learn.em')[0] # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -129,7 +129,7 @@ if sphinx.__version__ >= "1.0": #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = 'bob_learn_misc' +#html_short_title = 'bob_learn_em' # The name of an image file (relative to this directory) to place at the top # of the sidebar. @@ -187,7 +187,7 @@ html_favicon = 'img/favicon.ico' #html_file_suffix = None # Output file base name for HTML help builder. -htmlhelp_basename = 'bob_learn_misc_doc' +htmlhelp_basename = 'bob_learn_em_doc' # -- Options for LaTeX output -------------------------------------------------- @@ -201,7 +201,7 @@ latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'bob_learn_misc.tex', u'Bob Miscellaneous Machine Learning Tools', + ('index', 'bob_learn_em.tex', u'Bob Miscellaneous Machine Learning Tools', u'Biometrics Group, Idiap Research Institute', 'manual'), ] @@ -241,7 +241,7 @@ rst_epilog = """ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'bob_learn_misc', u'Bob Miscellaneous Machine Learning Tools', [u'Idiap Research Institute'], 1) + ('index', 'bob_learn_em', u'Bob Miscellaneous Machine Learning Tools', [u'Idiap Research Institute'], 1) ] # Default processing flags for sphinx diff --git a/doc/guide.rst b/doc/guide.rst index 7010dd6..b549aff 100644 --- a/doc/guide.rst +++ b/doc/guide.rst @@ -9,7 +9,7 @@ import numpy numpy.set_printoptions(precision=3, suppress=True) - import bob.learn.misc + import bob.learn.em import os import tempfile @@ -38,12 +38,12 @@ K-means machines method which aims to partition a set of observations into :math:`k` clusters. The `training` procedure is described further below. Here, we explain only how to use the resulting machine. For the sake of example, we create a new -:py:class:`bob.learn.misc.KMeansMachine` as follows: +:py:class:`bob.learn.em.KMeansMachine` as follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> machine = bob.learn.misc.KMeansMachine(2,3) # Two clusters with a feature dimensionality of 3 + >>> machine = bob.learn.em.KMeansMachine(2,3) # Two clusters with a feature dimensionality of 3 >>> machine.means = numpy.array([[1,0,0],[0,0,1]], 'float64') # Defines the two clusters Then, given some input data, it is possible to determine to which cluster the @@ -60,7 +60,7 @@ data is the closest as well as the min distance. Gaussian machines ================= -The :py:class:`bob.learn.misc.Gaussian` represents a `multivariate diagonal +The :py:class:`bob.learn.em.Gaussian` represents a `multivariate diagonal Gaussian (or normal) distribution <http://en.wikipedia.org/wiki/Multivariate_normal_distribution>`_. In this context, a *diagonal* Gaussian refers to the covariance matrix of the @@ -68,13 +68,13 @@ distribution being diagonal. When the covariance matrix is diagonal, each variable in the distribution is independent of the others. Objects of this class are normally used as building blocks for more complex -:py:class:`bob.learn.misc.GMMMachine` or GMM objects, but can also be used +:py:class:`bob.learn.em.GMMMachine` or GMM objects, but can also be used individually. Here is how to create one multivariate diagonal Gaussian distribution: .. doctest:: - >>> g = bob.learn.misc.Gaussian(2) #bi-variate diagonal normal distribution + >>> g = bob.learn.em.Gaussian(2) #bi-variate diagonal normal distribution >>> g.mean = numpy.array([0.3, 0.7], 'float64') >>> g.mean array([ 0.3, 0.7]) @@ -82,7 +82,7 @@ distribution: >>> g.variance array([ 0.2, 0.1]) -Once the :py:class:`bob.learn.misc.Gaussian` has been set, you can use it to +Once the :py:class:`bob.learn.em.Gaussian` has been set, you can use it to estimate the log-likelihood of an input feature vector with a matching number of dimensions: @@ -91,25 +91,25 @@ of dimensions: >>> log_likelihood = g(numpy.array([0.4, 0.4], 'float64')) As with other machines you can save and re-load machines of this type using -:py:meth:`bob.learn.misc.Gaussian.save` and the class constructor +:py:meth:`bob.learn.em.Gaussian.save` and the class constructor respectively. Gaussian mixture models ======================= -The :py:class:`bob.learn.misc.GMMMachine` represents a Gaussian `mixture model +The :py:class:`bob.learn.em.GMMMachine` represents a Gaussian `mixture model <http://en.wikipedia.org/wiki/Mixture_model>`_ (GMM), which consists of a -mixture of weighted :py:class:`bob.learn.misc.Gaussian`\s. +mixture of weighted :py:class:`bob.learn.em.Gaussian`\s. .. doctest:: - >>> gmm = bob.learn.misc.GMMMachine(2,3) # Mixture of two diagonal Gaussian of dimension 3 + >>> gmm = bob.learn.em.GMMMachine(2,3) # Mixture of two diagonal Gaussian of dimension 3 By default, the diagonal Gaussian distributions of the GMM are initialized with zero mean and unit variance, and the weights are identical. This can be updated -using the :py:attr:`bob.learn.misc.GMMMachine.means`, -:py:attr:`bob.learn.misc.GMMMachine.variances` or -:py:attr:`bob.learn.misc.GMMMachine.weights`. +using the :py:attr:`bob.learn.em.GMMMachine.means`, +:py:attr:`bob.learn.em.GMMMachine.variances` or +:py:attr:`bob.learn.em.GMMMachine.weights`. .. doctest:: :options: +NORMALIZE_WHITESPACE @@ -121,7 +121,7 @@ using the :py:attr:`bob.learn.misc.GMMMachine.means`, array([[ 1., 6., 2.], [ 4., 3., 2.]]) -Once the :py:class:`bob.learn.misc.GMMMachine` has been set, you can use it to +Once the :py:class:`bob.learn.em.GMMMachine` has been set, you can use it to estimate the log-likelihood of an input feature vector with a matching number of dimensions: @@ -130,12 +130,12 @@ of dimensions: >>> log_likelihood = gmm(numpy.array([5.1, 4.7, -4.9], 'float64')) As with other machines you can save and re-load machines of this type using -:py:meth:`bob.learn.misc.GMMMachine.save` and the class constructor respectively. +:py:meth:`bob.learn.em.GMMMachine.save` and the class constructor respectively. Gaussian mixture models Statistics ================================== -The :py:class:`bob.learn.misc.GMMStats` is a container for the sufficient +The :py:class:`bob.learn.em.GMMStats` is a container for the sufficient statistics of a GMM distribution. Given a GMM, the sufficient statistics of a sample can be computed as @@ -144,7 +144,7 @@ follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> gs = bob.learn.misc.GMMStats(2,3) + >>> gs = bob.learn.em.GMMStats(2,3) >>> sample = numpy.array([0.5, 4.5, 1.5]) >>> gmm.acc_statistics(sample, gs) >>> print(gs) # doctest: +SKIP @@ -155,7 +155,7 @@ considering the following attributes. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> gs = bob.learn.misc.GMMStats(2,3) + >>> gs = bob.learn.em.GMMStats(2,3) >>> log_likelihood = -3. # log-likelihood of the accumulated samples >>> T = 1 # Number of samples used to accumulate statistics >>> n = numpy.array([0.4, 0.6], 'float64') # zeroth order stats @@ -176,19 +176,19 @@ a within-class subspace :math:`U`, a between-class subspace :math:`V`, and a subspace for the residuals :math:`D` to capture and suppress a significant portion of between-class variation. -An instance of :py:class:`bob.learn.misc.JFABase` carries information about +An instance of :py:class:`bob.learn.em.JFABase` carries information about the matrices :math:`U`, :math:`V` and :math:`D`, which can be shared between several classes. In contrast, after the enrolment phase, an instance of -:py:class:`bob.learn.misc.JFAMachine` carries class-specific information about +:py:class:`bob.learn.em.JFAMachine` carries class-specific information about the latent variables :math:`y` and :math:`z`. -An instance of :py:class:`bob.learn.misc.JFABase` can be initialized as +An instance of :py:class:`bob.learn.em.JFABase` can be initialized as follows, given an existing GMM: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> jfa_base = bob.learn.misc.JFABase(gmm,2,2) # dimensions of U and V are both equal to 2 + >>> jfa_base = bob.learn.em.JFABase(gmm,2,2) # dimensions of U and V are both equal to 2 >>> U = numpy.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]], 'float64') >>> V = numpy.array([[6, 5], [4, 3], [2, 1], [1, 2], [3, 4], [5, 6]], 'float64') >>> d = numpy.array([0, 1, 0, 1, 0, 1], 'float64') @@ -196,33 +196,33 @@ follows, given an existing GMM: >>> jfa_base.v = V >>> jfa_base.d = d -Next, this :py:class:`bob.learn.misc.JFABase` can be shared by several -instances of :py:class:`bob.learn.misc.JFAMachine`, the initialization being +Next, this :py:class:`bob.learn.em.JFABase` can be shared by several +instances of :py:class:`bob.learn.em.JFAMachine`, the initialization being as follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> m = bob.learn.misc.JFAMachine(jfa_base) + >>> m = bob.learn.em.JFAMachine(jfa_base) >>> m.y = numpy.array([1,2], 'float64') >>> m.z = numpy.array([3,4,1,2,0,1], 'float64') -Once the :py:class:`bob.learn.misc.JFAMachine` has been configured for a +Once the :py:class:`bob.learn.em.JFAMachine` has been configured for a specific class, the log-likelihood (score) that an input sample belongs to the enrolled class, can be estimated, by first computing the GMM sufficient statistics of this input sample, and then calling the -:py:meth:`bob.learn.misc.JFAMachine.forward` on the sufficient statistics. +:py:meth:`bob.learn.em.JFAMachine.forward` on the sufficient statistics. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> gs = bob.learn.misc.GMMStats(2,3) + >>> gs = bob.learn.em.GMMStats(2,3) >>> gmm.acc_statistics(sample, gs) >>> score = m.forward(gs) As with other machines you can save and re-load machines of this type using -:py:meth:`bob.learn.misc.JFAMachine.save` and the class constructor +:py:meth:`bob.learn.em.JFAMachine.save` and the class constructor respectively. @@ -236,47 +236,47 @@ the Gaussian mixture modelling approach. It utilises a within-class subspace significant portion of between-class variation. The main difference compared to JFA is the absence of the between-class subspace :math:`V`. -Similarly to JFA, an instance of :py:class:`bob.learn.misc.JFABase` carries +Similarly to JFA, an instance of :py:class:`bob.learn.em.JFABase` carries information about the matrices :math:`U` and :math:`D`, which can be shared between several classes, whereas an instance of -:py:class:`bob.learn.misc.JFAMachine` carries class-specific information about +:py:class:`bob.learn.em.JFAMachine` carries class-specific information about the latent variable :math:`z`. -An instance of :py:class:`bob.learn.misc.ISVBase` can be initialized as +An instance of :py:class:`bob.learn.em.ISVBase` can be initialized as follows, given an existing GMM: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> isv_base = bob.learn.misc.ISVBase(gmm,2) # dimension of U is equal to 2 + >>> isv_base = bob.learn.em.ISVBase(gmm,2) # dimension of U is equal to 2 >>> isv_base.u = U >>> isv_base.d = d -Next, this :py:class:`bob.learn.misc.ISVBase` can be shared by several -instances of :py:class:`bob.learn.misc.ISVMachine`, the initialization being +Next, this :py:class:`bob.learn.em.ISVBase` can be shared by several +instances of :py:class:`bob.learn.em.ISVMachine`, the initialization being as follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> m = bob.learn.misc.ISVMachine(isv_base) + >>> m = bob.learn.em.ISVMachine(isv_base) >>> m.z = numpy.array([3,4,1,2,0,1], 'float64') -Once the :py:class:`bob.learn.misc.ISVMachine` has been configured for a +Once the :py:class:`bob.learn.em.ISVMachine` has been configured for a specific class, the log-likelihood (score) that an input sample belongs to the enrolled class, can be estimated, by first computing the GMM sufficient statistics of this input sample, and then calling the -:py:meth:`bob.learn.misc.ISVMachine.forward` on the sufficient statistics. +:py:meth:`bob.learn.em.ISVMachine.forward` on the sufficient statistics. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> gs = bob.learn.misc.GMMStats(2,3) + >>> gs = bob.learn.em.GMMStats(2,3) >>> gmm.acc_statistics(sample, gs) >>> score = m.forward(gs) As with other machines you can save and re-load machines of this type using -:py:meth:`bob.learn.misc.ISVMachine.save` and the class constructor +:py:meth:`bob.learn.em.ISVMachine.save` and the class constructor respectively. @@ -289,30 +289,30 @@ dimensionality called ``i-vectors``. The model consists of a subspace :math:`T` and a residual diagonal covariance matrix :math:`\Sigma`, that are then used to extract i-vectors, and is built upon the GMM approach. -An instance of the class :py:class:`bob.learn.misc.IVectorMachine` carries +An instance of the class :py:class:`bob.learn.em.IVectorMachine` carries information about these two matrices. This can be initialized as follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> m = bob.learn.misc.IVectorMachine(gmm, 2) + >>> m = bob.learn.em.IVectorMachine(gmm, 2) >>> m.t = numpy.array([[1.,2],[4,1],[0,3],[5,8],[7,10],[11,1]]) >>> m.sigma = numpy.array([1.,2.,1.,3.,2.,4.]) -Once the :py:class:`bob.learn.misc.IVectorMachine` has been set, the +Once the :py:class:`bob.learn.em.IVectorMachine` has been set, the extraction of an i-vector :math:`w_{ij}` can be done in two steps, by first extracting the GMM sufficient statistics, and then estimating the i-vector: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> gs = bob.learn.misc.GMMStats(2,3) + >>> gs = bob.learn.em.GMMStats(2,3) >>> gmm.acc_statistics(sample, gs) >>> w_ij = m.forward(gs) As with other machines you can save and re-load machines of this type using -:py:meth:`bob.learn.misc.IVectorMachine.save` and the class constructor +:py:meth:`bob.learn.em.IVectorMachine.save` and the class constructor respectively. @@ -332,22 +332,22 @@ diagonal covariance matrix :math:`\Sigma`, the model assumes that a sample Information about a PLDA model (:math:`\mu`, :math:`F`, :math:`G` and :math:`\Sigma`) are carried out by an instance of the class -:py:class:`bob.learn.misc.PLDABase`. +:py:class:`bob.learn.em.PLDABase`. .. doctest:: >>> ### This creates a PLDABase container for input feature of dimensionality 3, >>> ### and with subspaces F and G of rank 1 and 2 respectively. - >>> pldabase = bob.learn.misc.PLDABase(3,1,2) + >>> pldabase = bob.learn.em.PLDABase(3,1,2) Class-specific information (usually from enrollment samples) are contained in -an instance of :py:class:`bob.learn.misc.PLDAMachine`, that must be attached -to a given :py:class:`bob.learn.misc.PLDABase`. Once done, log-likelihood +an instance of :py:class:`bob.learn.em.PLDAMachine`, that must be attached +to a given :py:class:`bob.learn.em.PLDABase`. Once done, log-likelihood computations can be performed. .. doctest:: - >>> plda = bob.learn.misc.PLDAMachine(pldabase) + >>> plda = bob.learn.em.PLDAMachine(pldabase) >>> samples = numpy.array([[3.5,-3.4,102], [4.5,-4.3,56]], dtype=numpy.float64) >>> loglike = plda.compute_log_likelihood(samples) @@ -373,13 +373,13 @@ class, the training data is passed in a 2D :py:class:`numpy.ndarray` container. >>> data = numpy.array([[3,-3,100], [4,-4,98], [3.5,-3.5,99], [-7,7,-100], [-5,5,-101]], dtype='float64') The training procedure will learn the `means` for the -:py:class:`bob.learn.misc.KMeansMachine`. The number :math:`k` of `means` is given +:py:class:`bob.learn.em.KMeansMachine`. The number :math:`k` of `means` is given when creating the `machine`, as well as the dimensionality of the features. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> kmeans = bob.learn.misc.KMeansMachine(2, 3) # Create a machine with k=2 clusters with a dimensionality equal to 3 + >>> kmeans = bob.learn.em.KMeansMachine(2, 3) # Create a machine with k=2 clusters with a dimensionality equal to 3 Then training procedure for `k-means` is an **Expectation-Maximization**-based [8]_ algorithm. There are several options that can be set such as the maximum @@ -390,7 +390,7 @@ be called. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> kmeansTrainer = bob.learn.misc.KMeansTrainer() + >>> kmeansTrainer = bob.learn.em.KMeansTrainer() >>> kmeansTrainer.max_iterations = 200 >>> kmeansTrainer.convergence_threshold = 1e-5 @@ -407,18 +407,18 @@ A Gaussian **mixture model** (GMM) [9]_ is a common probabilistic model. In order to train the parameters of such a model it is common to use a **maximum-likelihood** (ML) approach [10]_. To do this we use an **Expectation-Maximization** (EM) algorithm [8]_. Let's first start by creating -a :py:class:`bob.learn.misc.GMMMachine`. By default, all of the Gaussian's have +a :py:class:`bob.learn.em.GMMMachine`. By default, all of the Gaussian's have zero-mean and unit variance, and all the weights are equal. As a starting point, we could set the mean to the one obtained with **k-means** [7]_. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> gmm = bob.learn.misc.GMMMachine(2,3) # Create a machine with 2 Gaussian and feature dimensionality 3 + >>> gmm = bob.learn.em.GMMMachine(2,3) # Create a machine with 2 Gaussian and feature dimensionality 3 >>> gmm.means = kmeans.means # Set the means to the one obtained with k-means The |project| class to learn the parameters of a GMM [9]_ using ML [10]_ is -:py:class:`bob.learn.misc.ML_GMMTrainer`. It uses an **EM**-based [8]_ algorithm +:py:class:`bob.learn.em.ML_GMMTrainer`. It uses an **EM**-based [8]_ algorithm and requires the user to specify which parameters of the GMM are updated at each iteration (means, variances and/or weights). In addition, and as for **k-means** [7]_, it has parameters such as the maximum number of iterations @@ -427,7 +427,7 @@ and the criterion used to determine if the parameters have converged. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> trainer = bob.learn.misc.ML_GMMTrainer(True, True, True) # update means/variances/weights at each iteration + >>> trainer = bob.learn.em.ML_GMMTrainer(True, True, True) # update means/variances/weights at each iteration >>> trainer.convergence_threshold = 1e-5 >>> trainer.max_iterations = 200 >>> trainer.train(gmm, data) @@ -459,7 +459,7 @@ The training data used to compute the MAP estimate [11]_ is again stored in a >>> dataMAP = numpy.array([[7,-7,102], [6,-6,103], [-3.5,3.5,-97]], dtype='float64') The |project| class used to perform MAP adaptation training [11]_ is -:py:class:`bob.learn.misc.MAP_GMMTrainer`. As with the ML estimate [10]_, it uses +:py:class:`bob.learn.em.MAP_GMMTrainer`. As with the ML estimate [10]_, it uses an **EM**-based [8]_ algorithm and requires the user to specify which parts of the GMM are adapted at each iteration (means, variances and/or weights). In addition, it also has parameters such as the maximum number of iterations and @@ -472,12 +472,12 @@ set. :options: +NORMALIZE_WHITESPACE >>> relevance_factor = 4. - >>> trainer = bob.learn.misc.MAP_GMMTrainer(relevance_factor, True, False, False) # mean adaptation only + >>> trainer = bob.learn.em.MAP_GMMTrainer(relevance_factor, True, False, False) # mean adaptation only >>> trainer.convergence_threshold = 1e-5 >>> trainer.max_iterations = 200 >>> trainer.set_prior_gmm(gmm) True - >>> gmmAdapted = bob.learn.misc.GMMMachine(2,3) # Create a new machine for the MAP estimate + >>> gmmAdapted = bob.learn.em.GMMMachine(2,3) # Create a new machine for the MAP estimate >>> trainer.train(gmmAdapted, dataMAP) >>> print(gmmAdapted) # doctest: +SKIP @@ -501,40 +501,40 @@ done, we get a training set of GMM statistics: >>> N2 = numpy.array([0.1069, 0.9397, 0.6164, 0.3545]).reshape((2,2)) >>> N=[N1, N2] - >>> gs11 = bob.learn.misc.GMMStats(2,3) + >>> gs11 = bob.learn.em.GMMStats(2,3) >>> gs11.n = N1[:,0] >>> gs11.sum_px = F1[:,0].reshape(2,3) - >>> gs12 = bob.learn.misc.GMMStats(2,3) + >>> gs12 = bob.learn.em.GMMStats(2,3) >>> gs12.n = N1[:,1] >>> gs12.sum_px = F1[:,1].reshape(2,3) - >>> gs21 = bob.learn.misc.GMMStats(2,3) + >>> gs21 = bob.learn.em.GMMStats(2,3) >>> gs21.n = N2[:,0] >>> gs21.sum_px = F2[:,0].reshape(2,3) - >>> gs22 = bob.learn.misc.GMMStats(2,3) + >>> gs22 = bob.learn.em.GMMStats(2,3) >>> gs22.n = N2[:,1] >>> gs22.sum_px = F2[:,1].reshape(2,3) >>> TRAINING_STATS = [[gs11, gs12], [gs21, gs22]] -In the following, we will allocate a :py:class:`bob.learn.misc.JFABase` machine, +In the following, we will allocate a :py:class:`bob.learn.em.JFABase` machine, that will then be trained. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> jfa_base = bob.learn.misc.JFABase(gmm, 2, 2) # the dimensions of U and V are both equal to 2 + >>> jfa_base = bob.learn.em.JFABase(gmm, 2, 2) # the dimensions of U and V are both equal to 2 Next, we initialize a trainer, which is an instance of -:py:class:`bob.learn.misc.JFATrainer`, as follows: +:py:class:`bob.learn.em.JFATrainer`, as follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> jfa_trainer = bob.learn.misc.JFATrainer(10) # 10 is the number of iterations + >>> jfa_trainer = bob.learn.em.JFATrainer(10) # 10 is the number of iterations The training process is started by calling the -:py:meth:`bob.learn.misc.JFATrainer.train`. +:py:meth:`bob.learn.em.JFATrainer.train`. .. doctest:: :options: +NORMALIZE_WHITESPACE @@ -552,10 +552,10 @@ the following. >>> Ne = numpy.array([0.1579, 0.9245, 0.1323, 0.2458]).reshape((2,2)) >>> Fe = numpy.array([0.1579, 0.1925, 0.3242, 0.1234, 0.2354, 0.2734, 0.2514, 0.5874, 0.3345, 0.2463, 0.4789, 0.5236]).reshape((6,2)) - >>> gse1 = bob.learn.misc.GMMStats(2,3) + >>> gse1 = bob.learn.em.GMMStats(2,3) >>> gse1.n = Ne[:,0] >>> gse1.sum_px = Fe[:,0].reshape(2,3) - >>> gse2 = bob.learn.misc.GMMStats(2,3) + >>> gse2 = bob.learn.em.GMMStats(2,3) >>> gse2.n = Ne[:,1] >>> gse2.sum_px = Fe[:,1].reshape(2,3) >>> gse = [gse1, gse2] @@ -566,7 +566,7 @@ the class-specific latent variables :math:`y` and :math:`z`: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> m = bob.learn.misc.JFAMachine(jfa_base) + >>> m = bob.learn.em.JFAMachine(jfa_base) >>> jfa_trainer.enrol(m, gse, 5) # where 5 is the number of enrollment iterations More information about the training process can be found in [12]_ and [13]_. @@ -579,23 +579,23 @@ The training of the subspace :math:`U` and :math:`D` of an Inter-Session Variability model, is performed in two steps. As for JFA, GMM sufficient statistics of the training samples should be computed against the UBM GMM. Once done, we get a training set of GMM statistics. Next, we will allocate an -:py:class:`bob.learn.misc.ISVBase` machine, that will then be trained. +:py:class:`bob.learn.em.ISVBase` machine, that will then be trained. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> isv_base = bob.learn.misc.ISVBase(gmm, 2) # the dimensions of U is equal to 2 + >>> isv_base = bob.learn.em.ISVBase(gmm, 2) # the dimensions of U is equal to 2 Next, we initialize a trainer, which is an instance of -:py:class:`bob.learn.misc.ISVTrainer`, as follows: +:py:class:`bob.learn.em.ISVTrainer`, as follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> isv_trainer = bob.learn.misc.ISVTrainer(10, 4.) # 10 is the number of iterations, and 4 is the relevance factor + >>> isv_trainer = bob.learn.em.ISVTrainer(10, 4.) # 10 is the number of iterations, and 4 is the relevance factor The training process is started by calling the -:py:meth:`bob.learn.misc.ISVTrainer.train`. +:py:meth:`bob.learn.em.ISVTrainer.train`. .. doctest:: :options: +NORMALIZE_WHITESPACE @@ -611,7 +611,7 @@ estimate the class-specific latent variable :math:`z`: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> m = bob.learn.misc.ISVMachine(isv_base) + >>> m = bob.learn.em.ISVMachine(isv_base) >>> isv_trainer.enrol(m, gse, 5) # where 5 is the number of iterations More information about the training process can be found in [14]_ and [13]_. @@ -624,27 +624,27 @@ The training of the subspace :math:`T` and :math:`\Sigma` of a Total Variability model, is performed in two steps. As for JFA and ISV, GMM sufficient statistics of the training samples should be computed against the UBM GMM. Once done, we get a training set of GMM statistics. Next, we will -allocate an instance of :py:class:`bob.learn.misc.IVectorMachine`, that will +allocate an instance of :py:class:`bob.learn.em.IVectorMachine`, that will then be trained. .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> m = bob.learn.misc.IVectorMachine(gmm, 2) + >>> m = bob.learn.em.IVectorMachine(gmm, 2) >>> m.variance_threshold = 1e-5 Next, we initialize a trainer, which is an instance of -:py:class:`bob.learn.misc.IVectorTrainer`, as follows: +:py:class:`bob.learn.em.IVectorTrainer`, as follows: .. doctest:: :options: +NORMALIZE_WHITESPACE - >>> ivec_trainer = bob.learn.misc.IVectorTrainer(update_sigma=True, max_iterations=10) + >>> ivec_trainer = bob.learn.em.IVectorTrainer(update_sigma=True, max_iterations=10) >>> TRAINING_STATS_flatten = [gs11, gs12, gs21, gs22] The training process is started by calling the -:py:meth:`bob.learn.misc.IVectorTrainer.train`. +:py:meth:`bob.learn.em.IVectorTrainer.train`. .. doctest:: :options: +NORMALIZE_WHITESPACE @@ -671,7 +671,7 @@ diagonal covariance matrix :math:`\Sigma`, the model assumes that a sample An Expectaction-Maximization algorithm can be used to learn the parameters of this model :math:`\mu`, :math:`F` :math:`G` and :math:`\Sigma`. As these parameters can be shared between classes, there is a specific container class -for this purpose, which is :py:class:`bob.learn.misc.PLDABase`. The process is +for this purpose, which is :py:class:`bob.learn.em.PLDABase`. The process is described in detail in [17]_. Let us consider a training set of two classes, each with 3 samples of @@ -685,43 +685,43 @@ dimensionality 3. >>> data = [data1,data2] Learning a PLDA model can be performed by instantiating the class -:py:class:`bob.learn.misc.PLDATrainer`, and calling the -:py:meth:`bob.learn.misc.PLDATrainer.train()` method. +:py:class:`bob.learn.em.PLDATrainer`, and calling the +:py:meth:`bob.learn.em.PLDATrainer.train()` method. .. doctest:: >>> ### This creates a PLDABase container for input feature of dimensionality 3, >>> ### and with subspaces F and G of rank 1 and 2 respectively. - >>> pldabase = bob.learn.misc.PLDABase(3,1,2) + >>> pldabase = bob.learn.em.PLDABase(3,1,2) - >>> trainer = bob.learn.misc.PLDATrainer() + >>> trainer = bob.learn.em.PLDATrainer() >>> trainer.train(pldabase, data) Once trained, this PLDA model can be used to compute the log-likelihood of a set of samples given some hypothesis. For this purpose, a -:py:class:`bob.learn.misc.PLDAMachine` should be instantiated. Then, the +:py:class:`bob.learn.em.PLDAMachine` should be instantiated. Then, the log-likelihood that a set of samples share the same latent identity variable :math:`h_{i}` (i.e. the samples are coming from the same identity/class) is obtained by calling the -:py:meth:`bob.learn.misc.PLDAMachine.compute_log_likelihood()` method. +:py:meth:`bob.learn.em.PLDAMachine.compute_log_likelihood()` method. .. doctest:: - >>> plda = bob.learn.misc.PLDAMachine(pldabase) + >>> plda = bob.learn.em.PLDAMachine(pldabase) >>> samples = numpy.array([[3.5,-3.4,102], [4.5,-4.3,56]], dtype=numpy.float64) >>> loglike = plda.compute_log_likelihood(samples) If separate models for different classes need to be enrolled, each of them with a set of enrolment samples, then, several instances of -:py:class:`bob.learn.misc.PLDAMachine` need to be created and enroled using -the :py:meth:`bob.learn.misc.PLDATrainer.enrol()` method as follows. +:py:class:`bob.learn.em.PLDAMachine` need to be created and enroled using +the :py:meth:`bob.learn.em.PLDATrainer.enrol()` method as follows. .. doctest:: - >>> plda1 = bob.learn.misc.PLDAMachine(pldabase) + >>> plda1 = bob.learn.em.PLDAMachine(pldabase) >>> samples1 = numpy.array([[3.5,-3.4,102], [4.5,-4.3,56]], dtype=numpy.float64) >>> trainer.enrol(plda1, samples1) - >>> plda2 = bob.learn.misc.PLDAMachine(pldabase) + >>> plda2 = bob.learn.em.PLDAMachine(pldabase) >>> samples2 = numpy.array([[3.5,7,-49], [4.5,8.9,-99]], dtype=numpy.float64) >>> trainer.enrol(plda2, samples2) @@ -738,8 +738,8 @@ separately for each model. In a verification scenario, there are two possible hypotheses: 1. :math:`x_{test}` and :math:`x_{enrol}` share the same class. 2. :math:`x_{test}` and :math:`x_{enrol}` are from different classes. Using the -methods :py:meth:`bob.learn.misc.PLDAMachine.forward` or -:py:meth:`bob.learn.misc.PLDAMachine.__call__` function, the corresponding +methods :py:meth:`bob.learn.em.PLDAMachine.forward` or +:py:meth:`bob.learn.em.PLDAMachine.__call__` function, the corresponding log-likelihood ratio will be computed, which is defined in more formal way by: :math:`s = \ln(P(x_{test},x_{enrol})) - \ln(P(x_{test})P(x_{enrol}))` diff --git a/doc/index.rst b/doc/index.rst index cc40c8d..a160f0a 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -4,7 +4,7 @@ .. .. Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland -.. _bob.learn.misc: +.. _bob.learn.em: ====================================== Miscellaneous Machine Learning Tools diff --git a/doc/py_api.rst b/doc/py_api.rst index c1c9541..e5f18c3 100644 --- a/doc/py_api.rst +++ b/doc/py_api.rst @@ -7,8 +7,8 @@ ============ This section includes information for using the pure Python API of -``bob.learn.misc``. +``bob.learn.em``. -.. automodule:: bob.learn.misc +.. automodule:: bob.learn.em diff --git a/setup.py b/setup.py index 875085d..3f89ff5 100644 --- a/setup.py +++ b/setup.py @@ -20,10 +20,10 @@ boost_modules = ['system', 'python'] setup( - name='bob.learn.misc', + name='bob.learn.em', version=version, - description='Bindings for miscelaneous machines and trainers of Bob', - url='http://github.com/bioidiap/bob.learn.misc', + description='Bindings for emelaneous machines and trainers of Bob', + url='http://github.com/bioidiap/bob.learn.em', license='BSD', author='Andre Anjos', author_email='andre.anjos@idiap.ch', @@ -42,9 +42,9 @@ setup( ], ext_modules = [ - Extension("bob.learn.misc.version", + Extension("bob.learn.em.version", [ - "bob/learn/misc/version.cpp", + "bob/learn/em/version.cpp", ], bob_packages = bob_packages, packages = packages, @@ -52,34 +52,34 @@ setup( version = version, ), - Library("bob.learn.misc.bob_learn_misc", + Library("bob.learn.em.bob_learn_em", [ - "bob/learn/misc/cpp/Gaussian.cpp", - "bob/learn/misc/cpp/GMMMachine.cpp", - "bob/learn/misc/cpp/GMMStats.cpp", - "bob/learn/misc/cpp/IVectorMachine.cpp", - "bob/learn/misc/cpp/KMeansMachine.cpp", - "bob/learn/misc/cpp/LinearScoring.cpp", - "bob/learn/misc/cpp/PLDAMachine.cpp", - "bob/learn/misc/cpp/ZTNorm.cpp", - - "bob/learn/misc/cpp/FABase.cpp", - "bob/learn/misc/cpp/JFABase.cpp", - "bob/learn/misc/cpp/ISVBase.cpp", - "bob/learn/misc/cpp/JFAMachine.cpp", - "bob/learn/misc/cpp/ISVMachine.cpp", - - "bob/learn/misc/cpp/FABaseTrainer.cpp", - "bob/learn/misc/cpp/JFATrainer.cpp", - "bob/learn/misc/cpp/ISVTrainer.cpp", - - "bob/learn/misc/cpp/EMPCATrainer.cpp", - "bob/learn/misc/cpp/GMMBaseTrainer.cpp", - "bob/learn/misc/cpp/IVectorTrainer.cpp", - "bob/learn/misc/cpp/KMeansTrainer.cpp", - "bob/learn/misc/cpp/MAP_GMMTrainer.cpp", - "bob/learn/misc/cpp/ML_GMMTrainer.cpp", - "bob/learn/misc/cpp/PLDATrainer.cpp", + "bob/learn/em/cpp/Gaussian.cpp", + "bob/learn/em/cpp/GMMMachine.cpp", + "bob/learn/em/cpp/GMMStats.cpp", + "bob/learn/em/cpp/IVectorMachine.cpp", + "bob/learn/em/cpp/KMeansMachine.cpp", + "bob/learn/em/cpp/LinearScoring.cpp", + "bob/learn/em/cpp/PLDAMachine.cpp", + "bob/learn/em/cpp/ZTNorm.cpp", + + "bob/learn/em/cpp/FABase.cpp", + "bob/learn/em/cpp/JFABase.cpp", + "bob/learn/em/cpp/ISVBase.cpp", + "bob/learn/em/cpp/JFAMachine.cpp", + "bob/learn/em/cpp/ISVMachine.cpp", + + "bob/learn/em/cpp/FABaseTrainer.cpp", + "bob/learn/em/cpp/JFATrainer.cpp", + "bob/learn/em/cpp/ISVTrainer.cpp", + + "bob/learn/em/cpp/EMPCATrainer.cpp", + "bob/learn/em/cpp/GMMBaseTrainer.cpp", + "bob/learn/em/cpp/IVectorTrainer.cpp", + "bob/learn/em/cpp/KMeansTrainer.cpp", + "bob/learn/em/cpp/MAP_GMMTrainer.cpp", + "bob/learn/em/cpp/ML_GMMTrainer.cpp", + "bob/learn/em/cpp/PLDATrainer.cpp", ], bob_packages = bob_packages, packages = packages, @@ -87,18 +87,18 @@ setup( version = version, ), -# Extension("bob.learn.misc._library", +# Extension("bob.learn.em._library", # [ -# "bob/learn/misc/old/bic.cc", +# "bob/learn/em/old/bic.cc", # # # external requirements as boost::python bindings -# "bob/learn/misc/old/blitz_numpy.cc", -# "bob/learn/misc/old/ndarray.cc", -# "bob/learn/misc/old/ndarray_numpy.cc", -# "bob/learn/misc/old/tinyvector.cc", -# "bob/learn/misc/old/random.cc", +# "bob/learn/em/old/blitz_numpy.cc", +# "bob/learn/em/old/ndarray.cc", +# "bob/learn/em/old/ndarray_numpy.cc", +# "bob/learn/em/old/tinyvector.cc", +# "bob/learn/em/old/random.cc", # -# "bob/learn/misc/old/main.cc", +# "bob/learn/em/old/main.cc", # ], # bob_packages = bob_packages, # packages = packages, @@ -106,40 +106,40 @@ setup( # version = version, # ), - Extension("bob.learn.misc._library", + Extension("bob.learn.em._library", [ - "bob/learn/misc/gaussian.cpp", - "bob/learn/misc/gmm_stats.cpp", - "bob/learn/misc/gmm_machine.cpp", - "bob/learn/misc/kmeans_machine.cpp", - "bob/learn/misc/kmeans_trainer.cpp", - - "bob/learn/misc/ML_gmm_trainer.cpp", - "bob/learn/misc/MAP_gmm_trainer.cpp", - - "bob/learn/misc/jfa_base.cpp", - "bob/learn/misc/jfa_machine.cpp", - "bob/learn/misc/jfa_trainer.cpp", - - "bob/learn/misc/isv_base.cpp", - "bob/learn/misc/isv_machine.cpp", - "bob/learn/misc/isv_trainer.cpp", + "bob/learn/em/gaussian.cpp", + "bob/learn/em/gmm_stats.cpp", + "bob/learn/em/gmm_machine.cpp", + "bob/learn/em/kmeans_machine.cpp", + "bob/learn/em/kmeans_trainer.cpp", + + "bob/learn/em/ML_gmm_trainer.cpp", + "bob/learn/em/MAP_gmm_trainer.cpp", + + "bob/learn/em/jfa_base.cpp", + "bob/learn/em/jfa_machine.cpp", + "bob/learn/em/jfa_trainer.cpp", + + "bob/learn/em/isv_base.cpp", + "bob/learn/em/isv_machine.cpp", + "bob/learn/em/isv_trainer.cpp", - "bob/learn/misc/ivector_machine.cpp", - "bob/learn/misc/ivector_trainer.cpp", + "bob/learn/em/ivector_machine.cpp", + "bob/learn/em/ivector_trainer.cpp", - "bob/learn/misc/plda_base.cpp", - "bob/learn/misc/plda_machine.cpp", + "bob/learn/em/plda_base.cpp", + "bob/learn/em/plda_machine.cpp", - "bob/learn/misc/empca_trainer.cpp", + "bob/learn/em/empca_trainer.cpp", - "bob/learn/misc/plda_trainer.cpp", + "bob/learn/em/plda_trainer.cpp", - "bob/learn/misc/ztnorm.cpp", + "bob/learn/em/ztnorm.cpp", - "bob/learn/misc/linear_scoring.cpp", + "bob/learn/em/linear_scoring.cpp", - "bob/learn/misc/main.cpp", + "bob/learn/em/main.cpp", ], bob_packages = bob_packages, packages = packages, -- GitLab