From 7c3d7147bd84f9008555a90d4898a2f4aa1732ce Mon Sep 17 00:00:00 2001
From: Yannick DAYER <yannick.dayer@idiap.ch>
Date: Mon, 26 Jul 2021 13:53:55 +0200
Subject: [PATCH] Update tests and check if input is delayed

---
 bob/bio/gmm/algorithm/GMM.py             |  12 +++++++++---
 bob/bio/gmm/algorithm/utils.py           |   3 ---
 bob/bio/gmm/test/data/gmm_model.hdf5     | Bin 11176 -> 11176 bytes
 bob/bio/gmm/test/data/gmm_projected.hdf5 | Bin 5280 -> 5360 bytes
 bob/bio/gmm/test/data/gmm_projector.hdf5 | Bin 11176 -> 11176 bytes
 bob/bio/gmm/test/test_algorithms.py      |   4 ++--
 6 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/bob/bio/gmm/algorithm/GMM.py b/bob/bio/gmm/algorithm/GMM.py
index a4a0450..6bc5b0e 100644
--- a/bob/bio/gmm/algorithm/GMM.py
+++ b/bob/bio/gmm/algorithm/GMM.py
@@ -7,6 +7,7 @@ import logging
 
 import numpy
 
+from dask.delayed import Delayed as DaskDelayed
 from dask_ml.cluster import KMeans as DistributedKMeans
 from sklearn.base import BaseEstimator
 from sklearn.base import TransformerMixin
@@ -16,6 +17,7 @@ import bob.io.base
 import bob.learn.em
 
 from bob.bio.base.algorithm import Algorithm
+from bob.bio.gmm.algorithm.utils import delayeds_to_xr_dataset
 from bob.bio.gmm.algorithm.utils import get_variances_and_weights_of_clusters
 
 logger = logging.getLogger(__name__)
@@ -152,7 +154,6 @@ class GMM(Algorithm):
 
         # Creates the machines (KMeans and GMM)
         logger.debug(" .... Creating machines")
-        # kmeans = bob.learn.em.KMeansMachine(self.number_of_gaussians, input_size)
         self.ubm = bob.learn.em.GMMMachine(self.number_of_gaussians, input_size)
 
         logger.info("  -> Training K-Means")
@@ -167,8 +168,8 @@ class GMM(Algorithm):
 
         # Initializes the GMM
         self.ubm.means = self.kmeans_trainer.cluster_centers_
-        self.ubm.variances = variances
-        self.ubm.weights = weights
+        self.ubm.variances = variances.compute()
+        self.ubm.weights = weights.compute()
         self.ubm.set_variance_thresholds(self.variance_threshold)
 
         # Trains the GMM
@@ -198,6 +199,11 @@ class GMM(Algorithm):
 
     def train_projector(self, train_features, projector_file):
         """Computes the Universal Background Model from the training ("world") data"""
