From 3bc0d8d0ca25f3880cde90c475740c7b8f785556 Mon Sep 17 00:00:00 2001 From: vilim Date: Sun, 14 Nov 2021 21:23:07 +0100 Subject: [PATCH 1/2] regenerate & fix tests --- bouter/tests/_create_assets.py | 35 +++++++++++++ .../test_extracted_bouts.h5 | Bin 81688 -> 142840 bytes bouter/tests/test_free.py | 49 ++++++------------ 3 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 bouter/tests/_create_assets.py diff --git a/bouter/tests/_create_assets.py b/bouter/tests/_create_assets.py new file mode 100644 index 0000000..97bff9c --- /dev/null +++ b/bouter/tests/_create_assets.py @@ -0,0 +1,35 @@ +""" +Rerun this file if the logic of freely-swimming experiments changes +""" + +import flammkuchen as fl + +from bouter import free +from bouter.tests import ASSETS_PATH + + +def create_assets(): + source_dataset_path = ASSETS_PATH / "freely_swimming_dataset" + experiment = free.FreelySwimmingExperiment(source_dataset_path) + + bouts, continuity = experiment.get_bouts() + velocities_df = experiment.compute_velocity() + + velocities = velocities_df[["vel_f{}".format(i_fish) for i_fish in range(experiment.n_fish)]] + + bouts_summary = experiment.get_bout_properties() + + # Load computed velocities + fl.save( + source_dataset_path / "test_extracted_bouts.h5", + dict( + bouts_summary=bouts_summary, + bouts=bouts, + continuity=continuity, + velocities=velocities, + ), + ) + + +if __name__ == "__main__": + create_assets() diff --git a/bouter/tests/assets/freely_swimming_dataset/test_extracted_bouts.h5 b/bouter/tests/assets/freely_swimming_dataset/test_extracted_bouts.h5 index 3163edfeae799c4e6bc6ae7b07db6498a4f21254..537c78bc663cdb1b8f03619aff1e0cacf4905373 100644 GIT binary patch delta 56623 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 delta 18293 zcmZs@2T&DF&^AiWh-45^5J5mBDj*^~iUMLnkRXTzktjJSDhJ7ub4GGTas~+!m7J5H zZx6YCfySZi6^nwsiZy)7ifzl$53c!?ocn?O9coBVu!?J#b5 zKr1eDa0U?sBVH~|0vsmnrT=rZu>31={}niE=Km^d|H%dale1mzg`5N=8q3nBaaBI zjpxMC<&2w$n^b0r8=Oh)M2CZmJ^s%vaB=bQ zjI{KPtPR6ux^NGIJ?Ra@)4Op`2Qdia2b{$TU+%^||9?7Am?xx-8(hYS!sF+0oyiP^ z{`JsPDmaFW>7R!7Sx($=(?wi^|3;DW{~1N0;5iFi($iM|u1yaX;yjOc`fTtbJ6G@< zPVsQ5}+p5^sKK^2LyIZmE^rB1=B66J0(h=A^dN`_aVt7kh>Uwmq7Csh%V`h zN~mT4S+nQ_y9VYPBr_cvKBoQzuagC5EvVxmPQEHBW%wH$=spW7+RKNlvHnW^q-kKq z!1(dm^G@IjJH4p)kIRkzthR^>&5T^BgQxfdOLZ#n3ai9?Sm9arv7%IwPDH% zBWMSc>+*bgms!xG683ACvhpCZkXOJ&)dkvoCAH`}gwe#^Pt9MYec|YXz=T#$G<05F zdPE&9gw}iQN65Yu!6$K9?|xr%z#05IZj*HtO*ajzjCd3QlddFx$8a$~-xnWD>7%=- zj<7Ox`M45tYxlU+vipHs_2Q8`%`K!@+j>VbuNX88z6Q=uX26BZS47vjj4J8LZ;yAoN+F$a%gLA)hZkWv$m*;gqQ#{`>hSNIlk! zW&DE_a=vr{^+OOiPG+9P<<~_YrTXJL*W^*L>~>pDcM$l=oN^T?@I)K+Ct>DncM>IiJZzd?l&U0T7;8w8jL zIg-SrV~{#`k719h7ibq(@vq|9qS@jg+s|QppgG@%zjCSqB7=u^j?SB)XTH0C2EMO@ zgZ=|=`PFE!%Wz*55imq4vv1VYnKxm3>DKjamUbX)+gpCEV2R{a&$4j_PlE$P&eeNz zg}`#1CVYqg4I<+nF1|6m4j5buYXJtQIyk>#nrE`;iGVmomgww0+`jQhyU(l{Iv>b{ z__H{p3`wC(`NcJu-L#veJ6{h%1SNBSSFMpcV_oRq%t^?g*7Dj(YXN;3A#!IaGZgXY z>T*2&FvMWW?B>m>|qxgJy7Em2rP)hP{N?j?Blk zFw#d|8^mISo~3XcOuik4k6$)D>06rNecfgTHIoiXSN)V7SlI>9wO{H>*5e`YlR)gE zHs&c}mDlTWi|7Ud8Ii?$+%)*utj%{V_W^oc(k=OkZ3bx1vTUN{7%1jDy}ISCi1uuR zBdX7L07!KPeiico-6GL={>g_(Pey<(>2){cU7gvo_RoNOM^(Jz#COnTiy*q~Z^Iy0 zoWI0vmI&r9Yi(6bQm8;ih*1$UI|6j~f-e17%!FXGp_`$aHxOg#Z4n}--;g0m&83tY z0w)*cUYUp>w8qlXDbYC#)C?b-{JlSbXRufQc@7CQ#d(zDX;}%E=Z0uSx75KWVS_OI z=2c`Yf5%&oCJI={iF#XB5`op~^xB@!6*PS*K>tTr32?wn zRDB62tj~kEZpkYXP8^6QJbh27pbivpem}I^@`N*Ct86v_?5JG#P|!az6B^lWwgnve z!q*9YOo9eI8+szap^8tH1Q`p(BUjt<;A~?`?xq+Mx^-xB^~>c+;FCSeP?DPkrTU?t z`EdErN-sapitY$x4`eK?hE+fxL5HsT1Sbmk>e;x$SO&N~7N0gw2LVTwfKs#c1++r4 z;Ay4P0jjmo%q!6dmL7Ku@aP%P3u{cfP@`rvoUw@+R#Qob*%Eo``joRM{K(c{`{@9v z#NP{3$c+cXFP@Jc{JDgr4KkU2t$c?!A(B4f0Y$JsBYCw<3VY+$o7~Q$4Pa*=N7WFM z3rC|L*lD%dP)f!F1HzC#&^);^GZ>QqtXsi(&;1w><(gYvzlsmM#)RRMNm?X8zg%&0 zH3Jh0Dltfre_aA~Qhtn2yPQBLc|coG_dH5;*dcr}Q3sU<4lxJ*USNIop`ea98+xTu zX4}l200cK*ojKJN2wb*!<^@M|Xo~QnGi62`95#GQ=zL-g-b_LH$-k(Pg|`Y}#-}t; zJsgiLBMbwKqZ=1pa~e4kzD^j%C6onc95+@woZR5h#cb;7;3>5Iis`wTbQ*~6J^M}< zl?cY1-G%9wn9)Yy*cp$m8t~!YGgiQaL*MX1HI2%7v~Yb9_liskK+NG=R`(oe=?$Yj zv^|Y7H$t8%nA-tS+BLQmscg7;u{YJ{~52(+i!OB4w&7)Xa^k(8jEADODG7ev-M_rtz6($7Q!)05 z-aat1z8wV1c zrjPZ}&uSOy(JUNfRTS_0_+BGK8`^lyiCUqwwg?*sha;3`V7Uc9TtZ-aVLVu_KBvU<8MjIG)o=?O3@O7?jFU(XK zwWsk_?c_c}On*!KU-12fBhJ^GOR~Bc6qRE;L&>XzdT3gMGLp7nJZx`6iR%T*{VHNj zW$*w|E=v3~9b5;JH9SA5Xhrn?sdA|));Z12EJ#^p-i5#7BIVr4kI?)9C`EA~^gZfQ zo&6Xd67yf13aykzoI!FYJ2>Kq=LhcXYr}ux;$0(U8=~t-ER!_c^c98|5gvFo`cEta z`DcZ%kFZvaDCv3jI~R6j^)5mAA^9xir}ikr^3| zj}zt$iW8HOmdCgqgQV^lKVBIFa*M21n7+h_?iFgVy`|rRXCaai)B?1q_>WhD%@h^l zn-eZG;a!6FCbMx9L(B*bd>rz8$$;>DdlHEL&ci8=*MFBLC{cpuOQ)PJaumr@CC6Md z34ZCG#a;y@sOA2bSLvE0sNFpCZUTKLbjMtc!swkpjlMKQ$URuVNA8@%-$8=-7V^hp8F~EZe8ZjqWU^)??hyk+mRwd zFAp!$41C03A?p*vvJMjimt|!Gagq34^;ZEY$8aqBE%U+6YH)1cb33!R2idQ-F;v%Z z_Tc()=FH3AEAVPicD_WM1huUwWjzzcN9K{_KBdg~XzKofPV0?*2)QuwjkB8+k(ejP`B_b^WN`|l&*>9y}zuiJ$K;$beuD+?g3PDwX;{s7XgBKFVs#KHYE zk2fili-3uHGgQNhb?r`LKKaM)EkSls)jK#^22twk93HTseTkjS=rUa5b4uGHn1v4^S{3?2Qy@diJ&ilN z4R;rQRh(y?gt)Z+>ILpei0tU>eY3U*_*atzT1Y1#9;5m(M&1H`fVZ!=>QOQe){?OgSGcEOIqKW~^x$u3#_yWrn4g3%R6Y&Pf+KLp)R)RCXc{nE zo98BXU><@Wc=j~n^nxA*sbJgNZIFpllcAE^gz8Y9dEV1=fQ}nxoP&SER;NlM)!z+HfO#Ps2k!8F)q7hq~e)ew2!;pFn%U&L%8zY`TS zlhz46#?mdr`OgsX>6=>*mS*6Y>ruCI-V7Mcw5b!XVD!+d6`PjPr7gi3$wCv2Zm<*^+cM?r23@*3yqlUjh`*kySX<~1IL}n*9x)9DX<8~0X+O6nl1THY$%<`q&EUhvYb>;)ZskA3Mo;}9V|DW*sF8Z{8Q9el?a&92A*Tk_p05OpRJEq1a;t)JNl^TOUj!NC}J z!0lmB{i(w)e%2g)nPAGUbk7FO6j_DW-UBdNbks2M#0nKG-iez!GXf*phVJC&eqbNL zA?>?Pd$gLO$nCS%3|LHM2E(0S4s7oRa_|}~P?E^U)wIceP(A&`)i$XSig)j56umJ* zH?=Pk6o*&9=SM|dMl%Dj^qZiBH{B7b@X^52-Z^+qyfd|w8VueS2RMt>KOkPb_@l2i zBTyS6QKZ7t47Cb@=MJ|W5p%aBp_5D<$Wc;l|03%GwfFRxv_+;jD3*v<+Tbt>7#wt_ z#7w>5W?SjbjdDvw-xZR{^5!q_ubxjoBa>njCuAs6JPDhzB4MNk%XeBV}q6&i3NVDHK=0SsYdICr`?LK4Jg zN_0LZD58b(k@wpS*#FA;$An!1xs(ap@2zSfA*(mfR;8+;#{?x&J-mu6nVgj3|2{?W zr7gHqllc&FmuyyZS_tWCZxcGGDWFv8hFrDrMo`vnL7oGbkfc!43fYz_n!vfkWKUTH zgjc0ayY7i#5Wf~%x-P9E68bWwH%}e~NiH92wzWl&=b1ZMl~Z?6sgLrtbH#Ze@iy2y z>E0F8JNo1Fea>r$14ZG=c$NcEMbkjH7#BL)W>(wN5=FC*LWBR7=fJ@Tt3}HL>>{e2|*E(-G3i(p}aiW!(2QL zwDRz03N?2<==U6)h-k2*U;R2vALq}Y{6X(K3wv%rQ}ET5Zu>mK1W-t)>#!h}!V$Id z^AYfkPqOr`$yrp1zdW3Gz=;9}d39)1>p?lH{>s%<9>g@za+MCdN{-3xkJ!aL>IJ%$ zQ}c(joM`5AJ0~qM1F|0&yZ^qv5(4$qXK`G4Q3<=?s%q6~biQI*@|AHKOrBpdDZ0Rg z@(H&6ZcehGJwZ~81a1t#9S+fVB5Whq$tB2zykQ$0%I?!>FZq$ENfsR{;mnM? z(b@zSXNm(CJlGK{`F9^XQ);v>86Fh;(+GG?K5(?DFrr-r`YO+MA{6m;oQ^}s0k-nk z@P0jKKn_k9wJg-}(1A}%I>sRx#48dXvhXmX?zj$&?t~>ZiX;d<<*(!oaaL+J;7^aL zr*NXg^(nB=ddt^EvIWAUw$$G#(xS(yp$rwqL@2)e{rS(9HGqFXfcaS~63<0(4CNieuoGmVRu^~%PZqGRB5G{*y>IuevswMtc+x&h}(dYJ?-+W}Rn z2C;7t4l3~~ujf(QgrB|yo$aGvz}>0ep(6GKj(pTiniVL}?s@D!hrAwQAPSEJT#iNW_>zs9{j#o&5dw|Kwq81kJMLt@ZpQ6p_4r!noALK zRdy?a?e5ESYOBO3)GIT{wsZ&n95R|!M5IE_@G|q2Wdei|_uYB7 zm$6HVErHu`LzpqPi8=%1`%lUyy7ytDj!*fQ?;oIk$$G0}h!!3^cX4@NxB)&BdbaKz zI~drpy_)sS&m5RvmHBBB;h-*2+Y95@_Mvg}S_-axCB$}H_dgNX0Txy9C-!n{K%KDr zGc*gR39*Twpb7hA3=+D(9bb?LVdD=hrpX=3&jQ#%c6IQdz=y*sdWy5WW- zMH+~WIBP84+=aUmgObstbCAA25-3p<2{Q6a%zyokVJnfmSif`v4!L-&mqYR)KABm) zj%Wu$N(jAcsg_{)v|~4^djvSpq)m46tV2Kx5Bcg^2Sf`$aPzTh0ydHz8UADf#713l zf@zML#m?Qj@<#{mFvUYcYuvpJ?-+UouJRAVtTorUiyL7;-`zKHu>J>lr(Uf&F3rJB zG5P3Aw}L_3=x|wKVFhf7)d#cVj^SRcl*2h8Z@5}}WsN{_2mG_^k}Eiez(vgaOmWr^ zAQ8T6Bm8j>E`^pPUm6+&8jd|o#!c^X;J(vmSVp%AROEV|R@%exUhk=9Hgz7nQ%mcS zo0^I@mIwYhP? zr8g9%n7j=an)VxC`Ec$z%3q}n*|GL%Rk9N!(hCMSNJnf2#T*)A163& z!W<@WVZ3$bH!w{wc1)$K!jbQjq?+%Opi{N@1{jyYEC2bsG{=6}`^0d>m#_ubzxVR#Iu%5LFe91AvpgY|kek-?^kUTpM0|?PnGFy{jBEq^FED|S zu}s_f#&8oGPK(0Jxpp4~G)Q!-pML{p_XS>G`8ElOpB!*cX}&-jJjJV3t3Hs3(=Q(P zVHt>q#t(j8d4YVic5ny^3P8F@)+gI|7k<}B%=VOPptAx~c_+PA7+7-_J)hh<3q}X* zNCTK>>Q3pZ+{v$yQvd+J{BB;$8bFEagft=bAD z7gF36!HXQ)a`P2KU9v9I~_*D7cKrgU&S^ zc4LCiq&HyZAwHJ)&9}2pQ9!PgZMu~q7#o>Vz0;b8mX7%Ci>9iGaz?XSW7!JwZ|8;e zQH+DsQT3Q&raEe$*(SD#%7QC~$4ZD}2>Qg01V%&k5cAI=4XJ=MxK+$(%|NjL`uJ}9 z#G;xg+{(FL%)|pC{d@1Hr|rS*mInmv7+*zX8tz@8FKh)yk#?Ffltb`IRZr=jfIOlJ zPYaFUsRt1YE@5}~DPVOG7dv<6A^K#bK5WwE1x(hmd-z04fZwI%8A^T!&0LEK{88Tk zajhq^){B!cj5qMy&ru9ToZHDC4$T8k9w|Bb@O=Eg72C3m^uY?{609bU=hAm#0MV1gaFLeetz;&;|cP8y=HDz!SSsbK&_ik`+yyJfM|!Ooc%A5I2E_F;ES&UZYf?K|PNuKbjjU zfX_QzfeuM*#3cJ~`yH%#rCOE5%K`pJX@H3Hqmh;S{x;M&D@K2-rOgz^-w^wQFb+nzcGOya`UD z#t$_G##}_$kw$O%M=b&2pq02{HyO(Q+Tr(5)CO|Tc6mqauR)}1?*RpN3Vw*u-eZ!< zF$4TL>%r!k7d8JHajUq~MP0kefNiTYKkOaFREC%vCrF>C*k; z9IUf&;-(rU^ve~7RtkjJNjqS5!l`yxW)~JN$_T!t&w!!l>FL?@W&yaI z`FnF`6oG7dQ_kXW07T-1p7rZZLX4{6*q8gxP&33Gkf?}-X6A{j2pMMK+TzIN(%)8~ zDwrPLkkkaBX7_xyu%TPyi9^VlKPEoqYsh7==Krk*RwuQs~|bu_Gy#Oe=Y? zx9HAG!rBQ_#R7)n^1bkR^V%uZ5nrIUu(@9mi;a}Z5sgq^8U@sy|7r4e0tC7`n0sC8 zf}XI0vSln9MlEiHS?qlS{N&O}Au2;)CE*t<)ieuXmRr1?o*7W+b5f95R|3_v>6oti zm3F9NuL&X{NCVvu=c@^%n<4+BuCBsh1>7Ee(KIRe8iI@sx7Ul@AvnLQD$4OYtYww1 zTp){qyR+KY+RO%EUCaH$j`B3%c-Zkt=_G+!O?29G@9*H*>1%b=IRwdk1d#$%Wk7K% z*j3SQ3MQXT&FnOe08TR|;jG@oJ2Fn60G61ziSV0;bFw&6EeDlCOo zsoTQlz_`KZ;8Ji)y7Fo(Vg+4k=OYz|-ytupP;3+%l5GhS7YePe1!txjj+_VG zkW}Y#+v%|{@H>Y+_5Tq9j+YF7Me+=Rd`lMZwzmy5k15C*e(V7x1XJ*M;xtJW<_{x^(OQrGhFTEX=wsXj1|# zQdcxmUi3pp+(=+6Nd-Kx7~WYh`2=EXMA9^}CD7biIun~=`e<~l#-lT51|5r z*`DJvP-7YRj_&d|7+AlThuI!!fMc4sX+_D{p7yyK%^5U<7|-u&g}r)kQ>O;^Xg^?D zo^~I1Y6EJjLiu^^I%t)m=UtY(2l~9gto@`IPXE#&G5ymFESkU5hr=!5DIx#a9;RU^ zdL?#8{v;K+Mc)P)XX-#B%gqM%UMw$Y`qS^4pS7^4mW@gI8IlcldK9h9oIS7v*Lbxu z%YoN}mx}vpAmk8|H+(&600)&9nanB`K(D~o^jk3m3L2xbTQ1f?z(9&c)Nlbj#k0q+ zH*p2RE{ZuE+(J0Vm5Gi;(_xZy?C|w16CfaO+$hzqg%x8NwaN!I@bzPgb;?5>U=YS6 zb%xyOg3NNv;xU%VT`t6d{93CqHl=&vW01E#RFI`&&0#A1dp%l7$DfYbcIud@Lj z-SB>0UF8O0?az6-dd6WEQz3ZcVpln+Or8^b=;jLIY>aj-sudvF*7xvCa2*V$I@i3F zb%iI-PYHOv>4s7*@pG#O1t6reB6nFV2fn9YRLx@jQ{#;6+rX8kLM z`Q9mzwlXQ;V_XgzIv*+Xcb@@Ewt?l}d+87$It5passPg||3Pka&>l*Dg%>B4QR+S@x zgx@ipsy7gD>@&U%-D?4D(gR(Er};oZ=lDuxPy-mBjLb;MmjcbVqa+g)2{hsy`c^C$ z4A`9!xIaTa0@BslIyzD5;65yr!QSQ%*|-|MOPWoPb%C;mIy)Dr9$?ZPD4l>$D0iCF zzZUlJ@%5%xBeCK5LvqdhaPVI>Bf!5{3K7#wzxtkpLC|!baTlj6EJzoYo@!}<_th?s z!nKmX?=Jb}57Bl&?tTTALl1+6%YAz6X}ht{lwdEXPAU@wnZoZEZgZI{u znWHUw%Wep0$D4V=_bTB>4E3C5rZ>F5z3ZXIg2jR*i(>aN_Y&dSk5dHRDo&u;KX^8F zxdB{W>yAb%*MZ1*660EOC~$nzlP@C(0a?pPBNEq2kjLv^dLH2hzh~O62|4D#I2ZR2 z!$2OW5mRrpc{zhv#X?uiNIj5it&%OoMS**1kJA%X6Zk{SyYf_}4k)=3LXWY0!aARj zFwCSz9L(K4y{25-1S#SIMK?slKQl9=IL{o z{7v&L_QEJkvEi=vHl#xl-8B04_!GPr8bJmty)ept#(v>OCNzhgPHa140b2~I1AF@g z&^~ByF+>vxM8;mmDb}hGgByqOyk1rU_xf>LMdOnJlVL7FsNo5JI=^YH@m0dsN0pSu zH{}rOtF_jdWC^6Tvh7jyJ&?3IfMpy;O55xvj|tQB|egtU1>LxvHH z_2)(~Ow+Qz^E(CN>5O0Fum-`vQAA)>)*EnMJ)D*E4us`BOmP)oXey|+v6c8eb%QOk zKPf&{m7s-qireN>;db_%;c~$j@c3a^J@c{-&h5%=T1~~kA5umAUvF-K$5cS>$;1H2 zw|;x_lFANNWcSUtW;~(g10$`%W+l|U_*3A|n+nQ&mD~8G!SG zS;3DY8EiP@Imh0b1Kq^_GbM@7fWiB9K7dN02J|xsTdnOgz&JW&c-a2~w0(KZbFr-p zD(U4^A5T}n-+cA0$jNlzvDbUfPtXrF6*nkl8$N>io$L4y1k+&Qvs5QZQYciN7^bgm zCBd~w9H~1F@n5?b`I_TxVZ%pus z{cj6sqQ-lw-`xWBm3`j}PDKD)b-xp%atNg8k&X;cr$hG(y_wVrcZlkhwIazj1ZneF zelW8GCA%NR$)wnq@jWiy)4>q<{{HfMh; zh38_m+jcJYaPfPJxMbpID7kt!xcHefyxy_Eu4cMmR#BI*awrSVxs=^hH>3r=1A~(& zh7{QF-JT?gD2LME_o&tb;~& zcKF_!1UPoH#QoU0yj3)ed50kfa6V5DaHb@Kn(?1byR}>}8OBpG@$mxH17nu6kNSW$ z+U=D5Un>X|9R0Pb8ICnF#oS!aJmGe3@`H!?S>WrlPHEzA4FQQR2^f_OY}6}atz057 z6VPE~DZbDZm|fI+Jc`>2BI0YKkGHW)DSWHD37bJ+u2~u`wK)nl_ZCj)92#S}o@Yb9 z?7V}a1NSE~6}h0Z>w12LJsT*T8PuzCjeyM4$wD!-0k&8^M%j+ATJBaLD0hbd zI;E9&WLogjDngJZ@FRqt+25n~lRbdaX`P(i1>sKC_>tbZW1g2czTW^c<32Qo}U3+e)6_^TyS@>HQ zc|U?6kEZG2`V5G6KTR2?jD)H$K}4E4DG>0QIPp-l3&yQpjNaQa2DxNy{9yZRh%`8@ znM~0QJk`#sT0Z{Jplj;NQ}+Q38x^A9YdBoltDv(w{SI{`&3E|A5C_>aPbJFD!~JAC^PGcaJ%hZ(rcMM{=))zACs1>~(Ax zIYaq9*$r8%M8HU50iox&lc1J>O>W0531-+v3WyEsp?|5VbLhwsVl#dcNL)yQ`Y75( zBRVX7POwGCL?r;yKTjTUbGZSTO-=fua}9_Y<+2@^d4TPd7pbU09;A=l{<7QK0*aNJ zPdRZT;jGv}iRNuD>}uI*%bL0l`YIesqT5|Cz~}YLL*TqO$Xy_GyA$yZdZldSxse@E zA9RKv3fRMbu~dmHoQ-Auz$UIztRPrqfn5@+jQ1gh=-kSp`O}MENwnt_l*pd3Ao4Z-sI+wg0uT< zv?k8+(4wLDW2Q3+RAbKRWEo<;;4{-NCo2u%wd3f~bh{(`G04B0b?+-s9`e6tNl$^R zX3MKq*sm%!Qd5l+!#NLrV4~pL2qW5VY09%<5ees247>(K08&$}MfkeG><`g?HSnI}Ior!{K(hWVo zhE(vcuF|_476cC?AAXg=BBID8_er;!A9SM31I+F_TOga5CaN&cg1VgO(`m_J&{5v+ z(r%srr|=I)D>I@%&WoAR92*@Uc(*g4|IG+2DQ+7C_~$~HG<~QIe<)b%^f`u+g}~$A zr59##Z9$H|`pf6KHuz3Dl2eIw(Jqvx&RPV8K$rBX+4n!9pysIF;KqwoaHyomq=M(L_KbYbfG9jB~G4BQg6 zmFO?^0>`p>sXRgls5kLAdY4cPWj9YwyR|w)eB5NGVSfg^`u&OQ4s{YVcHHLU_-g^W zc#(v5>Pe7f&GhloV>d7r>2o$|RR>OKjpE!?FKEViV3wOv7L1ThpQ-T?fx#FyT8qeN zaL)@7YTk~4cX&jtIE~(*W5%6eYaRv!vIKFVZkEv9pq!_A3j+xoH_RMv#)7wV6q)Ty zPf!Rww3WW*1Z+`sid>Jnz=n%<&D+`?JpMX5wPL+rF=9*~vvdd8bH?%D*4Y5&^@D?! z>Z#XY`PKwOc%ub6a#OBxi6p?qlHTBZzjUBnm$|{VvI6X>4D6gUFc36c`onxB82pag!0DggPqihI^(PC)hELD80` z9d1TWi#>5Rgsbr->tyzYK*|sK>xbIVbl7i0SziJ3m;(;6j?W9V|h1ch(FlawNmN-=!2}y0|V*4Ip?f*v{bI}lNJ`YVWp0mlTMBuC; zHzMpVf(IFL#;uDsVE5#YYmzrMS%f8hB`K{QNb#TFWc?Whx@Ni^uTIM0-Y=&~!MAnr zKv?34QY;#5UEBB`OS}U&KUch$k`2IMG5MtXnm=6D>tPjt83RYRMavbGv*C}^&7KjA zMl6`b+|Ra%#lXuK_&d$b!4SCFMPniS5o*{%^)Oh6Bi^52e-WEvb;g;E7T3%SQYuc} z8ye??mg_x9mfd+^b7L-#phy=c$0jDEmxJJAAXnwtUzI1x99gyJGgk^_ZSzo0g!Sp zs~j`8K~d{VuT$)t;9N|6)PCv+I-fkk8{(M+^2x(k>S#6CVJo<#EPe}xQyR#QV)2E{ zOBnXa+_XC|&b&vf*rbj8Yh%V3?#Dv8rLLx^-yN8$kJ#c^w?F}`TW^BB^J8{Zz~iaKBBYPJF`^iW1yutUP^D6Xr`ub$J`Smm&J}ht?IkiGpvr zczr~^($eWsQy+nyqgXHc*cjF@AHM3QpSM7~cI}~3f%)*3NP<`317ZM39fyI)X}vd zA8B(@*Vja3spk`T}8EY1Jtu1tLLEIb|bX zN*i58O1Koy_0hE4E5AI|D2N!N?L=l4sJly90qaVkbitQ~7Eb=KYTDZtzG{Qc;b(Yf zr)eYp)zwVxcV8ePsaAq+&;sf1OLSkM(?u3qkH1u5L8~e*uGRp(m&mZgV2I=TOXNMx zJkMVifq~3hU#U)xo}#v_2@?Dq1Eh$5EI}q64m%zk*Uq2ZLpQJc`nzI`kXzcJ);kwApbQa|I^en7>a9`;-Odg$y^)p~J^IzLjMjQB<) z;t89AZxn1}6i}6W22Q;eJIdlEBp_Y=4c0<&KflM{KwmQND(mDhpy&sYBEpX?VZ%U~ zl|DcOxnA;kQeJZ!#UveQsCTDA6N?vRO)@7!t-VK{B7}(A`K=V+qd4#=v^`0X7enkq zDS10j$dC_@zaFL?f~y90Z2CD32XtzwrJK=NjW#}Cm7 zr13U36uiubI~kT6-mM%+=2pb%%-nUjomKwBHXWOaIZM)?ZE_Cv-nc?|3M;=9q^)U! zmjFQl;~2+B>_~5Q$u=~Z2+4%X+*G^U1a&nw7|n}nEXY>wiiV@bF<7uOoi%+C1~=N& zNxz0MqsnLXY-BN;u)8r7?xolYVeuiaZs$>>>8zHL0ky9XHTKk)4aXa9tP?0ka^fLV zqME7$_BD_&92#GG;Q`|IeS$0fBxowx4!0?11-z90Qmc<+ts>R-cVo@dsDKgE&RQtC z4Wy%nXU2*#aGmp-3Ox=jlIMuVDfqn%IMno47O_*X))QmO+zBESYqNi;;?FQV{KVvj zDa(V#%8Lt2&klj;V)B=?t5dMBy|EC!>JD3Lj2tUU+rZRx;d+K! z7i7eQvg8?A!7ZM@75T6W+mj6M$3({9{oN+>hxNFug zkndjy{VLPMynWbYvpeMPn4Xn^%n!Ni*J{dO9EU{ZFTnw{2h5l@Pz(bV2M7l~`T~a4 zJT-M4c<96Jgf9!RLolTi?6LSOytSCf%=s!*_MJWcg(%E0ASRk?(*Mzf}waPBMIb?IP&PH42;Wm!hi# z8X^5gar>laDkN$oR-Y`6f%>@8NWcAeP-BSx^_H~`BAbbKsG{aTMyn3%tYWEFr__Sj zHsauB$pg!j#R;RnnYdkfb}g+umx zq1zjKbC6mjoq@_mKmgB8`d)Ph7>`Wz55JrTDqp&9N$w-Ce^F^8}u}|jPSV(K(GjRn%TE%Af;@fkPXOy;Q6{Hv&lc;86T+5LH!+mw`(r< z(o_TYqe{*UnqnB+Uh1%y`3?!^e>#WhJBGMMQ89zVBc|> z6ca1@9VVJ&cjNE$fyi6F0^#u>pvP6PaeUYfGb_wZG`Q`cai?+m%TftE+z!t^_|gXU zWu{;M=ywBN#^~@?k~aiMa^p<36@VzN&zYm;O1K`SF6J8$3PVR3whYGwfC?`WyS-}% zzQ9WhZ`K{a;^&d&71}^ZV>pLN3B$&E_JZOdFF6m6FA>AN{5aTtOktZn^BpukZJGI| z`+~64m68eKZvbc2-v5@Yf_UPvc_+nUkSKJHcN?gK_nIBwC9Y=zS^VpiqbLh-tZq23 zO_>O6=cnBJ42wbavgzXhHyxnh@}MH?wg)D?58u_yykL)p=sVgI9o7w|T?m7Mc`b~6YvV#3?A39gvc!w}+-{JRjx@a(_J z|87xG_Fqo^kj+2&>HqX<{r+#g`TyD^f&b+HyEQ_3{{OAl^BDujO5#I>`<$-jG9Z<`slj zLGk}|aW0`vL{S*dy@NHGq;{fd9n)G<6pW&6`mzrdgCK-fLzl$|jHsa^Vikn6J{omX z+A0mFn%Iq_S+t;N!ibGpHHel_MY605A^03PBL?E&i9|k@`t(2 zF5N5vhl1fmC1k42m_MsVqScJ$AvJQ9y@qlZO|m+2`>Y(kfBtdSA1`H%@)CeH?mvL8`vm~PL?Hlop8!N3 zQh@O!0hl&!AOIZ?GywUb2GIOg1K=k$fb?Th75)SVowaqi%?|rd6mn!|NM(c`7liy~ z?4BV!?k6zWLtmp+v4s9OA#*6j8vRJX7MK4AmdUptsZ2Us2o`)tz)T+~826rl^{&uw zP{B|VZa!Z_+O6Y*2G;*I4~C);o?Rn(+M)>i=3#U`03ngHb0#`w!dzZeNYqzh;UjE% zNg+Vw`=#WmERy)s%Ez$H$AptPSopPoJzrrl7=ZXKMSz}GEc^glj2?;!6^J#)it-xS zO7SyFC%S&nzx0BA?Rv&jjNr9(owhB~-wCn6!lU0?Vq&a})iUiWnOH1EZx9n)hT!(* z9XR#r9~l^zjaZr}W5*;*NT|#mW8O$YW$+l;u7pq2$z!5+1m)rw_I}oZNs}`14G7wA zU1oA_1cUw>Cbt|xag6$qK-S+anbWB<*4PLHQT(E3B6U0WqR6)?R2k`hfw;){6ym{E z;k5KRDD@J?3WNX|&nAUyIrlmYF)bikcINr5MB_Gt*zAXi#*(s=dxN zB59xbCt_R;syJ1!$yteAGK{eKYI4=rz;9)lbgeFu(5Qn`lnejF$3YCsoF3I${PY0t)x?2!DUil2alHn|$Zx4}2jJyp&Y}FXH l&cbdd{aq1l8sR<%Y^yN($XZ}s1IJe1!2J%eRq6*i(O>*c-=F{h diff --git a/bouter/tests/test_free.py b/bouter/tests/test_free.py index 4505d5f..54bf03e 100644 --- a/bouter/tests/test_free.py +++ b/bouter/tests/test_free.py @@ -42,19 +42,13 @@ def test_tail_fixing_experiment(freely_swimming_exp_path): for i_fish in range(experiment.n_fish): # Load original dataframe: - original_fish_mat = experiment.behavior_log.loc[ - :, experiment.tail_columns[i_fish] - ].values.copy() + original_fish_mat = experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]].values.copy() original_mats.append(original_fish_mat) # Nan random points and substitute experiment data, in place: - corrupted_fish_mat = corrupt_tail_matrix( - original_fish_mat, prop_missing=0.3, std=1 - ) + corrupted_fish_mat = corrupt_tail_matrix(original_fish_mat, prop_missing=0.3, std=1) corrupted_mats.append(corrupted_fish_mat) - experiment.behavior_log.loc[ - :, experiment.tail_columns[i_fish] - ] = corrupted_fish_mat + experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]] = corrupted_fish_mat # Fix the experiment behavior_log, in place experiment.reconstruct_missing_segments(continue_curvature=4) @@ -64,10 +58,7 @@ def test_tail_fixing_experiment(freely_swimming_exp_path): fixed_pts = np.isnan(corrupted_mats[i_fish]) diff_mat = np.abs( - original_mats[i_fish] - - experiment.behavior_log.loc[ - :, experiment.tail_columns[i_fish] - ].values + original_mats[i_fish] - experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]].values ) assert np.median(diff_mat[fixed_pts]) < 0.1 @@ -80,17 +71,11 @@ def test_tail_fixing_revert(freely_swimming_exp_path): for i_fish in range(experiment.n_fish): # Load original dataframe: - original_fish_mat = experiment.behavior_log.loc[ - :, experiment.tail_columns[i_fish] - ].values.copy() + original_fish_mat = experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]].values.copy() # Nan random points and substitute experiment data, in place: - corrupted_fish_mat = corrupt_tail_matrix( - original_fish_mat, prop_missing=0.3, std=1 - ) - experiment.behavior_log.loc[ - :, experiment.tail_columns[i_fish] - ] = corrupted_fish_mat + corrupted_fish_mat = corrupt_tail_matrix(original_fish_mat, prop_missing=0.3, std=1) + experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]] = corrupted_fish_mat corrupted_behavior_log = experiment.behavior_log @@ -106,40 +91,40 @@ def test_tail_fixing_revert(freely_swimming_exp_path): def test_compute_velocity(freely_swimming_exp_path): experiment = free.FreelySwimmingExperiment(freely_swimming_exp_path) velocities_df = experiment.compute_velocity() - fish_vels = velocities_df[ - ["vel2_f{}".format(i_fish) for i_fish in range(experiment.n_fish)] - ] + fish_vels = velocities_df[["vel_f{}".format(i_fish) for i_fish in range(experiment.n_fish)]] # Load computed velocities - loaded_vel2 = fl.load( + loaded_vel = fl.load( ASSETS_PATH / "freely_swimming_dataset" / "test_extracted_bouts.h5", "/velocities", ) # Compare DataFrame with velocities from the 3 experiment fish - assert_frame_equal(fish_vels, loaded_vel2) + assert_frame_equal(fish_vels, loaded_vel) def test_bout_extraction(freely_swimming_exp_path): experiment = free.FreelySwimmingExperiment(freely_swimming_exp_path) - bouts, cont = experiment.get_bouts() + bouts, continuities = experiment.get_bouts() # Load expected bouts to be extracted. Only first fish is used for the assertion loaded_bouts = fl.load( ASSETS_PATH / "freely_swimming_dataset" / "test_extracted_bouts.h5", "/bouts", ) - loaded_cont = fl.load( + loaded_continuities = fl.load( ASSETS_PATH / "freely_swimming_dataset" / "test_extracted_bouts.h5", "/continuity", ) # Compare dataframes for each of the detected bouts in the first fish - for bout in range(len(bouts[0])): - assert_frame_equal(bouts[0][bout], loaded_bouts[bout]) + for fish_bouts, fish_bouts_loaded in zip(bouts, loaded_bouts): + for bouts, loaded_bouts in zip(fish_bouts, fish_bouts_loaded): + assert_frame_equal(bouts, loaded_bouts) # Compare also continuity array - assert_array_equal(cont[0], loaded_cont) + for cont, loaded_cont in zip(continuities, loaded_continuities): + assert_array_equal(cont, loaded_cont) def test_bout_summary(freely_swimming_exp_path): From 9706980771a373b4b173f83bf0b3b6dc2eb835f3 Mon Sep 17 00:00:00 2001 From: vilim Date: Sun, 14 Nov 2021 21:27:28 +0100 Subject: [PATCH 2/2] black --- bouter/tests/_create_assets.py | 4 +++- bouter/tests/test_free.py | 33 +++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/bouter/tests/_create_assets.py b/bouter/tests/_create_assets.py index 97bff9c..21510bb 100644 --- a/bouter/tests/_create_assets.py +++ b/bouter/tests/_create_assets.py @@ -15,7 +15,9 @@ def create_assets(): bouts, continuity = experiment.get_bouts() velocities_df = experiment.compute_velocity() - velocities = velocities_df[["vel_f{}".format(i_fish) for i_fish in range(experiment.n_fish)]] + velocities = velocities_df[ + ["vel_f{}".format(i_fish) for i_fish in range(experiment.n_fish)] + ] bouts_summary = experiment.get_bout_properties() diff --git a/bouter/tests/test_free.py b/bouter/tests/test_free.py index 54bf03e..7c055a6 100644 --- a/bouter/tests/test_free.py +++ b/bouter/tests/test_free.py @@ -42,13 +42,19 @@ def test_tail_fixing_experiment(freely_swimming_exp_path): for i_fish in range(experiment.n_fish): # Load original dataframe: - original_fish_mat = experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]].values.copy() + original_fish_mat = experiment.behavior_log.loc[ + :, experiment.tail_columns[i_fish] + ].values.copy() original_mats.append(original_fish_mat) # Nan random points and substitute experiment data, in place: - corrupted_fish_mat = corrupt_tail_matrix(original_fish_mat, prop_missing=0.3, std=1) + corrupted_fish_mat = corrupt_tail_matrix( + original_fish_mat, prop_missing=0.3, std=1 + ) corrupted_mats.append(corrupted_fish_mat) - experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]] = corrupted_fish_mat + experiment.behavior_log.loc[ + :, experiment.tail_columns[i_fish] + ] = corrupted_fish_mat # Fix the experiment behavior_log, in place experiment.reconstruct_missing_segments(continue_curvature=4) @@ -58,7 +64,10 @@ def test_tail_fixing_experiment(freely_swimming_exp_path): fixed_pts = np.isnan(corrupted_mats[i_fish]) diff_mat = np.abs( - original_mats[i_fish] - experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]].values + original_mats[i_fish] + - experiment.behavior_log.loc[ + :, experiment.tail_columns[i_fish] + ].values ) assert np.median(diff_mat[fixed_pts]) < 0.1 @@ -71,11 +80,17 @@ def test_tail_fixing_revert(freely_swimming_exp_path): for i_fish in range(experiment.n_fish): # Load original dataframe: - original_fish_mat = experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]].values.copy() + original_fish_mat = experiment.behavior_log.loc[ + :, experiment.tail_columns[i_fish] + ].values.copy() # Nan random points and substitute experiment data, in place: - corrupted_fish_mat = corrupt_tail_matrix(original_fish_mat, prop_missing=0.3, std=1) - experiment.behavior_log.loc[:, experiment.tail_columns[i_fish]] = corrupted_fish_mat + corrupted_fish_mat = corrupt_tail_matrix( + original_fish_mat, prop_missing=0.3, std=1 + ) + experiment.behavior_log.loc[ + :, experiment.tail_columns[i_fish] + ] = corrupted_fish_mat corrupted_behavior_log = experiment.behavior_log @@ -91,7 +106,9 @@ def test_tail_fixing_revert(freely_swimming_exp_path): def test_compute_velocity(freely_swimming_exp_path): experiment = free.FreelySwimmingExperiment(freely_swimming_exp_path) velocities_df = experiment.compute_velocity() - fish_vels = velocities_df[["vel_f{}".format(i_fish) for i_fish in range(experiment.n_fish)]] + fish_vels = velocities_df[ + ["vel_f{}".format(i_fish) for i_fish in range(experiment.n_fish)] + ] # Load computed velocities loaded_vel = fl.load(