From 7cfb91ad23e3c87d2ba5438eff296c1dafca5778 Mon Sep 17 00:00:00 2001
From: SebastianBruijns <>
Date: Mon, 21 Aug 2023 13:04:35 +0200
Subject: [PATCH] testing code

---
 .../testing/dynglm_optimisation_test.py       |  49 ++++++++++++++++++
 pybasicbayes/testing/test_data                | Bin 0 -> 224742 bytes
 pybasicbayes/testing/truth                    | Bin 0 -> 2284 bytes
 3 files changed, 49 insertions(+)
 create mode 100644 pybasicbayes/testing/dynglm_optimisation_test.py
 create mode 100644 pybasicbayes/testing/test_data
 create mode 100644 pybasicbayes/testing/truth

diff --git a/pybasicbayes/testing/dynglm_optimisation_test.py b/pybasicbayes/testing/dynglm_optimisation_test.py
new file mode 100644
index 0000000..85c267f
--- /dev/null
+++ b/pybasicbayes/testing/dynglm_optimisation_test.py
@@ -0,0 +1,49 @@
+"""
+Need to find out whether loglikelihood is computed correctly.
+
+Or whether a bug here allows states to invade each other more easily.
+We'll test this by comparing to pymc results.
+"""
+import numpy as np
+from dynamic_glm import Dynamic_GLM
+import pickle
+import matplotlib.pyplot as plt
+
+# Testing of Dynamic_GLM implementation
+np.set_printoptions(suppress=True)
+
+seed = np.random.randint(10000)  # 215
+print(seed)
+seed = 5489
+np.random.seed(seed)
+
+
+T = 16
+n_inputs = 3
+step_size = 0.2
+Q = np.tile(np.eye(n_inputs), (T, 1, 1))
+test = Dynamic_GLM(n_inputs=n_inputs, T=T, P_0=4 * np.eye(n_inputs), Q=Q * step_size, prior_mean=np.zeros(n_inputs))
+w = np.zeros(n_inputs)
+
+test_points = [0]
+predictors = []
+a, b = np.zeros(1000), np.zeros(1000)
+a[250:500] = 1
+a[750:1000] = 1
+b[500:] = 1
+for _ in range(T):
+    if _ in [0, 1, 8, 9, 10, 11, 12, 14, 15]:
+        predictors.append(np.empty((0, n_inputs)))
+        continue
+    t = 1000
+    pred = np.empty((t, n_inputs))
+    pred[:, 0] = a
+    pred[:, 1] = b
+    pred[:, 2] = 1
+    predictors.append(pred)
+sample = test.rvs(predictors, list(range(T)))
+pickle.dump(sample, open('test_data', 'wb'))
+pickle.dump(test, open('truth', 'wb'))
+
+plt.plot(test.weights)
+plt.show()
diff --git a/pybasicbayes/testing/test_data b/pybasicbayes/testing/test_data
new file mode 100644
index 0000000000000000000000000000000000000000..0c79466950726e3dd85a57038135ee98cfc63ff4
GIT binary patch
literal 224742
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%0DOnLRb
z)gg~O@|b+h(>Wg1Ve&Ok=Xg|y$=5uc<53;*$Rm$DCSUV(jz@LKBab}t$Rm$D^2j5P
zJo1=)&C@v^)gg~O^2j5PJo3mRk31${^K>rxwe_hFkNP5yJo3n6@-<KAcvOeU*F2p|
z{?_W#JCd*O^IfSPXXUl8Z}%dPJo3mRkIC0Oo#Rm*^2j5PJo3mRk390oBab}t$Rm$D
zCSUV(F8NyTyHY)-yn5g2kVhVQOnz;i`tYbPCSUV(jz@Kve9hB29@Qa_Jo3n6@-<KA
zlCSl?E7jv(^E#Jrb0d#D^2j5P$=5ucOMY#A>XZE1{?1qGk14O-cdEN|p6*G$-k;9#
zs1AALG5MOOb3Cd;9(m-EM;>`h{@Qt(Bl$XCI>)0r<dH`nc}%|M=^T&hkVhVQ<T3f0
zr*p|)yFSgqqq#8owR!5pqrS)^kIC0OolAaged@!bzQ`kw$*;{*A0G8Z9(hc@=ILDW
zYwJ^=<ZFN5mFh9&)%#Y5Jo3mRk390oBab}t$Rm$D^2lTIHBaYwRENp0%~Ky9^+g_e
zOupvn9FOWS`I@J5$?vV+JeB6hd(G>+e0w+Y$Rm$D@|gUk^K?)0_5O5@M|H>}kIApi
zQy(7nMIL$Nk;mlM=BW>l`XY}!^2j5PJo3n6@-<KAcvOcx^2j5PJo1?Q+FTz@^(p7E
z*7I2N?pqyp=l7PI8}~NfG0(DrNBw=g8`u6lsKd4Odq3}8c<p)Ji`TxtyU$!$&+}OG
z?pqyp=hx=?;<fA7-glf|Ht@c`mvgvwf9h~;{oc=e7uI=stofsV+Y3JWKI;4J1#8}Y
ztHbX6rE~Y<rTcgN+>71$BVRUft$n!%uf2cw;&K1F-{0Qw+WVV*pLgNx`_}e17p|@E
z&g+Za`I@W4wRt^%>2Gu4rTfqBXKtK*-_d{BfPGh9dOuzNF2D3Vx7P2`_p|r+kIpw*
ze`|lwb>7+UzxDogUwixR_S@y7?-}hsTHnn-yMK3omv{4ZdDnk-K04oMz4u}5=lk4T
z9qNZX@|7v)vDW#%)!f|ZJ(WkkY@qJNciIn+&R1@gyBF(RzK?v_fPJ97Adfuq$Rm$D
z^2j4!xmE67taJIEmFtV{t4ukMwa$0Sd33(=R&#S>eV6YeUp8PLm1#db);iyN&CP}8
zt=uYiFV?wypPQ>g{g6k#GUYthI^U0)dpFug<*Zy^O!uCf>o=>u>)++(Lgy=weAz(V
zi|=#yqYm|}JU3T|sc*`iPdSgySEiiDRF`t+&&}1LewBO8&4qPt-zn$O`O0&1by)lQ
zKJsM)_ECB4XP^7=yI}p@e5ag8=PQqV*+AWk@2&RZUNjH#$XCwF^~HLx?;~F}U>|5N
z$Rm$@Wy*Q1b-r&kH#d4uWy*O>bt!j#uerI<yvQSuJo1%CzHA`vWvl(T7mxYg{hjOu
z>wbKvoJZ#?NAudx_h{eIdUGU>_Mcs!=6+v4d%mv!`_7rpb^W)_)7<>l^Nrr`9f@84
zRL6JqTj%DS#qNEh_jdhf=eIup=zhBQ&+b3_{?YmOUf=Dn%WwUCd!K*r^L2k8UB31E
zM(6A5NAtb!XZHKL{-gVu-G6kxTdyD8@7DEu-+#BC(Y$+q*MINzqw|fvfAs#Yes(_l
z{iE}D^L6>?{ae@X{e83N>-u;3@%t?sNPFt`lj<(zyZgJmn`3r;*T2h0=ij=2cmLM;
z=zd4*w|@WV{oVUV^U?Wc*N?uhs~??zcK^}&M(ao4*VT9V==`Jgv*+vkpZ@)u(|>sR
zm(suS{4b^d$EVYOdimGX|MRE+n)-ivIrG!cXa4Kc>1STf{I^ffeDho1`O^Ofzaq^0

literal 0
HcmV?d00001

diff --git a/pybasicbayes/testing/truth b/pybasicbayes/testing/truth
new file mode 100644
index 0000000000000000000000000000000000000000..65de7816b3e0374a51ec2315b4f3698f4afd7f38
GIT binary patch
literal 2284
zcma)7ZA@Eb6u#va%I@4&X4f&8pKPNHS2l$W9rHz5pn9cZhqZ~>n%=h1yU|Ned+TT%
z1`{`6h95HqkeJ8}KNfNN$GG`LZ_K7R=0IXIGp9kAXy#C=j6gQTx25lmx!JP&{^)tm
z`#k44r}xKsTWEJ6!ns1cn{!3HA+v`Mi9wzVi+rPivxwmG^KNH-gP+-*!d1^yGe8x*
z3Yum}GdVITiV~c>5D1GQpjq0X!56ilW%Z6_80`=H0}Z^N7a<*UG`?waZiNiDfbSz_
zcVp0N_J<op-W3eGB8)TWb>qHbFzgl?&@HJL!L!6dCQBWLWfd9@m{wSBgS$+uhNTa~
zij>eJMgm?2RyxvfpSn_5)!x<$dK+Y!QgfBTYOB@y^ddgVAC?l~Zmzu|8|!a*z#zgJ
zE;)A%p4;ft`I1Ad_2CJ!ZLlsm0ZSi&9A8#@g=NV^Uw%t7`SQ*@<chGKOMc7e;2zTT
z-bB~?Y;b>~tDePQyA>Y5eV=U6QdG}diSrGTyC{HKUad}HFQ=rQM43<kwY*xL!d^~E
zJ&7`*0BU))I)%NQl6n$lLIKqBYIO>GIVJTZ%7g-_<<;sG_Hs(<Nt6i%P|K^;DeUEx
z)RQO^3ZRx(t5ev^DXAw>CKNy|uU4n9ms3&?4~me-IaXpK5aOL4zOK$0a=qjY!G^uC
z(ZS$*p^*=Hoqn%NfK6nl<tKKU$p!_fUA{T7M{mE63q^Q{OFlZh$18}u7=bOs%ABw&
zvcXn)DR2AVQl7r;W?cF!cjn<?5gy?jI;=nF<?DU;!7C=cOA@`e+h9j(H6MY}<YLCJ
zVVZHz#NfbOG~M1=bgFU;?cGvnsPFm>^&e`ke61%<$_sz}`2}hWeVd+rgVRr=q5S68
zpVDcin<bx|ePZwmIwwq3dq%FK+=a^L&mYrDMg3vn#Lr_WwvXBAYMMnm`WCgnbWqal
z{NP_VG}q8)3vXJ_UXG(u)3fKgKc0<#SFkImXY>-HCoXI(skx43M#6ozga1Y?e{@y#
zPEDcNK+X%VoWF$r++XlP7EMcE8e-*Nte!z#j~m*ux+c*cw)~Bog|x)J7n^*!^9mX{
zZkJv>GmlO##4{!@r%N-%t9Ezz<7oJYpIY8OzKH%=!BlN;O_R#rIaO!eIgV<sE(~QJ
zokQ=|7M>pem6A?e477c?c^ozIcK2FC9MzN@sO`6Cq}-3@*9^ZsiHe8f`>u`th?XB3
zuvlR+Y7gagyMr+#=GzB0tiOsnXZq%-)A4Bju8h9ljTh0Uy~a^p_4g<?(Q$0u$?53d
by**{@wlj!2F#MHeQ#XP~MR<%0bLRg5NxMx2

literal 0
HcmV?d00001

-- 
GitLab