+        logger.debug(f"Training projector with type {type(train_features)}")
+
+        if isinstance(train_features, DaskDelayed):
+            train_features = delayeds_to_xr_dataset(train_features)
+
         [self._check_feature(feature) for feature in train_features]
 
         logger.info(
diff --git a/bob/bio/gmm/algorithm/utils.py b/bob/bio/gmm/algorithm/utils.py
index 013733d..719849d 100644
--- a/bob/bio/gmm/algorithm/utils.py
+++ b/bob/bio/gmm/algorithm/utils.py
@@ -75,7 +75,4 @@ def get_variances_and_weights_of_clusters(
     means = means_sum / weights_count[:, None]
     variances = (variances_sum / weights_count[:, None]) - (means ** 2)
 
-    logger.debug(
-        f"get_variances_and_weights_of_clusters: var: {variances.compute()}, weights: {weights.compute()}"
-    )
     return variances, weights
diff --git a/bob/bio/gmm/test/data/gmm_model.hdf5 b/bob/bio/gmm/test/data/gmm_model.hdf5
index a57d494c0fc9112e582827d577ae4bf974d2e174..bdf68ad08c8be953bb6fb6d30375ed77957a7dc7 100644
GIT binary patch
delta 1980
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
AegFUf

delta 1981
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

diff --git a/bob/bio/gmm/test/data/gmm_projected.hdf5 b/bob/bio/gmm/test/data/gmm_projected.hdf5
index 31d930b955098e3ae990c1e2509d2c232d1a86be..c6fdffdeb711a0d32c32bbc44d9a525704122139 100644
GIT binary patch
delta 1719
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
O_vAl93gC(eqyPW}4C4y`

delta 1717
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
KO*Hv{Pyqmp{p36V

diff --git a/bob/bio/gmm/test/data/gmm_projector.hdf5 b/bob/bio/gmm/test/data/gmm_projector.hdf5
index 4c47be97a009e963d25301904a7420eced1b55e9..f40e38c5e81f7c3cc1a8fb8baeedeb28acf9c7ca 100644
GIT binary patch
delta 1980
zcmZ1xz9M`>4Kq6f0|NsyBg5p|tcolvYyKrnV(XY}z@os&FgcJ#oT-6*a~4Y$BUBX!
zlBxxa43ihKsWV+*oBT*~$7CxGwTas!>X|^sF)%RbLg_Da?oK#(?3Vo#rp#T}7B}yY
zca2d}zqiz$C%be<j?x+XCnv(fmxSEiKX2#0zYBOi?r+!-$Jw^-{Qknzp_Xh5-q~Nc
zr+tav@REI`wbJ9%H%INWpQQ$Ja9r5mz2}XtINQzrU%r=C?zne*ztta2pYvU>>i7Gz
zAD$|l{d)iU*uQgieqY<4A9Z*A*&na=f4jssZHDf{{dUjNETY&i+MB5ETU~MQioKs;
zUiM`6TlN|z5$ASZy=_06>z?9`ix=%HFK4-zv7X-Vw(s3H!SaLqvp#9hel%;7{l_WX
zXV=!A-@luCw@~=}$M)~t4_`Q>_ryL#DnVXpa{Z0{QU~5RtuDP{&!9cwFaM@n`*kLI
z%x|7|-~OJ-@2wUxo9z!9Hah9fKWr~Q{o;f0x0m)u+-Xs6usgc{vmE0-Ip$0IIi&X3
ziR9kf&!imj{1?{=`>IRwf7-v^*k4g`^igQ~Hv1Qs50z!tUEe<~`)J|v+GF+}Nt5KR
zemS^5(fd7<QoW44!`dBsuOCcSa9A+m+?i?n<sCNc-H=%kEAO!Q(yzbl3W^T?tm^R-
zAIUiwO=w_xUL)slOYThNMSBH@vgLfo74#Jxf^YlJ_|`1vpw{l`b2e7a;q&TOs$ZWd
zIIO?6U#0SsjKg%D!zZV2m2v3Vqx7EZl9a>7yNgTKhATK^vaa1$|1wg}Vea$K-->k<
z9q#(M9(`M&;Gi|lUw@H<f<x)YkY5c_N)9@kTW3_vkayS}AiQSZ5k-f}Me$lcUdTIG
z`Nkykn94i+_7Lg$U#{pNaN(82u2*sn;pv(?Rtd^GaJv<)v&vI&XbSz*sJ21T;oRBY
zvUXoZhiSV)xF&WeIwU;hONpomQFNH=^NH7zTfxEosq5E^;))KdTg3mxDJeRbuUo(!
z6{zSiyY9dip;SeOsB+)5y9=cq&MKL+O;=EGa1Yoa9%G{5z*5(K&-I&v!_hN0wLe8G
zI>evi>#CZd=&<0{V%sOZ@|*3sGa2ho255BOkx6rarS#_&$NiM%tlY21U+-Hq>(u_u
zZ-4*WYIkD4Xzg8plRJCu1MaRmz}R}q{!vbR=D&%z>?72#Cb&*Iv_E0q;oF>!Pxk+v
zvOoEB@|pbtg6flQ>2BLE>Sy#glwr&Mzq6)oH(PwxKJJQVnbXw+_BT(smnEHgSZ^=9
zvQE~W<+A<s|A)G|#m?Ht@h!9Fdw<*B=sTyo*3*mj$sgTsd=WWhFXqw{<DPh8|J$ag
zLHBvD?6+8S#U=9K>HU*tev*6FxqSb#Ecf*9vsTzIc1ippRleDN`pu<_&;QEVzb&dM
z$H!^Ay{WddLRtO-d$R@}@r39J`<F9^2`6o@-(fFr8~X3}oTK()TMd4&)E=-8mh@X+
zuw%#mk4EWFZe2TXFZm?t4^PDQ{r@}?d=m0E*)Kky;dfPek^Mbsk6G;tuiGn2bxzQ8
zzH7g2zOr!8w+;4R-xPF-N#C@$mD97=Ha%cJo&Wdm4*diB*G`sZERoy3-+<xkB*tkA
z_XnPymbbOuUBO{r$G-%Ae<g>{we=?$QWPDwPjs(dBc<q&bi-lml%)y|eBX-v{4^CD
zE<b$XJyBoYp=%!#>oNvKhZ#z(9mRd}4%Vdy8hwr_I9P?MyE^TbbI?_Nv)H*`(V@oF
z<Aay9f`iq;C+8&;<s2%4KXJ=XRd85%>imYgK?)AOVWlPY_R<OtQ|IJQ+c;OjAy53i
z&*#Gm4i~MApT5nPb%<EhSz9Hc;Gq7yc9YK<1qZ+ILxnjX6dbZr1%C!hD>$tD{@iPA
zgM!0d7ry+QTqTE~zd~t7&lDZ5-gfC}kCS&$KC$ZhgC0eP>+iy*c(W-v#DANS>iAsI
zA&@cc^O5Na4vVt1>x;Ou6dVE*pPTRJQFJ&o=cj(HtAc}zR1QPdEd_^5d#sWUOjU6B
z=D7Iq>|#X+30p5cr7jr<`=EpTYg6PMVoSE}yPzQN@bU_~&>UYy2T_%2DJoAD9ISHL
zCno<?aCmJRU!oGD=x}{$fMmT5B9R-Nx^(jQk{kBVX0eG$H?4haKXK!Z$q51qoCd;>
z0$*X{#_x=i1Ef<pKzwFK0glOgq!qvw%j5^r6BuVqekdeAd4muKlY-F1jdENLAY}{;
z3@gMZZj_rO%)wYO*-%)XQvoX6F?php{Nw=PJ5b{)IFXHOK(goo7rKnXWCv!U$x-Y^
zP`w^Jlkc#?odVJeQegv?4M50(YQO{mh0Ql4?l3_szKF@Yr6JYh<_FR`Oi(=sc+u@l
zVPu#rE3XdoZ^Pyj@+llp)f)Wx>^DHjZcfmg!^jT`0cJ)EFwMXqFu9vq5^gL2yR1I`

delta 1981
zcmZ1xz9M`>4Kq6<0|NsyW5VRytconNkF1NF#MUv{fJK2ZVR9ggIFkj(<}8*hMyRR`
zBvlI-6DBWYQ)l9kn7A=+vVu?wR87I;ZXt+ClQ#%8Om1M;sApn;09^>haDSVcxtQTX
zdyVu~6{htM?U%TpOx}}yZ-1*zMRk?ezWvW)_r~0}IJ)1Q<F6`T%Gv!<cjtXPp>t#Z
zQ!l5?wUU?ZwXPZczkF=s{%m%`SB%+r_Ls}8zn=MO&3<obHqBb4llHe(_^w>ea&CWP
z<VzV#rnB|-3GWv3v+mkr-z#<K)CJ);_TJOZ@>Sp6ZQm3ouy*I+$@}~CSptJ@UbEkr
zl3d5x|7ic$EK#$-q{sWk+Uxh3RNu2N4M|+CXmet}7Vn%Ezl<C9PY+hE)(|;i?|ib%
z{J{JN_RHpJ+E}U{vp;|5?7LMWkL>r}i~q$dddj|f@)mXNxAm*-Pe$9Vm?n3@K9~2I
z8Ds1j`zZl`FCM#bWB--yCoC&DX4(7Qsc2ePetf^+gPyqRwb%Bq+a=)K@!+hz%TkpU
z4}-e)x833Stv~tH{vhR<)<;&JvlmI)s#ey#ZGZdCTJP)Y7uYX3vTgI{&IkKvGk3GU
zO+B#RX}(684BM^!bFKU>4D0tOIH=CupJ*~c(Lr(UDIFOdMTbSfNjH|>QgA5QXKAxC
zTG2s=Yu`HOcm;=}zuxB@ca?Lv8FVe_(@8~#{{jwX4AT`HY*H!;u7)c(2rXnXP(38;
za3R`CV6Co#!}6Uw9!;7p=Mdx+AzxCh;P7Hj!+alg1&8)<qmQa7vJNg^<`ma=ELCv0
z8S!zI|91t4*<nxD^E1dh$Q*mxYkf!7!R%y576YfE!~U01GcM&QID9PI^v%~=$w8^7
z>=}2JyaVfRBkzwM@($c$?aOZ5RCM5Z8>yZ6N6{hUa>yD1CwYgN8H*xj`pG+NId(8l
ztya;2L+a0rZ@U#8J~kcyxi(SJLF$HAiihrB1&8tmeVua>iVkJ07Z+%LS8zB~`eo+V
zBZ>|iXX);nw@%SPGMx3Z`Uypc!yJv})fZ$PJnp?Ob!Jv@urQ2wk!MhFSivv&Gm2Tk
z;nb%oOrIYqI3!MEGyR{V;1C=je!_}far1qyOvd^WPumk4Ez=xeDSc1rmb_g_XY6YQ
z4&G0G{9=E2=l*HCJuldwn#0Q(GxwIg5YK{dIic(A5C58{6ufNfe$(qOmTqoN*zYO3
zB;0e}mHnbxdo15)FWO($Gu=Hk=Z^h%qxYI;mCx=^Q;|G9<@m|{cXIPS?*6mNKJ?|5
zw>Qrnt>3TtRE&L{`StyIzti28=DphgduF-W43*RS&)HpLpX0G|fB2;LS6(ciZ!fSh
zwQe%sBm2n2v#0q5AK0gzXiUD}ePe&p_7kPMT(8<+U)FBIT7P%{*@%Fsb^0gvXV2zO
zF*drhf3}OQrOAwQ`{g8LgVfs>?SJ90p*(Q?1^cy;Yd2`juRpVYMx%PEFUKkS{w+I9
z<Jzz9kDF)Kqw(;u{k94IJ6{W5wYO32QJ?wzn7zZH#cyY{p0uC1RBZZ@sLT6zX7w@_
zNSwESepW;B!J!-W|N4%%taGT^zisE^RQ+Wa?C<<7c<XrOxPAAw)Bk%fthawS>vmFh
z(;@rSF}J!-m7TNSr<wX+wf?i51B1(trM(;q4z@3jJYV)l-a+6%+F~sx1&4x|(~WmG
zC^%G>|8lg=QFQ28EmsijD(}#8)juL|nWDqaaD^QrQt}R$S-50(u9I_c^wR3!Optfz
zdRh48*hD3Vj%A{sJh#g`L`X|A-J2`x@TjJ6XP&pb!zvdoDTV!V4sP2%ZK^NuQ*bz<
zeTnyOfTDxyMZN@vg^CV4W3I;8ddNB~s(SG=@}Inet@h^d)|>JUMu!CQzG^EtZ05YZ
zq%>FFA#ulV`$gRf4r`uTEY^utbYL?1opbQEyu$(ZmOGx>@(wwt1XXrDQgVn=lj!Nn
zQgXQdvEa;wg^CW`@9h6M*D5%OELvLs=-4rN2m9?pE7uz+IK&!DbI#OIa9Gqh{dp9d
zg2Q=_xxZz%$vfP3JLj90qv#Oru<Vn~BxwiEp3=+5BIO<O_@Ans6jpG^xwT$@y`7T7
z^X>|+(q9S=vDxiR;cpck3jYgBSV<^2L>=C0cu)<I$iK1+>b(@ZZ_iT0_C2G!<bnOf
zjXNd@C~!6iLCSlDjT^r+PBsu0V0<z8p|Jeq1Yr&)4fcr}<v1N63K)J&b`+MMyg`_Q
z>4fmajdENHQ1Kfg6E{u+)h!&5TIvSp<Q^dfa5V+4Toi;-pfV2J=rRhE9hikCuM#nW
zs#w7@`3@_JUXThKsO$!W?B)bb3&u$T3Y%|8++l)B@8E$Ozxjc*4op~q4=xOI4<qAb
tS$TE16E~lbPvL+X(!r0<1rrdmn-etWF!DpZJcAz+76OyInI+-I0s!lkIWhnM

diff --git a/bob/bio/gmm/test/test_algorithms.py b/bob/bio/gmm/test/test_algorithms.py
index 7cb0bb5..cdbbd68 100644
--- a/bob/bio/gmm/test/test_algorithms.py
+++ b/bob/bio/gmm/test/test_algorithms.py
@@ -143,7 +143,7 @@ def test_gmm():
     probe = gmm1.read_feature(
         pkg_resources.resource_filename("bob.bio.gmm.test", "data/gmm_projected.hdf5")
     )
-    reference_score = -0.01676570
+    reference_score = -0.06732984
     assert (
         abs(gmm1.score(model, probe) - reference_score) < 1e-5
     ), "The scores differ: %3.8f, %3.8f" % (gmm1.score(model, probe), reference_score)
@@ -214,7 +214,7 @@ def test_gmm_regular():
     probe = utils.random_array((20, 45), -5.0, 5.0, seed=84)
 
     # compare model with probe
-    reference_score = -0.40840148
+    reference_score = -0.48658502
     assert (
         abs(gmm1.score(model, probe) - reference_score) < 1e-5
     ), "The scores differ: %3.8f, %3.8f" % (gmm1.score(model, probe), reference_score)
-- 
GitLab