From f24f01e1c99b1ccd82d2167f52cb5103e0c029b4 Mon Sep 17 00:00:00 2001 From: MatthewSteen Date: Mon, 16 Sep 2024 17:02:54 +0000 Subject: [PATCH] deploy: 92e0cec7922b580a487cd3d1bd21d65ce55655c3 --- .doctrees/environment.pickle | Bin 700193 -> 686942 bytes .../explanations/shapes-and-templates.doctree | Bin 43175 -> 36475 bytes .doctrees/guides/generating-queries.doctree | Bin 24788 -> 24788 bytes .../guides/ingress-bacnet-to-brick.doctree | Bin 229096 -> 226144 bytes .../buildingmotif.api.app.doctree | Bin 11801 -> 8459 bytes .../buildingmotif.api.views.doctree | Bin 8641 -> 7628 bytes .../buildingmotif.api.views.parser.doctree | Bin 6582 -> 0 bytes .../buildingmotif.dataclasses.library.doctree | Bin 78963 -> 72354 bytes .../buildingmotif.label_parsing.doctree | Bin 59657 -> 55895 bytes ...buildingmotif.label_parsing.tokens.doctree | Bin 54255 -> 50332 bytes .doctrees/tutorials/model_correction.doctree | Bin 41326 -> 41716 bytes .doctrees/tutorials/model_creation.doctree | Bin 62188 -> 62082 bytes .doctrees/tutorials/model_validation.doctree | Bin 67316 -> 67706 bytes _modules/buildingmotif/api/app.html | 11 +- _modules/buildingmotif/api/views/parser.html | 505 ---- .../buildingmotif/dataclasses/library.html | 101 +- _modules/buildingmotif/dataclasses/model.html | 5 +- .../label_parsing/combinators.html | 92 +- .../buildingmotif/label_parsing/parser.html | 29 +- .../buildingmotif/label_parsing/tokens.html | 1 - _modules/buildingmotif/namespaces.html | 1 - .../buildingmotif/template_compilation.html | 2 +- _modules/buildingmotif/utils.html | 12 +- _modules/index.html | 1 - .../buildingmotif.api.views.parser.rst | 29 - .../_autosummary/buildingmotif.api.views.rst | 1 - explanations/shapes-and-templates.html | 80 +- genindex.html | 21 +- guides/generating-queries.html | 4 +- guides/ingress-bacnet-to-brick.html | 2251 ++++++++--------- objects.inv | Bin 4708 -> 4665 bytes py-modindex.html | 5 - .../_autosummary/buildingmotif.api.app.html | 11 +- .../_autosummary/buildingmotif.api.views.html | 5 +- .../buildingmotif.api.views.model.html | 6 +- .../buildingmotif.api.views.parser.html | 583 ----- .../buildingmotif.api.views.template.html | 6 +- .../buildingmotif.dataclasses.library.html | 6 +- .../buildingmotif.label_parsing.html | 7 +- .../buildingmotif.label_parsing.tokens.html | 9 +- reports/tutorials/model_correction.err.log | 171 +- reports/tutorials/model_validation.err.log | 167 +- searchindex.js | 2 +- tutorials/model_correction.html | 169 +- tutorials/model_creation.html | 26 +- tutorials/model_validation.html | 165 +- 46 files changed, 1560 insertions(+), 2924 deletions(-) delete mode 100644 .doctrees/reference/apidoc/_autosummary/buildingmotif.api.views.parser.doctree delete mode 100644 _modules/buildingmotif/api/views/parser.html delete mode 100644 _sources/reference/apidoc/_autosummary/buildingmotif.api.views.parser.rst delete mode 100644 reference/apidoc/_autosummary/buildingmotif.api.views.parser.html diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index f8b190003cf0c3045413e51858caa046cb17fe73..6815f713dba518247c44bfbd6e79f71122c40607 100644 GIT binary patch delta 121047 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 P-7tKZN(MpNZ@B&&pccq$ delta 128261 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 diff --git a/.doctrees/explanations/shapes-and-templates.doctree b/.doctrees/explanations/shapes-and-templates.doctree index 6e43b3fbdd54d4d0940f464484d22d6007c946ad..e20ac482d6c6792b99fbc92a756e35714b382090 100644 GIT binary patch delta 3414 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 diff --git a/.doctrees/guides/generating-queries.doctree b/.doctrees/guides/generating-queries.doctree index 20a9605dc90cf8caf3def53270cc6b31360622fc..8db2e24ad4730568920d083db530a9ae51d0d5ed 100644 GIT binary patch delta 143 zcmca|knzev#trp4D#@1S$p!`nhPtMPsg}AX24=~+mc}WGx~VCt$w|g$$;Jk$X_FW0 tSQD#IakH}SNg@7>)WnkF0tNe`{QTUI)ZER#?PoA!5xl~*xy&t23INIFFhBqR delta 143 zcmca|knzev#trp4DyhZ>$;Qd%#=2%nCW*QxNtTAX7RH9Dx`~#FhH0kemPr=oCX*NI tSQD#IakH}SNg@8C{QTUI)Z79E`;64YlH$$3?PoA!5xl~*xy&t23IK(4FFpVO diff --git a/.doctrees/guides/ingress-bacnet-to-brick.doctree b/.doctrees/guides/ingress-bacnet-to-brick.doctree index bf1d1943800f9f7101827360f01d709ba21c34b8..168275de0e44d61f6ee0768ff7643eb511bdd973 100644 GIT binary patch delta 31147 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 delta 31881 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 diff --git a/.doctrees/reference/apidoc/_autosummary/buildingmotif.api.app.doctree b/.doctrees/reference/apidoc/_autosummary/buildingmotif.api.app.doctree index 2c19ba0146cb6f18017b9b6af5cc5ca85c390b83..c33eb4433033759ac1fad42edeaa6a96edc8fc27 100644 GIT binary patch delta 828 zcma)4OK1~O6wQ74&4koSj4{9FUy^Ck)=jG-h{htO6(NE$wDxifQp|8 z!kvPtRl87d;$2EBPw-9oh`1^X7S-?T}Fz)x+@Uc4&uhwEhi#le3g-Tv> zHApC-Tvh5yRY@=d3xF+u0ASA3Zr&?sAsgCBo@>nm$bP~-)#YZf?F?#(*j+s_ z!$Kubn=A;rXR~CHtS6NOeE>Kf9s(OKxl(@G8HJTFGktWA#tuwq)MtQi!)fp_*s#e* z-DIPt73;C+|LHx6jKc19dL#eV^W(wjD86wG;GL~@BV7et4)~#p?Wo`Lg?YO!y`~%H zmeGw3MmTb4lgAOwBiEftcSt;H-}F(o8`)6ONG}7f#00|BEd87B!U2wuEYh8?qE;3&ZO8BRNif K5_Ml{1%3lA!Se+G delta 3493 zcmbtWU2GIp6lP|--QAXUX$#wyZQ)YT?!r=eQM92(si{!4Bq#~mE}Pli+0IauoAr3I`CDn(vaNO1b?{_&uM&yQZ{9BkZ6x*OMbj88av6OQ6Uy1Jtgvt3;);8Z^j2Lr>yb@u$` z2GMD4MiHgSfkTQW$`V%`SG7_a4WWKz#`3Gb`epM0=J~z0w`)Fa3Zb-_AWX~eW&9$u zZe4QDoHY|d(CGI@J&0B`Zv)_$y=T{Z&sqvX%0=Y{0s#z8_dai@QN4QpQ;vLV(nxKmurCtjkG+F zyl_p;WAGwHg~SQHW5Sj(J1$# zR$!ry_geg6#@#H9dz}7)W@!Y!1G+2Kz=m5U2?3zK2kIMuO8SDup8>2V*r4sGFI)@c zaYM8tgvx|Etnx5vk6*VeBCH}r9ts9X+W=yF+FS+o@tl)l+y3%ATmT)Rhun^KP2dlf zOS6xS&`oVF)n$b*ahhE6v3g87BZNz94 zr6SB>uZt0P7S>$#NEW-ljanHtTJn5>(~DZ>1Xt8~zxzgqsw;|I(lY84SJI|+S>si6 zp3a~s>qhlaQxAD|eQWazcA)!Up`u4EKeGcY`L6YN5dQ))vL||l9FOfJl}L#E6Ftq2 zvSfC{yNm#S?2Z&{yc|mg+n$O+#_-V?sZ zBlPHxZilXh$ClHl>avU9NTRiU_% zdO!*2>J*Zl>n(|P??#%yBZ-^hkzBBz?W-4QGSXEZ7330v+KG8<><^+o=O*k!u+gW< z%CyeqOPr+j4WJ_`+?{aHl{J<4^0Y3NcomIuCpe0k<&h|<8VBjmBUu8AqKc-toB%XS zAx_F$KKOu90lpIS5;!QK{kmApgO%3~y>W0P)#R{CrO2*l7B3U{eMm!c?rG=pm@%Z{cSd^4Q*5#%uSQ!KU2dMIWs=Lon6iI2<6S+f#=f?mCe! zxe)zW;Tm^p-M=VU%wM+!TWg6};PFF_1IB-c3|p`$o#o@B|sjRWj4iw|*U3XelAg2j$wLgO@=RTdWJQ8hUb?ze3-pXjV4l7lR2Mq z|JRe`r&v#Xg&w?0UB3`PVLF{JFNuRXQOmI>fgoz3Ii0X`3b)s_&J=rqB{w^h>fEvI2J9Ij_@=bJF7X{eGQ#wGqV`@L>bkE8f5JZg1AbH^LI*t6Qehlo ax-qW`+u(Z$_Q_vcM%h;zs(ZHHWBvue=8XFQ diff --git a/.doctrees/reference/apidoc/_autosummary/buildingmotif.api.views.doctree b/.doctrees/reference/apidoc/_autosummary/buildingmotif.api.views.doctree index b1fbc2274cc75fa3842e4e016ed9de657e2e289f..6f585222b23bb1a6e7e8fc2f44db71813fe4c341 100644 GIT binary patch delta 275 zcmX@;e8!r!fpzLZ*^R9BER4pJU0Hlsv$%j@@&+!6$pvieleet0;bhNuiyL3=C~k{IYgI>D`QzO~tJl*Gw)H598km6wJ`hIt`+vvrbI@C@e3KwGzn7 zS_LFZfl|j9H?vCgF)=c1o+9;_S^YLh?go%3?%~W!%uOw+EJ!V$QadFJB+*%%p;$Xb z11LXvo}3q>+vb;Y+DxpaOhDC>8zrPCf8bvA8zayQ3bN`<$H4YXPM6hU KJTiHbtQ7znCZKfy diff --git a/.doctrees/reference/apidoc/_autosummary/buildingmotif.api.views.parser.doctree b/.doctrees/reference/apidoc/_autosummary/buildingmotif.api.views.parser.doctree deleted file mode 100644 index f2453478d2ac814e29eb48bd622729a0e8e41eff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6582 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 diff --git a/.doctrees/reference/apidoc/_autosummary/buildingmotif.dataclasses.library.doctree b/.doctrees/reference/apidoc/_autosummary/buildingmotif.dataclasses.library.doctree index 8293e3de924f762f0c7de81ff1e14eddf2aa65ef..29354b41d8de2c4e10eba3c13053f10572ec8d78 100644 GIT binary patch delta 7065 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 HmdpMhTT|_> diff --git a/.doctrees/reference/apidoc/_autosummary/buildingmotif.label_parsing.doctree b/.doctrees/reference/apidoc/_autosummary/buildingmotif.label_parsing.doctree index 3804bd280a8e311abf190ee6907286a599b2127d..56db2629ab89d2e34802cf4dcb5ed6d557e0b71b 100644 GIT binary patch delta 4497 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

AUe}{H6AjCLq)01 zy#z!++D9V+X`cpZbN*HZ(meQap(r#v0oUe##=g-}Tu@Nl(onDq@cV)Ub}s-#FDRQB zr-49y0&$`>jxTB021JtvA`%)4ck||85X}L`1fpjzlLn$UjRXiW`VCfSMUgMjmq|sy zM^n^kD9m2)WNWR=z@AHCBcXn&TX1>WCbKsKl`&CfEf_3VjtMFjrL&``(w84n zHpqC_#m?zAC?ra?Xc{-)jb?|S<;4_lkemDSoo-S|bASzkmSwT}(=bTQh1fnMB(=a5o6E@2E3p&9&>)n;I$wBS1eP&_RR4T}WN-?mPq*@-EH!E*$ zc3wfz?807ZPmT8#_fXntm}suQ+Gpd<*g#^bX1uEzHf<=wU9c0w;=F90Y8LIWpIP*t zQD)H-ai&&`PaxZ%=7Wn`^TFmu{Te0IdKcoKXuUd#RaGn)Unx{sKaeUC&0R4Mf@p5} zVKWtrZ&x<1QG8>yxL@&&5;_YG>FZc4j>7t;c!(Po0XKc^;)2}WU$oA^%16PH#YSh_ z3{rxB2Q?c?F(D?(sAn|8e0$A7y}%m~EsS58>b$NO^oCy08(Kkc6hG_yMOV0^E8Iba zDEKIHi2vl02*zC&sLM=Z9#~V^mnO*J2)jjlpvu-l*h~FbA6ymBnps;yem!J?Mb$nw z3fHjJ)VugF3l^jYn*gO72hfD5ohSU_4qmI8LH(QYZStLwfR>Q3pI5;%{Ol8yA9K)i-Pb=6cGj5QR%@%Xhj6Gm^SXxVj)v=whFkp^t9*<< zZ57OzfuQ@+1QGGcR!FNj!Cpj}!iULdranQ7tdPBC5vvqQB0j9L3O-Z|W$MN#AWpm` zJmRFOatLb_>Qek8u=&*_x>51{R-GHDqjKXF5(;jZ0=I;L+X`7R)NgZ9XvB;hD>1`R zjBzPX)%cyIP;Cx}k18U=#Z&c!Rj}pW+STl?*j!^v_Rf-E&7To1UZXaxpTKcQ^zm#+ z=UpVdi+LpMVi$ReMD2$qgSVkOA0mm?m5eexZ2nVe=i?>pM~@S}xZ4<3AaB$#HQpox z^LM9K;`K;+UXy6phB_T3g*wGnSh{I9kCB3?6BBG4M4b{`Q|=F?G!oPiqx-0Xkcm1^ z1XehJI;(U?t93`KCCFHn<8R&^#`tRz(TCTGbgn^`#6Xn0Hz{MH0k83u#_GTlq06Xr1#u&Hx8d|Gx z%y#(KThFtuxaNk_)@UAQ7wzLAA)xkw0%{)_LXd{m$p&55Q{~>oy7qa960evvWo)> zAyONZx#)SQ|I@lvTLX- z^2D#$Vcfp6Jj5ZW^ovLYw>Siqa7LYGeVxQ(9paL7x2}u#h&`B263zqYghp5p^A(h; z`TyB2Ec7>gomDk?e#V^?d z*=fBL7>mv|@gmoAsY4^`%QO;16{GvQ7N(Dgdo_?)x-+k9jqa#YcU0+siUT=(148cA zldp4t>-~Jb!{J~4{)bFDifVYGAI86;Y4S1DDe3{~jV8+^%BH^R-_|&a@tY2~erO>7 zk;)JYBM)~se6N^aM+tTy`FIC@&*85-9L`)tZPM6E6}u)FeEtB`~X}%zSdRwE0`)3OnX}~tq#Ie9)#&w5TYahSKmk zW?HZi&YVazG%B+L4hTD$YIskX?NcZgH!R#P?-3%ONqw~a4u8o>AG5c2hJ-Au%9O*^ z{|G1i^w-qr+Z1k$rkyFy6nVD;#+(`=-KDiexdU3@{!XVTu-L;PM4FY1dwhH)H!*D3-j{|@VlE#3o8nIUi`{~>oE7@-*Rxm zyC45;$xi&DBhxn_Ig37V(DxI$iGJuKgq%)a4CwV(?o97A^v)%l@lGq#tBHJ?e(2sU z=it3Xrn{otk?tpSp^~@I4_yJ|X>@GSVJcsyA8P0Fx7dK>D|UbAC$%i>Fog_WcZ}Mn T!}&o4{P&+G@B>cpeAfTJj$E(# diff --git a/.doctrees/reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.doctree b/.doctrees/reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.doctree index eb9a8e5c0e42348c131b697b28e29ccbfb0e8934..50c80e1fa4fad869ea5bd3aa4b4b5f9f927d8c6e 100644 GIT binary patch delta 1271 zcmZXTOH5Ni6o#1rG(OtfDi#xgwn>4aRS=DU(G;X4f~4R(N=!h#QZER~L&E}tK*R?` z@svQo2Sl)fN?NXpXd@bprbgu9QX^_yxKkG{j0>DIEtKMBa_*e}+?nq`XMQ+>ubvMM ztqE;ue(4IWR*=t7rx=lUDf={}1f~o{a%r@IMrn;F3yLd6ldht)NGvhwip7$`3R|8@ zCzh3!mdOudv-1^AyD+yyEUzrCFv8S@8rgZyN=Xe5yDmzC{IgS}Bm~lWA|W9>3>t2> z5dymIUP_d3CNTm2c4rVHOJ@-SH1_<4kJq9g_fjNHQiA$K9LeOBx_Z9R{CE}F%QsTD z7$Lt_4W^f?Nf4wxSwWKEr(-24;#pt)cxw!)^2t-c+NPtDUmFHF=^8lHsfE<_5qO%b zcAeg!3<|PE*n(}5(gqBptd$2vo3`3+wCNAnB`s5BSYh$QMG({Hrh4TSmsz2oT>}N4 zjhcsSM|v8t>O+%!v+&zdIjp z-z$XF9(Fg?(Ddy0C5u&_gYUD<=-90)U0@veAC8caD;6=}2e9N-pS zn|H*45eIP00hkyJ=t$+GWco~iuB=Sz7NDu89qdE<>3c88s2AjmA7qq+n47}L4+c`_ z17NyejyU)*z&l91q8r%)RjXjT!@_VAXDgTDOwwo-H;dIWc!k>!^N#(kHiK@)JhzXg zsNnglIJ(VS!M@PmeF1rMeK^YWYnQ|E`e=Q?@Ba64kR9rqaLcfp3~@h)0(~?bUV(6X(lqdiDlc9+cx*Aq&*(5%tqX_ t!2|H;k%VyUFp|xN$;aI;uLi+|oR-Ch z#itNGHycDiS3x8c@UAi?wOXyVTDsaQ=Z0%cmTmbla%na?&pG#f)rd^3C<|>cO!H)TA_1$G@UU5S)WMn;7&TO^42Dj5ZEyM1et-fL%B3kg8D=6 z&@hR`JqY6mEi_reSP}-Yo_N?YV1w9$2~gRwNsGDRvCyqN26t?oDcZ56+Oge9v3^iy&UV&D6QPO?fWvLU6fj7$PKnE@r0>)@B8 zHW=TWOs3$%(7VuoWC`5q&!@M=^|vI1Ljz5aHJnb_%AOexf3$~Evx$MKr|KCv?}B7m#(o-NdW=QXs5wxRd1qc%dIVOIAf4+ zdy!kcB*FKOZiTCdzoM5Vcz-<8czJ#TOg$bAs~k2VB5~NPD z44BxK4aWvG26Beh(Kc44IT}fzO(yTfp(TX&2^2k`oJgXh0)3B(p--Tv1*Xo-Z5k%# zKmbkbJ|BQ?G#3D9F!=z4L*&R9IRFFW8;l3$=ja%I!^$~^YiMx{*G!0ks*~{Q2gkX5 zX;3u!G~|6KYT(&rw%f?oAPXxSqLZYi>pCD#f>5kC=umA)w_g^uJ zycob;0pO>xugN`L{Jr_{dhx|9RTN)>7B9X;ULZj4gb?5*`ZBA?NB$leE)Mm;4)1o_ zA#k(`9K8YuTWRe#f;hDHBdt*NaVURTXZ1Y0X9fLML#wr)FB0F^6+MzcH|{~aqWM~6 zxbe|b^e=uVnPo>O(O`wsIxETvRghNZT7N2n;+`b|2C^l%&=6wxJ7_V7)w13MnJ0t6 z{>d>~BlB*q@vA`V<}5`cb0b=u%#DganTBO-T8#}ZgSqG9pziomGY+lb+!}Xrt#hR_ znN2Hv>}e*cpmLX^BH!Vv-CeVarPS{X{r>^?oTAH8r~oPMz?0bwguMJvxPKsvRtQQ| zg?HL3oD#}bnnJDY09_$;Xak~8Peh4EG0bm5_(D;m^Li+1RLB_cX;iLojeZul{wNOL z+i0OzMF!i!u{EpvGfst5+?=PB-*JnT%2!aS$lDJv+B4V?Xi_@% diff --git a/.doctrees/tutorials/model_correction.doctree b/.doctrees/tutorials/model_correction.doctree index b6ce45979dac1f3f23b42dff34dc13854519ace1..ff1a9b589c43f77a7216f760e59a7fac1624fa0d 100644 GIT binary patch delta 2998 zcmeHJ&2Jl35LawPq2|y_8>v!6rVdCpIO~t~ekQike5{KUf&>T(1ubj)IbN~eHE*9A zOodE2zzK!3IOm5eyno$gQt8DNv2~qOXv7J*hpALKcQ@;7f0h7#|mQw_i#R z6{Vi*3C2&jr07a$H0WxD?v?_d6{Z3b?wrhqre6cz@4csN%i_ zIJAm*v!mNej@w;BM2zns;44igwg{7&{n@iyM0r~mN z1wp4X;+%EO+}%&)BwpCGS{7u2nI_gem`^C9n)fUx-ycLi%4 zucoIId~m=$*h9u0LXN_v>`%LsO1}zcZgDtK(xE2V@O=bz_v34V^#;oKjgW zTp+7qZ?hcxKi|~J8hF28W-1jt-S`53X*@?=(VHtvaeH+YFE^iAT93G-Yxr^Vqf?5e zm%#O5A3tltnUkzkR0F!K2Y9P_E~Tppq2NWJ(^HluoK>_+j8BAUF#*TCZI5G?Lyrdo z@Z2_c_*jbHsc2P57q$4PIdr%)h{MepKt$LmY*LUUDW!^*%z(+oc*xA-Oj5Lj$1yW0 zO?q97-fasSqIhI%ni=7=J!Vtkeby1t@EkH>pBOm1J+`B(3)2~$06`fsl-r}x6jJ&c z+wH>nDY8qfi((W#DMz&CjvF#~+3`kfkMn>RdiiPX;A#Z_9uSA44y1^1HAyqx%NKJw z%k>!k__Ufzi19BH^3SRfrSSi$#zUepA>jX{8mV+8QvsHWTFA|)8^#A|> delta 2689 zcmeHHOKTHR6s8HaP+SOwN-?#!FPXH-By*d2B<-|m?Gs9H;X<_SFiCFg(8(lDCf2yA zJ2&o5-6$@)5(H7{Rs;)z{RbjGet~r(xDX$A?#!eQ+;pG2m^*XlobP<+JLjGs??MNA zq4s<24+}f5+S7fZpIwmcd$ju{v)>lRNd=xwEGA;euu8<%98#{Dx_W^t6q3Ois@x{_rfoPxZN3FY zLeuC38TG_>;DDPBl zNPQ*v9bIM^%Og3uEAV7wf$nK|K6N)N;v|e@S0bXIG`SZlmSb3T!lV+Z;iu6tX80ky zM0Ww!VmZ2FcoD0IQ*si%O;cb=fytR^x~JiFJi*Qn;tJgb_&$>f$rwg2Kb~@f*u<&Z z7P{(}mNzSUku!>#S*dK)t2b)IEb&3zHA^p(RZkbBi13%swMmdmL^|T}_#{$fxRn^~ zVAK@_jM@8CHR<#nbWHKS9v7P8FxX;VGmX5h+YO{5I5&U6^gp$HgR$dWib3UM=Hq8r zFl(G<6xBlr-YCWp^E!Iy0?^}pS&Hh?&x{FMo^GhzJXj4ylzV1E2d>y4+M) zSXx^}W?`XIei}(J4UYo|qQFw80Ow&}PB0K*@XApTfnEU@6CMn5@N#g8*}PHS_a>21 zLUv^n88wunxLyfFiH#F@J4ERW#o^3wnsM}G6D3b-R&*x5D0%(ohVc8z1%uqM+_}Bp ovAVt9eXTV)vA{$`!L?~k&er5?P0rTjbf>1fPE5|-y+wTeA0UDWl>h($ diff --git a/.doctrees/tutorials/model_creation.doctree b/.doctrees/tutorials/model_creation.doctree index 3e6197d65c115ae00742f3e94de7b075296eaaf7..6d45dbfcd64b23db3cc950aa445b8f3d7b895e67 100644 GIT binary patch delta 691 zcmaF!l)33CGfM;O)bfoiiQbGJli&O5$h+p1q!wl7rN@US0vYiksksHIMTsS)MXB+Q zIf+G+Klo^~`s61iRZjlsqs0PJG&y0D2#}*KSe2ib8t;=@mYNeEoSIjhUj$Mj?o*nZ znU`N$9PbGonQ86?jg zQk0lioR(jdn+i6I&m|G$8n{xR5($qmN9TCg!qUuw+|;}ht|=Mpu~Ra{B8H@A_)tBw zIWOP=pGu;UsflH>xrwfck)@HYiD8nZu4P)Pv2J3rVUoF#sbxx1lF8(Y@rskB?nn`( ec=N^hN5Vv@B*|EyV(ra|B_-)JGP?OrrWgQZ-}PPq delta 799 zcmZpA%KYXjGfM;O)Q1~c61`b!nHU%*FZ9uz9Ph`*8kU$-mOA;Nx0Z!(W?p<~UVd_N zX+dUcO1wvEVo7FRdb~?!adJjtQF>~;V`fpjTTXs?d~j+>L4IalNxV;HZe|HcGq-PI zad9G0O;CRRY<0uu95b3n#% z1eE3$z|7+JhdC)IwWPEtZ}P!dVK#^ZKxzd%@=M~w6H8Ky;=$&XOjh*K;djj|%Ph*z z%LO_k-YLIgvZ22=zhfBJlnnORDH&oBBQyw@9K$xV1U%qVF-=Z2G&M+0)-^COFw-?L zHBZ(}GETP8HMdB%G*2-%PBAt$n%sZenplO3llkv(ZJrdrU6@!MBpUs_xFntWMsMc7 HQ!EAm`4$<4 diff --git a/.doctrees/tutorials/model_validation.doctree b/.doctrees/tutorials/model_validation.doctree index e069ec67c087094b0dbc0e4d9ade711bc1b790a4..9ec00e6281cb00008fcf35bfefb4f6bd6566ce0a 100644 GIT binary patch delta 2743 zcmeHJ&u$uQcpz@N2q$L#HH z&Aj)`r+xNy?D;pb*yiqAyYIwKtGkK^a8~^ezb$Hbs?Zk|(>eTmvA^3T>kZ3r3Bpoe zR!nEXrEM(^>=DzFXP{cq!z9QMxo`PgfHEl5Ov@!SIe8*<3AV9L zAfE@%4hoJ&%Plx9yQ<-z(>Ed_ZmztK{pC?Cm6zX5 zBoc8}L`IQQc(43ZL}JkbK3FM*k+hV_;P7e^e>*jWKd$~BN#oPgfcs|#@u4p5^LLbT z5)i9NG(2`uF2v)LEo$1Apl;Yz%Ud`#aO(t&inBq2(oDx52E%rkpYFK8SzBvSN~&6X z>$duHB$`&Uc;>>%9)F*-n!&}=VdfR_YH5r|@0C7?HR;+gHaqy)dU?6FCMxc zmZ(?Sy0=M^Gd#dh`8#HfjgKn?W$R`Y20{pv(Z$P=6u)n8O%1b2;JjhA$P}dxP1X`& zX>iR${~Q?kykljE`@NHZYkomIn85LTKA3Lxf7AWp>jv7}`9A}_eK&7mpaTK%56JKM zm5FCf7e94&?yu&_09-NMx=#fEAQFLWWKuwh+oJZrbt)cz1yN&?@_IbHym18YH}?$9 z5MzT4zCKYmEsIq31tyDBFIdhM{VcJY4!v3LTDe*8z0i@;j+DySky54`Qb$UIPapnm k)R9syr2}u2(yi9TgSUHb8Qt&jXY0$CHzIcrMjr3^2Oq08Jpcdz delta 2673 zcmeHI&rcIU6t=X`(0Cyz+E`>lLej>zbhq7hTPRQj3Wx>76aqAxZ9A2X+aGSXG4%p? zF-A>H9$W;ydeabMJSunMAK*d$0yQR{M2xeuTYiNL_s*fyef!?`zW2?Ww|`z*e!s9- zRvOn$Tb5hlhG(rX9e%a#8c3PUtdEDMvC(cfk_tJj2rAB(WKqRsH&QAEp}Zt!WP!fI zg$#Dt5Lv7*2w!8@No)xAV*?bUZ?LP&cp27w=qf82w{B#7H5=?CFD=)sOwD>ad-OCL z1BN{eID=jE3|lRep9UKI8<+rmOFGOf!@)r^Zw@da$j|niON0Q4-I^UGu|fDdJ3%pi z-As_3ht0V-*~9RB=#iOYeb79-=-?Rskb9}SUFY!o2hy~l|M!%Ls!D>Y*pu5IddgY>+ zbxK)5E*9@sN(*Hy=e)Ip77Ah>r*vTu&%wXNgeeHOQx2=gmN}t#hh2jvI21OU7Gx={h)NYj5&Rs#CL51Jx=PtOHHya3F(DdbRG5*=PC?2> zk088K){SV?aia!6%;|hIov#7$2+L(0ft|r#SWei@tltN*h{I|mhffK68_TjNi*x86 zR)wP+aCN+Wd1!D#CmqpSlhr${v$HdfRg@J~F)fxcs#TV*B8`OCa1J2j4@b+1lte|$ zQ;!J!Ma3LC%%HhCyJ}2vQvOXuZ?^JzGYIAaXU%dS0gWdGl)V#jebb+pq8z$3U(|;Zo B3C#ci diff --git a/_modules/buildingmotif/api/app.html b/_modules/buildingmotif/api/app.html index 80b1fc846..804108afc 100644 --- a/_modules/buildingmotif/api/app.html +++ b/_modules/buildingmotif/api/app.html @@ -410,7 +410,6 @@

Source code for buildingmotif.api.app

 import os
-from typing import Optional
 
 from flask import Flask, current_app
 from flask_api import status
@@ -418,7 +417,6 @@ 

Source code for buildingmotif.api.app

 
 from buildingmotif.api.views.library import blueprint as library_blueprint
 from buildingmotif.api.views.model import blueprint as model_blueprint
-from buildingmotif.api.views.parser import blueprint as parsers_blueprint
 from buildingmotif.api.views.template import blueprint as template_blueprint
 from buildingmotif.building_motif.building_motif import BuildingMOTIF
 
@@ -455,15 +453,11 @@ 

Source code for buildingmotif.api.app

     return str(error), status.HTTP_500_INTERNAL_SERVER_ERROR
 
 
-
[docs]def create_app(DB_URI, shacl_engine: Optional[str] = "pyshacl"): +
[docs]def create_app(DB_URI): """Creates a Flask API. :param db_uri: database URI :type db_uri: str - :param shacl_engine: the name of the engine to use for validation: "pyshacl" or "topquadrant". Using topquadrant - requires Java to be installed on this machine, and the "topquadrant" feature on BuildingMOTIF, - defaults to "pyshacl" - :type shacl_engine: str, optional :return: flask app :rtype: Flask.app """ @@ -471,7 +465,7 @@

Source code for buildingmotif.api.app

     app.config.from_mapping(
         DB_URI=DB_URI,
     )
-    app.building_motif = BuildingMOTIF(app.config["DB_URI"], shacl_engine=shacl_engine)
+    app.building_motif = BuildingMOTIF(app.config["DB_URI"])
 
     app.after_request(_after_request)
     app.register_error_handler(Exception, _after_error)
@@ -479,7 +473,6 @@ 

Source code for buildingmotif.api.app

     app.register_blueprint(library_blueprint, url_prefix="/libraries")
     app.register_blueprint(template_blueprint, url_prefix="/templates")
     app.register_blueprint(model_blueprint, url_prefix="/models")
-    app.register_blueprint(parsers_blueprint, url_prefix="/parsers")
 
     return app
diff --git a/_modules/buildingmotif/api/views/parser.html b/_modules/buildingmotif/api/views/parser.html deleted file mode 100644 index aded43b8c..000000000 --- a/_modules/buildingmotif/api/views/parser.html +++ /dev/null @@ -1,505 +0,0 @@ - - - - - - - - - - - buildingmotif.api.views.parser — BuildingMOTIF Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - -
-
⚠️ This is an BETA release for testing purposes only ⚠️
-
- - - - -
-
- -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

- -
-
- -
-
-
- - - - -
- -

Source code for buildingmotif.api.views.parser

-import logging
-
-import flask
-from flask import Blueprint, jsonify, request
-from flask_api import status
-
-from buildingmotif.api.serializers.parser import deserialize
-from buildingmotif.label_parsing.parser import parse
-
-log = logging.getLogger()
-
-blueprint = Blueprint("parsers", __name__)
-
-
-
[docs]@blueprint.route("", methods=(["POST"])) -def evaluate() -> flask.Response: - raw_data = request.json - - my_parser = deserialize(raw_data.get("parsers")) - point_labels = raw_data.get("point_labels") - - return ( - jsonify([parse(my_parser, point_label) for point_label in point_labels]), - status.HTTP_200_OK, - )
-
- -
- - - - - - -
- -
-
-
- -
- - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/_modules/buildingmotif/dataclasses/library.html b/_modules/buildingmotif/dataclasses/library.html index ca2089579..7ed100741 100644 --- a/_modules/buildingmotif/dataclasses/library.html +++ b/_modules/buildingmotif/dataclasses/library.html @@ -431,7 +431,6 @@

Source code for buildingmotif.dataclasses.library

from buildingmotif.schemas import validate_libraries_yaml from buildingmotif.template_compilation import compile_template_spec from buildingmotif.utils import ( - copy_graph, get_ontology_files, get_template_parts_from_shape, shacl_inference, @@ -553,8 +552,6 @@

Source code for buildingmotif.dataclasses.library

directory: Optional[str] = None, name: Optional[str] = None, overwrite: Optional[bool] = True, - infer_templates: Optional[bool] = True, - run_shacl_inference: Optional[bool] = True, ) -> "Library": """Loads a library from the database or an external source. When specifying a path to load a library or ontology_graph from, @@ -576,12 +573,6 @@

Source code for buildingmotif.dataclasses.library

:param overwrite: if true, replace any existing copy of the library, defaults to True :type overwrite: Optional[true], optional - :param infer_templates: if true, infer shapes from the ontology graph, - defaults to True - :type infer_templates: Optional[bool], optional - :param run_shacl_inference: if true, run SHACL inference on the ontology graph, - using the BuildingMOTIF SHACL engine, defaults to True - :type run_shacl_inference: Optional[bool], optional :return: the loaded library :rtype: Library :raises Exception: if the library cannot be loaded @@ -600,12 +591,7 @@

Source code for buildingmotif.dataclasses.library

ontology_graph.parse( ontology_graph_path, format=guess_format(ontology_graph_path) ) - return cls._load_from_ontology( - ontology_graph, - overwrite=overwrite, - infer_templates=infer_templates, - run_shacl_inference=run_shacl_inference, - ) + return cls._load_from_ontology(ontology_graph, overwrite=overwrite) elif directory is not None: if resource_exists("buildingmotif.libraries", directory): logging.debug(f"Loading builtin library: {directory}") @@ -616,12 +602,7 @@

Source code for buildingmotif.dataclasses.library

src = pathlib.Path(directory) if not src.exists(): raise Exception(f"Directory {src} does not exist") - return cls._load_from_directory( - src, - overwrite=overwrite, - infer_templates=infer_templates, - run_shacl_inference=run_shacl_inference, - ) + return cls._load_from_directory(src, overwrite=overwrite) elif name is not None: bm = get_building_motif() db_library = bm.table_connection.get_db_library_by_name(name) @@ -645,11 +626,7 @@

Source code for buildingmotif.dataclasses.library

@classmethod def _load_from_ontology( - cls, - ontology: rdflib.Graph, - overwrite: Optional[bool] = True, - infer_templates: Optional[bool] = True, - run_shacl_inference: Optional[bool] = True, + cls, ontology: rdflib.Graph, overwrite: Optional[bool] = True ) -> "Library": """ Load a library from an ontology graph. This proceeds as follows. @@ -663,10 +640,6 @@

Source code for buildingmotif.dataclasses.library

:type ontology: rdflib.Graph :param overwrite: if true, overwrite the existing copy of the Library :type overwrite: bool - :param infer_templates: if true, infer shapes from the ontology graph - :type infer_templates: bool - :param run_shacl_inference: if true, run SHACL inference on the ontology graph - :type run_shacl_inference: bool :return: the loaded Library :rtype: "Library" """ @@ -674,7 +647,7 @@

Source code for buildingmotif.dataclasses.library

# any=False will raise an error if there is more than one ontology defined in the graph ontology_name = ontology.value( predicate=rdflib.RDF.type, object=rdflib.OWL.Ontology, any=False - ) or rdflib.URIRef("urn:unnamed/") + ) if not overwrite: if cls._library_exists(ontology_name): @@ -686,16 +659,12 @@

Source code for buildingmotif.dataclasses.library

# expand the ontology graph before we insert it into the database. This will ensure # that the output of compiled models will not contain triples that really belong to # the ontology - if run_shacl_inference: - ontology = shacl_inference( - ontology, engine=get_building_motif().shacl_engine - ) + ontology = shacl_inference(ontology, engine=get_building_motif().shacl_engine) lib = cls.create(ontology_name, overwrite=overwrite) - if infer_templates: - # infer shapes from any class/nodeshape candidates in the graph - lib._infer_templates_from_graph(ontology) + # infer shapes from any class/nodeshape candidates in the graph + lib._infer_shapes_from_graph(ontology) # load the ontology graph as a shape_collection shape_col_id = lib.get_shape_collection().id @@ -705,26 +674,12 @@

Source code for buildingmotif.dataclasses.library

return lib - def _infer_templates_from_graph(self, graph: rdflib.Graph): - """Infer templates from a graph (by interpreting shapes) and add them to this library. + def _infer_shapes_from_graph(self, graph: rdflib.Graph): + """Infer shapes from a graph and add them to this library. - :param graph: graph to infer templates from + :param graph: graph to infer shapes from :type graph: rdflib.Graph """ - # add all imports to the same graph so we can resolve everything - imports_closure = copy_graph(graph) - # import dependencies into 'graph' - # get all imports from the graph - for dependency in graph.objects(predicate=rdflib.OWL.imports): - # attempt to load from BuildingMOTIF - try: - lib = Library.load(name=str(dependency)) - imports_closure += lib.get_shape_collection().graph - except Exception as e: # TODO: replace with a more specific exception - logging.warning( - f"An ontology could not resolve a dependency on {dependency} ({e}). Check this is loaded into BuildingMOTIF" - ) - continue class_candidates = set(graph.subjects(rdflib.RDF.type, rdflib.OWL.Class)) shape_candidates = set(graph.subjects(rdflib.RDF.type, rdflib.SH.NodeShape)) candidates = class_candidates.intersection(shape_candidates) @@ -733,30 +688,19 @@

Source code for buildingmotif.dataclasses.library

for candidate in candidates: assert isinstance(candidate, rdflib.URIRef) # TODO: mincount 0 (or unspecified) should be optional args on the generated template - partial_body, deps = get_template_parts_from_shape( - candidate, imports_closure - ) + partial_body, deps = get_template_parts_from_shape(candidate, graph) templ = self.create_template(str(candidate), partial_body) dependency_cache[templ.id] = deps template_id_lookup[str(candidate)] = templ.id self._resolve_template_dependencies(template_id_lookup, dependency_cache) - def _load_shapes_from_directory( - self, - directory: pathlib.Path, - infer_templates: Optional[bool] = True, - run_shacl_inference: Optional[bool] = True, - ): + def _load_shapes_from_directory(self, directory: pathlib.Path): """Helper method to read all graphs in the given directory into this library. :param directory: directory containing graph files :type directory: pathlib.Path - :param infer_templates: if true, infer shapes from the ontology graph - :type infer_templates: bool - :param run_shacl_inference: if true, run SHACL inference on the ontology graph - :type run_shacl_inference: bool """ shape_col_id = self.get_shape_collection().id assert shape_col_id is not None # this should always pass @@ -769,21 +713,12 @@

Source code for buildingmotif.dataclasses.library

f"Could not parse file {filename}: {e}" ) raise e - if run_shacl_inference: - shape_col.graph = shacl_inference( - shape_col.graph, engine=get_building_motif().shacl_engine - ) # infer shapes from any class/nodeshape candidates in the graph - if infer_templates: - self._infer_templates_from_graph(shape_col.graph) + self._infer_shapes_from_graph(shape_col.graph) @classmethod def _load_from_directory( - cls, - directory: pathlib.Path, - overwrite: Optional[bool] = True, - infer_templates: Optional[bool] = True, - run_shacl_inference: Optional[bool] = True, + cls, directory: pathlib.Path, overwrite: Optional[bool] = True ) -> "Library": """ Load a library from a directory. @@ -795,10 +730,6 @@

Source code for buildingmotif.dataclasses.library

:type directory: pathlib.Path :param overwrite: if true, overwrite the existing copy of the Library :type overwrite: bool - :param infer_templates: if true, infer shapes from the ontology graph - :type infer_templates: bool - :param run_shacl_inference: if true, run SHACL inference on the ontology graph - :type run_shacl_inference: bool :raises e: if cannot create template :raises e: if cannot resolve dependencies :return: library @@ -820,9 +751,6 @@

Source code for buildingmotif.dataclasses.library

# read all .yml files for file in directory.rglob("*.yml"): - # if .ipynb_checkpoints, skip; these are cached files that Jupyter creates - if ".ipynb_checkpoints" in file.parts: - continue lib._read_yml_file(file, template_id_lookup, dependency_cache) # now that we have all the templates, we can populate the dependencies lib._resolve_template_dependencies(template_id_lookup, dependency_cache) @@ -899,7 +827,6 @@

Source code for buildingmotif.dataclasses.library

# check documentation for skip_uri for what URIs get skipped if skip_uri(dep["template"]): return - # if the dependency is not in the local cache, then search through this library's imports # for the template for imp in self.graph_imports: diff --git a/_modules/buildingmotif/dataclasses/model.html b/_modules/buildingmotif/dataclasses/model.html index 167cb2f80..660425bd3 100644 --- a/_modules/buildingmotif/dataclasses/model.html +++ b/_modules/buildingmotif/dataclasses/model.html @@ -602,9 +602,6 @@

Source code for buildingmotif.dataclasses.model

< # TODO: do we want to preserve the materialized triples added to data_graph via reasoning? data_graph = copy_graph(self.graph) - # remove imports from data graph - data_graph.remove((None, OWL.imports, None)) - # validate the data graph valid, report_g, report_str = shacl_validate( data_graph, shapeg, engine=self._bm.shacl_engine @@ -688,7 +685,7 @@

Source code for buildingmotif.dataclasses.model

< temp_model_graph.add((URIRef(s), A, shape_uri)) valid, report_g, report_str = shacl_validate( - temp_model_graph, ontology_graph, engine=self._bm.shacl_engine + temp_model_graph, ontology_graph ) results[shape_uri] = ValidationContext( diff --git a/_modules/buildingmotif/label_parsing/combinators.html b/_modules/buildingmotif/label_parsing/combinators.html index f6ec1c97c..3f4173d04 100644 --- a/_modules/buildingmotif/label_parsing/combinators.html +++ b/_modules/buildingmotif/label_parsing/combinators.html @@ -409,8 +409,7 @@

Source code for buildingmotif.label_parsing.combinators

-import logging
-import re
+import re
 from typing import List
 
 from rdflib import URIRef
@@ -428,34 +427,22 @@ 

Source code for buildingmotif.label_parsing.combinators

) from buildingmotif.namespaces import BRICK -logger = logging.getLogger() -
[docs]class string(Parser): """Constructs a parser that matches a string.""" - def __init__(self, s: str, type_name: TokenOrConstructor, id=None): + def __init__(self, s: str, type_name: TokenOrConstructor): self.s = s self.type_name = type_name - self.id = id def __call__(self, target: str) -> List[TokenResult]: if target.startswith(self.s): return [ - TokenResult( - self.s, - ensure_token(self.type_name, self.s), - len(self.s), - id=self.id, - ) + TokenResult(self.s, ensure_token(self.type_name, self.s), len(self.s)) ] return [ TokenResult( - None, - Null(), - 0, - f"Expected {self.s}, got {target[:len(self.s)]}", - id=self.id, + None, Null(), 0, f"Expected {self.s}, got {target[:len(self.s)]}" ) ]
@@ -463,33 +450,25 @@

Source code for buildingmotif.label_parsing.combinators

[docs]class rest(Parser): """Constructs a parser that matches the rest of the string.""" - def __init__(self, type_name: TokenOrConstructor, id=None): + def __init__(self, type_name: TokenOrConstructor): self.type_name = type_name - self.id = id def __call__(self, target: str) -> List[TokenResult]: - return [ - TokenResult( - target, ensure_token(self.type_name, target), len(target), id=self.id - ) - ]
+ return [TokenResult(target, ensure_token(self.type_name, target), len(target))]
[docs]class substring_n(Parser): """Constructs a parser that matches a substring of length n.""" - def __init__(self, length: int, type_name: TokenOrConstructor, id=None): + def __init__(self, length: int, type_name: TokenOrConstructor): self.length = length self.type_name = type_name - self.id = id def __call__(self, target: str) -> List[TokenResult]: if len(target) >= self.length: value = target[: self.length] return [ - TokenResult( - value, ensure_token(self.type_name, value), self.length, id=self.id - ) + TokenResult(value, ensure_token(self.type_name, value), self.length) ] return [ TokenResult( @@ -497,7 +476,6 @@

Source code for buildingmotif.label_parsing.combinators

Null(), 0, f"Expected {self.length} characters, got {target[:self.length]}", - id=self.id, ) ]
@@ -505,27 +483,18 @@

Source code for buildingmotif.label_parsing.combinators

[docs]class regex(Parser): """Constructs a parser that matches a regular expression.""" - def __init__(self, r: str, type_name: TokenOrConstructor, id=None): + def __init__(self, r: str, type_name: TokenOrConstructor): self.r = r self.type_name = type_name - self.id = id def __call__(self, target: str) -> List[TokenResult]: match = re.match(self.r, target) if match: value = match.group() - return [ - TokenResult( - value, ensure_token(self.type_name, value), len(value), id=self.id - ) - ] + return [TokenResult(value, ensure_token(self.type_name, value), len(value))] return [ TokenResult( - None, - Null(), - 0, - f"Expected {self.r}, got {target[:len(self.r)]}", - id=self.id, + None, Null(), 0, f"Expected {self.r}, got {target[:len(self.r)]}" ) ]
@@ -533,9 +502,8 @@

Source code for buildingmotif.label_parsing.combinators

[docs]class choice(Parser): """Constructs a choice combinator of parsers.""" - def __init__(self, *parsers: Parser, id=None): + def __init__(self, *parsers: Parser): self.parsers = parsers - self.id = id def __call__(self, target: str) -> List[TokenResult]: errors = [] @@ -545,27 +513,25 @@

Source code for buildingmotif.label_parsing.combinators

return result if result: errors.append(result[0].error) - return [TokenResult(None, Null(), 0, " | ".join(errors), id=None)] # type: ignore
+ return [TokenResult(None, Null(), 0, " | ".join(errors))] # type: ignore
[docs]class constant(Parser): """Matches a constant token.""" - def __init__(self, type_name: Token, id=None): - self.id = id + def __init__(self, type_name: Token): self.type_name = type_name def __call__(self, target: str) -> List[TokenResult]: - return [TokenResult(None, self.type_name, 0, id=self.id)]
+ return [TokenResult(None, self.type_name, 0)]
[docs]class abbreviations(Parser): """Constructs a choice combinator of string matching based on a dictionary.""" - def __init__(self, patterns: dict, id=None): + def __init__(self, patterns: dict): parsers = [string(s, Constant(URIRef(t))) for s, t in patterns.items()] self.choice = choice(*parsers) - self.id = id def __call__(self, target: str): return self.choice(target)
@@ -574,9 +540,8 @@

Source code for buildingmotif.label_parsing.combinators

[docs]class sequence(Parser): """Applies parsers in sequence. All parsers must match consecutively.""" - def __init__(self, *parsers: Parser, id=None): + def __init__(self, *parsers: Parser): self.parsers = parsers - self.id = id def __call__(self, target: str) -> List[TokenResult]: results = [] @@ -599,9 +564,8 @@

Source code for buildingmotif.label_parsing.combinators

[docs]class many(Parser): """Applies the given sequence parser repeatedly until it stops matching.""" - def __init__(self, seq_parser: Parser, id=None): + def __init__(self, seq_parser: Parser): self.seq_parser = seq_parser - self.id = id def __call__(self, target): results = [] @@ -619,16 +583,15 @@

Source code for buildingmotif.label_parsing.combinators

[docs]class maybe(Parser): """Applies the given parser, but does not fail if it does not match.""" - def __init__(self, parser: Parser, id=None): + def __init__(self, parser: Parser): self.parser = parser - self.id = id def __call__(self, target): result = self.parser(target) # if the result is not empty and there are no errors, return the result, otherwise return a null token if result and not any(r.error for r in result): return result - return [TokenResult(None, Null(), 0, id=self.id)]
+ return [TokenResult(None, Null(), 0)]
[docs]class until(Parser): @@ -637,10 +600,9 @@

Source code for buildingmotif.label_parsing.combinators

STarts with a string length of 1 and increments it until the parser matches. """ - def __init__(self, parser: Parser, type_name: TokenOrConstructor, id=None): + def __init__(self, parser: Parser, type_name: TokenOrConstructor): self.type_name = type_name self.parser = parser - self.id = id def __call__(self, target): length = 1 @@ -652,17 +614,12 @@

Source code for buildingmotif.label_parsing.combinators

target[:length], ensure_token(self.type_name, target[:length]), length, - id=self.id, ) ] length += 1 return [ TokenResult( - None, - Null(), - 0, - f"Expected {self.type_name}, got {target[:length]}", - id=self.id, + None, Null(), 0, f"Expected {self.type_name}, got {target[:length]}" ) ]
@@ -670,15 +627,14 @@

Source code for buildingmotif.label_parsing.combinators

[docs]class extend_if_match(Parser): """Adds the type to the token result.""" - def __init__(self, parser: Parser, type_name: Token, id=None): + def __init__(self, parser: Parser, type_name: Token): self.parser = parser self.type_name = type_name - self.id = id def __call__(self, target): result = self.parser(target) if result and not any(r.error for r in result): - result.extend([TokenResult(None, self.type_name, 0, id=self.id)]) + result.extend([TokenResult(None, self.type_name, 0)]) return result return result
diff --git a/_modules/buildingmotif/label_parsing/parser.html b/_modules/buildingmotif/label_parsing/parser.html index 54e5b8a85..9c1dade98 100644 --- a/_modules/buildingmotif/label_parsing/parser.html +++ b/_modules/buildingmotif/label_parsing/parser.html @@ -412,7 +412,6 @@

Source code for buildingmotif.label_parsing.parser

from abc import ABC, abstractmethod from collections import defaultdict from dataclasses import dataclass, field -from inspect import Parameter, signature from typing import Dict, List, Tuple from buildingmotif.label_parsing.tokens import Constant, Identifier, Null, TokenResult @@ -454,24 +453,16 @@

Source code for buildingmotif.label_parsing.parser

This allows parsers to be serialized later without requiring bespoke (de)serialization code for every parser type.""" cls = super().__new__(mcls) - sig = signature(mcls.__init__) - parameters = sig.parameters - arguments = sig.bind(cls, *args, **kwargs).arguments - - cls.__args__ = {} - for name, value in arguments.items(): - if name != "self": - kind = parameters[name].kind - if kind in [ - Parameter.POSITIONAL_ONLY, - Parameter.POSITIONAL_OR_KEYWORD, - Parameter.KEYWORD_ONLY, - ]: - cls.__args__[name] = value - elif kind == Parameter.VAR_POSITIONAL: - cls.__args__[name] = list(value) - elif kind == Parameter.VAR_KEYWORD: - cls.__args__.update(value) + init_var_names = list(cls.__init__.__code__.co_varnames[1:]) + rem_var_names = init_var_names + for key in kwargs.keys(): + if key in init_var_names: + rem_var_names.remove(key) + rem_var_count = len(rem_var_names) + cls.__args__ = kwargs + if len(args) > rem_var_count: + args = [*args[: rem_var_count - 1], args[rem_var_count - 1 :]] + cls.__args__.update(dict(zip(init_var_names, args))) return cls diff --git a/_modules/buildingmotif/label_parsing/tokens.html b/_modules/buildingmotif/label_parsing/tokens.html index 4589fc172..44d69fc28 100644 --- a/_modules/buildingmotif/label_parsing/tokens.html +++ b/_modules/buildingmotif/label_parsing/tokens.html @@ -468,7 +468,6 @@

Source code for buildingmotif.label_parsing.tokens

token: Token length: int error: Optional[str] = None - id: Optional[str] = None def __eq__(self, other): """ diff --git a/_modules/buildingmotif/namespaces.html b/_modules/buildingmotif/namespaces.html index 96a47615c..3570a9513 100644 --- a/_modules/buildingmotif/namespaces.html +++ b/_modules/buildingmotif/namespaces.html @@ -442,7 +442,6 @@

Source code for buildingmotif.namespaces

 
 BM = Namespace("https://nrel.gov/BuildingMOTIF#")
 CONSTRAINT = Namespace("https://nrel.gov/BuildingMOTIF/constraints#")
-S223 = Namespace("http://data.ashrae.org/standard223#")
 
 A = RDF.type
 
diff --git a/_modules/buildingmotif/template_compilation.html b/_modules/buildingmotif/template_compilation.html
index e8b8a0e86..6ce5c7e04 100644
--- a/_modules/buildingmotif/template_compilation.html
+++ b/_modules/buildingmotif/template_compilation.html
@@ -552,7 +552,7 @@ 

Source code for buildingmotif.template_compilation

ref_name = rdflib.BNode() object_name = PARAM[param + "_object"] G.add((PARAM[param], REF.hasExternalReference, ref_name)) - G.add((ref_name, BACNET["object-identifier"], object_name)) + G.add((ref_name, BACNET["object-identifier"], rdflib.Literal(object_name))) G.add((ref_name, BACNET["objectOf"], PARAM["BACnet_device"])) return G
diff --git a/_modules/buildingmotif/utils.html b/_modules/buildingmotif/utils.html index 8b82e0624..cde6bf557 100644 --- a/_modules/buildingmotif/utils.html +++ b/_modules/buildingmotif/utils.html @@ -616,12 +616,7 @@

Source code for buildingmotif.utils

         searches = (directory.rglob(f"{pat}") for pat in patterns)
     else:
         searches = (directory.glob(f"{pat}") for pat in patterns)
-    # filter out files in .ipynb_checkpoints
-    filtered_searches = (
-        filter(lambda x: ".ipynb_checkpoints" not in Path(x).parts, search)
-        for search in searches
-    )
-    return list(chain.from_iterable(filtered_searches))
+ return list(chain.from_iterable(searches))
[docs]def get_template_parts_from_shape( @@ -654,9 +649,7 @@

Source code for buildingmotif.utils

     for pshape in pshapes:
         property_path = shape_graph.value(pshape, SH["path"])
         if property_path is None:
-            raise Exception(
-                f"no sh:path detected on {shape_name} property shape {pshape}"
-            )
+            raise Exception(f"no sh:path detected on {shape_name}")
         # TODO: expand otypes to include sh:in, sh:or, or no datatype at all!
         otypes = list(
             shape_graph.objects(
@@ -1024,7 +1017,6 @@ 

Source code for buildingmotif.utils

             )
             pass
 
-    data_graph = data_graph + (shape_graph or Graph())
     return pyshacl.validate(
         data_graph,
         shacl_graph=shape_graph,
diff --git a/_modules/index.html b/_modules/index.html
index cb8b617bd..d1a64e811 100644
--- a/_modules/index.html
+++ b/_modules/index.html
@@ -412,7 +412,6 @@ 

All modules for which code is available

- + @@ -1352,8 +1339,6 @@

M

  • buildingmotif.api.views.library
  • buildingmotif.api.views.model -
  • -
  • buildingmotif.api.views.parser
  • buildingmotif.api.views.template
  • diff --git a/guides/generating-queries.html b/guides/generating-queries.html index 307ba74fb..93d1fc4f8 100644 --- a/guides/generating-queries.html +++ b/guides/generating-queries.html @@ -564,7 +564,7 @@

    Setup#

    -
    <Graph identifier=e30c3c73-6b4a-4b91-831e-a9a1f579b874 (<class 'rdflib.graph.Graph'>)>
    +
    <Graph identifier=c97c0001-51e9-406c-93da-edecb36c30ef (<class 'rdflib.graph.Graph'>)>
     
    @@ -621,7 +621,7 @@

    Generating Queries from Shapes
    -
    time="2024-09-16T16:18:34Z" level=warning msg="/home/runner/work/BuildingMOTIF/BuildingMOTIF/docs/guides/docker-compose-bacnet.yml: `version` is obsolete"
    +
    time="2024-09-16T17:00:58Z" level=warning msg="/home/runner/work/BuildingMOTIF/BuildingMOTIF/docs/guides/docker-compose-bacnet.yml: `version` is obsolete"
     
    -
    #2 ...
    -
    -#3 [device auth] library/ubuntu:pull token for registry-1.docker.io
    -#3 DONE 0.0s
    +#2 [device auth] library/ubuntu:pull token for registry-1.docker.io
    +#2 DONE 0.0s
     
    -#2 [device internal] load metadata for docker.io/library/ubuntu:latest
    +#3 [device internal] load metadata for docker.io/library/ubuntu:latest
    +#3 DONE 0.3s
     
    -
    #2 DONE 0.9s
    -
    -#4 [device internal] load .dockerignore
    +
    -
    #6 sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356 18.87MB / 29.71MB 0.2s
    -#6 sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356 29.71MB / 29.71MB 0.3s
    -#6 extracting sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356
    +#6 sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356 27.26MB / 29.71MB 0.3s
     
    -
    #6 sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356 29.71MB / 29.71MB 0.3s done
    +
    #6 sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356 29.71MB / 29.71MB 0.4s done
    +#6 extracting sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356 0.1s
     
    #6 extracting sha256:31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356 0.8s done
    -#6 DONE 1.2s
    +#6 DONE 1.3s
     
     #7 [device 2/6] WORKDIR /opt
     #7 DONE 0.1s
     
    #8 [device 3/6] RUN apt update     && apt install -y     python3     python3-pip     && rm -rf /var/lib/apt/lists/*
    -#8 0.166 
    -#8 0.166 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    -#8 0.166 
    -
    -
    -
    #8 0.437 Get:1 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
    -#8 0.475 Get:2 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
    -
    -
    -
    #8 0.858 Get:3 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [13.7 kB]
    -
    -
    -
    #8 0.951 Get:4 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [402 kB]
    -#8 1.126 Get:5 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [360 kB]
    -#8 1.199 Get:6 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [444 kB]
    -#8 1.258 Get:7 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
    -
    -
    -
    #8 1.449 Get:8 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
    -#8 1.642 Get:9 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
    -
    -
    -
    #8 3.009 Get:10 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]
    -#8 3.107 Get:11 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]
    -#8 3.123 Get:12 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
    -
    -
    -
    #8 3.124 Get:13 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [641 kB]
    -#8 3.155 Get:14 http://archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Packages [17.8 kB]
    -#8 3.156 Get:15 http://archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [402 kB]
    -#8 3.170 Get:16 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [491 kB]
    -#8 3.216 Get:17 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [11.9 kB]
    -
    -
    -
    #8 3.756 Fetched 25.0 MB in 4s (6999 kB/s)
    -#8 3.756 Reading package lists...
    -
    -
    -
    #8 4.318 Building dependency tree...
    -#8 4.435 Reading state information...
    -
    -
    -
    #8 4.447 29 packages can be upgraded. Run 'apt list --upgradable' to see them.
    -#8 4.452 
    -#8 4.452 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    -#8 4.452 
    -#8 4.455 Reading package lists...
    -
    -
    -
    #8 5.012 Building dependency tree...
    -#8 5.131 Reading state information...
    -
    -
    -
    #8 5.288 The following additional packages will be installed:
    -#8 5.288   adduser binutils binutils-common binutils-x86-64-linux-gnu build-essential
    -#8 5.288   bzip2 ca-certificates cpp cpp-13 cpp-13-x86-64-linux-gnu
    -#8 5.288   cpp-x86-64-linux-gnu dirmngr dpkg dpkg-dev fakeroot fontconfig-config
    -#8 5.288   fonts-dejavu-core fonts-dejavu-mono g++ g++-13 g++-13-x86-64-linux-gnu
    -#8 5.288   g++-x86-64-linux-gnu gcc gcc-13 gcc-13-base gcc-13-x86-64-linux-gnu
    -#8 5.288   gcc-x86-64-linux-gnu gnupg gnupg-l10n gnupg-utils gpg gpg-agent
    -#8 5.288   gpg-wks-client gpgconf gpgsm javascript-common keyboxd
    -#8 5.288   libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
    -#8 5.288   libaom3 libasan8 libatomic1 libbinutils libbrotli1 libbsd0 libbz2-1.0
    -#8 5.288   libc-bin libc-dev-bin libc-devtools libc6 libc6-dev libcc1-0 libcrypt-dev
    -#8 5.288   libctf-nobfd0 libctf0 libde265-0 libdeflate0 libdpkg-perl libexpat1
    -#8 5.288   libexpat1-dev libfakeroot libfile-fcntllock-perl libfontconfig1 libfreetype6
    -#8 5.288   libgcc-13-dev libgd3 libgdbm-compat4t64 libgdbm6t64 libgomp1 libgprofng0
    -#8 5.288   libheif-plugin-aomdec libheif-plugin-aomenc libheif-plugin-libde265 libheif1
    -#8 5.288   libhwasan0 libisl23 libitm1 libjansson4 libjbig0 libjpeg-turbo8 libjpeg8
    -#8 5.288   libjs-jquery libjs-sphinxdoc libjs-underscore libksba8 libldap-common
    -#8 5.288   libldap2 liblerc4 liblocale-gettext-perl liblsan0 liblzma5 libmpc3 libmpfr6
    -#8 5.288   libperl5.38t64 libpng16-16t64 libpython3-dev libpython3-stdlib
    -#8 5.288   libpython3.12-dev libpython3.12-minimal libpython3.12-stdlib
    -#8 5.288   libpython3.12t64 libquadmath0 libreadline8t64 libsasl2-2 libsasl2-modules
    -#8 5.288   libsasl2-modules-db libsframe1 libsharpyuv0 libsqlite3-0 libssl3t64
    -#8 5.288   libstdc++-13-dev libtiff6 libtsan2 libubsan1 libwebp7 libx11-6 libx11-data
    -#8 5.289   libxau6 libxcb1 libxdmcp6 libxpm4 linux-libc-dev lto-disabled-list make
    -#8 5.289   manpages manpages-dev media-types netbase openssl patch perl
    -#8 5.289   perl-modules-5.38 pinentry-curses python3-dev python3-minimal
    -#8 5.289   python3-pkg-resources python3-setuptools python3-wheel python3.12
    -#8 5.289   python3.12-dev python3.12-minimal readline-common rpcsvc-proto tzdata
    -#8 5.289   xz-utils zlib1g zlib1g-dev
    -#8 5.290 Suggested packages:
    -#8 5.290   cron quota ecryptfs-utils binutils-doc gprofng-gui bzip2-doc cpp-doc
    -#8 5.290   gcc-13-locales cpp-13-doc dbus-user-session libpam-systemd pinentry-gnome3
    -#8 5.290   tor debsig-verify debian-keyring g++-multilib g++-13-multilib gcc-13-doc
    -#8 5.290   gcc-multilib autoconf automake libtool flex bison gdb gcc-doc
    -#8 5.290   gcc-13-multilib gdb-x86-64-linux-gnu parcimonie xloadimage gpg-wks-server
    -#8 5.290   scdaemon apache2 | lighttpd | httpd glibc-doc locales libnss-nis
    -#8 5.290   libnss-nisplus git bzr libgd-tools gdbm-l10n libheif-plugin-x265
    -#8 5.290   libheif-plugin-ffmpegdec libheif-plugin-jpegdec libheif-plugin-jpegenc
    -#8 5.290   libheif-plugin-j2kdec libheif-plugin-j2kenc libheif-plugin-rav1e
    -#8 5.290   libheif-plugin-svtenc libsasl2-modules-gssapi-mit
    -#8 5.290   | libsasl2-modules-gssapi-heimdal libsasl2-modules-ldap libsasl2-modules-otp
    -#8 5.290   libsasl2-modules-sql libstdc++-13-doc make-doc man-browser ed diffutils-doc
    -#8 5.290   perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl
    -#8 5.290   libtap-harness-archive-perl pinentry-doc python3-doc python3-tk python3-venv
    -#8 5.290   python-setuptools-doc python3.12-venv python3.12-doc binfmt-support
    -#8 5.290   readline-doc
    -#8 5.450 The following NEW packages will be installed:
    -#8 5.450   adduser binutils binutils-common binutils-x86-64-linux-gnu build-essential
    -#8 5.450   bzip2 ca-certificates cpp cpp-13 cpp-13-x86-64-linux-gnu
    -#8 5.450   cpp-x86-64-linux-gnu dirmngr dpkg-dev fakeroot fontconfig-config
    -#8 5.450   fonts-dejavu-core fonts-dejavu-mono g++ g++-13 g++-13-x86-64-linux-gnu
    -
    -
    -
    #8 5.450   g++-x86-64-linux-gnu gcc gcc-13 gcc-13-base gcc-13-x86-64-linux-gnu
    -#8 5.450   gcc-x86-64-linux-gnu gnupg gnupg-l10n gnupg-utils gpg gpg-agent
    -#8 5.450   gpg-wks-client gpgconf gpgsm javascript-common keyboxd
    -#8 5.450   libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
    -#8 5.450   libaom3 libasan8 libatomic1 libbinutils libbrotli1 libbsd0 libc-dev-bin
    -#8 5.450   libc-devtools libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0
    -#8 5.450   libde265-0 libdeflate0 libdpkg-perl libexpat1 libexpat1-dev libfakeroot
    -#8 5.450   libfile-fcntllock-perl libfontconfig1 libfreetype6 libgcc-13-dev libgd3
    -#8 5.450   libgdbm-compat4t64 libgdbm6t64 libgomp1 libgprofng0 libheif-plugin-aomdec
    -#8 5.450   libheif-plugin-aomenc libheif-plugin-libde265 libheif1 libhwasan0 libisl23
    -#8 5.450   libitm1 libjansson4 libjbig0 libjpeg-turbo8 libjpeg8 libjs-jquery
    -#8 5.450   libjs-sphinxdoc libjs-underscore libksba8 libldap-common libldap2 liblerc4
    -#8 5.450   liblocale-gettext-perl liblsan0 libmpc3 libmpfr6 libperl5.38t64
    -#8 5.450   libpng16-16t64 libpython3-dev libpython3-stdlib libpython3.12-dev
    -#8 5.450   libpython3.12-minimal libpython3.12-stdlib libpython3.12t64 libquadmath0
    -#8 5.451   libreadline8t64 libsasl2-2 libsasl2-modules libsasl2-modules-db libsframe1
    -#8 5.451   libsharpyuv0 libsqlite3-0 libstdc++-13-dev libtiff6 libtsan2 libubsan1
    -#8 5.451   libwebp7 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxpm4
    -#8 5.451   linux-libc-dev lto-disabled-list make manpages manpages-dev media-types
    -#8 5.451   netbase openssl patch perl perl-modules-5.38 pinentry-curses python3
    -#8 5.451   python3-dev python3-minimal python3-pip python3-pkg-resources
    -#8 5.451   python3-setuptools python3-wheel python3.12 python3.12-dev
    -#8 5.451   python3.12-minimal readline-common rpcsvc-proto tzdata xz-utils zlib1g-dev
    -#8 5.451 The following packages will be upgraded:
    -#8 5.452   dpkg libbz2-1.0 libc-bin libc6 liblzma5 libssl3t64 zlib1g
    -#8 5.769 7 upgraded, 143 newly installed, 0 to remove and 22 not upgraded.
    -#8 5.769 Need to get 122 MB of archives.
    -#8 5.769 After this operation, 437 MB of additional disk space will be used.
    -#8 5.769 Get:1 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dpkg amd64 1.22.6ubuntu6.1 [1283 kB]
    -
    -
    -
    #8 6.888 Get:2 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc6 amd64 2.39-0ubuntu8.3 [3265 kB]
    -
    -
    -
    #8 7.176 Get:3 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc-bin amd64 2.39-0ubuntu8.3 [722 kB]
    -#8 7.201 Get:4 http://archive.ubuntu.com/ubuntu noble/main amd64 liblocale-gettext-perl amd64 1.07-6ubuntu5 [15.8 kB]
    -#8 7.202 Get:5 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libssl3t64 amd64 3.0.13-0ubuntu3.4 [1940 kB]
    -#8 7.315 Get:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12-minimal amd64 3.12.3-1ubuntu0.2 [834 kB]
    -
    -
    -
    #8 7.343 Get:7 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libexpat1 amd64 2.6.1-2ubuntu0.1 [87.1 kB]
    -#8 7.348 Get:8 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 zlib1g amd64 1:1.3.dfsg-3.1ubuntu2.1 [62.9 kB]
    -#8 7.349 Get:9 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3.12-minimal amd64 3.12.3-1ubuntu0.2 [2343 kB]
    -#8 7.477 Get:10 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-minimal amd64 3.12.3-0ubuntu2 [27.4 kB]
    -#8 7.478 Get:11 http://archive.ubuntu.com/ubuntu noble/main amd64 media-types all 10.1.0 [27.5 kB]
    -#8 7.479 Get:12 http://archive.ubuntu.com/ubuntu noble/main amd64 netbase all 6.4 [13.1 kB]
    -#8 7.479 Get:13 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 tzdata all 2024a-3ubuntu1.1 [273 kB]
    -#8 7.487 Get:14 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libbz2-1.0 amd64 1.0.8-5.1build0.1 [34.4 kB]
    -#8 7.487 Get:15 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liblzma5 amd64 5.6.1+really5.4.5-1build0.1 [127 kB]
    -#8 7.610 Get:16 http://archive.ubuntu.com/ubuntu noble/main amd64 readline-common all 8.2-4build1 [56.5 kB]
    -
    -
    -
    #8 7.611 Get:17 http://archive.ubuntu.com/ubuntu noble/main amd64 libreadline8t64 amd64 8.2-4build1 [153 kB]
    -#8 7.613 Get:18 http://archive.ubuntu.com/ubuntu noble/main amd64 libsqlite3-0 amd64 3.45.1-1ubuntu2 [701 kB]
    -#8 7.753 Get:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12-stdlib amd64 3.12.3-1ubuntu0.2 [2069 kB]
    -#8 7.788 Get:20 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3.12 amd64 3.12.3-1ubuntu0.2 [651 kB]
    -#8 7.799 Get:21 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3-stdlib amd64 3.12.3-0ubuntu2 [10.0 kB]
    -#8 7.799 Get:22 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3 amd64 3.12.3-0ubuntu2 [23.0 kB]
    -#8 7.800 Get:23 http://archive.ubuntu.com/ubuntu noble/main amd64 perl-modules-5.38 all 5.38.2-3.2build2 [3110 kB]
    -
    -
    -
    #8 8.043 Get:24 http://archive.ubuntu.com/ubuntu noble/main amd64 libgdbm6t64 amd64 1.23-5.1build1 [34.4 kB]
    -#8 8.044 Get:25 http://archive.ubuntu.com/ubuntu noble/main amd64 libgdbm-compat4t64 amd64 1.23-5.1build1 [6710 B]
    -#8 8.045 Get:26 http://archive.ubuntu.com/ubuntu noble/main amd64 libperl5.38t64 amd64 5.38.2-3.2build2 [4873 kB]
    -#8 8.225 Get:27 http://archive.ubuntu.com/ubuntu noble/main amd64 perl amd64 5.38.2-3.2build2 [231 kB]
    -
    -
    -
    #8 8.228 Get:28 http://archive.ubuntu.com/ubuntu noble/main amd64 adduser all 3.137ubuntu1 [101 kB]
    -#8 8.230 Get:29 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 openssl amd64 3.0.13-0ubuntu3.4 [1003 kB]
    -#8 8.341 Get:30 http://archive.ubuntu.com/ubuntu noble/main amd64 ca-certificates all 20240203 [159 kB]
    -#8 8.343 Get:31 http://archive.ubuntu.com/ubuntu noble/main amd64 libbsd0 amd64 0.12.1-1build1 [41.2 kB]
    -#8 8.345 Get:32 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-pkg-resources all 68.1.2-2ubuntu1.1 [168 kB]
    -#8 8.348 Get:33 http://archive.ubuntu.com/ubuntu noble/main amd64 libjansson4 amd64 2.14-2build2 [32.8 kB]
    -#8 8.356 Get:34 http://archive.ubuntu.com/ubuntu noble/main amd64 libpng16-16t64 amd64 1.6.43-5build1 [187 kB]
    -#8 8.359 Get:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libxau6 amd64 1:1.0.9-1build6 [7160 B]
    -#8 8.471 Get:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libxdmcp6 amd64 1:1.1.3-0ubuntu6 [10.3 kB]
    -
    -
    -
    #8 8.472 Get:37 http://archive.ubuntu.com/ubuntu noble/main amd64 libxcb1 amd64 1.15-1ubuntu2 [47.7 kB]
    -#8 8.473 Get:38 http://archive.ubuntu.com/ubuntu noble/main amd64 libx11-data all 2:1.8.7-1build1 [115 kB]
    -#8 8.614 Get:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libx11-6 amd64 2:1.8.7-1build1 [650 kB]
    -#8 8.625 Get:40 http://archive.ubuntu.com/ubuntu noble/main amd64 manpages all 6.7-2 [1384 kB]
    -#8 8.648 Get:41 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 xz-utils amd64 5.6.1+really5.4.5-1build0.1 [267 kB]
    -#8 8.653 Get:42 http://archive.ubuntu.com/ubuntu noble/main amd64 binutils-common amd64 2.42-4ubuntu2 [239 kB]
    -#8 8.656 Get:43 http://archive.ubuntu.com/ubuntu noble/main amd64 libsframe1 amd64 2.42-4ubuntu2 [14.8 kB]
    -#8 8.657 Get:44 http://archive.ubuntu.com/ubuntu noble/main amd64 libbinutils amd64 2.42-4ubuntu2 [572 kB]
    -#8 8.762 Get:45 http://archive.ubuntu.com/ubuntu noble/main amd64 libctf-nobfd0 amd64 2.42-4ubuntu2 [97.1 kB]
    -
    -
    -
    #8 8.764 Get:46 http://archive.ubuntu.com/ubuntu noble/main amd64 libctf0 amd64 2.42-4ubuntu2 [94.5 kB]
    -#8 8.765 Get:47 http://archive.ubuntu.com/ubuntu noble/main amd64 libgprofng0 amd64 2.42-4ubuntu2 [851 kB]
    -#8 8.780 Get:48 http://archive.ubuntu.com/ubuntu noble/main amd64 binutils-x86-64-linux-gnu amd64 2.42-4ubuntu2 [2469 kB]
    -#8 8.918 Get:49 http://archive.ubuntu.com/ubuntu noble/main amd64 binutils amd64 2.42-4ubuntu2 [18.0 kB]
    -#8 8.919 Get:50 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc-dev-bin amd64 2.39-0ubuntu8.3 [60.8 kB]
    -#8 8.920 Get:51 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 linux-libc-dev amd64 6.8.0-44.44 [1698 kB]
    -#8 8.948 Get:52 http://archive.ubuntu.com/ubuntu noble/main amd64 libcrypt-dev amd64 1:4.4.36-4build1 [112 kB]
    -#8 8.950 Get:53 http://archive.ubuntu.com/ubuntu noble/main amd64 rpcsvc-proto amd64 1.4.2-0ubuntu7 [67.4 kB]
    -#8 9.045 Get:54 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc6-dev amd64 2.39-0ubuntu8.3 [2164 kB]
    -
    -
    -
    #8 9.083 Get:55 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-13-base amd64 13.2.0-23ubuntu4 [49.0 kB]
    -#8 9.084 Get:56 http://archive.ubuntu.com/ubuntu noble/main amd64 libisl23 amd64 0.26-3build1 [680 kB]
    -#8 9.190 Get:57 http://archive.ubuntu.com/ubuntu noble/main amd64 libmpfr6 amd64 4.2.1-1build1 [355 kB]
    -#8 9.197 Get:58 http://archive.ubuntu.com/ubuntu noble/main amd64 libmpc3 amd64 1.3.1-1build1 [54.5 kB]
    -#8 9.198 Get:59 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp-13-x86-64-linux-gnu amd64 13.2.0-23ubuntu4 [11.2 MB]
    -
    -
    -
    #8 9.772 Get:60 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp-13 amd64 13.2.0-23ubuntu4 [1032 B]
    -#8 9.772 Get:61 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [5326 B]
    -#8 9.773 Get:62 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp amd64 4:13.2.0-7ubuntu1 [22.4 kB]
    -#8 9.774 Get:63 http://archive.ubuntu.com/ubuntu noble/main amd64 libcc1-0 amd64 14-20240412-0ubuntu1 [47.7 kB]
    -#8 9.774 Get:64 http://archive.ubuntu.com/ubuntu noble/main amd64 libgomp1 amd64 14-20240412-0ubuntu1 [147 kB]
    -#8 9.775 Get:65 http://archive.ubuntu.com/ubuntu noble/main amd64 libitm1 amd64 14-20240412-0ubuntu1 [28.9 kB]
    -#8 9.776 Get:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libatomic1 amd64 14-20240412-0ubuntu1 [10.4 kB]
    -#8 9.776 Get:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libasan8 amd64 14-20240412-0ubuntu1 [3024 kB]
    -#8 9.922 Get:68 http://archive.ubuntu.com/ubuntu noble/main amd64 liblsan0 amd64 14-20240412-0ubuntu1 [1313 kB]
    -
    -
    -
    #8 9.944 Get:69 http://archive.ubuntu.com/ubuntu noble/main amd64 libtsan2 amd64 14-20240412-0ubuntu1 [2736 kB]
    -#8 10.09 Get:70 http://archive.ubuntu.com/ubuntu noble/main amd64 libubsan1 amd64 14-20240412-0ubuntu1 [1175 kB]
    -#8 10.20 Get:71 http://archive.ubuntu.com/ubuntu noble/main amd64 libhwasan0 amd64 14-20240412-0ubuntu1 [1632 kB]
    -
    -
    -
    #8 10.23 Get:72 http://archive.ubuntu.com/ubuntu noble/main amd64 libquadmath0 amd64 14-20240412-0ubuntu1 [153 kB]
    -#8 10.23 Get:73 http://archive.ubuntu.com/ubuntu noble/main amd64 libgcc-13-dev amd64 13.2.0-23ubuntu4 [2688 kB]
    -#8 10.38 Get:74 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-13-x86-64-linux-gnu amd64 13.2.0-23ubuntu4 [21.9 MB]
    -
    -
    -
    #8 11.52 Get:75 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-13 amd64 13.2.0-23ubuntu4 [482 kB]
    -#8 11.52 Get:76 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [1212 B]
    -#8 11.52 Get:77 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc amd64 4:13.2.0-7ubuntu1 [5018 B]
    -#8 11.52 Get:78 http://archive.ubuntu.com/ubuntu noble/main amd64 libstdc++-13-dev amd64 13.2.0-23ubuntu4 [2399 kB]
    -#8 11.67 Get:79 http://archive.ubuntu.com/ubuntu noble/main amd64 g++-13-x86-64-linux-gnu amd64 13.2.0-23ubuntu4 [12.5 MB]
    -
    -
    -
    #8 12.35 Get:80 http://archive.ubuntu.com/ubuntu noble/main amd64 g++-13 amd64 13.2.0-23ubuntu4 [14.5 kB]
    -#8 12.35 Get:81 http://archive.ubuntu.com/ubuntu noble/main amd64 g++-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [964 B]
    -#8 12.35 Get:82 http://archive.ubuntu.com/ubuntu noble/main amd64 g++ amd64 4:13.2.0-7ubuntu1 [1100 B]
    -#8 12.35 Get:83 http://archive.ubuntu.com/ubuntu noble/main amd64 make amd64 4.3-4.1build2 [180 kB]
    -#8 12.35 Get:84 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdpkg-perl all 1.22.6ubuntu6.1 [269 kB]
    -#8 12.36 Get:85 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 bzip2 amd64 1.0.8-5.1build0.1 [34.5 kB]
    -#8 12.36 Get:86 http://archive.ubuntu.com/ubuntu noble/main amd64 patch amd64 2.7.6-7build3 [104 kB]
    -#8 12.36 Get:87 http://archive.ubuntu.com/ubuntu noble/main amd64 lto-disabled-list all 47 [12.4 kB]
    -#8 12.36 Get:88 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dpkg-dev all 1.22.6ubuntu6.1 [1074 kB]
    -#8 12.49 Get:89 http://archive.ubuntu.com/ubuntu noble/main amd64 build-essential amd64 12.10ubuntu1 [4928 B]
    -
    -
    -
    #8 12.64 Get:90 http://archive.ubuntu.com/ubuntu noble/main amd64 gpgconf amd64 2.4.4-2ubuntu17 [103 kB]
    -#8 12.64 Get:91 http://archive.ubuntu.com/ubuntu noble/main amd64 libksba8 amd64 1.6.6-1build1 [122 kB]
    -#8 12.64 Get:92 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsasl2-modules-db amd64 2.1.28+dfsg1-5ubuntu3.1 [20.4 kB]
    -#8 12.64 Get:93 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsasl2-2 amd64 2.1.28+dfsg1-5ubuntu3.1 [53.2 kB]
    -#8 12.64 Get:94 http://archive.ubuntu.com/ubuntu noble/main amd64 libldap2 amd64 2.6.7+dfsg-1~exp1ubuntu8 [195 kB]
    -#8 12.65 Get:95 http://archive.ubuntu.com/ubuntu noble/main amd64 dirmngr amd64 2.4.4-2ubuntu17 [323 kB]
    -#8 12.65 Get:96 http://archive.ubuntu.com/ubuntu noble/main amd64 libfakeroot amd64 1.33-1 [32.4 kB]
    -#8 12.65 Get:97 http://archive.ubuntu.com/ubuntu noble/main amd64 fakeroot amd64 1.33-1 [67.2 kB]
    -#8 12.65 Get:98 http://archive.ubuntu.com/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB]
    -#8 12.78 Get:99 http://archive.ubuntu.com/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB]
    -
    -
    -
    #8 12.92 Get:100 http://archive.ubuntu.com/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1.1ubuntu2 [37.3 kB]
    -#8 12.92 Get:101 http://archive.ubuntu.com/ubuntu noble/main amd64 gnupg-utils amd64 2.4.4-2ubuntu17 [108 kB]
    -#8 13.09 Get:102 http://archive.ubuntu.com/ubuntu noble/main amd64 gpg amd64 2.4.4-2ubuntu17 [565 kB]
    -
    -
    -
    #8 13.63 Get:103 http://archive.ubuntu.com/ubuntu noble/main amd64 pinentry-curses amd64 1.2.1-3ubuntu5 [35.2 kB]
    -#8 13.64 Get:104 http://archive.ubuntu.com/ubuntu noble/main amd64 gpg-agent amd64 2.4.4-2ubuntu17 [227 kB]
    -#8 13.67 Get:105 http://archive.ubuntu.com/ubuntu noble/main amd64 gpgsm amd64 2.4.4-2ubuntu17 [232 kB]
    -#8 13.69 Get:106 http://archive.ubuntu.com/ubuntu noble/main amd64 keyboxd amd64 2.4.4-2ubuntu17 [78.3 kB]
    -#8 13.69 Get:107 http://archive.ubuntu.com/ubuntu noble/main amd64 gnupg all 2.4.4-2ubuntu17 [359 kB]
    -#8 13.75 Get:108 http://archive.ubuntu.com/ubuntu noble/main amd64 gnupg-l10n all 2.4.4-2ubuntu17 [65.9 kB]
    -
    -
    -
    #8 13.76 Get:109 http://archive.ubuntu.com/ubuntu noble/main amd64 gpg-wks-client amd64 2.4.4-2ubuntu17 [70.9 kB]
    -#8 13.77 Get:110 http://archive.ubuntu.com/ubuntu noble/main amd64 javascript-common all 11+nmu1 [5936 B]
    -#8 13.77 Get:111 http://archive.ubuntu.com/ubuntu noble/main amd64 libalgorithm-diff-perl all 1.201-1 [41.8 kB]
    -#8 13.77 Get:112 http://archive.ubuntu.com/ubuntu noble/main amd64 libalgorithm-diff-xs-perl amd64 0.04-8build3 [11.2 kB]
    -#8 13.80 Get:113 http://archive.ubuntu.com/ubuntu noble/main amd64 libalgorithm-merge-perl all 0.08-5 [11.4 kB]
    -#8 13.80 Get:114 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libaom3 amd64 3.8.2-2ubuntu0.1 [1941 kB]
    -#8 13.90 Get:115 http://archive.ubuntu.com/ubuntu noble/main amd64 libbrotli1 amd64 1.1.0-2build2 [331 kB]
    -#8 13.91 Get:116 http://archive.ubuntu.com/ubuntu noble/main amd64 libfreetype6 amd64 2.13.2+dfsg-1build3 [402 kB]
    -#8 13.92 Get:117 http://archive.ubuntu.com/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1.1ubuntu2 [139 kB]
    -#8 13.92 Get:118 http://archive.ubuntu.com/ubuntu noble/main amd64 libsharpyuv0 amd64 1.3.2-0.4build3 [15.8 kB]
    -#8 13.92 Get:119 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif-plugin-aomdec amd64 1.17.6-1ubuntu4 [10.3 kB]
    -#8 13.92 Get:120 http://archive.ubuntu.com/ubuntu noble/main amd64 libde265-0 amd64 1.0.15-1build3 [166 kB]
    -#8 13.93 Get:121 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif-plugin-libde265 amd64 1.17.6-1ubuntu4 [8158 B]
    -#8 13.93 Get:122 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif1 amd64 1.17.6-1ubuntu4 [276 kB]
    -#8 13.96 Get:123 http://archive.ubuntu.com/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu2 [150 kB]
    -#8 14.04 Get:124 http://archive.ubuntu.com/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B]
    -
    -
    -
    #8 14.04 Get:125 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdeflate0 amd64 1.19-1build1.1 [43.9 kB]
    -#8 14.04 Get:126 http://archive.ubuntu.com/ubuntu noble/main amd64 libjbig0 amd64 2.1-6.1ubuntu2 [29.7 kB]
    -#8 14.04 Get:127 http://archive.ubuntu.com/ubuntu noble/main amd64 liblerc4 amd64 4.0.0+ds-4ubuntu2 [179 kB]
    -#8 14.04 Get:128 http://archive.ubuntu.com/ubuntu noble/main amd64 libwebp7 amd64 1.3.2-0.4build3 [230 kB]
    -#8 14.05 Get:129 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libtiff6 amd64 4.5.1+git230720-4ubuntu2.2 [199 kB]
    -#8 14.05 Get:130 http://archive.ubuntu.com/ubuntu noble/main amd64 libxpm4 amd64 1:3.5.17-1build2 [36.5 kB]
    -#8 14.05 Get:131 http://archive.ubuntu.com/ubuntu noble/main amd64 libgd3 amd64 2.3.3-9ubuntu5 [128 kB]
    -#8 14.05 Get:132 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc-devtools amd64 2.39-0ubuntu8.3 [69.7 kB]
    -#8 14.12 Get:133 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libexpat1-dev amd64 2.6.1-2ubuntu0.1 [139 kB]
    -#8 14.13 Get:134 http://archive.ubuntu.com/ubuntu noble/main amd64 libfile-fcntllock-perl amd64 0.22-4ubuntu5 [30.7 kB]
    -#8 14.13 Get:135 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif-plugin-aomenc amd64 1.17.6-1ubuntu4 [14.7 kB]
    -#8 14.13 Get:136 http://archive.ubuntu.com/ubuntu noble/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB]
    -#8 14.14 Get:137 http://archive.ubuntu.com/ubuntu noble/main amd64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB]
    -#8 14.14 Get:138 http://archive.ubuntu.com/ubuntu noble/main amd64 libjs-sphinxdoc all 7.2.6-6 [149 kB]
    -#8 14.14 Get:139 http://archive.ubuntu.com/ubuntu noble/main amd64 libldap-common all 2.6.7+dfsg-1~exp1ubuntu8 [31.4 kB]
    -#8 14.14 Get:140 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12t64 amd64 3.12.3-1ubuntu0.2 [2339 kB]
    -#8 14.24 Get:141 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 zlib1g-dev amd64 1:1.3.dfsg-3.1ubuntu2.1 [894 kB]
    -#8 14.29 Get:142 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12-dev amd64 3.12.3-1ubuntu0.2 [5672 kB]
    -
    -
    -
    #8 14.45 Get:143 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3-dev amd64 3.12.3-0ubuntu2 [10.3 kB]
    -
    -
    -
    #8 14.45 Get:144 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsasl2-modules amd64 2.1.28+dfsg1-5ubuntu3.1 [69.9 kB]
    -#8 14.46 Get:145 http://archive.ubuntu.com/ubuntu noble/main amd64 manpages-dev all 6.7-2 [2013 kB]
    -#8 14.49 Get:146 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3.12-dev amd64 3.12.3-1ubuntu0.2 [498 kB]
    -#8 14.53 Get:147 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-dev amd64 3.12.3-0ubuntu2 [26.7 kB]
    -#8 14.53 Get:148 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-setuptools all 68.1.2-2ubuntu1.1 [396 kB]
    -#8 14.54 Get:149 http://archive.ubuntu.com/ubuntu noble/universe amd64 python3-wheel all 0.42.0-2 [53.1 kB]
    -#8 14.54 Get:150 http://archive.ubuntu.com/ubuntu noble/universe amd64 python3-pip all 24.0+dfsg-1ubuntu1 [1316 kB]
    -#8 14.67 debconf: delaying package configuration, since apt-utils is not installed
    -#8 14.69 Fetched 122 MB in 9s (13.5 MB/s)
    -#8 14.70 (Reading database ... 
    +#8 0.183 
    +#8 0.183 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    +#8 0.183 
    +#8 0.227 Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
    +#8 0.292 Get:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
    +
    +
    +
    #8 0.308 Get:3 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
    +#8 0.357 Get:4 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]
    +#8 0.417 Get:5 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
    +#8 0.419 Get:6 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
    +#8 0.431 Get:7 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
    +#8 0.512 Get:8 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]
    +#8 0.514 Get:9 http://archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Packages [17.8 kB]
    +#8 0.515 Get:10 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [491 kB]
    +#8 0.517 Get:11 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [641 kB]
    +#8 0.520 Get:12 http://archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [402 kB]
    +
    +
    +
    #8 0.525 Get:13 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [11.9 kB]
    +#8 0.814 Get:14 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [360 kB]
    +
    +
    +
    #8 1.045 Get:15 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [444 kB]
    +#8 1.102 Get:16 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [402 kB]
    +#8 1.169 Get:17 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [13.7 kB]
    +
    +
    +
    #8 1.226 Fetched 25.0 MB in 1s (24.4 MB/s)
    +#8 1.226 Reading package lists...
    +
    +
    +
    #8 1.770 Building dependency tree...
    +#8 1.877 Reading state information...
    +
    +
    +
    #8 1.890 29 packages can be upgraded. Run 'apt list --upgradable' to see them.
    +#8 1.894 
    +#8 1.894 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    +#8 1.894 
    +#8 1.896 Reading package lists...
    +
    +
    +
    #8 2.431 Building dependency tree...
    +#8 2.539 Reading state information...
    +
    +
    +
    #8 2.682 The following additional packages will be installed:
    +#8 2.682   adduser binutils binutils-common binutils-x86-64-linux-gnu build-essential
    +#8 2.682   bzip2 ca-certificates cpp cpp-13 cpp-13-x86-64-linux-gnu
    +#8 2.682   cpp-x86-64-linux-gnu dirmngr dpkg dpkg-dev fakeroot fontconfig-config
    +#8 2.682   fonts-dejavu-core fonts-dejavu-mono g++ g++-13 g++-13-x86-64-linux-gnu
    +#8 2.682   g++-x86-64-linux-gnu gcc gcc-13 gcc-13-base gcc-13-x86-64-linux-gnu
    +#8 2.682   gcc-x86-64-linux-gnu gnupg gnupg-l10n gnupg-utils gpg gpg-agent
    +#8 2.682   gpg-wks-client gpgconf gpgsm javascript-common keyboxd
    +#8 2.682   libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
    +#8 2.682   libaom3 libasan8 libatomic1 libbinutils libbrotli1 libbsd0 libbz2-1.0
    +#8 2.683   libc-bin libc-dev-bin libc-devtools libc6 libc6-dev libcc1-0 libcrypt-dev
    +#8 2.683   libctf-nobfd0 libctf0 libde265-0 libdeflate0 libdpkg-perl libexpat1
    +#8 2.683   libexpat1-dev libfakeroot libfile-fcntllock-perl libfontconfig1 libfreetype6
    +#8 2.683   libgcc-13-dev libgd3 libgdbm-compat4t64 libgdbm6t64 libgomp1 libgprofng0
    +#8 2.683   libheif-plugin-aomdec libheif-plugin-aomenc libheif-plugin-libde265 libheif1
    +#8 2.683   libhwasan0 libisl23 libitm1 libjansson4 libjbig0 libjpeg-turbo8 libjpeg8
    +#8 2.683   libjs-jquery libjs-sphinxdoc libjs-underscore libksba8 libldap-common
    +#8 2.683   libldap2 liblerc4 liblocale-gettext-perl liblsan0 liblzma5 libmpc3 libmpfr6
    +#8 2.683   libperl5.38t64 libpng16-16t64 libpython3-dev libpython3-stdlib
    +#8 2.683   libpython3.12-dev libpython3.12-minimal libpython3.12-stdlib
    +#8 2.683   libpython3.12t64 libquadmath0 libreadline8t64 libsasl2-2 libsasl2-modules
    +#8 2.683   libsasl2-modules-db libsframe1 libsharpyuv0 libsqlite3-0 libssl3t64
    +#8 2.683   libstdc++-13-dev libtiff6 libtsan2 libubsan1 libwebp7 libx11-6 libx11-data
    +#8 2.683   libxau6 libxcb1 libxdmcp6 libxpm4 linux-libc-dev lto-disabled-list make
    +#8 2.683   manpages manpages-dev media-types netbase openssl patch perl
    +#8 2.683   perl-modules-5.38 pinentry-curses python3-dev python3-minimal
    +#8 2.683   python3-pkg-resources python3-setuptools python3-wheel python3.12
    +#8 2.683   python3.12-dev python3.12-minimal readline-common rpcsvc-proto tzdata
    +#8 2.683   xz-utils zlib1g zlib1g-dev
    +#8 2.684 Suggested packages:
    +#8 2.684   cron quota ecryptfs-utils binutils-doc gprofng-gui bzip2-doc cpp-doc
    +#8 2.684   gcc-13-locales cpp-13-doc dbus-user-session libpam-systemd pinentry-gnome3
    +#8 2.684   tor debsig-verify debian-keyring g++-multilib g++-13-multilib gcc-13-doc
    +#8 2.684   gcc-multilib autoconf automake libtool flex bison gdb gcc-doc
    +#8 2.684   gcc-13-multilib gdb-x86-64-linux-gnu parcimonie xloadimage gpg-wks-server
    +#8 2.684   scdaemon apache2 | lighttpd | httpd glibc-doc locales libnss-nis
    +#8 2.684   libnss-nisplus git bzr libgd-tools gdbm-l10n libheif-plugin-x265
    +#8 2.684   libheif-plugin-ffmpegdec libheif-plugin-jpegdec libheif-plugin-jpegenc
    +#8 2.684   libheif-plugin-j2kdec libheif-plugin-j2kenc libheif-plugin-rav1e
    +#8 2.684   libheif-plugin-svtenc libsasl2-modules-gssapi-mit
    +#8 2.684   | libsasl2-modules-gssapi-heimdal libsasl2-modules-ldap libsasl2-modules-otp
    +#8 2.684   libsasl2-modules-sql libstdc++-13-doc make-doc man-browser ed diffutils-doc
    +#8 2.684   perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl
    +#8 2.684   libtap-harness-archive-perl pinentry-doc python3-doc python3-tk python3-venv
    +#8 2.684   python-setuptools-doc python3.12-venv python3.12-doc binfmt-support
    +#8 2.684   readline-doc
    +#8 2.836 The following NEW packages will be installed:
    +#8 2.836   adduser binutils binutils-common binutils-x86-64-linux-gnu build-essential
    +#8 2.836   bzip2 ca-certificates cpp cpp-13 cpp-13-x86-64-linux-gnu
    +
    +
    +
    #8 2.837   cpp-x86-64-linux-gnu dirmngr dpkg-dev fakeroot fontconfig-config
    +#8 2.837   fonts-dejavu-core fonts-dejavu-mono g++ g++-13 g++-13-x86-64-linux-gnu
    +#8 2.837   g++-x86-64-linux-gnu gcc gcc-13 gcc-13-base gcc-13-x86-64-linux-gnu
    +#8 2.837   gcc-x86-64-linux-gnu gnupg gnupg-l10n gnupg-utils gpg gpg-agent
    +#8 2.837   gpg-wks-client gpgconf gpgsm javascript-common keyboxd
    +#8 2.837   libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
    +#8 2.837   libaom3 libasan8 libatomic1 libbinutils libbrotli1 libbsd0 libc-dev-bin
    +#8 2.837   libc-devtools libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0
    +#8 2.837   libde265-0 libdeflate0 libdpkg-perl libexpat1 libexpat1-dev libfakeroot
    +#8 2.837   libfile-fcntllock-perl libfontconfig1 libfreetype6 libgcc-13-dev libgd3
    +#8 2.837   libgdbm-compat4t64 libgdbm6t64 libgomp1 libgprofng0 libheif-plugin-aomdec
    +#8 2.837   libheif-plugin-aomenc libheif-plugin-libde265 libheif1 libhwasan0 libisl23
    +#8 2.837   libitm1 libjansson4 libjbig0 libjpeg-turbo8 libjpeg8 libjs-jquery
    +#8 2.837   libjs-sphinxdoc libjs-underscore libksba8 libldap-common libldap2 liblerc4
    +#8 2.837   liblocale-gettext-perl liblsan0 libmpc3 libmpfr6 libperl5.38t64
    +#8 2.837   libpng16-16t64 libpython3-dev libpython3-stdlib libpython3.12-dev
    +#8 2.837   libpython3.12-minimal libpython3.12-stdlib libpython3.12t64 libquadmath0
    +#8 2.837   libreadline8t64 libsasl2-2 libsasl2-modules libsasl2-modules-db libsframe1
    +#8 2.838   libsharpyuv0 libsqlite3-0 libstdc++-13-dev libtiff6 libtsan2 libubsan1
    +#8 2.838   libwebp7 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxpm4
    +#8 2.838   linux-libc-dev lto-disabled-list make manpages manpages-dev media-types
    +#8 2.838   netbase openssl patch perl perl-modules-5.38 pinentry-curses python3
    +#8 2.838   python3-dev python3-minimal python3-pip python3-pkg-resources
    +#8 2.838   python3-setuptools python3-wheel python3.12 python3.12-dev
    +#8 2.838   python3.12-minimal readline-common rpcsvc-proto tzdata xz-utils zlib1g-dev
    +#8 2.839 The following packages will be upgraded:
    +#8 2.839   dpkg libbz2-1.0 libc-bin libc6 liblzma5 libssl3t64 zlib1g
    +#8 2.967 7 upgraded, 143 newly installed, 0 to remove and 22 not upgraded.
    +#8 2.967 Need to get 122 MB of archives.
    +#8 2.967 After this operation, 437 MB of additional disk space will be used.
    +#8 2.967 Get:1 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dpkg amd64 1.22.6ubuntu6.1 [1283 kB]
    +#8 3.078 Get:2 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc6 amd64 2.39-0ubuntu8.3 [3265 kB]
    +
    +
    +
    #8 3.148 Get:3 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc-bin amd64 2.39-0ubuntu8.3 [722 kB]
    +#8 3.155 Get:4 http://archive.ubuntu.com/ubuntu noble/main amd64 liblocale-gettext-perl amd64 1.07-6ubuntu5 [15.8 kB]
    +#8 3.156 Get:5 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libssl3t64 amd64 3.0.13-0ubuntu3.4 [1940 kB]
    +#8 3.168 Get:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12-minimal amd64 3.12.3-1ubuntu0.2 [834 kB]
    +#8 3.174 Get:7 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libexpat1 amd64 2.6.1-2ubuntu0.1 [87.1 kB]
    +#8 3.175 Get:8 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 zlib1g amd64 1:1.3.dfsg-3.1ubuntu2.1 [62.9 kB]
    +#8 3.176 Get:9 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3.12-minimal amd64 3.12.3-1ubuntu0.2 [2343 kB]
    +#8 3.192 Get:10 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-minimal amd64 3.12.3-0ubuntu2 [27.4 kB]
    +#8 3.193 Get:11 http://archive.ubuntu.com/ubuntu noble/main amd64 media-types all 10.1.0 [27.5 kB]
    +#8 3.193 Get:12 http://archive.ubuntu.com/ubuntu noble/main amd64 netbase all 6.4 [13.1 kB]
    +#8 3.193 Get:13 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 tzdata all 2024a-3ubuntu1.1 [273 kB]
    +#8 3.195 Get:14 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libbz2-1.0 amd64 1.0.8-5.1build0.1 [34.4 kB]
    +#8 3.196 Get:15 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liblzma5 amd64 5.6.1+really5.4.5-1build0.1 [127 kB]
    +#8 3.197 Get:16 http://archive.ubuntu.com/ubuntu noble/main amd64 readline-common all 8.2-4build1 [56.5 kB]
    +#8 3.198 Get:17 http://archive.ubuntu.com/ubuntu noble/main amd64 libreadline8t64 amd64 8.2-4build1 [153 kB]
    +#8 3.199 Get:18 http://archive.ubuntu.com/ubuntu noble/main amd64 libsqlite3-0 amd64 3.45.1-1ubuntu2 [701 kB]
    +#8 3.209 Get:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12-stdlib amd64 3.12.3-1ubuntu0.2 [2069 kB]
    +#8 3.223 Get:20 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3.12 amd64 3.12.3-1ubuntu0.2 [651 kB]
    +#8 3.229 Get:21 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3-stdlib amd64 3.12.3-0ubuntu2 [10.0 kB]
    +#8 3.229 Get:22 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3 amd64 3.12.3-0ubuntu2 [23.0 kB]
    +#8 3.230 Get:23 http://archive.ubuntu.com/ubuntu noble/main amd64 perl-modules-5.38 all 5.38.2-3.2build2 [3110 kB]
    +#8 3.250 Get:24 http://archive.ubuntu.com/ubuntu noble/main amd64 libgdbm6t64 amd64 1.23-5.1build1 [34.4 kB]
    +#8 3.251 Get:25 http://archive.ubuntu.com/ubuntu noble/main amd64 libgdbm-compat4t64 amd64 1.23-5.1build1 [6710 B]
    +#8 3.251 Get:26 http://archive.ubuntu.com/ubuntu noble/main amd64 libperl5.38t64 amd64 5.38.2-3.2build2 [4873 kB]
    +#8 3.284 Get:27 http://archive.ubuntu.com/ubuntu noble/main amd64 perl amd64 5.38.2-3.2build2 [231 kB]
    +#8 3.286 Get:28 http://archive.ubuntu.com/ubuntu noble/main amd64 adduser all 3.137ubuntu1 [101 kB]
    +#8 3.286 Get:29 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 openssl amd64 3.0.13-0ubuntu3.4 [1003 kB]
    +#8 3.293 Get:30 http://archive.ubuntu.com/ubuntu noble/main amd64 ca-certificates all 20240203 [159 kB]
    +
    +
    +
    #8 3.294 Get:31 http://archive.ubuntu.com/ubuntu noble/main amd64 libbsd0 amd64 0.12.1-1build1 [41.2 kB]
    +#8 3.295 Get:32 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-pkg-resources all 68.1.2-2ubuntu1.1 [168 kB]
    +#8 3.296 Get:33 http://archive.ubuntu.com/ubuntu noble/main amd64 libjansson4 amd64 2.14-2build2 [32.8 kB]
    +#8 3.297 Get:34 http://archive.ubuntu.com/ubuntu noble/main amd64 libpng16-16t64 amd64 1.6.43-5build1 [187 kB]
    +#8 3.298 Get:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libxau6 amd64 1:1.0.9-1build6 [7160 B]
    +#8 3.299 Get:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libxdmcp6 amd64 1:1.1.3-0ubuntu6 [10.3 kB]
    +#8 3.314 Get:37 http://archive.ubuntu.com/ubuntu noble/main amd64 libxcb1 amd64 1.15-1ubuntu2 [47.7 kB]
    +#8 3.315 Get:38 http://archive.ubuntu.com/ubuntu noble/main amd64 libx11-data all 2:1.8.7-1build1 [115 kB]
    +#8 3.316 Get:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libx11-6 amd64 2:1.8.7-1build1 [650 kB]
    +#8 3.322 Get:40 http://archive.ubuntu.com/ubuntu noble/main amd64 manpages all 6.7-2 [1384 kB]
    +#8 3.331 Get:41 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 xz-utils amd64 5.6.1+really5.4.5-1build0.1 [267 kB]
    +#8 3.332 Get:42 http://archive.ubuntu.com/ubuntu noble/main amd64 binutils-common amd64 2.42-4ubuntu2 [239 kB]
    +#8 3.334 Get:43 http://archive.ubuntu.com/ubuntu noble/main amd64 libsframe1 amd64 2.42-4ubuntu2 [14.8 kB]
    +#8 3.335 Get:44 http://archive.ubuntu.com/ubuntu noble/main amd64 libbinutils amd64 2.42-4ubuntu2 [572 kB]
    +#8 3.338 Get:45 http://archive.ubuntu.com/ubuntu noble/main amd64 libctf-nobfd0 amd64 2.42-4ubuntu2 [97.1 kB]
    +#8 3.339 Get:46 http://archive.ubuntu.com/ubuntu noble/main amd64 libctf0 amd64 2.42-4ubuntu2 [94.5 kB]
    +#8 3.340 Get:47 http://archive.ubuntu.com/ubuntu noble/main amd64 libgprofng0 amd64 2.42-4ubuntu2 [851 kB]
    +#8 3.347 Get:48 http://archive.ubuntu.com/ubuntu noble/main amd64 binutils-x86-64-linux-gnu amd64 2.42-4ubuntu2 [2469 kB]
    +#8 3.363 Get:49 http://archive.ubuntu.com/ubuntu noble/main amd64 binutils amd64 2.42-4ubuntu2 [18.0 kB]
    +#8 3.364 Get:50 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc-dev-bin amd64 2.39-0ubuntu8.3 [60.8 kB]
    +#8 3.364 Get:51 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 linux-libc-dev amd64 6.8.0-44.44 [1698 kB]
    +#8 3.376 Get:52 http://archive.ubuntu.com/ubuntu noble/main amd64 libcrypt-dev amd64 1:4.4.36-4build1 [112 kB]
    +#8 3.377 Get:53 http://archive.ubuntu.com/ubuntu noble/main amd64 rpcsvc-proto amd64 1.4.2-0ubuntu7 [67.4 kB]
    +#8 3.378 Get:54 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc6-dev amd64 2.39-0ubuntu8.3 [2164 kB]
    +#8 3.393 Get:55 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-13-base amd64 13.2.0-23ubuntu4 [49.0 kB]
    +#8 3.394 Get:56 http://archive.ubuntu.com/ubuntu noble/main amd64 libisl23 amd64 0.26-3build1 [680 kB]
    +#8 3.399 Get:57 http://archive.ubuntu.com/ubuntu noble/main amd64 libmpfr6 amd64 4.2.1-1build1 [355 kB]
    +#8 3.402 Get:58 http://archive.ubuntu.com/ubuntu noble/main amd64 libmpc3 amd64 1.3.1-1build1 [54.5 kB]
    +#8 3.402 Get:59 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp-13-x86-64-linux-gnu amd64 13.2.0-23ubuntu4 [11.2 MB]
    +#8 3.479 Get:60 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp-13 amd64 13.2.0-23ubuntu4 [1032 B]
    +#8 3.480 Get:61 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [5326 B]
    +#8 3.480 Get:62 http://archive.ubuntu.com/ubuntu noble/main amd64 cpp amd64 4:13.2.0-7ubuntu1 [22.4 kB]
    +#8 3.481 Get:63 http://archive.ubuntu.com/ubuntu noble/main amd64 libcc1-0 amd64 14-20240412-0ubuntu1 [47.7 kB]
    +#8 3.482 Get:64 http://archive.ubuntu.com/ubuntu noble/main amd64 libgomp1 amd64 14-20240412-0ubuntu1 [147 kB]
    +#8 3.483 Get:65 http://archive.ubuntu.com/ubuntu noble/main amd64 libitm1 amd64 14-20240412-0ubuntu1 [28.9 kB]
    +#8 3.484 Get:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libatomic1 amd64 14-20240412-0ubuntu1 [10.4 kB]
    +#8 3.484 Get:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libasan8 amd64 14-20240412-0ubuntu1 [3024 kB]
    +#8 3.505 Get:68 http://archive.ubuntu.com/ubuntu noble/main amd64 liblsan0 amd64 14-20240412-0ubuntu1 [1313 kB]
    +
    +
    +
    #8 3.514 Get:69 http://archive.ubuntu.com/ubuntu noble/main amd64 libtsan2 amd64 14-20240412-0ubuntu1 [2736 kB]
    +#8 3.531 Get:70 http://archive.ubuntu.com/ubuntu noble/main amd64 libubsan1 amd64 14-20240412-0ubuntu1 [1175 kB]
    +#8 3.540 Get:71 http://archive.ubuntu.com/ubuntu noble/main amd64 libhwasan0 amd64 14-20240412-0ubuntu1 [1632 kB]
    +#8 3.552 Get:72 http://archive.ubuntu.com/ubuntu noble/main amd64 libquadmath0 amd64 14-20240412-0ubuntu1 [153 kB]
    +#8 3.554 Get:73 http://archive.ubuntu.com/ubuntu noble/main amd64 libgcc-13-dev amd64 13.2.0-23ubuntu4 [2688 kB]
    +#8 3.573 Get:74 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-13-x86-64-linux-gnu amd64 13.2.0-23ubuntu4 [21.9 MB]
    +#8 3.723 Get:75 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-13 amd64 13.2.0-23ubuntu4 [482 kB]
    +#8 3.727 Get:76 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [1212 B]
    +#8 3.727 Get:77 http://archive.ubuntu.com/ubuntu noble/main amd64 gcc amd64 4:13.2.0-7ubuntu1 [5018 B]
    +#8 3.727 Get:78 http://archive.ubuntu.com/ubuntu noble/main amd64 libstdc++-13-dev amd64 13.2.0-23ubuntu4 [2399 kB]
    +#8 3.745 Get:79 http://archive.ubuntu.com/ubuntu noble/main amd64 g++-13-x86-64-linux-gnu amd64 13.2.0-23ubuntu4 [12.5 MB]
    +#8 3.830 Get:80 http://archive.ubuntu.com/ubuntu noble/main amd64 g++-13 amd64 13.2.0-23ubuntu4 [14.5 kB]
    +
    +
    +
    #8 3.831 Get:81 http://archive.ubuntu.com/ubuntu noble/main amd64 g++-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [964 B]
    +#8 3.831 Get:82 http://archive.ubuntu.com/ubuntu noble/main amd64 g++ amd64 4:13.2.0-7ubuntu1 [1100 B]
    +#8 3.832 Get:83 http://archive.ubuntu.com/ubuntu noble/main amd64 make amd64 4.3-4.1build2 [180 kB]
    +#8 3.833 Get:84 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdpkg-perl all 1.22.6ubuntu6.1 [269 kB]
    +#8 3.835 Get:85 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 bzip2 amd64 1.0.8-5.1build0.1 [34.5 kB]
    +#8 3.835 Get:86 http://archive.ubuntu.com/ubuntu noble/main amd64 patch amd64 2.7.6-7build3 [104 kB]
    +#8 3.836 Get:87 http://archive.ubuntu.com/ubuntu noble/main amd64 lto-disabled-list all 47 [12.4 kB]
    +#8 3.837 Get:88 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dpkg-dev all 1.22.6ubuntu6.1 [1074 kB]
    +#8 3.846 Get:89 http://archive.ubuntu.com/ubuntu noble/main amd64 build-essential amd64 12.10ubuntu1 [4928 B]
    +#8 3.859 Get:90 http://archive.ubuntu.com/ubuntu noble/main amd64 gpgconf amd64 2.4.4-2ubuntu17 [103 kB]
    +#8 3.860 Get:91 http://archive.ubuntu.com/ubuntu noble/main amd64 libksba8 amd64 1.6.6-1build1 [122 kB]
    +#8 3.862 Get:92 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsasl2-modules-db amd64 2.1.28+dfsg1-5ubuntu3.1 [20.4 kB]
    +#8 3.862 Get:93 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsasl2-2 amd64 2.1.28+dfsg1-5ubuntu3.1 [53.2 kB]
    +#8 3.863 Get:94 http://archive.ubuntu.com/ubuntu noble/main amd64 libldap2 amd64 2.6.7+dfsg-1~exp1ubuntu8 [195 kB]
    +#8 3.865 Get:95 http://archive.ubuntu.com/ubuntu noble/main amd64 dirmngr amd64 2.4.4-2ubuntu17 [323 kB]
    +#8 3.868 Get:96 http://archive.ubuntu.com/ubuntu noble/main amd64 libfakeroot amd64 1.33-1 [32.4 kB]
    +#8 3.868 Get:97 http://archive.ubuntu.com/ubuntu noble/main amd64 fakeroot amd64 1.33-1 [67.2 kB]
    +#8 3.869 Get:98 http://archive.ubuntu.com/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB]
    +#8 3.872 Get:99 http://archive.ubuntu.com/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB]
    +#8 3.885 Get:100 http://archive.ubuntu.com/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1.1ubuntu2 [37.3 kB]
    +#8 3.886 Get:101 http://archive.ubuntu.com/ubuntu noble/main amd64 gnupg-utils amd64 2.4.4-2ubuntu17 [108 kB]
    +#8 3.915 Get:102 http://archive.ubuntu.com/ubuntu noble/main amd64 gpg amd64 2.4.4-2ubuntu17 [565 kB]
    +#8 3.995 Get:103 http://archive.ubuntu.com/ubuntu noble/main amd64 pinentry-curses amd64 1.2.1-3ubuntu5 [35.2 kB]
    +#8 3.996 Get:104 http://archive.ubuntu.com/ubuntu noble/main amd64 gpg-agent amd64 2.4.4-2ubuntu17 [227 kB]
    +#8 3.999 Get:105 http://archive.ubuntu.com/ubuntu noble/main amd64 gpgsm amd64 2.4.4-2ubuntu17 [232 kB]
    +#8 4.003 Get:106 http://archive.ubuntu.com/ubuntu noble/main amd64 keyboxd amd64 2.4.4-2ubuntu17 [78.3 kB]
    +#8 4.007 Get:107 http://archive.ubuntu.com/ubuntu noble/main amd64 gnupg all 2.4.4-2ubuntu17 [359 kB]
    +#8 4.013 Get:108 http://archive.ubuntu.com/ubuntu noble/main amd64 gnupg-l10n all 2.4.4-2ubuntu17 [65.9 kB]
    +#8 4.014 Get:109 http://archive.ubuntu.com/ubuntu noble/main amd64 gpg-wks-client amd64 2.4.4-2ubuntu17 [70.9 kB]
    +#8 4.015 Get:110 http://archive.ubuntu.com/ubuntu noble/main amd64 javascript-common all 11+nmu1 [5936 B]
    +#8 4.015 Get:111 http://archive.ubuntu.com/ubuntu noble/main amd64 libalgorithm-diff-perl all 1.201-1 [41.8 kB]
    +#8 4.016 Get:112 http://archive.ubuntu.com/ubuntu noble/main amd64 libalgorithm-diff-xs-perl amd64 0.04-8build3 [11.2 kB]
    +#8 4.019 Get:113 http://archive.ubuntu.com/ubuntu noble/main amd64 libalgorithm-merge-perl all 0.08-5 [11.4 kB]
    +#8 4.019 Get:114 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libaom3 amd64 3.8.2-2ubuntu0.1 [1941 kB]
    +#8 4.032 Get:115 http://archive.ubuntu.com/ubuntu noble/main amd64 libbrotli1 amd64 1.1.0-2build2 [331 kB]
    +#8 4.035 Get:116 http://archive.ubuntu.com/ubuntu noble/main amd64 libfreetype6 amd64 2.13.2+dfsg-1build3 [402 kB]
    +#8 4.038 Get:117 http://archive.ubuntu.com/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1.1ubuntu2 [139 kB]
    +#8 4.039 Get:118 http://archive.ubuntu.com/ubuntu noble/main amd64 libsharpyuv0 amd64 1.3.2-0.4build3 [15.8 kB]
    +#8 4.039 Get:119 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif-plugin-aomdec amd64 1.17.6-1ubuntu4 [10.3 kB]
    +#8 4.039 Get:120 http://archive.ubuntu.com/ubuntu noble/main amd64 libde265-0 amd64 1.0.15-1build3 [166 kB]
    +#8 4.041 Get:121 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif-plugin-libde265 amd64 1.17.6-1ubuntu4 [8158 B]
    +#8 4.041 Get:122 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif1 amd64 1.17.6-1ubuntu4 [276 kB]
    +#8 4.043 Get:123 http://archive.ubuntu.com/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu2 [150 kB]
    +#8 4.053 Get:124 http://archive.ubuntu.com/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B]
    +#8 4.054 Get:125 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdeflate0 amd64 1.19-1build1.1 [43.9 kB]
    +#8 4.054 Get:126 http://archive.ubuntu.com/ubuntu noble/main amd64 libjbig0 amd64 2.1-6.1ubuntu2 [29.7 kB]
    +#8 4.055 Get:127 http://archive.ubuntu.com/ubuntu noble/main amd64 liblerc4 amd64 4.0.0+ds-4ubuntu2 [179 kB]
    +#8 4.056 Get:128 http://archive.ubuntu.com/ubuntu noble/main amd64 libwebp7 amd64 1.3.2-0.4build3 [230 kB]
    +#8 4.058 Get:129 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libtiff6 amd64 4.5.1+git230720-4ubuntu2.2 [199 kB]
    +#8 4.065 Get:130 http://archive.ubuntu.com/ubuntu noble/main amd64 libxpm4 amd64 1:3.5.17-1build2 [36.5 kB]
    +#8 4.066 Get:131 http://archive.ubuntu.com/ubuntu noble/main amd64 libgd3 amd64 2.3.3-9ubuntu5 [128 kB]
    +#8 4.067 Get:132 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libc-devtools amd64 2.39-0ubuntu8.3 [69.7 kB]
    +#8 4.068 Get:133 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libexpat1-dev amd64 2.6.1-2ubuntu0.1 [139 kB]
    +#8 4.077 Get:134 http://archive.ubuntu.com/ubuntu noble/main amd64 libfile-fcntllock-perl amd64 0.22-4ubuntu5 [30.7 kB]
    +#8 4.078 Get:135 http://archive.ubuntu.com/ubuntu noble/main amd64 libheif-plugin-aomenc amd64 1.17.6-1ubuntu4 [14.7 kB]
    +#8 4.078 Get:136 http://archive.ubuntu.com/ubuntu noble/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB]
    +#8 4.080 Get:137 http://archive.ubuntu.com/ubuntu noble/main amd64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB]
    +#8 4.081 Get:138 http://archive.ubuntu.com/ubuntu noble/main amd64 libjs-sphinxdoc all 7.2.6-6 [149 kB]
    +#8 4.083 Get:139 http://archive.ubuntu.com/ubuntu noble/main amd64 libldap-common all 2.6.7+dfsg-1~exp1ubuntu8 [31.4 kB]
    +#8 4.089 Get:140 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12t64 amd64 3.12.3-1ubuntu0.2 [2339 kB]
    +#8 4.103 Get:141 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 zlib1g-dev amd64 1:1.3.dfsg-3.1ubuntu2.1 [894 kB]
    +
    +
    +
    -
    #8 14.94 (Reading database ... 
    +
    -
    #8 15.38 Setting up libc6:amd64 (2.39-0ubuntu8.3) ...
    +
    #8 5.137 Setting up libc6:amd64 (2.39-0ubuntu8.3) ...
     
    -
    #8 15.44 debconf: unable to initialize frontend: Dialog
    -#8 15.44 debconf: (TERM is not set, so the dialog frontend is not usable.)
    -#8 15.44 debconf: falling back to frontend: Readline
    -#8 15.44 debconf: unable to initialize frontend: Readline
    -#8 15.44 debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC entries checked: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.38.2 /usr/local/share/perl/5.38.2 /usr/lib/x86_64-linux-gnu/perl5/5.38 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.38 /usr/share/perl/5.38 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 8.)
    -#8 15.44 debconf: falling back to frontend: Teletype
    +
    #8 5.196 debconf: unable to initialize frontend: Dialog
    +#8 5.196 debconf: (TERM is not set, so the dialog frontend is not usable.)
    +#8 5.196 debconf: falling back to frontend: Readline
    +#8 5.197 debconf: unable to initialize frontend: Readline
    +#8 5.197 debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC entries checked: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.38.2 /usr/local/share/perl/5.38.2 /usr/lib/x86_64-linux-gnu/perl5/5.38 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.38 /usr/share/perl/5.38 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 8.)
    +#8 5.197 debconf: falling back to frontend: Teletype
     
    -
    #8 16.48 (Reading database ... 
    +
    #8 6.242 (Reading database ... 
     (Reading database ... 5%
     (Reading database ... 10%
     (Reading database ... 15%
    @@ -1097,12 +1050,14 @@ 

    BACnet Network Setup

    +
    + - + -
    #8 16.88 Setting up libexpat1:amd64 (2.6.1-2ubuntu0.1) ...
    -#8 16.88 Setting up python3.12-minimal (3.12.3-1ubuntu0.2) ...
    +#8 6.695 Preparing to unpack .../python3.12-minimal_3.12.3-1ubuntu0.2_amd64.deb ...
    +#8 6.700 Unpacking python3.12-minimal (3.12.3-1ubuntu0.2) ...
    +#8 6.750 Setting up libpython3.12-minimal:amd64 (3.12.3-1ubuntu0.2) ...
    +#8 6.762 Setting up libexpat1:amd64 (2.6.1-2ubuntu0.1) ...
    +#8 6.766 Setting up python3.12-minimal (3.12.3-1ubuntu0.2) ...
     
    -
    #8 17.56 Selecting previously unselected package python3-minimal.
    -#8 17.56 (Reading database ... 
    +
    -
    #8 17.70 Unpacking libbz2-1.0:amd64 (1.0.8-5.1build0.1) over (1.0.8-5.1) ...
    -#8 17.72 Setting up libbz2-1.0:amd64 (1.0.8-5.1build0.1) ...
    -#8 17.74 (Reading database ... 
    +#8 7.441 Preparing to unpack .../python3-minimal_3.12.3-0ubuntu2_amd64.deb ...
    +#8 7.442 Unpacking python3-minimal (3.12.3-0ubuntu2) ...
    +#8 7.460 Selecting previously unselected package media-types.
    +#8 7.461 Preparing to unpack .../media-types_10.1.0_all.deb ...
    +#8 7.462 Unpacking media-types (10.1.0) ...
    +#8 7.478 Selecting previously unselected package netbase.
    +#8 7.479 Preparing to unpack .../archives/netbase_6.4_all.deb ...
    +#8 7.480 Unpacking netbase (6.4) ...
    +#8 7.495 Selecting previously unselected package tzdata.
    +#8 7.496 Preparing to unpack .../tzdata_2024a-3ubuntu1.1_all.deb ...
    +#8 7.497 Unpacking tzdata (2024a-3ubuntu1.1) ...
    +#8 7.590 Preparing to unpack .../libbz2-1.0_1.0.8-5.1build0.1_amd64.deb ...
    +
    +
    +
    + -
    #8 17.96 Preparing to unpack .../4-python3.12_3.12.3-1ubuntu0.2_amd64.deb ...
    -#8 17.97 Unpacking python3.12 (3.12.3-1ubuntu0.2) ...
    -#8 17.98 Selecting previously unselected package libpython3-stdlib:amd64.
    -#8 17.98 Preparing to unpack .../5-libpython3-stdlib_3.12.3-0ubuntu2_amd64.deb ...
    -#8 17.98 Unpacking libpython3-stdlib:amd64 (3.12.3-0ubuntu2) ...
    -#8 18.00 Setting up python3-minimal (3.12.3-0ubuntu2) ...
    -#8 18.12 Selecting previously unselected package python3.
    -#8 18.12 (Reading database ... 
    -(Reading database ... 5%
    +#8 7.709 Preparing to unpack .../0-readline-common_8.2-4build1_all.deb ...
    +#8 7.711 Unpacking readline-common (8.2-4build1) ...
    +#8 7.734 Selecting previously unselected package libreadline8t64:amd64.
    +#8 7.734 Preparing to unpack .../1-libreadline8t64_8.2-4build1_amd64.deb ...
    +#8 7.738 Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8 to /lib/x86_64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64'
    +#8 7.743 Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8.2 to /lib/x86_64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64'
    +#8 7.747 Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8 to /lib/x86_64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64'
    +#8 7.750 Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8.2 to /lib/x86_64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64'
    +#8 7.752 Unpacking libreadline8t64:amd64 (8.2-4build1) ...
    +#8 7.773 Selecting previously unselected package libsqlite3-0:amd64.
    +#8 7.773 Preparing to unpack .../2-libsqlite3-0_3.45.1-1ubuntu2_amd64.deb ...
    +#8 7.775 Unpacking libsqlite3-0:amd64 (3.45.1-1ubuntu2) ...
    +#8 7.798 Selecting previously unselected package libpython3.12-stdlib:amd64.
    +#8 7.799 Preparing to unpack .../3-libpython3.12-stdlib_3.12.3-1ubuntu0.2_amd64.deb ...
    +#8 7.800 Unpacking libpython3.12-stdlib:amd64 (3.12.3-1ubuntu0.2) ...
    +#8 7.910 Selecting previously unselected package python3.12.
    +#8 7.911 Preparing to unpack .../4-python3.12_3.12.3-1ubuntu0.2_amd64.deb ...
    +#8 7.912 Unpacking python3.12 (3.12.3-1ubuntu0.2) ...
    +#8 7.931 Selecting previously unselected package libpython3-stdlib:amd64.
    +#8 7.932 Preparing to unpack .../5-libpython3-stdlib_3.12.3-0ubuntu2_amd64.deb ...
    +#8 7.933 Unpacking libpython3-stdlib:amd64 (3.12.3-0ubuntu2) ...
    +#8 7.949 Setting up python3-minimal (3.12.3-0ubuntu2) ...
    +#8 8.073 Selecting previously unselected package python3.
    +#8 8.073 (Reading database ... 
    +
    +
    +
    -
    #8 18.42 Selecting previously unselected package libgdbm6t64:amd64.
    -#8 18.42 Preparing to unpack .../2-libgdbm6t64_1.23-5.1build1_amd64.deb ...
    -#8 18.42 Unpacking libgdbm6t64:amd64 (1.23-5.1build1) ...
    -#8 18.44 Selecting previously unselected package libgdbm-compat4t64:amd64.
    -#8 18.44 Preparing to unpack .../3-libgdbm-compat4t64_1.23-5.1build1_amd64.deb ...
    -#8 18.44 Unpacking libgdbm-compat4t64:amd64 (1.23-5.1build1) ...
    -#8 18.45 Selecting previously unselected package libperl5.38t64:amd64.
    -#8 18.45 Preparing to unpack .../4-libperl5.38t64_5.38.2-3.2build2_amd64.deb ...
    -#8 18.45 Unpacking libperl5.38t64:amd64 (5.38.2-3.2build2) ...
    -
    -
    -
    #8 18.64 Selecting previously unselected package perl.
    -#8 18.65 Preparing to unpack .../5-perl_5.38.2-3.2build2_amd64.deb ...
    -#8 18.65 Unpacking perl (5.38.2-3.2build2) ...
    -#8 18.67 Selecting previously unselected package adduser.
    -#8 18.68 Preparing to unpack .../6-adduser_3.137ubuntu1_all.deb ...
    -#8 18.68 Unpacking adduser (3.137ubuntu1) ...
    -#8 18.70 Setting up adduser (3.137ubuntu1) ...
    -#8 18.72 Selecting previously unselected package openssl.
    -#8 18.72 (Reading database ... 
    +#8 8.079 Preparing to unpack .../0-python3_3.12.3-0ubuntu2_amd64.deb ...
    +#8 8.082 Unpacking python3 (3.12.3-0ubuntu2) ...
    +#8 8.100 Selecting previously unselected package perl-modules-5.38.
    +#8 8.101 Preparing to unpack .../1-perl-modules-5.38_5.38.2-3.2build2_all.deb ...
    +#8 8.104 Unpacking perl-modules-5.38 (5.38.2-3.2build2) ...
    +#8 8.384 Selecting previously unselected package libgdbm6t64:amd64.
    +
    +
    +
    -
    #8 18.77 Preparing to unpack .../001-ca-certificates_20240203_all.deb ...
    -#8 18.77 Unpacking ca-certificates (20240203) ...
    -#8 18.81 Selecting previously unselected package libbsd0:amd64.
    -#8 18.82 Preparing to unpack .../002-libbsd0_0.12.1-1build1_amd64.deb ...
    -#8 18.82 Unpacking libbsd0:amd64 (0.12.1-1build1) ...
    -#8 18.83 Selecting previously unselected package python3-pkg-resources.
    -#8 18.83 Preparing to unpack .../003-python3-pkg-resources_68.1.2-2ubuntu1.1_all.deb ...
    -#8 18.83 Unpacking python3-pkg-resources (68.1.2-2ubuntu1.1) ...
    -#8 18.86 Selecting previously unselected package libjansson4:amd64.
    -#8 18.86 Preparing to unpack .../004-libjansson4_2.14-2build2_amd64.deb ...
    -#8 18.86 Unpacking libjansson4:amd64 (2.14-2build2) ...
    -#8 18.87 Selecting previously unselected package libpng16-16t64:amd64.
    -#8 18.87 Preparing to unpack .../005-libpng16-16t64_1.6.43-5build1_amd64.deb ...
    -#8 18.87 Unpacking libpng16-16t64:amd64 (1.6.43-5build1) ...
    -#8 18.89 Selecting previously unselected package libxau6:amd64.
    -#8 18.89 Preparing to unpack .../006-libxau6_1%3a1.0.9-1build6_amd64.deb ...
    -#8 18.89 Unpacking libxau6:amd64 (1:1.0.9-1build6) ...
    -#8 18.90 Selecting previously unselected package libxdmcp6:amd64.
    -#8 18.91 Preparing to unpack .../007-libxdmcp6_1%3a1.1.3-0ubuntu6_amd64.deb ...
    -#8 18.91 Unpacking libxdmcp6:amd64 (1:1.1.3-0ubuntu6) ...
    -#8 18.92 Selecting previously unselected package libxcb1:amd64.
    -#8 18.92 Preparing to unpack .../008-libxcb1_1.15-1ubuntu2_amd64.deb ...
    -#8 18.92 Unpacking libxcb1:amd64 (1.15-1ubuntu2) ...
    -#8 18.94 Selecting previously unselected package libx11-data.
    -#8 18.94 Preparing to unpack .../009-libx11-data_2%3a1.8.7-1build1_all.deb ...
    -#8 18.94 Unpacking libx11-data (2:1.8.7-1build1) ...
    -#8 18.99 Selecting previously unselected package libx11-6:amd64.
    -
    -
    -
    #8 18.99 Preparing to unpack .../010-libx11-6_2%3a1.8.7-1build1_amd64.deb ...
    -#8 18.99 Unpacking libx11-6:amd64 (2:1.8.7-1build1) ...
    -#8 19.01 Selecting previously unselected package manpages.
    -#8 19.01 Preparing to unpack .../011-manpages_6.7-2_all.deb ...
    -#8 19.01 Unpacking manpages (6.7-2) ...
    -#8 19.05 Selecting previously unselected package xz-utils.
    -#8 19.05 Preparing to unpack .../012-xz-utils_5.6.1+really5.4.5-1build0.1_amd64.deb ...
    -#8 19.05 Unpacking xz-utils (5.6.1+really5.4.5-1build0.1) ...
    -#8 19.07 Selecting previously unselected package binutils-common:amd64.
    -#8 19.08 Preparing to unpack .../013-binutils-common_2.42-4ubuntu2_amd64.deb ...
    -#8 19.08 Unpacking binutils-common:amd64 (2.42-4ubuntu2) ...
    -#8 19.09 Selecting previously unselected package libsframe1:amd64.
    -#8 19.10 Preparing to unpack .../014-libsframe1_2.42-4ubuntu2_amd64.deb ...
    -#8 19.10 Unpacking libsframe1:amd64 (2.42-4ubuntu2) ...
    -#8 19.11 Selecting previously unselected package libbinutils:amd64.
    -#8 19.11 Preparing to unpack .../015-libbinutils_2.42-4ubuntu2_amd64.deb ...
    -#8 19.11 Unpacking libbinutils:amd64 (2.42-4ubuntu2) ...
    -#8 19.14 Selecting previously unselected package libctf-nobfd0:amd64.
    -#8 19.14 Preparing to unpack .../016-libctf-nobfd0_2.42-4ubuntu2_amd64.deb ...
    -#8 19.14 Unpacking libctf-nobfd0:amd64 (2.42-4ubuntu2) ...
    -#8 19.16 Selecting previously unselected package libctf0:amd64.
    -#8 19.16 Preparing to unpack .../017-libctf0_2.42-4ubuntu2_amd64.deb ...
    -#8 19.16 Unpacking libctf0:amd64 (2.42-4ubuntu2) ...
    -#8 19.17 Selecting previously unselected package libgprofng0:amd64.
    -#8 19.17 Preparing to unpack .../018-libgprofng0_2.42-4ubuntu2_amd64.deb ...
    -#8 19.18 Unpacking libgprofng0:amd64 (2.42-4ubuntu2) ...
    -#8 19.21 Selecting previously unselected package binutils-x86-64-linux-gnu.
    -
    -
    -
    #8 19.21 Preparing to unpack .../019-binutils-x86-64-linux-gnu_2.42-4ubuntu2_amd64.deb ...
    -#8 19.21 Unpacking binutils-x86-64-linux-gnu (2.42-4ubuntu2) ...
    -#8 19.29 Selecting previously unselected package binutils.
    -#8 19.29 Preparing to unpack .../020-binutils_2.42-4ubuntu2_amd64.deb ...
    -#8 19.29 Unpacking binutils (2.42-4ubuntu2) ...
    -#8 19.31 Selecting previously unselected package libc-dev-bin.
    -#8 19.31 Preparing to unpack .../021-libc-dev-bin_2.39-0ubuntu8.3_amd64.deb ...
    -#8 19.31 Unpacking libc-dev-bin (2.39-0ubuntu8.3) ...
    -#8 19.32 Selecting previously unselected package linux-libc-dev:amd64.
    -#8 19.32 Preparing to unpack .../022-linux-libc-dev_6.8.0-44.44_amd64.deb ...
    -#8 19.33 Unpacking linux-libc-dev:amd64 (6.8.0-44.44) ...
    -
    -
    -
    #8 19.52 Selecting previously unselected package libcrypt-dev:amd64.
    -#8 19.52 Preparing to unpack .../023-libcrypt-dev_1%3a4.4.36-4build1_amd64.deb ...
    -#8 19.52 Unpacking libcrypt-dev:amd64 (1:4.4.36-4build1) ...
    -#8 19.54 Selecting previously unselected package rpcsvc-proto.
    -#8 19.54 Preparing to unpack .../024-rpcsvc-proto_1.4.2-0ubuntu7_amd64.deb ...
    -#8 19.54 Unpacking rpcsvc-proto (1.4.2-0ubuntu7) ...
    -#8 19.56 Selecting previously unselected package libc6-dev:amd64.
    -#8 19.56 Preparing to unpack .../025-libc6-dev_2.39-0ubuntu8.3_amd64.deb ...
    -#8 19.56 Unpacking libc6-dev:amd64 (2.39-0ubuntu8.3) ...
    -#8 19.71 Selecting previously unselected package gcc-13-base:amd64.
    -
    -
    -
    #8 19.71 Preparing to unpack .../026-gcc-13-base_13.2.0-23ubuntu4_amd64.deb ...
    -#8 19.71 Unpacking gcc-13-base:amd64 (13.2.0-23ubuntu4) ...
    -#8 19.73 Selecting previously unselected package libisl23:amd64.
    -#8 19.73 Preparing to unpack .../027-libisl23_0.26-3build1_amd64.deb ...
    -#8 19.73 Unpacking libisl23:amd64 (0.26-3build1) ...
    -#8 19.75 Selecting previously unselected package libmpfr6:amd64.
    -#8 19.75 Preparing to unpack .../028-libmpfr6_4.2.1-1build1_amd64.deb ...
    -#8 19.75 Unpacking libmpfr6:amd64 (4.2.1-1build1) ...
    -#8 19.77 Selecting previously unselected package libmpc3:amd64.
    -#8 19.77 Preparing to unpack .../029-libmpc3_1.3.1-1build1_amd64.deb ...
    -#8 19.77 Unpacking libmpc3:amd64 (1.3.1-1build1) ...
    -#8 19.79 Selecting previously unselected package cpp-13-x86-64-linux-gnu.
    -#8 19.79 Preparing to unpack .../030-cpp-13-x86-64-linux-gnu_13.2.0-23ubuntu4_amd64.deb ...
    -#8 19.79 Unpacking cpp-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    -#8 19.95 Selecting previously unselected package cpp-13.
    -#8 19.95 Preparing to unpack .../031-cpp-13_13.2.0-23ubuntu4_amd64.deb ...
    -#8 19.95 Unpacking cpp-13 (13.2.0-23ubuntu4) ...
    -#8 19.96 Selecting previously unselected package cpp-x86-64-linux-gnu.
    -#8 19.97 Preparing to unpack .../032-cpp-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ...
    -#8 19.97 Unpacking cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    -#8 19.98 Selecting previously unselected package cpp.
    -#8 19.98 Preparing to unpack .../033-cpp_4%3a13.2.0-7ubuntu1_amd64.deb ...
    -#8 19.99 Unpacking cpp (4:13.2.0-7ubuntu1) ...
    -#8 20.00 Selecting previously unselected package libcc1-0:amd64.
    -#8 20.00 Preparing to unpack .../034-libcc1-0_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.00 Unpacking libcc1-0:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.02 Selecting previously unselected package libgomp1:amd64.
    -#8 20.02 Preparing to unpack .../035-libgomp1_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.02 Unpacking libgomp1:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.03 Selecting previously unselected package libitm1:amd64.
    -#8 20.04 Preparing to unpack .../036-libitm1_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.04 Unpacking libitm1:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.05 Selecting previously unselected package libatomic1:amd64.
    -
    -
    -
    #8 20.05 Preparing to unpack .../037-libatomic1_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.05 Unpacking libatomic1:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.07 Selecting previously unselected package libasan8:amd64.
    -#8 20.07 Preparing to unpack .../038-libasan8_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.07 Unpacking libasan8:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.13 Selecting previously unselected package liblsan0:amd64.
    -#8 20.13 Preparing to unpack .../039-liblsan0_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.13 Unpacking liblsan0:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.16 Selecting previously unselected package libtsan2:amd64.
    -#8 20.16 Preparing to unpack .../040-libtsan2_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.17 Unpacking libtsan2:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.22 Selecting previously unselected package libubsan1:amd64.
    -#8 20.22 Preparing to unpack .../041-libubsan1_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.22 Unpacking libubsan1:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.25 Selecting previously unselected package libhwasan0:amd64.
    -#8 20.25 Preparing to unpack .../042-libhwasan0_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.25 Unpacking libhwasan0:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.29 Selecting previously unselected package libquadmath0:amd64.
    -
    -
    -
    #8 20.29 Preparing to unpack .../043-libquadmath0_14-20240412-0ubuntu1_amd64.deb ...
    -#8 20.29 Unpacking libquadmath0:amd64 (14-20240412-0ubuntu1) ...
    -#8 20.31 Selecting previously unselected package libgcc-13-dev:amd64.
    -#8 20.31 Preparing to unpack .../044-libgcc-13-dev_13.2.0-23ubuntu4_amd64.deb ...
    -#8 20.31 Unpacking libgcc-13-dev:amd64 (13.2.0-23ubuntu4) ...
    -#8 20.40 Selecting previously unselected package gcc-13-x86-64-linux-gnu.
    -#8 20.41 Preparing to unpack .../045-gcc-13-x86-64-linux-gnu_13.2.0-23ubuntu4_amd64.deb ...
    -#8 20.41 Unpacking gcc-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    -
    -
    -
    #8 20.70 Selecting previously unselected package gcc-13.
    -
    -
    -
    #8 20.70 Preparing to unpack .../046-gcc-13_13.2.0-23ubuntu4_amd64.deb ...
    -#8 20.70 Unpacking gcc-13 (13.2.0-23ubuntu4) ...
    -#8 20.72 Selecting previously unselected package gcc-x86-64-linux-gnu.
    -#8 20.72 Preparing to unpack .../047-gcc-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ...
    -#8 20.72 Unpacking gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    -#8 20.74 Selecting previously unselected package gcc.
    -#8 20.74 Preparing to unpack .../048-gcc_4%3a13.2.0-7ubuntu1_amd64.deb ...
    -#8 20.74 Unpacking gcc (4:13.2.0-7ubuntu1) ...
    -#8 20.75 Selecting previously unselected package libstdc++-13-dev:amd64.
    -#8 20.76 Preparing to unpack .../049-libstdc++-13-dev_13.2.0-23ubuntu4_amd64.deb ...
    -#8 20.76 Unpacking libstdc++-13-dev:amd64 (13.2.0-23ubuntu4) ...
    -#8 20.96 Selecting previously unselected package g++-13-x86-64-linux-gnu.
    -
    -
    -
    #8 20.96 Preparing to unpack .../050-g++-13-x86-64-linux-gnu_13.2.0-23ubuntu4_amd64.deb ...
    -#8 20.96 Unpacking g++-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    -#8 21.13 Selecting previously unselected package g++-13.
    -#8 21.13 Preparing to unpack .../051-g++-13_13.2.0-23ubuntu4_amd64.deb ...
    -#8 21.13 Unpacking g++-13 (13.2.0-23ubuntu4) ...
    -#8 21.14 Selecting previously unselected package g++-x86-64-linux-gnu.
    -#8 21.14 Preparing to unpack .../052-g++-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ...
    -#8 21.14 Unpacking g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    -#8 21.16 Selecting previously unselected package g++.
    -#8 21.16 Preparing to unpack .../053-g++_4%3a13.2.0-7ubuntu1_amd64.deb ...
    -#8 21.16 Unpacking g++ (4:13.2.0-7ubuntu1) ...
    -#8 21.17 Selecting previously unselected package make.
    -#8 21.17 Preparing to unpack .../054-make_4.3-4.1build2_amd64.deb ...
    -#8 21.17 Unpacking make (4.3-4.1build2) ...
    -#8 21.19 Selecting previously unselected package libdpkg-perl.
    -#8 21.19 Preparing to unpack .../055-libdpkg-perl_1.22.6ubuntu6.1_all.deb ...
    -#8 21.19 Unpacking libdpkg-perl (1.22.6ubuntu6.1) ...
    -#8 21.23 Selecting previously unselected package bzip2.
    -#8 21.23 Preparing to unpack .../056-bzip2_1.0.8-5.1build0.1_amd64.deb ...
    -
    -
    -
    #8 21.23 Unpacking bzip2 (1.0.8-5.1build0.1) ...
    -#8 21.24 Selecting previously unselected package patch.
    -#8 21.24 Preparing to unpack .../057-patch_2.7.6-7build3_amd64.deb ...
    -#8 21.25 Unpacking patch (2.7.6-7build3) ...
    -#8 21.26 Selecting previously unselected package lto-disabled-list.
    -#8 21.26 Preparing to unpack .../058-lto-disabled-list_47_all.deb ...
    -#8 21.26 Unpacking lto-disabled-list (47) ...
    -#8 21.27 Selecting previously unselected package dpkg-dev.
    -#8 21.28 Preparing to unpack .../059-dpkg-dev_1.22.6ubuntu6.1_all.deb ...
    -#8 21.28 Unpacking dpkg-dev (1.22.6ubuntu6.1) ...
    -#8 21.31 Selecting previously unselected package build-essential.
    -#8 21.31 Preparing to unpack .../060-build-essential_12.10ubuntu1_amd64.deb ...
    -#8 21.32 Unpacking build-essential (12.10ubuntu1) ...
    -#8 21.33 Selecting previously unselected package gpgconf.
    -#8 21.33 Preparing to unpack .../061-gpgconf_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.33 Unpacking gpgconf (2.4.4-2ubuntu17) ...
    -#8 21.35 Selecting previously unselected package libksba8:amd64.
    -#8 21.35 Preparing to unpack .../062-libksba8_1.6.6-1build1_amd64.deb ...
    -#8 21.35 Unpacking libksba8:amd64 (1.6.6-1build1) ...
    -#8 21.36 Selecting previously unselected package libsasl2-modules-db:amd64.
    -#8 21.36 Preparing to unpack .../063-libsasl2-modules-db_2.1.28+dfsg1-5ubuntu3.1_amd64.deb ...
    -#8 21.37 Unpacking libsasl2-modules-db:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    -#8 21.38 Selecting previously unselected package libsasl2-2:amd64.
    -#8 21.38 Preparing to unpack .../064-libsasl2-2_2.1.28+dfsg1-5ubuntu3.1_amd64.deb ...
    -#8 21.38 Unpacking libsasl2-2:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    -#8 21.40 Selecting previously unselected package libldap2:amd64.
    -#8 21.40 Preparing to unpack .../065-libldap2_2.6.7+dfsg-1~exp1ubuntu8_amd64.deb ...
    -#8 21.40 Unpacking libldap2:amd64 (2.6.7+dfsg-1~exp1ubuntu8) ...
    -#8 21.42 Selecting previously unselected package dirmngr.
    -#8 21.42 Preparing to unpack .../066-dirmngr_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.43 Unpacking dirmngr (2.4.4-2ubuntu17) ...
    -
    -
    -
    #8 21.45 Selecting previously unselected package libfakeroot:amd64.
    -#8 21.45 Preparing to unpack .../067-libfakeroot_1.33-1_amd64.deb ...
    -#8 21.45 Unpacking libfakeroot:amd64 (1.33-1) ...
    -#8 21.47 Selecting previously unselected package fakeroot.
    -#8 21.47 Preparing to unpack .../068-fakeroot_1.33-1_amd64.deb ...
    -#8 21.47 Unpacking fakeroot (1.33-1) ...
    -#8 21.48 Selecting previously unselected package fonts-dejavu-mono.
    -#8 21.49 Preparing to unpack .../069-fonts-dejavu-mono_2.37-8_all.deb ...
    -#8 21.49 Unpacking fonts-dejavu-mono (2.37-8) ...
    -#8 21.51 Selecting previously unselected package fonts-dejavu-core.
    -#8 21.51 Preparing to unpack .../070-fonts-dejavu-core_2.37-8_all.deb ...
    -#8 21.53 Unpacking fonts-dejavu-core (2.37-8) ...
    -#8 21.55 Selecting previously unselected package fontconfig-config.
    -#8 21.56 Preparing to unpack .../071-fontconfig-config_2.15.0-1.1ubuntu2_amd64.deb ...
    -#8 21.69 Unpacking fontconfig-config (2.15.0-1.1ubuntu2) ...
    -
    -
    -
    #8 21.71 Selecting previously unselected package gnupg-utils.
    -#8 21.71 Preparing to unpack .../072-gnupg-utils_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.72 Unpacking gnupg-utils (2.4.4-2ubuntu17) ...
    -#8 21.73 Selecting previously unselected package gpg.
    -#8 21.73 Preparing to unpack .../073-gpg_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.73 Unpacking gpg (2.4.4-2ubuntu17) ...
    -#8 21.76 Selecting previously unselected package pinentry-curses.
    -#8 21.76 Preparing to unpack .../074-pinentry-curses_1.2.1-3ubuntu5_amd64.deb ...
    -#8 21.76 Unpacking pinentry-curses (1.2.1-3ubuntu5) ...
    -#8 21.77 Selecting previously unselected package gpg-agent.
    -#8 21.77 Preparing to unpack .../075-gpg-agent_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.77 Unpacking gpg-agent (2.4.4-2ubuntu17) ...
    -#8 21.79 Selecting previously unselected package gpgsm.
    -#8 21.80 Preparing to unpack .../076-gpgsm_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.80 Unpacking gpgsm (2.4.4-2ubuntu17) ...
    -#8 21.81 Selecting previously unselected package keyboxd.
    -#8 21.81 Preparing to unpack .../077-keyboxd_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.82 Unpacking keyboxd (2.4.4-2ubuntu17) ...
    -#8 21.83 Selecting previously unselected package gnupg.
    -#8 21.83 Preparing to unpack .../078-gnupg_2.4.4-2ubuntu17_all.deb ...
    -#8 21.83 Unpacking gnupg (2.4.4-2ubuntu17) ...
    -#8 21.85 Selecting previously unselected package gnupg-l10n.
    -#8 21.85 Preparing to unpack .../079-gnupg-l10n_2.4.4-2ubuntu17_all.deb ...
    -#8 21.85 Unpacking gnupg-l10n (2.4.4-2ubuntu17) ...
    -#8 21.87 Selecting previously unselected package gpg-wks-client.
    -#8 21.87 Preparing to unpack .../080-gpg-wks-client_2.4.4-2ubuntu17_amd64.deb ...
    -#8 21.87 Unpacking gpg-wks-client (2.4.4-2ubuntu17) ...
    -#8 21.89 Selecting previously unselected package javascript-common.
    -#8 21.89 Preparing to unpack .../081-javascript-common_11+nmu1_all.deb ...
    -#8 21.90 Unpacking javascript-common (11+nmu1) ...
    -
    -
    -
    #8 21.91 Selecting previously unselected package libalgorithm-diff-perl.
    -#8 21.91 Preparing to unpack .../082-libalgorithm-diff-perl_1.201-1_all.deb ...
    -#8 21.91 Unpacking libalgorithm-diff-perl (1.201-1) ...
    -#8 21.93 Selecting previously unselected package libalgorithm-diff-xs-perl:amd64.
    -#8 21.93 Preparing to unpack .../083-libalgorithm-diff-xs-perl_0.04-8build3_amd64.deb ...
    -#8 21.93 Unpacking libalgorithm-diff-xs-perl:amd64 (0.04-8build3) ...
    -#8 21.95 Selecting previously unselected package libalgorithm-merge-perl.
    -#8 21.95 Preparing to unpack .../084-libalgorithm-merge-perl_0.08-5_all.deb ...
    -#8 21.96 Unpacking libalgorithm-merge-perl (0.08-5) ...
    -#8 21.97 Selecting previously unselected package libaom3:amd64.
    -#8 21.97 Preparing to unpack .../085-libaom3_3.8.2-2ubuntu0.1_amd64.deb ...
    -#8 21.97 Unpacking libaom3:amd64 (3.8.2-2ubuntu0.1) ...
    -#8 22.01 Selecting previously unselected package libbrotli1:amd64.
    -#8 22.01 Preparing to unpack .../086-libbrotli1_1.1.0-2build2_amd64.deb ...
    -#8 22.01 Unpacking libbrotli1:amd64 (1.1.0-2build2) ...
    -#8 22.03 Selecting previously unselected package libfreetype6:amd64.
    -#8 22.03 Preparing to unpack .../087-libfreetype6_2.13.2+dfsg-1build3_amd64.deb ...
    -#8 22.03 Unpacking libfreetype6:amd64 (2.13.2+dfsg-1build3) ...
    -#8 22.05 Selecting previously unselected package libfontconfig1:amd64.
    -#8 22.05 Preparing to unpack .../088-libfontconfig1_2.15.0-1.1ubuntu2_amd64.deb ...
    -#8 22.06 Unpacking libfontconfig1:amd64 (2.15.0-1.1ubuntu2) ...
    -#8 22.07 Selecting previously unselected package libsharpyuv0:amd64.
    -#8 22.07 Preparing to unpack .../089-libsharpyuv0_1.3.2-0.4build3_amd64.deb ...
    -#8 22.07 Unpacking libsharpyuv0:amd64 (1.3.2-0.4build3) ...
    -#8 22.09 Selecting previously unselected package libheif-plugin-aomdec:amd64.
    -#8 22.09 Preparing to unpack .../090-libheif-plugin-aomdec_1.17.6-1ubuntu4_amd64.deb ...
    -#8 22.09 Unpacking libheif-plugin-aomdec:amd64 (1.17.6-1ubuntu4) ...
    -#8 22.10 Selecting previously unselected package libde265-0:amd64.
    -#8 22.10 Preparing to unpack .../091-libde265-0_1.0.15-1build3_amd64.deb ...
    -#8 22.10 Unpacking libde265-0:amd64 (1.0.15-1build3) ...
    -#8 22.12 Selecting previously unselected package libheif-plugin-libde265:amd64.
    -
    -
    -
    #8 22.12 Preparing to unpack .../092-libheif-plugin-libde265_1.17.6-1ubuntu4_amd64.deb ...
    -#8 22.12 Unpacking libheif-plugin-libde265:amd64 (1.17.6-1ubuntu4) ...
    -#8 22.14 Selecting previously unselected package libheif1:amd64.
    -#8 22.14 Preparing to unpack .../093-libheif1_1.17.6-1ubuntu4_amd64.deb ...
    -#8 22.14 Unpacking libheif1:amd64 (1.17.6-1ubuntu4) ...
    -#8 22.16 Selecting previously unselected package libjpeg-turbo8:amd64.
    -#8 22.16 Preparing to unpack .../094-libjpeg-turbo8_2.1.5-2ubuntu2_amd64.deb ...
    -#8 22.16 Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ...
    -#8 22.17 Selecting previously unselected package libjpeg8:amd64.
    -#8 22.17 Preparing to unpack .../095-libjpeg8_8c-2ubuntu11_amd64.deb ...
    -#8 22.18 Unpacking libjpeg8:amd64 (8c-2ubuntu11) ...
    -#8 22.19 Selecting previously unselected package libdeflate0:amd64.
    -#8 22.19 Preparing to unpack .../096-libdeflate0_1.19-1build1.1_amd64.deb ...
    -#8 22.19 Unpacking libdeflate0:amd64 (1.19-1build1.1) ...
    -#8 22.21 Selecting previously unselected package libjbig0:amd64.
    -#8 22.21 Preparing to unpack .../097-libjbig0_2.1-6.1ubuntu2_amd64.deb ...
    -#8 22.21 Unpacking libjbig0:amd64 (2.1-6.1ubuntu2) ...
    -#8 22.22 Selecting previously unselected package liblerc4:amd64.
    -#8 22.22 Preparing to unpack .../098-liblerc4_4.0.0+ds-4ubuntu2_amd64.deb ...
    -#8 22.22 Unpacking liblerc4:amd64 (4.0.0+ds-4ubuntu2) ...
    -#8 22.24 Selecting previously unselected package libwebp7:amd64.
    -#8 22.24 Preparing to unpack .../099-libwebp7_1.3.2-0.4build3_amd64.deb ...
    -#8 22.24 Unpacking libwebp7:amd64 (1.3.2-0.4build3) ...
    -#8 22.26 Selecting previously unselected package libtiff6:amd64.
    -#8 22.26 Preparing to unpack .../100-libtiff6_4.5.1+git230720-4ubuntu2.2_amd64.deb ...
    -#8 22.26 Unpacking libtiff6:amd64 (4.5.1+git230720-4ubuntu2.2) ...
    -#8 22.28 Selecting previously unselected package libxpm4:amd64.
    -#8 22.28 Preparing to unpack .../101-libxpm4_1%3a3.5.17-1build2_amd64.deb ...
    -#8 22.28 Unpacking libxpm4:amd64 (1:3.5.17-1build2) ...
    -#8 22.30 Selecting previously unselected package libgd3:amd64.
    -#8 22.30 Preparing to unpack .../102-libgd3_2.3.3-9ubuntu5_amd64.deb ...
    -#8 22.30 Unpacking libgd3:amd64 (2.3.3-9ubuntu5) ...
    -#8 22.31 Selecting previously unselected package libc-devtools.
    -#8 22.32 Preparing to unpack .../103-libc-devtools_2.39-0ubuntu8.3_amd64.deb ...
    -#8 22.32 Unpacking libc-devtools (2.39-0ubuntu8.3) ...
    -#8 22.33 Selecting previously unselected package libexpat1-dev:amd64.
    -
    -
    -
    #8 22.33 Preparing to unpack .../104-libexpat1-dev_2.6.1-2ubuntu0.1_amd64.deb ...
    -#8 22.33 Unpacking libexpat1-dev:amd64 (2.6.1-2ubuntu0.1) ...
    -#8 22.35 Selecting previously unselected package libfile-fcntllock-perl.
    -#8 22.35 Preparing to unpack .../105-libfile-fcntllock-perl_0.22-4ubuntu5_amd64.deb ...
    -#8 22.35 Unpacking libfile-fcntllock-perl (0.22-4ubuntu5) ...
    -#8 22.37 Selecting previously unselected package libheif-plugin-aomenc:amd64.
    -#8 22.37 Preparing to unpack .../106-libheif-plugin-aomenc_1.17.6-1ubuntu4_amd64.deb ...
    -#8 22.37 Unpacking libheif-plugin-aomenc:amd64 (1.17.6-1ubuntu4) ...
    -#8 22.39 Selecting previously unselected package libjs-jquery.
    -#8 22.39 Preparing to unpack .../107-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ...
    -#8 22.39 Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ...
    -#8 22.41 Selecting previously unselected package libjs-underscore.
    -#8 22.41 Preparing to unpack .../108-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ...
    -#8 22.41 Unpacking libjs-underscore (1.13.4~dfsg+~1.11.4-3) ...
    -#8 22.43 Selecting previously unselected package libjs-sphinxdoc.
    -#8 22.43 Preparing to unpack .../109-libjs-sphinxdoc_7.2.6-6_all.deb ...
    -#8 22.43 Unpacking libjs-sphinxdoc (7.2.6-6) ...
    -#8 22.45 Selecting previously unselected package libldap-common.
    -
    -
    -
    #8 22.45 Preparing to unpack .../110-libldap-common_2.6.7+dfsg-1~exp1ubuntu8_all.deb ...
    -#8 22.45 Unpacking libldap-common (2.6.7+dfsg-1~exp1ubuntu8) ...
    -#8 22.46 Selecting previously unselected package libpython3.12t64:amd64.
    -#8 22.46 Preparing to unpack .../111-libpython3.12t64_3.12.3-1ubuntu0.2_amd64.deb ...
    -#8 22.46 Unpacking libpython3.12t64:amd64 (3.12.3-1ubuntu0.2) ...
    -#8 22.51 Selecting previously unselected package zlib1g-dev:amd64.
    -#8 22.52 Preparing to unpack .../112-zlib1g-dev_1%3a1.3.dfsg-3.1ubuntu2.1_amd64.deb ...
    -#8 22.52 Unpacking zlib1g-dev:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ...
    -#8 22.54 Selecting previously unselected package libpython3.12-dev:amd64.
    -#8 22.54 Preparing to unpack .../113-libpython3.12-dev_3.12.3-1ubuntu0.2_amd64.deb ...
    -#8 22.54 Unpacking libpython3.12-dev:amd64 (3.12.3-1ubuntu0.2) ...
    -#8 22.69 Selecting previously unselected package libpython3-dev:amd64.
    -#8 22.69 Preparing to unpack .../114-libpython3-dev_3.12.3-0ubuntu2_amd64.deb ...
    -#8 22.69 Unpacking libpython3-dev:amd64 (3.12.3-0ubuntu2) ...
    -#8 22.71 Selecting previously unselected package libsasl2-modules:amd64.
    -#8 22.71 Preparing to unpack .../115-libsasl2-modules_2.1.28+dfsg1-5ubuntu3.1_amd64.deb ...
    -#8 22.72 Unpacking libsasl2-modules:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    -#8 22.73 Selecting previously unselected package manpages-dev.
    -#8 22.73 Preparing to unpack .../116-manpages-dev_6.7-2_all.deb ...
    -#8 22.73 Unpacking manpages-dev (6.7-2) ...
    -#8 22.83 Selecting previously unselected package python3.12-dev.
    -
    -
    -
    #8 22.83 Preparing to unpack .../117-python3.12-dev_3.12.3-1ubuntu0.2_amd64.deb ...
    -#8 22.83 Unpacking python3.12-dev (3.12.3-1ubuntu0.2) ...
    -#8 22.85 Selecting previously unselected package python3-dev.
    -#8 22.85 Preparing to unpack .../118-python3-dev_3.12.3-0ubuntu2_amd64.deb ...
    -#8 22.85 Unpacking python3-dev (3.12.3-0ubuntu2) ...
    -#8 22.86 Selecting previously unselected package python3-setuptools.
    -#8 22.87 Preparing to unpack .../119-python3-setuptools_68.1.2-2ubuntu1.1_all.deb ...
    -#8 22.87 Unpacking python3-setuptools (68.1.2-2ubuntu1.1) ...
    -#8 22.92 Selecting previously unselected package python3-wheel.
    -#8 22.92 Preparing to unpack .../120-python3-wheel_0.42.0-2_all.deb ...
    -#8 22.92 Unpacking python3-wheel (0.42.0-2) ...
    -#8 22.94 Selecting previously unselected package python3-pip.
    -#8 22.94 Preparing to unpack .../121-python3-pip_24.0+dfsg-1ubuntu1_all.deb ...
    -#8 22.94 Unpacking python3-pip (24.0+dfsg-1ubuntu1) ...
    -#8 23.08 Setting up libksba8:amd64 (1.6.6-1build1) ...
    -
    -
    -
    #8 23.08 Setting up pinentry-curses (1.2.1-3ubuntu5) ...
    -#8 23.08 Setting up media-types (10.1.0) ...
    -#8 23.09 Setting up javascript-common (11+nmu1) ...
    -#8 23.10 Setting up libsharpyuv0:amd64 (1.3.2-0.4build3) ...
    -#8 23.11 Setting up libaom3:amd64 (3.8.2-2ubuntu0.1) ...
    -#8 23.11 Setting up libxau6:amd64 (1:1.0.9-1build6) ...
    -#8 23.11 Setting up lto-disabled-list (47) ...
    -#8 23.11 Setting up liblerc4:amd64 (4.0.0+ds-4ubuntu2) ...
    -#8 23.11 Setting up libgdbm6t64:amd64 (1.23-5.1build1) ...
    -#8 23.12 Setting up libgdbm-compat4t64:amd64 (1.23-5.1build1) ...
    -#8 23.12 Setting up manpages (6.7-2) ...
    -#8 23.12 Setting up libbrotli1:amd64 (1.1.0-2build2) ...
    -#8 23.12 Setting up libsqlite3-0:amd64 (3.45.1-1ubuntu2) ...
    -#8 23.13 Setting up libsasl2-modules:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    -#8 23.13 Setting up binutils-common:amd64 (2.42-4ubuntu2) ...
    -#8 23.14 Setting up libdeflate0:amd64 (1.19-1build1.1) ...
    -#8 23.14 Setting up linux-libc-dev:amd64 (6.8.0-44.44) ...
    -#8 23.14 Setting up libctf-nobfd0:amd64 (2.42-4ubuntu2) ...
    -#8 23.14 Setting up libgomp1:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.15 Setting up bzip2 (1.0.8-5.1build0.1) ...
    -#8 23.15 Setting up libldap-common (2.6.7+dfsg-1~exp1ubuntu8) ...
    -#8 23.15 Setting up libjbig0:amd64 (2.1-6.1ubuntu2) ...
    -#8 23.15 Setting up libsframe1:amd64 (2.42-4ubuntu2) ...
    -#8 23.16 Setting up libfakeroot:amd64 (1.33-1) ...
    -#8 23.16 Setting up libjansson4:amd64 (2.14-2build2) ...
    -#8 23.16 Setting up libsasl2-modules-db:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    -#8 23.17 Setting up tzdata (2024a-3ubuntu1.1) ...
    -#8 23.23 debconf: unable to initialize frontend: Dialog
    -#8 23.23 debconf: (TERM is not set, so the dialog frontend is not usable.)
    -#8 23.23 debconf: falling back to frontend: Readline
    -#8 23.24 debconf: unable to initialize frontend: Readline
    -#8 23.24 debconf: (This frontend requires a controlling tty.)
    -#8 23.24 debconf: falling back to frontend: Teletype
    -#8 23.27 Configuring tzdata
    -#8 23.27 ------------------
    -#8 23.27 
    -#8 23.27 Please select the geographic area in which you live. Subsequent configuration
    -#8 23.27 questions will narrow this down by presenting a list of cities, representing
    -#8 23.27 the time zones in which they are located.
    -#8 23.27 
    -#8 23.27   1. Africa   3. Antarctica  5. Asia      7. Australia  9. Indian    11. Etc
    -#8 23.27   2. America  4. Arctic      6. Atlantic  8. Europe     10. Pacific
    -#8 23.27 Geographic area: 
    -#8 23.27 Use of uninitialized value $_[1] in join or string at /usr/share/perl5/Debconf/DbDriver/Stack.pm line 112.
    -#8 23.28 
    -#8 23.28 Current default time zone: '/UTC'
    -#8 23.28 Local time is now:      Mon Sep 16 16:19:00 UTC 2024.
    -#8 23.28 Universal Time is now:  Mon Sep 16 16:19:00 UTC 2024.
    -#8 23.28 Run 'dpkg-reconfigure tzdata' if you wish to change it.
    -#8 23.28 
    -#8 23.28 Use of uninitialized value $val in substitution (s///) at /usr/share/perl5/Debconf/Format/822.pm line 84, <GEN6> line 4.
    -#8 23.28 Use of uninitialized value $val in concatenation (.) or string at /usr/share/perl5/Debconf/Format/822.pm line 85, <GEN6> line 4.
    -#8 23.29 Setting up fakeroot (1.33-1) ...
    -#8 23.29 update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/man1/fakeroot.1.gz because associated file /usr/share/man/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/man1/faked.1.gz because associated file /usr/share/man/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/es/man1/fakeroot.1.gz because associated file /usr/share/man/es/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/es/man1/faked.1.gz because associated file /usr/share/man/es/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/fakeroot.1.gz because associated file /usr/share/man/fr/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/faked.1.gz because associated file /usr/share/man/fr/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/sv/man1/fakeroot.1.gz because associated file /usr/share/man/sv/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 update-alternatives: warning: skip creation of /usr/share/man/sv/man1/faked.1.gz because associated file /usr/share/man/sv/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    -#8 23.30 Setting up rpcsvc-proto (1.4.2-0ubuntu7) ...
    -#8 23.30 Setting up gcc-13-base:amd64 (13.2.0-23ubuntu4) ...
    -#8 23.30 Setting up libx11-data (2:1.8.7-1build1) ...
    -#8 23.31 Setting up make (4.3-4.1build2) ...
    -#8 23.31 Setting up libmpfr6:amd64 (4.2.1-1build1) ...
    -#8 23.31 Setting up gnupg-l10n (2.4.4-2ubuntu17) ...
    -#8 23.32 Setting up xz-utils (5.6.1+really5.4.5-1build0.1) ...
    -#8 23.32 update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzma.1.gz because associated file /usr/share/man/man1/xz.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/unlzma.1.gz because associated file /usr/share/man/man1/unxz.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzcat.1.gz because associated file /usr/share/man/man1/xzcat.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzmore.1.gz because associated file /usr/share/man/man1/xzmore.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzless.1.gz because associated file /usr/share/man/man1/xzless.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzdiff.1.gz because associated file /usr/share/man/man1/xzdiff.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzcmp.1.gz because associated file /usr/share/man/man1/xzcmp.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzgrep.1.gz because associated file /usr/share/man/man1/xzgrep.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzegrep.1.gz because associated file /usr/share/man/man1/xzegrep.1.gz (of link group lzma) doesn't exist
    -#8 23.32 update-alternatives: warning: skip creation of /usr/share/man/man1/lzfgrep.1.gz because associated file /usr/share/man/man1/xzfgrep.1.gz (of link group lzma) doesn't exist
    -#8 23.33 Setting up perl-modules-5.38 (5.38.2-3.2build2) ...
    -#8 23.33 Setting up libquadmath0:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.33 Setting up fonts-dejavu-mono (2.37-8) ...
    -#8 23.34 Setting up libpng16-16t64:amd64 (1.6.43-5build1) ...
    -
    -
    -
    #8 23.34 Setting up libmpc3:amd64 (1.3.1-1build1) ...
    -#8 23.34 Setting up libatomic1:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.34 Setting up patch (2.7.6-7build3) ...
    -#8 23.35 Setting up fonts-dejavu-core (2.37-8) ...
    -#8 23.37 Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ...
    -#8 23.37 Setting up libsasl2-2:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    -#8 23.38 Setting up libwebp7:amd64 (1.3.2-0.4build3) ...
    -#8 23.38 Setting up libubsan1:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.38 Setting up libhwasan0:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.38 Setting up libcrypt-dev:amd64 (1:4.4.36-4build1) ...
    -#8 23.39 Setting up libasan8:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.39 Setting up netbase (6.4) ...
    -#8 23.40 Setting up libperl5.38t64:amd64 (5.38.2-3.2build2) ...
    -#8 23.40 Setting up libtsan2:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.41 Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ...
    -#8 23.41 Setting up libbinutils:amd64 (2.42-4ubuntu2) ...
    -#8 23.42 Setting up libisl23:amd64 (0.26-3build1) ...
    -#8 23.42 Setting up libde265-0:amd64 (1.0.15-1build3) ...
    -#8 23.42 Setting up libc-dev-bin (2.39-0ubuntu8.3) ...
    -#8 23.42 Setting up openssl (3.0.13-0ubuntu3.4) ...
    -#8 23.43 Setting up libbsd0:amd64 (0.12.1-1build1) ...
    -#8 23.43 Setting up readline-common (8.2-4build1) ...
    -#8 23.44 Setting up libcc1-0:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.44 Setting up libldap2:amd64 (2.6.7+dfsg-1~exp1ubuntu8) ...
    -#8 23.44 Setting up liblocale-gettext-perl (1.07-6ubuntu5) ...
    -#8 23.45 Setting up liblsan0:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.45 Setting up libitm1:amd64 (14-20240412-0ubuntu1) ...
    -#8 23.45 Setting up libjs-underscore (1.13.4~dfsg+~1.11.4-3) ...
    -#8 23.46 Setting up gnupg-utils (2.4.4-2ubuntu17) ...
    -#8 23.46 Setting up libctf0:amd64 (2.42-4ubuntu2) ...
    -#8 23.47 Setting up libjpeg8:amd64 (8c-2ubuntu11) ...
    -#8 23.47 Setting up manpages-dev (6.7-2) ...
    -#8 23.47 Setting up libxdmcp6:amd64 (1:1.1.3-0ubuntu6) ...
    -#8 23.47 Setting up libxcb1:amd64 (1.15-1ubuntu2) ...
    -#8 23.48 Setting up cpp-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    -#8 23.48 Setting up fontconfig-config (2.15.0-1.1ubuntu2) ...
    -#8 23.63 Setting up ca-certificates (20240203) ...
    -
    -
    -
    #8 23.70 debconf: unable to initialize frontend: Dialog
    -#8 23.70 debconf: (TERM is not set, so the dialog frontend is not usable.)
    -#8 23.70 debconf: falling back to frontend: Readline
    -#8 23.71 debconf: unable to initialize frontend: Readline
    -#8 23.71 debconf: (This frontend requires a controlling tty.)
    -#8 23.71 debconf: falling back to frontend: Teletype
    -
    -
    -
    #8 24.10 Updating certificates in /etc/ssl/certs...
    -
    -
    -
    #8 24.67 146 added, 0 removed; done.
    -
    -
    -
    #8 24.69 Setting up perl (5.38.2-3.2build2) ...
    -#8 24.70 Setting up libgprofng0:amd64 (2.42-4ubuntu2) ...
    -#8 24.70 Setting up libfreetype6:amd64 (2.13.2+dfsg-1build3) ...
    -#8 24.70 Setting up libjs-sphinxdoc (7.2.6-6) ...
    -#8 24.70 Setting up libdpkg-perl (1.22.6ubuntu6.1) ...
    -#8 24.71 Setting up libreadline8t64:amd64 (8.2-4build1) ...
    -#8 24.71 Setting up libgcc-13-dev:amd64 (13.2.0-23ubuntu4) ...
    -#8 24.71 Setting up libtiff6:amd64 (4.5.1+git230720-4ubuntu2.2) ...
    -#8 24.71 Setting up gpgconf (2.4.4-2ubuntu17) ...
    -#8 24.72 Setting up libc6-dev:amd64 (2.39-0ubuntu8.3) ...
    -#8 24.72 Setting up libx11-6:amd64 (2:1.8.7-1build1) ...
    -#8 24.72 Setting up libfontconfig1:amd64 (2.15.0-1.1ubuntu2) ...
    -#8 24.72 Setting up gpg (2.4.4-2ubuntu17) ...
    -#8 24.73 Setting up libstdc++-13-dev:amd64 (13.2.0-23ubuntu4) ...
    -#8 24.73 Setting up binutils-x86-64-linux-gnu (2.42-4ubuntu2) ...
    -#8 24.73 Setting up cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    -#8 24.73 Setting up gpg-agent (2.4.4-2ubuntu17) ...
    -
    -
    -
    #8 25.14 Setting up libpython3.12-stdlib:amd64 (3.12.3-1ubuntu0.2) ...
    -#8 25.14 Setting up libxpm4:amd64 (1:3.5.17-1build2) ...
    -#8 25.14 Setting up cpp-13 (13.2.0-23ubuntu4) ...
    -#8 25.14 Setting up libfile-fcntllock-perl (0.22-4ubuntu5) ...
    -#8 25.15 Setting up libalgorithm-diff-perl (1.201-1) ...
    -#8 25.15 Setting up gcc-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    -#8 25.15 Setting up python3.12 (3.12.3-1ubuntu0.2) ...
    -
    -
    -
    #8 25.92 Setting up gpgsm (2.4.4-2ubuntu17) ...
    -#8 25.92 Setting up binutils (2.42-4ubuntu2) ...
    -#8 25.92 Setting up dpkg-dev (1.22.6ubuntu6.1) ...
    -#8 25.93 Setting up libpython3.12t64:amd64 (3.12.3-1ubuntu0.2) ...
    -#8 25.93 Setting up dirmngr (2.4.4-2ubuntu17) ...
    -#8 26.04 Setting up libexpat1-dev:amd64 (2.6.1-2ubuntu0.1) ...
    -
    -
    -
    #8 26.04 Setting up gcc-13 (13.2.0-23ubuntu4) ...
    -#8 26.05 Setting up keyboxd (2.4.4-2ubuntu17) ...
    -#8 26.15 Setting up zlib1g-dev:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ...
    -#8 26.15 Setting up cpp (4:13.2.0-7ubuntu1) ...
    -#8 26.16 Setting up gnupg (2.4.4-2ubuntu17) ...
    -#8 26.16 Setting up libalgorithm-diff-xs-perl:amd64 (0.04-8build3) ...
    -#8 26.17 Setting up libpython3-stdlib:amd64 (3.12.3-0ubuntu2) ...
    -#8 26.17 Setting up libalgorithm-merge-perl (0.08-5) ...
    -#8 26.17 Setting up g++-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    -#8 26.17 Setting up gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    -#8 26.18 Setting up gpg-wks-client (2.4.4-2ubuntu17) ...
    -#8 26.18 Setting up python3 (3.12.3-0ubuntu2) ...
    -#8 26.18 running python rtupdate hooks for python3.12...
    -#8 26.18 running python post-rtupdate hooks for python3.12...
    -#8 26.27 Setting up libpython3.12-dev:amd64 (3.12.3-1ubuntu0.2) ...
    -
    -
    -
    #8 26.27 Setting up python3-wheel (0.42.0-2) ...
    -#8 26.39 Setting up gcc (4:13.2.0-7ubuntu1) ...
    -#8 26.40 Setting up python3.12-dev (3.12.3-1ubuntu0.2) ...
    -#8 26.40 Setting up g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    -#8 26.41 Setting up python3-pkg-resources (68.1.2-2ubuntu1.1) ...
    -#8 26.58 Setting up g++-13 (13.2.0-23ubuntu4) ...
    -
    -
    -
    #8 26.58 Setting up libpython3-dev:amd64 (3.12.3-0ubuntu2) ...
    -#8 26.59 Setting up python3-setuptools (68.1.2-2ubuntu1.1) ...
    -
    -
    -
    #8 26.98 Setting up python3-dev (3.12.3-0ubuntu2) ...
    -#8 26.99 Setting up python3-pip (24.0+dfsg-1ubuntu1) ...
    -
    -
    -
    #8 28.03 Setting up g++ (4:13.2.0-7ubuntu1) ...
    -#8 28.04 update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
    -#8 28.04 update-alternatives: warning: skip creation of /usr/share/man/man1/c++.1.gz because associated file /usr/share/man/man1/g++.1.gz (of link group c++) doesn't exist
    -#8 28.04 Setting up build-essential (12.10ubuntu1) ...
    -#8 28.04 Setting up libheif1:amd64 (1.17.6-1ubuntu4) ...
    -#8 28.04 Setting up libgd3:amd64 (2.3.3-9ubuntu5) ...
    -#8 28.05 Setting up libc-devtools (2.39-0ubuntu8.3) ...
    -#8 28.05 Setting up libheif-plugin-aomdec:amd64 (1.17.6-1ubuntu4) ...
    -#8 28.05 Setting up libheif-plugin-libde265:amd64 (1.17.6-1ubuntu4) ...
    -#8 28.05 Setting up libheif-plugin-aomenc:amd64 (1.17.6-1ubuntu4) ...
    -#8 28.06 Processing triggers for libc-bin (2.39-0ubuntu8.3) ...
    -#8 28.07 Processing triggers for ca-certificates (20240203) ...
    -#8 28.07 Updating certificates in /etc/ssl/certs...
    +#8 8.698 Preparing to unpack .../000-openssl_3.0.13-0ubuntu3.4_amd64.deb ...
    +#8 8.699 Unpacking openssl (3.0.13-0ubuntu3.4) ...
    +#8 8.736 Selecting previously unselected package ca-certificates.
    +
    +
    +
    #8 8.737 Preparing to unpack .../001-ca-certificates_20240203_all.deb ...
    +#8 8.739 Unpacking ca-certificates (20240203) ...
    +#8 8.781 Selecting previously unselected package libbsd0:amd64.
    +#8 8.782 Preparing to unpack .../002-libbsd0_0.12.1-1build1_amd64.deb ...
    +#8 8.783 Unpacking libbsd0:amd64 (0.12.1-1build1) ...
    +#8 8.800 Selecting previously unselected package python3-pkg-resources.
    +#8 8.800 Preparing to unpack .../003-python3-pkg-resources_68.1.2-2ubuntu1.1_all.deb ...
    +#8 8.803 Unpacking python3-pkg-resources (68.1.2-2ubuntu1.1) ...
    +#8 8.829 Selecting previously unselected package libjansson4:amd64.
    +#8 8.830 Preparing to unpack .../004-libjansson4_2.14-2build2_amd64.deb ...
    +#8 8.831 Unpacking libjansson4:amd64 (2.14-2build2) ...
    +#8 8.848 Selecting previously unselected package libpng16-16t64:amd64.
    +#8 8.849 Preparing to unpack .../005-libpng16-16t64_1.6.43-5build1_amd64.deb ...
    +#8 8.850 Unpacking libpng16-16t64:amd64 (1.6.43-5build1) ...
    +#8 8.867 Selecting previously unselected package libxau6:amd64.
    +#8 8.868 Preparing to unpack .../006-libxau6_1%3a1.0.9-1build6_amd64.deb ...
    +#8 8.869 Unpacking libxau6:amd64 (1:1.0.9-1build6) ...
    +#8 8.884 Selecting previously unselected package libxdmcp6:amd64.
    +#8 8.885 Preparing to unpack .../007-libxdmcp6_1%3a1.1.3-0ubuntu6_amd64.deb ...
    +#8 8.886 Unpacking libxdmcp6:amd64 (1:1.1.3-0ubuntu6) ...
    +#8 8.904 Selecting previously unselected package libxcb1:amd64.
    +#8 8.904 Preparing to unpack .../008-libxcb1_1.15-1ubuntu2_amd64.deb ...
    +#8 8.906 Unpacking libxcb1:amd64 (1.15-1ubuntu2) ...
    +#8 8.922 Selecting previously unselected package libx11-data.
    +#8 8.923 Preparing to unpack .../009-libx11-data_2%3a1.8.7-1build1_all.deb ...
    +#8 8.924 Unpacking libx11-data (2:1.8.7-1build1) ...
    +#8 8.981 Selecting previously unselected package libx11-6:amd64.
    +
    +
    +
    #8 8.983 Preparing to unpack .../010-libx11-6_2%3a1.8.7-1build1_amd64.deb ...
    +#8 8.984 Unpacking libx11-6:amd64 (2:1.8.7-1build1) ...
    +#8 9.005 Selecting previously unselected package manpages.
    +#8 9.005 Preparing to unpack .../011-manpages_6.7-2_all.deb ...
    +#8 9.006 Unpacking manpages (6.7-2) ...
    +#8 9.042 Selecting previously unselected package xz-utils.
    +#8 9.043 Preparing to unpack .../012-xz-utils_5.6.1+really5.4.5-1build0.1_amd64.deb ...
    +#8 9.044 Unpacking xz-utils (5.6.1+really5.4.5-1build0.1) ...
    +#8 9.073 Selecting previously unselected package binutils-common:amd64.
    +#8 9.074 Preparing to unpack .../013-binutils-common_2.42-4ubuntu2_amd64.deb ...
    +#8 9.076 Unpacking binutils-common:amd64 (2.42-4ubuntu2) ...
    +#8 9.098 Selecting previously unselected package libsframe1:amd64.
    +#8 9.099 Preparing to unpack .../014-libsframe1_2.42-4ubuntu2_amd64.deb ...
    +#8 9.101 Unpacking libsframe1:amd64 (2.42-4ubuntu2) ...
    +#8 9.118 Selecting previously unselected package libbinutils:amd64.
    +#8 9.119 Preparing to unpack .../015-libbinutils_2.42-4ubuntu2_amd64.deb ...
    +#8 9.120 Unpacking libbinutils:amd64 (2.42-4ubuntu2) ...
    +#8 9.151 Selecting previously unselected package libctf-nobfd0:amd64.
    +#8 9.152 Preparing to unpack .../016-libctf-nobfd0_2.42-4ubuntu2_amd64.deb ...
    +#8 9.153 Unpacking libctf-nobfd0:amd64 (2.42-4ubuntu2) ...
    +#8 9.172 Selecting previously unselected package libctf0:amd64.
    +#8 9.173 Preparing to unpack .../017-libctf0_2.42-4ubuntu2_amd64.deb ...
    +#8 9.174 Unpacking libctf0:amd64 (2.42-4ubuntu2) ...
    +#8 9.192 Selecting previously unselected package libgprofng0:amd64.
    +#8 9.193 Preparing to unpack .../018-libgprofng0_2.42-4ubuntu2_amd64.deb ...
    +#8 9.195 Unpacking libgprofng0:amd64 (2.42-4ubuntu2) ...
    +#8 9.229 Selecting previously unselected package binutils-x86-64-linux-gnu.
    +
    +
    +
    #8 9.230 Preparing to unpack .../019-binutils-x86-64-linux-gnu_2.42-4ubuntu2_amd64.deb ...
    +#8 9.232 Unpacking binutils-x86-64-linux-gnu (2.42-4ubuntu2) ...
    +#8 9.314 Selecting previously unselected package binutils.
    +#8 9.315 Preparing to unpack .../020-binutils_2.42-4ubuntu2_amd64.deb ...
    +#8 9.317 Unpacking binutils (2.42-4ubuntu2) ...
    +#8 9.335 Selecting previously unselected package libc-dev-bin.
    +#8 9.336 Preparing to unpack .../021-libc-dev-bin_2.39-0ubuntu8.3_amd64.deb ...
    +#8 9.341 Unpacking libc-dev-bin (2.39-0ubuntu8.3) ...
    +#8 9.356 Selecting previously unselected package linux-libc-dev:amd64.
    +#8 9.357 Preparing to unpack .../022-linux-libc-dev_6.8.0-44.44_amd64.deb ...
    +#8 9.358 Unpacking linux-libc-dev:amd64 (6.8.0-44.44) ...
    +
    +
    +
    #8 9.562 Selecting previously unselected package libcrypt-dev:amd64.
    +#8 9.564 Preparing to unpack .../023-libcrypt-dev_1%3a4.4.36-4build1_amd64.deb ...
    +#8 9.571 Unpacking libcrypt-dev:amd64 (1:4.4.36-4build1) ...
    +#8 9.592 Selecting previously unselected package rpcsvc-proto.
    +#8 9.593 Preparing to unpack .../024-rpcsvc-proto_1.4.2-0ubuntu7_amd64.deb ...
    +#8 9.595 Unpacking rpcsvc-proto (1.4.2-0ubuntu7) ...
    +#8 9.616 Selecting previously unselected package libc6-dev:amd64.
    +#8 9.617 Preparing to unpack .../025-libc6-dev_2.39-0ubuntu8.3_amd64.deb ...
    +#8 9.619 Unpacking libc6-dev:amd64 (2.39-0ubuntu8.3) ...
    +#8 9.752 Selecting previously unselected package gcc-13-base:amd64.
    +
    +
    +
    #8 9.754 Preparing to unpack .../026-gcc-13-base_13.2.0-23ubuntu4_amd64.deb ...
    +#8 9.755 Unpacking gcc-13-base:amd64 (13.2.0-23ubuntu4) ...
    +#8 9.772 Selecting previously unselected package libisl23:amd64.
    +#8 9.774 Preparing to unpack .../027-libisl23_0.26-3build1_amd64.deb ...
    +#8 9.775 Unpacking libisl23:amd64 (0.26-3build1) ...
    +#8 9.801 Selecting previously unselected package libmpfr6:amd64.
    +#8 9.802 Preparing to unpack .../028-libmpfr6_4.2.1-1build1_amd64.deb ...
    +#8 9.803 Unpacking libmpfr6:amd64 (4.2.1-1build1) ...
    +#8 9.825 Selecting previously unselected package libmpc3:amd64.
    +#8 9.826 Preparing to unpack .../029-libmpc3_1.3.1-1build1_amd64.deb ...
    +#8 9.827 Unpacking libmpc3:amd64 (1.3.1-1build1) ...
    +#8 9.842 Selecting previously unselected package cpp-13-x86-64-linux-gnu.
    +#8 9.843 Preparing to unpack .../030-cpp-13-x86-64-linux-gnu_13.2.0-23ubuntu4_amd64.deb ...
    +#8 9.844 Unpacking cpp-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    +#8 9.988 Selecting previously unselected package cpp-13.
    +#8 9.990 Preparing to unpack .../031-cpp-13_13.2.0-23ubuntu4_amd64.deb ...
    +#8 9.992 Unpacking cpp-13 (13.2.0-23ubuntu4) ...
    +#8 10.01 Selecting previously unselected package cpp-x86-64-linux-gnu.
    +#8 10.01 Preparing to unpack .../032-cpp-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ...
    +#8 10.01 Unpacking cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    +#8 10.03 Selecting previously unselected package cpp.
    +#8 10.03 Preparing to unpack .../033-cpp_4%3a13.2.0-7ubuntu1_amd64.deb ...
    +#8 10.03 Unpacking cpp (4:13.2.0-7ubuntu1) ...
    +#8 10.05 Selecting previously unselected package libcc1-0:amd64.
    +#8 10.05 Preparing to unpack .../034-libcc1-0_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.05 Unpacking libcc1-0:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.07 Selecting previously unselected package libgomp1:amd64.
    +#8 10.07 Preparing to unpack .../035-libgomp1_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.07 Unpacking libgomp1:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.09 Selecting previously unselected package libitm1:amd64.
    +
    +
    +
    #8 10.09 Preparing to unpack .../036-libitm1_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.09 Unpacking libitm1:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.11 Selecting previously unselected package libatomic1:amd64.
    +#8 10.11 Preparing to unpack .../037-libatomic1_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.11 Unpacking libatomic1:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.13 Selecting previously unselected package libasan8:amd64.
    +#8 10.13 Preparing to unpack .../038-libasan8_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.13 Unpacking libasan8:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.19 Selecting previously unselected package liblsan0:amd64.
    +#8 10.19 Preparing to unpack .../039-liblsan0_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.20 Unpacking liblsan0:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.23 Selecting previously unselected package libtsan2:amd64.
    +#8 10.23 Preparing to unpack .../040-libtsan2_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.23 Unpacking libtsan2:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.28 Selecting previously unselected package libubsan1:amd64.
    +#8 10.28 Preparing to unpack .../041-libubsan1_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.28 Unpacking libubsan1:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.31 Selecting previously unselected package libhwasan0:amd64.
    +
    +
    +
    #8 10.32 Preparing to unpack .../042-libhwasan0_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.32 Unpacking libhwasan0:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.35 Selecting previously unselected package libquadmath0:amd64.
    +#8 10.36 Preparing to unpack .../043-libquadmath0_14-20240412-0ubuntu1_amd64.deb ...
    +#8 10.36 Unpacking libquadmath0:amd64 (14-20240412-0ubuntu1) ...
    +#8 10.37 Selecting previously unselected package libgcc-13-dev:amd64.
    +#8 10.37 Preparing to unpack .../044-libgcc-13-dev_13.2.0-23ubuntu4_amd64.deb ...
    +#8 10.38 Unpacking libgcc-13-dev:amd64 (13.2.0-23ubuntu4) ...
    +#8 10.47 Selecting previously unselected package gcc-13-x86-64-linux-gnu.
    +#8 10.47 Preparing to unpack .../045-gcc-13-x86-64-linux-gnu_13.2.0-23ubuntu4_amd64.deb ...
    +#8 10.47 Unpacking gcc-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    +
    +
    +
    #8 10.76 Selecting previously unselected package gcc-13.
    +
    +
    +
    #8 10.76 Preparing to unpack .../046-gcc-13_13.2.0-23ubuntu4_amd64.deb ...
    +#8 10.77 Unpacking gcc-13 (13.2.0-23ubuntu4) ...
    +#8 10.78 Selecting previously unselected package gcc-x86-64-linux-gnu.
    +#8 10.79 Preparing to unpack .../047-gcc-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ...
    +#8 10.79 Unpacking gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    +#8 10.81 Selecting previously unselected package gcc.
    +#8 10.81 Preparing to unpack .../048-gcc_4%3a13.2.0-7ubuntu1_amd64.deb ...
    +#8 10.81 Unpacking gcc (4:13.2.0-7ubuntu1) ...
    +#8 10.83 Selecting previously unselected package libstdc++-13-dev:amd64.
    +#8 10.83 Preparing to unpack .../049-libstdc++-13-dev_13.2.0-23ubuntu4_amd64.deb ...
    +#8 10.83 Unpacking libstdc++-13-dev:amd64 (13.2.0-23ubuntu4) ...
    +#8 11.03 Selecting previously unselected package g++-13-x86-64-linux-gnu.
    +
    +
    +
    #8 11.04 Preparing to unpack .../050-g++-13-x86-64-linux-gnu_13.2.0-23ubuntu4_amd64.deb ...
    +#8 11.04 Unpacking g++-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    +#8 11.20 Selecting previously unselected package g++-13.
    +#8 11.20 Preparing to unpack .../051-g++-13_13.2.0-23ubuntu4_amd64.deb ...
    +#8 11.20 Unpacking g++-13 (13.2.0-23ubuntu4) ...
    +#8 11.21 Selecting previously unselected package g++-x86-64-linux-gnu.
    +#8 11.21 Preparing to unpack .../052-g++-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ...
    +#8 11.22 Unpacking g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    +#8 11.23 Selecting previously unselected package g++.
    +#8 11.23 Preparing to unpack .../053-g++_4%3a13.2.0-7ubuntu1_amd64.deb ...
    +#8 11.23 Unpacking g++ (4:13.2.0-7ubuntu1) ...
    +#8 11.25 Selecting previously unselected package make.
    +#8 11.25 Preparing to unpack .../054-make_4.3-4.1build2_amd64.deb ...
    +#8 11.25 Unpacking make (4.3-4.1build2) ...
    +#8 11.27 Selecting previously unselected package libdpkg-perl.
    +#8 11.27 Preparing to unpack .../055-libdpkg-perl_1.22.6ubuntu6.1_all.deb ...
    +#8 11.27 Unpacking libdpkg-perl (1.22.6ubuntu6.1) ...
    +#8 11.31 Selecting previously unselected package bzip2.
    +
    +
    +
    #8 11.31 Preparing to unpack .../056-bzip2_1.0.8-5.1build0.1_amd64.deb ...
    +#8 11.31 Unpacking bzip2 (1.0.8-5.1build0.1) ...
    +#8 11.33 Selecting previously unselected package patch.
    +#8 11.33 Preparing to unpack .../057-patch_2.7.6-7build3_amd64.deb ...
    +#8 11.33 Unpacking patch (2.7.6-7build3) ...
    +#8 11.35 Selecting previously unselected package lto-disabled-list.
    +#8 11.35 Preparing to unpack .../058-lto-disabled-list_47_all.deb ...
    +#8 11.35 Unpacking lto-disabled-list (47) ...
    +#8 11.37 Selecting previously unselected package dpkg-dev.
    +#8 11.37 Preparing to unpack .../059-dpkg-dev_1.22.6ubuntu6.1_all.deb ...
    +#8 11.37 Unpacking dpkg-dev (1.22.6ubuntu6.1) ...
    +#8 11.41 Selecting previously unselected package build-essential.
    +#8 11.41 Preparing to unpack .../060-build-essential_12.10ubuntu1_amd64.deb ...
    +#8 11.41 Unpacking build-essential (12.10ubuntu1) ...
    +#8 11.43 Selecting previously unselected package gpgconf.
    +#8 11.43 Preparing to unpack .../061-gpgconf_2.4.4-2ubuntu17_amd64.deb ...
    +#8 11.43 Unpacking gpgconf (2.4.4-2ubuntu17) ...
    +#8 11.46 Selecting previously unselected package libksba8:amd64.
    +#8 11.46 Preparing to unpack .../062-libksba8_1.6.6-1build1_amd64.deb ...
    +#8 11.46 Unpacking libksba8:amd64 (1.6.6-1build1) ...
    +#8 11.48 Selecting previously unselected package libsasl2-modules-db:amd64.
    +#8 11.48 Preparing to unpack .../063-libsasl2-modules-db_2.1.28+dfsg1-5ubuntu3.1_amd64.deb ...
    +#8 11.48 Unpacking libsasl2-modules-db:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    +#8 11.50 Selecting previously unselected package libsasl2-2:amd64.
    +#8 11.50 Preparing to unpack .../064-libsasl2-2_2.1.28+dfsg1-5ubuntu3.1_amd64.deb ...
    +#8 11.50 Unpacking libsasl2-2:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    +#8 11.52 Selecting previously unselected package libldap2:amd64.
    +
    +
    +
    #8 11.52 Preparing to unpack .../065-libldap2_2.6.7+dfsg-1~exp1ubuntu8_amd64.deb ...
    +#8 11.53 Unpacking libldap2:amd64 (2.6.7+dfsg-1~exp1ubuntu8) ...
    +#8 11.55 Selecting previously unselected package dirmngr.
    +#8 11.55 Preparing to unpack .../066-dirmngr_2.4.4-2ubuntu17_amd64.deb ...
    +#8 11.56 Unpacking dirmngr (2.4.4-2ubuntu17) ...
    +#8 11.58 Selecting previously unselected package libfakeroot:amd64.
    +#8 11.59 Preparing to unpack .../067-libfakeroot_1.33-1_amd64.deb ...
    +#8 11.59 Unpacking libfakeroot:amd64 (1.33-1) ...
    +#8 11.61 Selecting previously unselected package fakeroot.
    +#8 11.61 Preparing to unpack .../068-fakeroot_1.33-1_amd64.deb ...
    +#8 11.61 Unpacking fakeroot (1.33-1) ...
    +#8 11.63 Selecting previously unselected package fonts-dejavu-mono.
    +
    +
    +
    #8 11.63 Preparing to unpack .../069-fonts-dejavu-mono_2.37-8_all.deb ...
    +#8 11.63 Unpacking fonts-dejavu-mono (2.37-8) ...
    +#8 11.66 Selecting previously unselected package fonts-dejavu-core.
    +#8 11.66 Preparing to unpack .../070-fonts-dejavu-core_2.37-8_all.deb ...
    +#8 11.68 Unpacking fonts-dejavu-core (2.37-8) ...
    +#8 11.71 Selecting previously unselected package fontconfig-config.
    +#8 11.71 Preparing to unpack .../071-fontconfig-config_2.15.0-1.1ubuntu2_amd64.deb ...
    +#8 11.84 Unpacking fontconfig-config (2.15.0-1.1ubuntu2) ...
    +#8 11.87 Selecting previously unselected package gnupg-utils.
    +#8 11.87 Preparing to unpack .../072-gnupg-utils_2.4.4-2ubuntu17_amd64.deb ...
    +#8 11.87 Unpacking gnupg-utils (2.4.4-2ubuntu17) ...
    +#8 11.89 Selecting previously unselected package gpg.
    +#8 11.89 Preparing to unpack .../073-gpg_2.4.4-2ubuntu17_amd64.deb ...
    +#8 11.89 Unpacking gpg (2.4.4-2ubuntu17) ...
    +#8 11.92 Selecting previously unselected package pinentry-curses.
    +#8 11.92 Preparing to unpack .../074-pinentry-curses_1.2.1-3ubuntu5_amd64.deb ...
    +#8 11.92 Unpacking pinentry-curses (1.2.1-3ubuntu5) ...
    +#8 11.94 Selecting previously unselected package gpg-agent.
    +
    +
    +
    #8 11.95 Preparing to unpack .../075-gpg-agent_2.4.4-2ubuntu17_amd64.deb ...
    +#8 11.95 Unpacking gpg-agent (2.4.4-2ubuntu17) ...
    +#8 11.97 Selecting previously unselected package gpgsm.
    +#8 11.97 Preparing to unpack .../076-gpgsm_2.4.4-2ubuntu17_amd64.deb ...
    +#8 11.97 Unpacking gpgsm (2.4.4-2ubuntu17) ...
    +#8 11.99 Selecting previously unselected package keyboxd.
    +#8 12.00 Preparing to unpack .../077-keyboxd_2.4.4-2ubuntu17_amd64.deb ...
    +#8 12.00 Unpacking keyboxd (2.4.4-2ubuntu17) ...
    +#8 12.02 Selecting previously unselected package gnupg.
    +#8 12.02 Preparing to unpack .../078-gnupg_2.4.4-2ubuntu17_all.deb ...
    +#8 12.02 Unpacking gnupg (2.4.4-2ubuntu17) ...
    +#8 12.04 Selecting previously unselected package gnupg-l10n.
    +#8 12.04 Preparing to unpack .../079-gnupg-l10n_2.4.4-2ubuntu17_all.deb ...
    +#8 12.05 Unpacking gnupg-l10n (2.4.4-2ubuntu17) ...
    +#8 12.07 Selecting previously unselected package gpg-wks-client.
    +#8 12.07 Preparing to unpack .../080-gpg-wks-client_2.4.4-2ubuntu17_amd64.deb ...
    +#8 12.07 Unpacking gpg-wks-client (2.4.4-2ubuntu17) ...
    +#8 12.09 Selecting previously unselected package javascript-common.
    +#8 12.09 Preparing to unpack .../081-javascript-common_11+nmu1_all.deb ...
    +#8 12.10 Unpacking javascript-common (11+nmu1) ...
    +#8 12.12 Selecting previously unselected package libalgorithm-diff-perl.
    +#8 12.12 Preparing to unpack .../082-libalgorithm-diff-perl_1.201-1_all.deb ...
    +#8 12.12 Unpacking libalgorithm-diff-perl (1.201-1) ...
    +#8 12.14 Selecting previously unselected package libalgorithm-diff-xs-perl:amd64.
    +#8 12.14 Preparing to unpack .../083-libalgorithm-diff-xs-perl_0.04-8build3_amd64.deb ...
    +
    +
    +
    #8 12.15 Unpacking libalgorithm-diff-xs-perl:amd64 (0.04-8build3) ...
    +#8 12.18 Selecting previously unselected package libalgorithm-merge-perl.
    +#8 12.18 Preparing to unpack .../084-libalgorithm-merge-perl_0.08-5_all.deb ...
    +#8 12.18 Unpacking libalgorithm-merge-perl (0.08-5) ...
    +#8 12.20 Selecting previously unselected package libaom3:amd64.
    +#8 12.20 Preparing to unpack .../085-libaom3_3.8.2-2ubuntu0.1_amd64.deb ...
    +#8 12.20 Unpacking libaom3:amd64 (3.8.2-2ubuntu0.1) ...
    +#8 12.24 Selecting previously unselected package libbrotli1:amd64.
    +#8 12.24 Preparing to unpack .../086-libbrotli1_1.1.0-2build2_amd64.deb ...
    +#8 12.25 Unpacking libbrotli1:amd64 (1.1.0-2build2) ...
    +#8 12.27 Selecting previously unselected package libfreetype6:amd64.
    +#8 12.27 Preparing to unpack .../087-libfreetype6_2.13.2+dfsg-1build3_amd64.deb ...
    +#8 12.27 Unpacking libfreetype6:amd64 (2.13.2+dfsg-1build3) ...
    +#8 12.30 Selecting previously unselected package libfontconfig1:amd64.
    +#8 12.30 Preparing to unpack .../088-libfontconfig1_2.15.0-1.1ubuntu2_amd64.deb ...
    +#8 12.30 Unpacking libfontconfig1:amd64 (2.15.0-1.1ubuntu2) ...
    +#8 12.32 Selecting previously unselected package libsharpyuv0:amd64.
    +#8 12.32 Preparing to unpack .../089-libsharpyuv0_1.3.2-0.4build3_amd64.deb ...
    +#8 12.32 Unpacking libsharpyuv0:amd64 (1.3.2-0.4build3) ...
    +#8 12.33 Selecting previously unselected package libheif-plugin-aomdec:amd64.
    +#8 12.34 Preparing to unpack .../090-libheif-plugin-aomdec_1.17.6-1ubuntu4_amd64.deb ...
    +#8 12.34 Unpacking libheif-plugin-aomdec:amd64 (1.17.6-1ubuntu4) ...
    +#8 12.35 Selecting previously unselected package libde265-0:amd64.
    +
    +
    +
    #8 12.35 Preparing to unpack .../091-libde265-0_1.0.15-1build3_amd64.deb ...
    +#8 12.36 Unpacking libde265-0:amd64 (1.0.15-1build3) ...
    +#8 12.37 Selecting previously unselected package libheif-plugin-libde265:amd64.
    +#8 12.38 Preparing to unpack .../092-libheif-plugin-libde265_1.17.6-1ubuntu4_amd64.deb ...
    +#8 12.38 Unpacking libheif-plugin-libde265:amd64 (1.17.6-1ubuntu4) ...
    +#8 12.41 Selecting previously unselected package libheif1:amd64.
    +#8 12.41 Preparing to unpack .../093-libheif1_1.17.6-1ubuntu4_amd64.deb ...
    +#8 12.41 Unpacking libheif1:amd64 (1.17.6-1ubuntu4) ...
    +#8 12.43 Selecting previously unselected package libjpeg-turbo8:amd64.
    +#8 12.43 Preparing to unpack .../094-libjpeg-turbo8_2.1.5-2ubuntu2_amd64.deb ...
    +#8 12.43 Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ...
    +#8 12.45 Selecting previously unselected package libjpeg8:amd64.
    +#8 12.45 Preparing to unpack .../095-libjpeg8_8c-2ubuntu11_amd64.deb ...
    +#8 12.46 Unpacking libjpeg8:amd64 (8c-2ubuntu11) ...
    +#8 12.48 Selecting previously unselected package libdeflate0:amd64.
    +#8 12.48 Preparing to unpack .../096-libdeflate0_1.19-1build1.1_amd64.deb ...
    +#8 12.48 Unpacking libdeflate0:amd64 (1.19-1build1.1) ...
    +#8 12.50 Selecting previously unselected package libjbig0:amd64.
    +#8 12.50 Preparing to unpack .../097-libjbig0_2.1-6.1ubuntu2_amd64.deb ...
    +#8 12.50 Unpacking libjbig0:amd64 (2.1-6.1ubuntu2) ...
    +#8 12.53 Selecting previously unselected package liblerc4:amd64.
    +#8 12.53 Preparing to unpack .../098-liblerc4_4.0.0+ds-4ubuntu2_amd64.deb ...
    +#8 12.53 Unpacking liblerc4:amd64 (4.0.0+ds-4ubuntu2) ...
    +#8 12.55 Selecting previously unselected package libwebp7:amd64.
    +#8 12.55 Preparing to unpack .../099-libwebp7_1.3.2-0.4build3_amd64.deb ...
    +#8 12.56 Unpacking libwebp7:amd64 (1.3.2-0.4build3) ...
    +
    +
    +
    #8 12.58 Selecting previously unselected package libtiff6:amd64.
    +#8 12.58 Preparing to unpack .../100-libtiff6_4.5.1+git230720-4ubuntu2.2_amd64.deb ...
    +#8 12.58 Unpacking libtiff6:amd64 (4.5.1+git230720-4ubuntu2.2) ...
    +#8 12.61 Selecting previously unselected package libxpm4:amd64.
    +#8 12.61 Preparing to unpack .../101-libxpm4_1%3a3.5.17-1build2_amd64.deb ...
    +#8 12.61 Unpacking libxpm4:amd64 (1:3.5.17-1build2) ...
    +#8 12.63 Selecting previously unselected package libgd3:amd64.
    +#8 12.63 Preparing to unpack .../102-libgd3_2.3.3-9ubuntu5_amd64.deb ...
    +#8 12.63 Unpacking libgd3:amd64 (2.3.3-9ubuntu5) ...
    +#8 12.65 Selecting previously unselected package libc-devtools.
    +#8 12.65 Preparing to unpack .../103-libc-devtools_2.39-0ubuntu8.3_amd64.deb ...
    +#8 12.66 Unpacking libc-devtools (2.39-0ubuntu8.3) ...
    +#8 12.67 Selecting previously unselected package libexpat1-dev:amd64.
    +#8 12.68 Preparing to unpack .../104-libexpat1-dev_2.6.1-2ubuntu0.1_amd64.deb ...
    +#8 12.68 Unpacking libexpat1-dev:amd64 (2.6.1-2ubuntu0.1) ...
    +#8 12.70 Selecting previously unselected package libfile-fcntllock-perl.
    +#8 12.70 Preparing to unpack .../105-libfile-fcntllock-perl_0.22-4ubuntu5_amd64.deb ...
    +#8 12.70 Unpacking libfile-fcntllock-perl (0.22-4ubuntu5) ...
    +#8 12.72 Selecting previously unselected package libheif-plugin-aomenc:amd64.
    +#8 12.72 Preparing to unpack .../106-libheif-plugin-aomenc_1.17.6-1ubuntu4_amd64.deb ...
    +#8 12.73 Unpacking libheif-plugin-aomenc:amd64 (1.17.6-1ubuntu4) ...
    +#8 12.75 Selecting previously unselected package libjs-jquery.
    +#8 12.75 Preparing to unpack .../107-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ...
    +#8 12.75 Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ...
    +#8 12.77 Selecting previously unselected package libjs-underscore.
    +
    +
    +
    #8 12.77 Preparing to unpack .../108-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ...
    +#8 12.78 Unpacking libjs-underscore (1.13.4~dfsg+~1.11.4-3) ...
    +#8 12.79 Selecting previously unselected package libjs-sphinxdoc.
    +#8 12.79 Preparing to unpack .../109-libjs-sphinxdoc_7.2.6-6_all.deb ...
    +#8 12.80 Unpacking libjs-sphinxdoc (7.2.6-6) ...
    +#8 12.82 Selecting previously unselected package libldap-common.
    +#8 12.82 Preparing to unpack .../110-libldap-common_2.6.7+dfsg-1~exp1ubuntu8_all.deb ...
    +#8 12.82 Unpacking libldap-common (2.6.7+dfsg-1~exp1ubuntu8) ...
    +#8 12.84 Selecting previously unselected package libpython3.12t64:amd64.
    +#8 12.84 Preparing to unpack .../111-libpython3.12t64_3.12.3-1ubuntu0.2_amd64.deb ...
    +#8 12.85 Unpacking libpython3.12t64:amd64 (3.12.3-1ubuntu0.2) ...
    +#8 12.91 Selecting previously unselected package zlib1g-dev:amd64.
    +#8 12.91 Preparing to unpack .../112-zlib1g-dev_1%3a1.3.dfsg-3.1ubuntu2.1_amd64.deb ...
    +#8 12.91 Unpacking zlib1g-dev:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ...
    +#8 12.94 Selecting previously unselected package libpython3.12-dev:amd64.
    +#8 12.94 Preparing to unpack .../113-libpython3.12-dev_3.12.3-1ubuntu0.2_amd64.deb ...
    +#8 12.94 Unpacking libpython3.12-dev:amd64 (3.12.3-1ubuntu0.2) ...
    +
    +
    +
    #8 13.11 Selecting previously unselected package libpython3-dev:amd64.
    +#8 13.11 Preparing to unpack .../114-libpython3-dev_3.12.3-0ubuntu2_amd64.deb ...
    +#8 13.11 Unpacking libpython3-dev:amd64 (3.12.3-0ubuntu2) ...
    +#8 13.14 Selecting previously unselected package libsasl2-modules:amd64.
    +#8 13.14 Preparing to unpack .../115-libsasl2-modules_2.1.28+dfsg1-5ubuntu3.1_amd64.deb ...
    +#8 13.14 Unpacking libsasl2-modules:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    +#8 13.16 Selecting previously unselected package manpages-dev.
    +#8 13.16 Preparing to unpack .../116-manpages-dev_6.7-2_all.deb ...
    +#8 13.16 Unpacking manpages-dev (6.7-2) ...
    +#8 13.26 Selecting previously unselected package python3.12-dev.
    +
    +
    +
    #8 13.26 Preparing to unpack .../117-python3.12-dev_3.12.3-1ubuntu0.2_amd64.deb ...
    +#8 13.27 Unpacking python3.12-dev (3.12.3-1ubuntu0.2) ...
    +#8 13.29 Selecting previously unselected package python3-dev.
    +#8 13.29 Preparing to unpack .../118-python3-dev_3.12.3-0ubuntu2_amd64.deb ...
    +#8 13.29 Unpacking python3-dev (3.12.3-0ubuntu2) ...
    +#8 13.32 Selecting previously unselected package python3-setuptools.
    +#8 13.32 Preparing to unpack .../119-python3-setuptools_68.1.2-2ubuntu1.1_all.deb ...
    +#8 13.32 Unpacking python3-setuptools (68.1.2-2ubuntu1.1) ...
    +#8 13.38 Selecting previously unselected package python3-wheel.
    +#8 13.38 Preparing to unpack .../120-python3-wheel_0.42.0-2_all.deb ...
    +#8 13.38 Unpacking python3-wheel (0.42.0-2) ...
    +#8 13.41 Selecting previously unselected package python3-pip.
    +#8 13.41 Preparing to unpack .../121-python3-pip_24.0+dfsg-1ubuntu1_all.deb ...
    +#8 13.41 Unpacking python3-pip (24.0+dfsg-1ubuntu1) ...
    +#8 13.56 Setting up libksba8:amd64 (1.6.6-1build1) ...
    +
    +
    +
    #8 13.57 Setting up pinentry-curses (1.2.1-3ubuntu5) ...
    +#8 13.58 Setting up media-types (10.1.0) ...
    +#8 13.58 Setting up javascript-common (11+nmu1) ...
    +#8 13.60 Setting up libsharpyuv0:amd64 (1.3.2-0.4build3) ...
    +#8 13.61 Setting up libaom3:amd64 (3.8.2-2ubuntu0.1) ...
    +#8 13.61 Setting up libxau6:amd64 (1:1.0.9-1build6) ...
    +#8 13.62 Setting up lto-disabled-list (47) ...
    +#8 13.62 Setting up liblerc4:amd64 (4.0.0+ds-4ubuntu2) ...
    +#8 13.63 Setting up libgdbm6t64:amd64 (1.23-5.1build1) ...
    +#8 13.63 Setting up libgdbm-compat4t64:amd64 (1.23-5.1build1) ...
    +#8 13.64 Setting up manpages (6.7-2) ...
    +#8 13.64 Setting up libbrotli1:amd64 (1.1.0-2build2) ...
    +#8 13.65 Setting up libsqlite3-0:amd64 (3.45.1-1ubuntu2) ...
    +#8 13.66 Setting up libsasl2-modules:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    +#8 13.66 Setting up binutils-common:amd64 (2.42-4ubuntu2) ...
    +#8 13.67 Setting up libdeflate0:amd64 (1.19-1build1.1) ...
    +#8 13.68 Setting up linux-libc-dev:amd64 (6.8.0-44.44) ...
    +#8 13.68 Setting up libctf-nobfd0:amd64 (2.42-4ubuntu2) ...
    +#8 13.69 Setting up libgomp1:amd64 (14-20240412-0ubuntu1) ...
    +#8 13.69 Setting up bzip2 (1.0.8-5.1build0.1) ...
    +#8 13.70 Setting up libldap-common (2.6.7+dfsg-1~exp1ubuntu8) ...
    +#8 13.71 Setting up libjbig0:amd64 (2.1-6.1ubuntu2) ...
    +#8 13.71 Setting up libsframe1:amd64 (2.42-4ubuntu2) ...
    +#8 13.72 Setting up libfakeroot:amd64 (1.33-1) ...
    +#8 13.72 Setting up libjansson4:amd64 (2.14-2build2) ...
    +#8 13.73 Setting up libsasl2-modules-db:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    +#8 13.73 Setting up tzdata (2024a-3ubuntu1.1) ...
    +#8 13.80 debconf: unable to initialize frontend: Dialog
    +#8 13.80 debconf: (TERM is not set, so the dialog frontend is not usable.)
    +#8 13.80 debconf: falling back to frontend: Readline
    +
    +
    +
    #8 13.81 debconf: unable to initialize frontend: Readline
    +#8 13.81 debconf: (This frontend requires a controlling tty.)
    +#8 13.81 debconf: falling back to frontend: Teletype
    +#8 13.83 Configuring tzdata
    +#8 13.83 ------------------
    +#8 13.83 
    +#8 13.83 Please select the geographic area in which you live. Subsequent configuration
    +#8 13.83 questions will narrow this down by presenting a list of cities, representing
    +#8 13.83 the time zones in which they are located.
    +#8 13.83 
    +#8 13.83   1. Africa   3. Antarctica  5. Asia      7. Australia  9. Indian    11. Etc
    +#8 13.83   2. America  4. Arctic      6. Atlantic  8. Europe     10. Pacific
    +#8 13.83 Geographic area: 
    +#8 13.83 Use of uninitialized value $_[1] in join or string at /usr/share/perl5/Debconf/DbDriver/Stack.pm line 112.
    +#8 13.84 
    +#8 13.84 Current default time zone: '/UTC'
    +#8 13.84 Local time is now:      Mon Sep 16 17:01:14 UTC 2024.
    +#8 13.84 Universal Time is now:  Mon Sep 16 17:01:14 UTC 2024.
    +#8 13.84 Run 'dpkg-reconfigure tzdata' if you wish to change it.
    +#8 13.84 
    +#8 13.84 Use of uninitialized value $val in substitution (s///) at /usr/share/perl5/Debconf/Format/822.pm line 84, <GEN6> line 4.
    +#8 13.84 Use of uninitialized value $val in concatenation (.) or string at /usr/share/perl5/Debconf/Format/822.pm line 85, <GEN6> line 4.
    +#8 13.85 Setting up fakeroot (1.33-1) ...
    +#8 13.86 update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/man1/fakeroot.1.gz because associated file /usr/share/man/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/man1/faked.1.gz because associated file /usr/share/man/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/es/man1/fakeroot.1.gz because associated file /usr/share/man/es/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/es/man1/faked.1.gz because associated file /usr/share/man/es/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/fakeroot.1.gz because associated file /usr/share/man/fr/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/faked.1.gz because associated file /usr/share/man/fr/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/sv/man1/fakeroot.1.gz because associated file /usr/share/man/sv/man1/fakeroot-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 update-alternatives: warning: skip creation of /usr/share/man/sv/man1/faked.1.gz because associated file /usr/share/man/sv/man1/faked-sysv.1.gz (of link group fakeroot) doesn't exist
    +#8 13.86 Setting up rpcsvc-proto (1.4.2-0ubuntu7) ...
    +#8 13.87 Setting up gcc-13-base:amd64 (13.2.0-23ubuntu4) ...
    +#8 13.87 Setting up libx11-data (2:1.8.7-1build1) ...
    +#8 13.88 Setting up make (4.3-4.1build2) ...
    +#8 13.88 Setting up libmpfr6:amd64 (4.2.1-1build1) ...
    +#8 13.88 Setting up gnupg-l10n (2.4.4-2ubuntu17) ...
    +#8 13.89 Setting up xz-utils (5.6.1+really5.4.5-1build0.1) ...
    +#8 13.89 update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzma.1.gz because associated file /usr/share/man/man1/xz.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/unlzma.1.gz because associated file /usr/share/man/man1/unxz.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzcat.1.gz because associated file /usr/share/man/man1/xzcat.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzmore.1.gz because associated file /usr/share/man/man1/xzmore.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzless.1.gz because associated file /usr/share/man/man1/xzless.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzdiff.1.gz because associated file /usr/share/man/man1/xzdiff.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzcmp.1.gz because associated file /usr/share/man/man1/xzcmp.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzgrep.1.gz because associated file /usr/share/man/man1/xzgrep.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzegrep.1.gz because associated file /usr/share/man/man1/xzegrep.1.gz (of link group lzma) doesn't exist
    +#8 13.89 update-alternatives: warning: skip creation of /usr/share/man/man1/lzfgrep.1.gz because associated file /usr/share/man/man1/xzfgrep.1.gz (of link group lzma) doesn't exist
    +#8 13.90 Setting up perl-modules-5.38 (5.38.2-3.2build2) ...
    +#8 13.90 Setting up libquadmath0:amd64 (14-20240412-0ubuntu1) ...
    +#8 13.90 Setting up fonts-dejavu-mono (2.37-8) ...
    +#8 13.91 Setting up libpng16-16t64:amd64 (1.6.43-5build1) ...
    +#8 13.91 Setting up libmpc3:amd64 (1.3.1-1build1) ...
    +#8 13.91 Setting up libatomic1:amd64 (14-20240412-0ubuntu1) ...
    +#8 13.92 Setting up patch (2.7.6-7build3) ...
    +#8 13.92 Setting up fonts-dejavu-core (2.37-8) ...
    +#8 13.95 Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ...
    +#8 13.95 Setting up libsasl2-2:amd64 (2.1.28+dfsg1-5ubuntu3.1) ...
    +#8 13.96 Setting up libwebp7:amd64 (1.3.2-0.4build3) ...
    +#8 13.96 Setting up libubsan1:amd64 (14-20240412-0ubuntu1) ...
    +#8 13.96 Setting up libhwasan0:amd64 (14-20240412-0ubuntu1) ...
    +#8 13.97 Setting up libcrypt-dev:amd64 (1:4.4.36-4build1) ...
    +#8 13.98 Setting up libasan8:amd64 (14-20240412-0ubuntu1) ...
    +#8 13.98 Setting up netbase (6.4) ...
    +#8 13.99 Setting up libperl5.38t64:amd64 (5.38.2-3.2build2) ...
    +#8 13.99 Setting up libtsan2:amd64 (14-20240412-0ubuntu1) ...
    +#8 13.99 Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ...
    +#8 14.00 Setting up libbinutils:amd64 (2.42-4ubuntu2) ...
    +#8 14.00 Setting up libisl23:amd64 (0.26-3build1) ...
    +
    +
    +
    #8 14.01 Setting up libde265-0:amd64 (1.0.15-1build3) ...
    +#8 14.01 Setting up libc-dev-bin (2.39-0ubuntu8.3) ...
    +#8 14.02 Setting up openssl (3.0.13-0ubuntu3.4) ...
    +#8 14.02 Setting up libbsd0:amd64 (0.12.1-1build1) ...
    +#8 14.03 Setting up readline-common (8.2-4build1) ...
    +#8 14.03 Setting up libcc1-0:amd64 (14-20240412-0ubuntu1) ...
    +#8 14.04 Setting up libldap2:amd64 (2.6.7+dfsg-1~exp1ubuntu8) ...
    +#8 14.04 Setting up liblocale-gettext-perl (1.07-6ubuntu5) ...
    +#8 14.05 Setting up liblsan0:amd64 (14-20240412-0ubuntu1) ...
    +#8 14.05 Setting up libitm1:amd64 (14-20240412-0ubuntu1) ...
    +#8 14.05 Setting up libjs-underscore (1.13.4~dfsg+~1.11.4-3) ...
    +#8 14.06 Setting up gnupg-utils (2.4.4-2ubuntu17) ...
    +#8 14.06 Setting up libctf0:amd64 (2.42-4ubuntu2) ...
    +#8 14.07 Setting up libjpeg8:amd64 (8c-2ubuntu11) ...
    +#8 14.07 Setting up manpages-dev (6.7-2) ...
    +#8 14.07 Setting up libxdmcp6:amd64 (1:1.1.3-0ubuntu6) ...
    +#8 14.08 Setting up libxcb1:amd64 (1.15-1ubuntu2) ...
    +#8 14.08 Setting up cpp-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    +#8 14.08 Setting up fontconfig-config (2.15.0-1.1ubuntu2) ...
    +#8 14.23 Setting up ca-certificates (20240203) ...
    +
    +
    +
    #8 14.30 debconf: unable to initialize frontend: Dialog
    +#8 14.30 debconf: (TERM is not set, so the dialog frontend is not usable.)
    +#8 14.30 debconf: falling back to frontend: Readline
    +#8 14.31 debconf: unable to initialize frontend: Readline
    +#8 14.31 debconf: (This frontend requires a controlling tty.)
    +#8 14.31 debconf: falling back to frontend: Teletype
    +
    +
    +
    #8 14.69 Updating certificates in /etc/ssl/certs...
    +
    +
    +
    #8 15.25 146 added, 0 removed; done.
    +#8 15.27 Setting up perl (5.38.2-3.2build2) ...
    +#8 15.28 Setting up libgprofng0:amd64 (2.42-4ubuntu2) ...
    +#8 15.29 Setting up libfreetype6:amd64 (2.13.2+dfsg-1build3) ...
    +#8 15.29 Setting up libjs-sphinxdoc (7.2.6-6) ...
    +#8 15.30 Setting up libdpkg-perl (1.22.6ubuntu6.1) ...
    +#8 15.30 Setting up libreadline8t64:amd64 (8.2-4build1) ...
    +#8 15.31 Setting up libgcc-13-dev:amd64 (13.2.0-23ubuntu4) ...
    +#8 15.31 Setting up libtiff6:amd64 (4.5.1+git230720-4ubuntu2.2) ...
    +#8 15.32 Setting up gpgconf (2.4.4-2ubuntu17) ...
    +#8 15.32 Setting up libc6-dev:amd64 (2.39-0ubuntu8.3) ...
    +#8 15.33 Setting up libx11-6:amd64 (2:1.8.7-1build1) ...
    +#8 15.33 Setting up libfontconfig1:amd64 (2.15.0-1.1ubuntu2) ...
    +#8 15.34 Setting up gpg (2.4.4-2ubuntu17) ...
    +#8 15.34 Setting up libstdc++-13-dev:amd64 (13.2.0-23ubuntu4) ...
    +#8 15.34 Setting up binutils-x86-64-linux-gnu (2.42-4ubuntu2) ...
    +#8 15.35 Setting up cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    +
    +
    +
    #8 15.35 Setting up gpg-agent (2.4.4-2ubuntu17) ...
    +
    +
    +
    #8 15.76 Setting up libpython3.12-stdlib:amd64 (3.12.3-1ubuntu0.2) ...
    +#8 15.76 Setting up libxpm4:amd64 (1:3.5.17-1build2) ...
    +#8 15.76 Setting up cpp-13 (13.2.0-23ubuntu4) ...
    +#8 15.77 Setting up libfile-fcntllock-perl (0.22-4ubuntu5) ...
    +#8 15.77 Setting up libalgorithm-diff-perl (1.201-1) ...
    +#8 15.78 Setting up gcc-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    +#8 15.78 Setting up python3.12 (3.12.3-1ubuntu0.2) ...
    +
    +
    +
    #8 16.54 Setting up gpgsm (2.4.4-2ubuntu17) ...
    +#8 16.54 Setting up binutils (2.42-4ubuntu2) ...
    +#8 16.55 Setting up dpkg-dev (1.22.6ubuntu6.1) ...
    +#8 16.56 Setting up libpython3.12t64:amd64 (3.12.3-1ubuntu0.2) ...
    +#8 16.56 Setting up dirmngr (2.4.4-2ubuntu17) ...
    +#8 16.68 Setting up libexpat1-dev:amd64 (2.6.1-2ubuntu0.1) ...
    +
    +
    +
    #8 16.68 Setting up gcc-13 (13.2.0-23ubuntu4) ...
    +#8 16.69 Setting up keyboxd (2.4.4-2ubuntu17) ...
    +#8 16.79 Setting up zlib1g-dev:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ...
    +#8 16.80 Setting up cpp (4:13.2.0-7ubuntu1) ...
    +#8 16.81 Setting up gnupg (2.4.4-2ubuntu17) ...
    +#8 16.81 Setting up libalgorithm-diff-xs-perl:amd64 (0.04-8build3) ...
    +#8 16.82 Setting up libpython3-stdlib:amd64 (3.12.3-0ubuntu2) ...
    +#8 16.82 Setting up libalgorithm-merge-perl (0.08-5) ...
    +#8 16.83 Setting up g++-13-x86-64-linux-gnu (13.2.0-23ubuntu4) ...
    +#8 16.83 Setting up gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    +#8 16.84 Setting up gpg-wks-client (2.4.4-2ubuntu17) ...
    +#8 16.85 Setting up python3 (3.12.3-0ubuntu2) ...
    +#8 16.86 running python rtupdate hooks for python3.12...
    +#8 16.86 running python post-rtupdate hooks for python3.12...
    +#8 16.94 Setting up libpython3.12-dev:amd64 (3.12.3-1ubuntu0.2) ...
    +
    +
    +
    #8 16.94 Setting up python3-wheel (0.42.0-2) ...
    +#8 17.06 Setting up gcc (4:13.2.0-7ubuntu1) ...
    +#8 17.08 Setting up python3.12-dev (3.12.3-1ubuntu0.2) ...
    +#8 17.08 Setting up g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ...
    +#8 17.08 Setting up python3-pkg-resources (68.1.2-2ubuntu1.1) ...
    +#8 17.26 Setting up g++-13 (13.2.0-23ubuntu4) ...
    +
    +
    +
    #8 17.26 Setting up libpython3-dev:amd64 (3.12.3-0ubuntu2) ...
    +#8 17.26 Setting up python3-setuptools (68.1.2-2ubuntu1.1) ...
    +
    +
    +
    #8 17.65 Setting up python3-dev (3.12.3-0ubuntu2) ...
    +#8 17.66 Setting up python3-pip (24.0+dfsg-1ubuntu1) ...
    +
    +
    +
    #8 18.70 Setting up g++ (4:13.2.0-7ubuntu1) ...
    +#8 18.70 update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
    +#8 18.71 update-alternatives: warning: skip creation of /usr/share/man/man1/c++.1.gz because associated file /usr/share/man/man1/g++.1.gz (of link group c++) doesn't exist
    +#8 18.71 Setting up build-essential (12.10ubuntu1) ...
    +#8 18.71 Setting up libheif1:amd64 (1.17.6-1ubuntu4) ...
    +#8 18.72 Setting up libgd3:amd64 (2.3.3-9ubuntu5) ...
    +#8 18.72 Setting up libc-devtools (2.39-0ubuntu8.3) ...
    +#8 18.72 Setting up libheif-plugin-aomdec:amd64 (1.17.6-1ubuntu4) ...
    +#8 18.72 Setting up libheif-plugin-libde265:amd64 (1.17.6-1ubuntu4) ...
    +#8 18.73 Setting up libheif-plugin-aomenc:amd64 (1.17.6-1ubuntu4) ...
    +#8 18.73 Processing triggers for libc-bin (2.39-0ubuntu8.3) ...
    +#8 18.74 Processing triggers for ca-certificates (20240203) ...
    +#8 18.75 Updating certificates in /etc/ssl/certs...
     
    -
    #8 28.52 0 added, 0 removed; done.
    -#8 28.52 Running hooks in /etc/ca-certificates/update.d...
    -#8 28.52 done.
    -
    +
    #8 19.18 0 added, 0 removed; done.
    +#8 19.18 Running hooks in /etc/ca-certificates/update.d...
    +#8 19.18 done.
    +
    -
    #8 DONE 29.5s
    +
    #8 DONE 20.1s
     
     #9 [device 4/6] RUN pip3 install BACpypes
     
    -
    #9 0.437 error: externally-managed-environment
    -#9 0.437 
    -#9 0.437 × This environment is externally managed
    -#9 0.437 ╰─> To install Python packages system-wide, try apt install
    -#9 0.437     python3-xyz, where xyz is the package you are trying to
    -#9 0.437     install.
    -#9 0.437     
    -#9 0.437     If you wish to install a non-Debian-packaged Python package,
    -#9 0.437     create a virtual environment using python3 -m venv path/to/venv.
    -#9 0.437     Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    -#9 0.437     sure you have python3-full installed.
    -#9 0.437     
    -#9 0.437     If you wish to install a non-Debian packaged Python application,
    -#9 0.437     it may be easiest to use pipx install xyz, which will manage a
    -#9 0.437     virtual environment for you. Make sure you have pipx installed.
    -#9 0.437     
    -#9 0.437     See /usr/share/doc/python3.12/README.venv for more information.
    -#9 0.437 
    -#9 0.437 note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
    -#9 0.437 hint: See PEP 668 for the detailed specification.
    +
    #9 0.434 error: externally-managed-environment
    +#9 0.434 
    +#9 0.434 × This environment is externally managed
    +#9 0.434 ╰─> To install Python packages system-wide, try apt install
    +#9 0.434     python3-xyz, where xyz is the package you are trying to
    +#9 0.434     install.
    +#9 0.434     
    +#9 0.434     If you wish to install a non-Debian-packaged Python package,
    +#9 0.434     create a virtual environment using python3 -m venv path/to/venv.
    +#9 0.434     Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    +#9 0.434     sure you have python3-full installed.
    +#9 0.434     
    +#9 0.434     If you wish to install a non-Debian packaged Python application,
    +#9 0.434     it may be easiest to use pipx install xyz, which will manage a
    +#9 0.434     virtual environment for you. Make sure you have pipx installed.
    +#9 0.434     
    +#9 0.434     See /usr/share/doc/python3.12/README.venv for more information.
    +#9 0.434 
    +#9 0.434 note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
    +#9 0.434 hint: See PEP 668 for the detailed specification.
     #9 ERROR: process "/bin/sh -c pip3 install BACpypes" did not complete successfully: exit code: 1
     ------
      > [device 4/6] RUN pip3 install BACpypes:
    -0.437     sure you have python3-full installed.
    -0.437     
    -0.437     If you wish to install a non-Debian packaged Python application,
    -0.437     it may be easiest to use pipx install xyz, which will manage a
    -0.437     virtual environment for you. Make sure you have pipx installed.
    -0.437     
    -0.437     See /usr/share/doc/python3.12/README.venv for more information.
    -0.437 
    -0.437 note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
    -0.437 hint: See PEP 668 for the detailed specification.
    +0.434     sure you have python3-full installed.
    +0.434     
    +0.434     If you wish to install a non-Debian packaged Python application,
    +0.434     it may be easiest to use pipx install xyz, which will manage a
    +0.434     virtual environment for you. Make sure you have pipx installed.
    +0.434     
    +0.434     See /usr/share/doc/python3.12/README.venv for more information.
    +0.434 
    +0.434 note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
    +0.434 hint: See PEP 668 for the detailed specification.
     ------
     
    @@ -2106,19 +2065,19 @@

    Pulling in BACnet Metadata -
    2024-09-16 16:19:43,017 - INFO    | Starting BAC0 version 22.9.21 (Lite)
    +
    2024-09-16 17:01:56,724 - INFO    | Starting BAC0 version 22.9.21 (Lite)
     
    -
    2024-09-16 16:19:43,018 - INFO    | Use BAC0.log_level to adjust verbosity of the app.
    +
    2024-09-16 17:01:56,724 - INFO    | Use BAC0.log_level to adjust verbosity of the app.
     
    -
    2024-09-16 16:19:43,019 - INFO    | Ex. BAC0.log_level('silence') or BAC0.log_level('error')
    +
    2024-09-16 17:01:56,725 - INFO    | Ex. BAC0.log_level('silence') or BAC0.log_level('error')
     
    -
    2024-09-16 16:19:43,020 - INFO    | Starting TaskManager
    +
    2024-09-16 17:01:56,726 - INFO    | Starting TaskManager
     
    -
    2024-09-16 16:19:43,021 - INFO    | Using ip : 172.24.0.1
    +
    2024-09-16 17:01:56,727 - INFO    | Using ip : 172.24.0.1
     
    ---------------------------------------------------------------------------
    diff --git a/objects.inv b/objects.inv
    index 6e69ee058160e8165f6a539ec71c1506962d436c..a13196ccd1957afbea424a7f78f1e45a4e8d2dd1 100644
    GIT binary patch
    delta 4538
    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
    YV$0IN9X=eYzoQ`drk<|;5BQsVKbR`?YXATM
    
    delta 4581
    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
    
    diff --git a/py-modindex.html b/py-modindex.html
    index b0b963252..0958b1f14 100644
    --- a/py-modindex.html
    +++ b/py-modindex.html
    @@ -453,11 +453,6 @@ 

    Python Module Index

        buildingmotif.api.views.model - - -     - buildingmotif.api.views.parser -     diff --git a/reference/apidoc/_autosummary/buildingmotif.api.app.html b/reference/apidoc/_autosummary/buildingmotif.api.app.html index d1a120d3c..1221ccf50 100644 --- a/reference/apidoc/_autosummary/buildingmotif.api.app.html +++ b/reference/apidoc/_autosummary/buildingmotif.api.app.html @@ -464,23 +464,18 @@

    buildingmotif.api.app

    Functions

    - +

    create_app(DB_URI[, shacl_engine])

    create_app(DB_URI)

    Creates a Flask API.

    -create_app(DB_URI, shacl_engine: Optional[str] = 'pyshacl')[source]#
    +create_app(DB_URI)[source]
    #

    Creates a Flask API.

    Parameters:
    -
      -
    • db_uri (str) – database URI

    • -
    • shacl_engine (str, optional) – the name of the engine to use for validation: “pyshacl” or “topquadrant”. Using topquadrant -requires Java to be installed on this machine, and the “topquadrant” feature on BuildingMOTIF, -defaults to “pyshacl”

    • -
    +

    db_uri (str) – database URI

    Returns:

    flask app

    diff --git a/reference/apidoc/_autosummary/buildingmotif.api.views.html b/reference/apidoc/_autosummary/buildingmotif.api.views.html index c856c7028..680756d10 100644 --- a/reference/apidoc/_autosummary/buildingmotif.api.views.html +++ b/reference/apidoc/_autosummary/buildingmotif.api.views.html @@ -470,10 +470,7 @@

    buildingmotif.api.views

    buildingmotif.api.views.model

    -

    buildingmotif.api.views.parser

    -

    - -

    buildingmotif.api.views.template

    +

    buildingmotif.api.views.template

    diff --git a/reference/apidoc/_autosummary/buildingmotif.api.views.model.html b/reference/apidoc/_autosummary/buildingmotif.api.views.model.html index 201a9de4e..1847e99e2 100644 --- a/reference/apidoc/_autosummary/buildingmotif.api.views.model.html +++ b/reference/apidoc/_autosummary/buildingmotif.api.views.model.html @@ -66,7 +66,7 @@ - + @@ -639,11 +639,11 @@

    buildingmotif.api.views.model

    next

    -

    buildingmotif.api.views.parser

    +

    buildingmotif.api.views.template

    diff --git a/reference/apidoc/_autosummary/buildingmotif.api.views.parser.html b/reference/apidoc/_autosummary/buildingmotif.api.views.parser.html deleted file mode 100644 index 685a41c30..000000000 --- a/reference/apidoc/_autosummary/buildingmotif.api.views.parser.html +++ /dev/null @@ -1,583 +0,0 @@ - - - - - - - - - - - - buildingmotif.api.views.parser — BuildingMOTIF Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - -
    -
    -
    -
    -
    - - -
    -
    ⚠️ This is an BETA release for testing purposes only ⚠️
    -
    - - - - -
    -
    - -
    - - - - - - - - - - - - - -
    - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

    buildingmotif.api.views.parser

    - -
    -
    - -
    -
    -
    - - - - -
    - -
    -

    buildingmotif.api.views.parser#

    -

    Functions

    - - - - - - -

    evaluate()

    -
    -
    -evaluate() Response[source]#
    -
    - -
    - - - - -
    - - - - - - - - -
    - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/reference/apidoc/_autosummary/buildingmotif.api.views.template.html b/reference/apidoc/_autosummary/buildingmotif.api.views.template.html index 1fd699b11..018b1a42a 100644 --- a/reference/apidoc/_autosummary/buildingmotif.api.views.template.html +++ b/reference/apidoc/_autosummary/buildingmotif.api.views.template.html @@ -67,7 +67,7 @@ - + @@ -590,12 +590,12 @@

    buildingmotif.api.views.template

    -classmethod load(db_id: Optional[int] = None, ontology_graph: Optional[Union[str, Graph]] = None, directory: Optional[str] = None, name: Optional[str] = None, overwrite: Optional[bool] = True, infer_templates: Optional[bool] = True, run_shacl_inference: Optional[bool] = True) Library[source]#
    +classmethod load(db_id: Optional[int] = None, ontology_graph: Optional[Union[str, Graph]] = None, directory: Optional[str] = None, name: Optional[str] = None, overwrite: Optional[bool] = True) Library[source]#

    Loads a library from the database or an external source. When specifying a path to load a library or ontology_graph from, paths within the buildingmotif.libraries module will be prioritized @@ -513,10 +513,6 @@

    buildingmotif.dataclasses.library

    defaults to None

  • overwrite (Optional[true], optional) – if true, replace any existing copy of the library, defaults to True

  • -
  • infer_templates (Optional[bool], optional) – if true, infer shapes from the ontology graph, -defaults to True

  • -
  • run_shacl_inference (Optional[bool], optional) – if true, run SHACL inference on the ontology graph, -using the BuildingMOTIF SHACL engine, defaults to True

  • Returns:
    diff --git a/reference/apidoc/_autosummary/buildingmotif.label_parsing.html b/reference/apidoc/_autosummary/buildingmotif.label_parsing.html index 5139277e1..2739f2a2d 100644 --- a/reference/apidoc/_autosummary/buildingmotif.label_parsing.html +++ b/reference/apidoc/_autosummary/buildingmotif.label_parsing.html @@ -506,7 +506,7 @@

    buildingmotif.label_parsing

    -class TokenResult(value: Optional[str], token: Token, length: int, error: Optional[str] = None, id: Optional[str] = None)[source]#
    +class TokenResult(value: Optional[str], token: Token, length: int, error: Optional[str] = None)[source]#

    A token result. Contains a token, the type of the token, the length of the token, and a possible error.

    @@ -528,11 +528,6 @@

    buildingmotif.label_parsing

    error: Optional[str] = None#
    -
    -
    -id: Optional[str] = None#
    -
    -
    diff --git a/reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.html b/reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.html index 02b81697d..70e31e60c 100644 --- a/reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.html +++ b/reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.html @@ -487,7 +487,7 @@

    buildingmotif.label_parsing.tokens

    Token(value)

    -

    TokenResult(value, token, length[, error, id])

    +

    TokenResult(value, token, length[, error])

    A token result.

    @@ -554,7 +554,7 @@

    buildingmotif.label_parsing.tokens

    -class TokenResult(value: Optional[str], token: Token, length: int, error: Optional[str] = None, id: Optional[str] = None)[source]#
    +class TokenResult(value: Optional[str], token: Token, length: int, error: Optional[str] = None)[source]#

    A token result. Contains a token, the type of the token, the length of the token, and a possible error.

    @@ -576,11 +576,6 @@

    buildingmotif.label_parsing.tokens

    error: Optional[str] = None#
    -
    -
    -id: Optional[str] = None#
    -
    -
    diff --git a/reports/tutorials/model_correction.err.log b/reports/tutorials/model_correction.err.log index f218a6d4a..237b542ef 100644 --- a/reports/tutorials/model_correction.err.log +++ b/reports/tutorials/model_correction.err.log @@ -53,101 +53,106 @@ model.update_manifest(manifest.get_shape_collection()) --------------------------------------------------------------------------- NoResultFound Traceback (most recent call last) -Cell In[1], line 20 - 18 # load libraries excluded from the python package (available from the repository) - 19 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl") ----> 20 g36 = Library.load(directory="../../libraries/ashrae/guideline36") - 23 # load tutorial 2 model and manifest - 24 model.graph.parse("tutorial2_model.ttl", format="ttl") - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:208, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference) - 206 if not src.exists(): - 207 raise Exception(f"Directory {src} does not exist") ---> 208 return cls._load_from_directory( - 209  src, - 210  overwrite=overwrite, - 211  infer_templates=infer_templates, - 212  run_shacl_inference=run_shacl_inference, - 213  ) - 214 elif name is not None: - 215 bm = get_building_motif() - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:417, in Library._load_from_directory(cls, directory, overwrite, infer_templates, run_shacl_inference) - 415 lib._read_yml_file(file, template_id_lookup, dependency_cache) - 416 # now that we have all the templates, we can populate the dependencies ---> 417 lib._resolve_template_dependencies(template_id_lookup, dependency_cache) - 418 # load shape collections from all ontology files in the directory - 419 lib._load_shapes_from_directory(directory) - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:520, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache) - 518 continue - 519 for dep in dependency_cache[template.id]: ---> 520 self._resolve_dependency(template, dep, template_id_lookup) - 521 # check that all dependencies are valid (use parameters that exist, etc) - 522 for template in self.get_templates(): - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:470, in Library._resolve_dependency(self, template, dep, template_id_lookup) - 468 # if dep is a _template_dependency, turn it into a template - 469 if isinstance(dep, _template_dependency): ---> 470 dependee = dep.to_template(template_id_lookup) - 471 template.add_dependency(dependee, dep.bindings) - 472 return - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup) - 84 return Template.load(id_lookup[self.template_name]) - 85 # if not in the local cache, then search the database for the template - 86 # within the given library ----> 87 library = Library.load(name=self.library) - 88 return library.get_template_by_name(self.template_name) - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:216, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference) - 214 elif name is not None: - 215 bm = get_building_motif() ---> 216 db_library = bm.table_connection.get_db_library_by_name(name) - 217 return cls(_id=db_library.id, _name=db_library.name, _bm=bm) - 218 else: - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:230, in TableConnection.get_db_library_by_name(self, name) - 222 def get_db_library_by_name(self, name: str) -> DBLibrary: - 223  """Get database library by name. - 224 - 225  :param name: name of DBLibrary - (...) - 228  :rtype: DBLibrary - 229  """ ---> 230 return self.bm.session.query(DBLibrary).filter(DBLibrary.name == name).one() +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:316, in TableConnection.get_db_template_by_name(self, name) + 314 try: + 315 db_template = ( +--> 316 self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one() + 317 ) + 318 except NoResultFound: File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/orm/query.py:2870, in Query.one(self) - 2852 def one(self): - 2853  """Return exactly one result or raise an exception. + 2853 """Return exactly one result or raise an exception.  2854 - 2855  Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects + 2855 Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects  (...)  2868 - 2869  """ --> 2870 return self._iter().one() + 2869 """ +-> 2870 return self._iter().one() File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:1522, in ScalarResult.one(self) - 1514 def one(self): - 1515  """Return exactly one object or raise an exception. + 1515 """Return exactly one object or raise an exception.  1516 - 1517  Equivalent to :meth:`_engine.Result.one` except that + 1517 Equivalent to :meth:`_engine.Result.one` except that  (...)  1520 - 1521  """ --> 1522 return self._only_one_row( - 1523  raise_for_second_row=True, raise_for_none=True, scalar=False - 1524  ) + 1521 """ +-> 1522 return self._only_one_row( + 1523  raise_for_second_row=True, raise_for_none=True, scalar=False + 1524 ) File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:562, in ResultInternal._only_one_row(self, raise_for_second_row, raise_for_none, scalar) - 560 if row is None: - 561 if raise_for_none: ---> 562 raise exc.NoResultFound( - 563 "No row was found when one was required" - 564 ) - 565 else: - 566 return None + 561 if raise_for_none: +--> 562 raise exc.NoResultFound( + 563 "No row was found when one was required" + 564 ) + 565 else: NoResultFound: No row was found when one was required -NoResultFound: No row was found when one was required + +During handling of the above exception, another exception occurred: + +NoResultFound Traceback (most recent call last) +Cell In[1], line 20 + 18 # load libraries excluded from the python package (available from the repository) + 19 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl") +---> 20 g36 = Library.load(directory="../../libraries/ashrae/guideline36") + 23 # load tutorial 2 model and manifest + 24 model.graph.parse("tutorial2_model.ttl", format="ttl") + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:194, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite) + 192 if not src.exists(): + 193 raise Exception(f"Directory {src} does not exist") +--> 194 return cls._load_from_directory(src, overwrite=overwrite) + 195 elif name is not None: + 196 bm = get_building_motif() + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:345, in Library._load_from_directory(cls, directory, overwrite) + 343 lib._read_yml_file(file, template_id_lookup, dependency_cache) + 344 # now that we have all the templates, we can populate the dependencies +--> 345 lib._resolve_template_dependencies(template_id_lookup, dependency_cache) + 346 # load shape collections from all ontology files in the directory + 347 lib._load_shapes_from_directory(directory) + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:447, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache) + 445 continue + 446 for dep in dependency_cache[template.id]: +--> 447 self._resolve_dependency(template, dep, template_id_lookup) + 448 # check that all dependencies are valid (use parameters that exist, etc) + 449 for template in self.get_templates(): + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:398, in Library._resolve_dependency(self, template, dep, template_id_lookup) + 396 # if dep is a _template_dependency, turn it into a template + 397 if isinstance(dep, _template_dependency): +--> 398 dependee = dep.to_template(template_id_lookup) + 399 template.add_dependency(dependee, dep.bindings) + 400 return + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup) + 84 # if not in the local cache, then search the database for the template + 85 # within the given library + 86 library = Library.load(name=self.library) +---> 87 return library.get_template_by_name(self.template_name) + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:578, in Library.get_template_by_name(self, name) + 569 def get_template_by_name(self, name: str) -> Template: + 570  """Get template by name from library. + 571 + 572  :param name: template name + (...) + 576  :rtype: Template + 577  """ +--> 578 dbt = self._bm.table_connection.get_db_template_by_name(name) + 579 if dbt.library_id != self._id: + 580 raise ValueError(f"Template {name} not in library {self._name}") + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:319, in TableConnection.get_db_template_by_name(self, name) + 315 db_template = ( + 316 self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one() + 317 ) + 318 except NoResultFound: +--> 319 raise NoResultFound(f"No template found with name {name}") + 320 return db_template + +NoResultFound: No template found with name https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor +NoResultFound: No template found with name https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor diff --git a/reports/tutorials/model_validation.err.log b/reports/tutorials/model_validation.err.log index b69fc9e14..bfd972ea4 100644 --- a/reports/tutorials/model_validation.err.log +++ b/reports/tutorials/model_validation.err.log @@ -48,99 +48,104 @@ g36 = Library.load(directory="../../libraries/ashrae/guideline36") --------------------------------------------------------------------------- NoResultFound Traceback (most recent call last) -Cell In[1], line 23 - 21 # load libraries excluded from the python package (available from the repository) - 22 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl") ----> 23 g36 = Library.load(directory="../../libraries/ashrae/guideline36") - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:208, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference) - 206 if not src.exists(): - 207 raise Exception(f"Directory {src} does not exist") ---> 208 return cls._load_from_directory( - 209  src, - 210  overwrite=overwrite, - 211  infer_templates=infer_templates, - 212  run_shacl_inference=run_shacl_inference, - 213  ) - 214 elif name is not None: - 215 bm = get_building_motif() - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:417, in Library._load_from_directory(cls, directory, overwrite, infer_templates, run_shacl_inference) - 415 lib._read_yml_file(file, template_id_lookup, dependency_cache) - 416 # now that we have all the templates, we can populate the dependencies ---> 417 lib._resolve_template_dependencies(template_id_lookup, dependency_cache) - 418 # load shape collections from all ontology files in the directory - 419 lib._load_shapes_from_directory(directory) - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:520, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache) - 518 continue - 519 for dep in dependency_cache[template.id]: ---> 520 self._resolve_dependency(template, dep, template_id_lookup) - 521 # check that all dependencies are valid (use parameters that exist, etc) - 522 for template in self.get_templates(): - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:470, in Library._resolve_dependency(self, template, dep, template_id_lookup) - 468 # if dep is a _template_dependency, turn it into a template - 469 if isinstance(dep, _template_dependency): ---> 470 dependee = dep.to_template(template_id_lookup) - 471 template.add_dependency(dependee, dep.bindings) - 472 return - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup) - 84 return Template.load(id_lookup[self.template_name]) - 85 # if not in the local cache, then search the database for the template - 86 # within the given library ----> 87 library = Library.load(name=self.library) - 88 return library.get_template_by_name(self.template_name) - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:216, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference) - 214 elif name is not None: - 215 bm = get_building_motif() ---> 216 db_library = bm.table_connection.get_db_library_by_name(name) - 217 return cls(_id=db_library.id, _name=db_library.name, _bm=bm) - 218 else: - -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:230, in TableConnection.get_db_library_by_name(self, name) - 222 def get_db_library_by_name(self, name: str) -> DBLibrary: - 223  """Get database library by name. - 224 - 225  :param name: name of DBLibrary - (...) - 228  :rtype: DBLibrary - 229  """ ---> 230 return self.bm.session.query(DBLibrary).filter(DBLibrary.name == name).one() +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:316, in TableConnection.get_db_template_by_name(self, name) + 314 try: + 315 db_template = ( +--> 316 self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one() + 317 ) + 318 except NoResultFound: File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/orm/query.py:2870, in Query.one(self) - 2852 def one(self): - 2853  """Return exactly one result or raise an exception. + 2853 """Return exactly one result or raise an exception.  2854 - 2855  Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects + 2855 Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects  (...)  2868 - 2869  """ --> 2870 return self._iter().one() + 2869 """ +-> 2870 return self._iter().one() File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:1522, in ScalarResult.one(self) - 1514 def one(self): - 1515  """Return exactly one object or raise an exception. + 1515 """Return exactly one object or raise an exception.  1516 - 1517  Equivalent to :meth:`_engine.Result.one` except that + 1517 Equivalent to :meth:`_engine.Result.one` except that  (...)  1520 - 1521  """ --> 1522 return self._only_one_row( - 1523  raise_for_second_row=True, raise_for_none=True, scalar=False - 1524  ) + 1521 """ +-> 1522 return self._only_one_row( + 1523  raise_for_second_row=True, raise_for_none=True, scalar=False + 1524 ) File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:562, in ResultInternal._only_one_row(self, raise_for_second_row, raise_for_none, scalar) - 560 if row is None: - 561 if raise_for_none: ---> 562 raise exc.NoResultFound( - 563 "No row was found when one was required" - 564 ) - 565 else: - 566 return None + 561 if raise_for_none: +--> 562 raise exc.NoResultFound( + 563 "No row was found when one was required" + 564 ) + 565 else: NoResultFound: No row was found when one was required -NoResultFound: No row was found when one was required + +During handling of the above exception, another exception occurred: + +NoResultFound Traceback (most recent call last) +Cell In[1], line 23 + 21 # load libraries excluded from the python package (available from the repository) + 22 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl") +---> 23 g36 = Library.load(directory="../../libraries/ashrae/guideline36") + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:194, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite) + 192 if not src.exists(): + 193 raise Exception(f"Directory {src} does not exist") +--> 194 return cls._load_from_directory(src, overwrite=overwrite) + 195 elif name is not None: + 196 bm = get_building_motif() + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:345, in Library._load_from_directory(cls, directory, overwrite) + 343 lib._read_yml_file(file, template_id_lookup, dependency_cache) + 344 # now that we have all the templates, we can populate the dependencies +--> 345 lib._resolve_template_dependencies(template_id_lookup, dependency_cache) + 346 # load shape collections from all ontology files in the directory + 347 lib._load_shapes_from_directory(directory) + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:447, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache) + 445 continue + 446 for dep in dependency_cache[template.id]: +--> 447 self._resolve_dependency(template, dep, template_id_lookup) + 448 # check that all dependencies are valid (use parameters that exist, etc) + 449 for template in self.get_templates(): + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:398, in Library._resolve_dependency(self, template, dep, template_id_lookup) + 396 # if dep is a _template_dependency, turn it into a template + 397 if isinstance(dep, _template_dependency): +--> 398 dependee = dep.to_template(template_id_lookup) + 399 template.add_dependency(dependee, dep.bindings) + 400 return + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup) + 84 # if not in the local cache, then search the database for the template + 85 # within the given library + 86 library = Library.load(name=self.library) +---> 87 return library.get_template_by_name(self.template_name) + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:578, in Library.get_template_by_name(self, name) + 569 def get_template_by_name(self, name: str) -> Template: + 570  """Get template by name from library. + 571 + 572  :param name: template name + (...) + 576  :rtype: Template + 577  """ +--> 578 dbt = self._bm.table_connection.get_db_template_by_name(name) + 579 if dbt.library_id != self._id: + 580 raise ValueError(f"Template {name} not in library {self._name}") + +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:319, in TableConnection.get_db_template_by_name(self, name) + 315 db_template = ( + 316 self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one() + 317 ) + 318 except NoResultFound: +--> 319 raise NoResultFound(f"No template found with name {name}") + 320 return db_template + +NoResultFound: No template found with name https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor +NoResultFound: No template found with name https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor diff --git a/searchindex.js b/searchindex.js index c6c60f43f..1322fb166 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["README", "bibliography", "explanations/ingresses", "explanations/point-label-parsing", "explanations/shacl_to_sparql", "explanations/shapes-and-templates", "explanations/templates", "guides/csv-import", "guides/generating-queries", "guides/ingress-bacnet-to-brick", "reference/apidoc/_autosummary/buildingmotif", "reference/apidoc/_autosummary/buildingmotif.api", "reference/apidoc/_autosummary/buildingmotif.api.app", "reference/apidoc/_autosummary/buildingmotif.api.views", "reference/apidoc/_autosummary/buildingmotif.api.views.library", "reference/apidoc/_autosummary/buildingmotif.api.views.model", "reference/apidoc/_autosummary/buildingmotif.api.views.parser", "reference/apidoc/_autosummary/buildingmotif.api.views.template", "reference/apidoc/_autosummary/buildingmotif.building_motif", "reference/apidoc/_autosummary/buildingmotif.building_motif.building_motif", "reference/apidoc/_autosummary/buildingmotif.building_motif.singleton", "reference/apidoc/_autosummary/buildingmotif.database", "reference/apidoc/_autosummary/buildingmotif.database.graph_connection", "reference/apidoc/_autosummary/buildingmotif.database.table_connection", "reference/apidoc/_autosummary/buildingmotif.database.tables", "reference/apidoc/_autosummary/buildingmotif.database.utils", "reference/apidoc/_autosummary/buildingmotif.dataclasses", "reference/apidoc/_autosummary/buildingmotif.dataclasses.library", "reference/apidoc/_autosummary/buildingmotif.dataclasses.model", "reference/apidoc/_autosummary/buildingmotif.dataclasses.shape_collection", "reference/apidoc/_autosummary/buildingmotif.dataclasses.template", "reference/apidoc/_autosummary/buildingmotif.dataclasses.validation", "reference/apidoc/_autosummary/buildingmotif.ingresses", "reference/apidoc/_autosummary/buildingmotif.ingresses.bacnet", "reference/apidoc/_autosummary/buildingmotif.ingresses.base", "reference/apidoc/_autosummary/buildingmotif.ingresses.brick", "reference/apidoc/_autosummary/buildingmotif.ingresses.csvingress", "reference/apidoc/_autosummary/buildingmotif.ingresses.naming_convention", "reference/apidoc/_autosummary/buildingmotif.ingresses.template", "reference/apidoc/_autosummary/buildingmotif.ingresses.xlsx", "reference/apidoc/_autosummary/buildingmotif.label_parsing", "reference/apidoc/_autosummary/buildingmotif.label_parsing.combinators", "reference/apidoc/_autosummary/buildingmotif.label_parsing.parser", "reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens", "reference/apidoc/_autosummary/buildingmotif.libraries", "reference/apidoc/_autosummary/buildingmotif.model_builder", "reference/apidoc/_autosummary/buildingmotif.namespaces", "reference/apidoc/_autosummary/buildingmotif.schemas", "reference/apidoc/_autosummary/buildingmotif.shape_builder", "reference/apidoc/_autosummary/buildingmotif.shape_builder.shape", "reference/apidoc/_autosummary/buildingmotif.template_compilation", "reference/apidoc/_autosummary/buildingmotif.template_matcher", "reference/apidoc/_autosummary/buildingmotif.utils", "reference/apidoc/index", "reference/cli_tool", "reference/developer_documentation", "tutorials/model_correction", "tutorials/model_creation", "tutorials/model_validation", "tutorials/template_writing"], "filenames": ["README.md", "bibliography.md", "explanations/ingresses.md", "explanations/point-label-parsing.md", "explanations/shacl_to_sparql.md", "explanations/shapes-and-templates.md", "explanations/templates.md", "guides/csv-import.md", "guides/generating-queries.md", "guides/ingress-bacnet-to-brick.md", "reference/apidoc/_autosummary/buildingmotif.rst", "reference/apidoc/_autosummary/buildingmotif.api.rst", "reference/apidoc/_autosummary/buildingmotif.api.app.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.library.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.model.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.parser.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.template.rst", "reference/apidoc/_autosummary/buildingmotif.building_motif.rst", "reference/apidoc/_autosummary/buildingmotif.building_motif.building_motif.rst", "reference/apidoc/_autosummary/buildingmotif.building_motif.singleton.rst", "reference/apidoc/_autosummary/buildingmotif.database.rst", "reference/apidoc/_autosummary/buildingmotif.database.graph_connection.rst", "reference/apidoc/_autosummary/buildingmotif.database.table_connection.rst", "reference/apidoc/_autosummary/buildingmotif.database.tables.rst", "reference/apidoc/_autosummary/buildingmotif.database.utils.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.library.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.model.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.shape_collection.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.template.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.validation.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.bacnet.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.base.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.brick.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.csvingress.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.naming_convention.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.template.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.xlsx.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.combinators.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.parser.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.rst", "reference/apidoc/_autosummary/buildingmotif.libraries.rst", "reference/apidoc/_autosummary/buildingmotif.model_builder.rst", "reference/apidoc/_autosummary/buildingmotif.namespaces.rst", "reference/apidoc/_autosummary/buildingmotif.schemas.rst", "reference/apidoc/_autosummary/buildingmotif.shape_builder.rst", "reference/apidoc/_autosummary/buildingmotif.shape_builder.shape.rst", "reference/apidoc/_autosummary/buildingmotif.template_compilation.rst", "reference/apidoc/_autosummary/buildingmotif.template_matcher.rst", "reference/apidoc/_autosummary/buildingmotif.utils.rst", "reference/apidoc/index.rst", "reference/cli_tool.md", "reference/developer_documentation.md", "tutorials/model_correction.md", "tutorials/model_creation.md", "tutorials/model_validation.md", "tutorials/template_writing.ipynb"], "titles": ["BuildingMOTIF", "Bibliography", "Ingresses", "Point Label Parsing", "SHACL to SPARQL Conversion", "Shapes and Templates", "Templates", "CSV Import", "Generating SPARQL Queries", "BACnet to Brick", "buildingmotif", "buildingmotif.api", "buildingmotif.api.app", "buildingmotif.api.views", "buildingmotif.api.views.library", "buildingmotif.api.views.model", "buildingmotif.api.views.parser", "buildingmotif.api.views.template", "buildingmotif.building_motif", "buildingmotif.building_motif.building_motif", "buildingmotif.building_motif.singleton", "buildingmotif.database", "buildingmotif.database.graph_connection", "buildingmotif.database.table_connection", "buildingmotif.database.tables", "buildingmotif.database.utils", "buildingmotif.dataclasses", "buildingmotif.dataclasses.library", "buildingmotif.dataclasses.model", "buildingmotif.dataclasses.shape_collection", "buildingmotif.dataclasses.template", "buildingmotif.dataclasses.validation", "buildingmotif.ingresses", "buildingmotif.ingresses.bacnet", "buildingmotif.ingresses.base", "buildingmotif.ingresses.brick", "buildingmotif.ingresses.csvingress", "buildingmotif.ingresses.naming_convention", "buildingmotif.ingresses.template", "buildingmotif.ingresses.xlsx", "buildingmotif.label_parsing", "buildingmotif.label_parsing.combinators", "buildingmotif.label_parsing.parser", "buildingmotif.label_parsing.tokens", "buildingmotif.libraries", "buildingmotif.model_builder", "buildingmotif.namespaces", "buildingmotif.schemas", "buildingmotif.shape_builder", "buildingmotif.shape_builder.shape", "buildingmotif.template_compilation", "buildingmotif.template_matcher", "buildingmotif.utils", "Code Documentation", "Command Line Interface", "Developer Documentation", "Model Correction", "Model Creation", "Model Validation", "Template Writing"], "terms": {"enabl": [0, 19, 58], "technolog": 0, "semant": [0, 1, 51, 57, 58], "interoper": 0, "build": [0, 1, 3, 9, 24, 45, 51, 56, 57, 58], "through": [0, 4, 6, 56, 57, 59], "standard": [0, 50, 58], "metadata": [0, 1, 2, 3, 4, 5, 8, 24, 34, 54, 57, 58], "crucial": 0, "unlock": 0, "valu": [0, 2, 3, 4, 6, 8, 9, 17, 23, 25, 29, 31, 33, 39, 40, 41, 42, 43, 47, 50, 54, 56, 57, 59], "abund": 0, "divers": [0, 9], "network": [0, 33, 35, 54, 56], "data": [0, 2, 3, 5, 7, 8, 9, 19, 34, 36, 37, 52, 57, 58], "avoid": [0, 30], "subsequ": [0, 9], "incompat": 0, "issu": [0, 8, 19, 23, 30, 58], "pave": 0, "wai": [0, 3, 5, 6, 25, 54, 56, 57], "advanc": 0, "like": [0, 2, 3, 7, 8, 9, 31, 56, 57, 59], "fault": 0, "detect": [0, 52], "diagnost": 0, "fdd": 0, "real": [0, 9, 56, 57], "time": [0, 9, 25], "energi": [0, 1], "optim": 0, "other": [0, 2, 3, 5, 6, 8, 9, 23, 25, 50, 51, 56, 57, 58, 59], "manag": [0, 3, 9, 19, 22, 56], "inform": [0, 3, 4, 5, 8, 9, 29, 31, 51, 54, 55, 56, 58], "system": [0, 1, 3, 9, 56, 57, 58, 59], "emi": 0, "improv": 0, "hvac": [0, 6, 58], "control": [0, 9, 23, 58], "grid": 0, "integr": 0, "effici": [0, 1], "geb": 0, "all": [0, 2, 3, 5, 6, 8, 9, 14, 15, 17, 19, 22, 23, 24, 25, 28, 29, 30, 34, 35, 38, 39, 41, 45, 51, 52, 54, 56, 57, 58, 59], "which": [0, 2, 5, 6, 7, 8, 9, 24, 25, 28, 29, 30, 38, 42, 49, 52, 54, 55, 56, 57, 58, 59], "ar": [0, 2, 3, 4, 5, 6, 8, 9, 19, 23, 24, 25, 28, 29, 30, 31, 38, 39, 45, 47, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59], "need": [0, 3, 8, 9, 23, 25, 27, 28, 29, 37, 55, 57, 58], "fulli": [0, 51], "de": 0, "carbon": 0, "util": [0, 5, 9, 54], "capabl": 0, "web": 0, "possibl": [0, 40, 43, 55, 57], "structur": [0, 2, 3, 9, 25, 29, 50, 52, 57, 58, 59], "express": [0, 3, 6, 9, 25, 33, 41], "machin": [0, 9, 12], "readabl": [0, 3, 31], "same": [0, 2, 6, 8, 9, 25, 41, 51, 52, 54, 55, 56, 58, 59], "veri": [0, 9], "import": [0, 5, 6, 8, 9, 23, 27, 29, 52, 55, 56, 58, 59], "make": [0, 5, 8, 9, 20, 52, 54, 55, 56, 57, 58], "easier": [0, 8, 9, 55, 56, 57, 58], "implement": [0, 5, 9, 25], "field": [0, 2, 3, 9, 33, 34, 37, 39, 50], "practition": 0, "without": [0, 6, 20, 22, 25, 30, 52, 55, 57, 58], "knowledg": [0, 9], "comput": [0, 1, 2, 51], "scienc": 0, "ontolog": [0, 5, 6, 8, 27, 28, 29, 30, 51, 52, 56, 57, 59], "framework": [0, 3, 57], "bridg": 0, "gap": 0, "between": [0, 2, 6, 9, 23, 24, 31, 51], "theori": 0, "practic": [0, 57], "offer": 0, "toolset": 0, "creation": [0, 1, 9], "storag": 0, "visual": 0, "valid": [0, 4, 5, 8, 12, 23, 24, 28, 30, 47, 52, 54, 57], "It": [0, 3, 6, 9, 25, 30, 56, 57, 58], "form": [0, 23, 52], "sdk": 0, "easi": [0, 9, 57], "us": [0, 3, 4, 5, 6, 7, 8, 9, 12, 19, 23, 24, 25, 27, 28, 29, 30, 37, 38, 40, 42, 50, 51, 52, 54, 56, 57, 59], "api": [0, 2, 55], "abstract": [0, 2, 31, 34], "underli": [0, 2, 19, 34, 36, 37, 57], "complex": [0, 3, 57], "rdf": [0, 2, 3, 4, 5, 6, 8, 9, 27, 29, 30, 34, 35, 38, 51, 52, 54, 56, 58, 59], "graph": [0, 4, 5, 6, 7, 8, 9, 15, 19, 22, 23, 27, 28, 29, 30, 31, 34, 35, 37, 38, 45, 46, 50, 51, 52, 54, 56, 58, 59], "databas": [0, 9, 12, 19, 27, 28, 29, 30, 54, 56, 57, 58], "shacl": [0, 5, 27, 29, 31, 52, 58], "differ": [0, 2, 4, 9, 25, 31, 55, 56, 58, 59], "schema": [0, 3, 5, 6, 7, 8, 9, 57, 58, 59], "also": [0, 2, 4, 6, 8, 9, 25, 45, 56, 57, 58, 59], "support": [0, 4, 9, 23, 27, 56, 57], "connector": 0, "exist": [0, 4, 6, 9, 23, 27, 29, 30, 56, 58, 59], "sourc": [0, 2, 3, 12, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 49, 50, 51, 52, 55, 56, 57], "e": [0, 2, 4, 5, 8, 9, 28, 29, 55, 56, 57], "g": [0, 2, 4, 5, 8, 9, 51, 52, 55, 57], "autom": [0, 56, 57], "design": 0, "model": [0, 1, 3, 4, 7, 8, 23, 24, 30, 31, 35, 54, 59], "etc": [0, 2, 6, 9, 56, 57, 58, 59], "avail": [0, 52, 54, 56, 57, 58], "phase": 0, "life": 0, "cycl": 0, "The": [0, 2, 3, 4, 5, 6, 7, 8, 9, 23, 25, 30, 31, 33, 36, 39, 41, 45, 51, 52, 54, 55, 56, 57, 58, 59], "object": [0, 2, 3, 8, 9, 23, 25, 27, 28, 30, 31, 33, 49, 52, 56, 57, 58, 59], "1": [0, 2, 3, 5, 6, 7, 8, 9, 25, 29, 39, 41, 51, 54, 55, 56, 57, 58, 59], "lower": 0, "cost": 0, "reduc": 0, "instal": [0, 5, 9, 12, 54, 56, 57, 58], "deliv": 0, "qualiti": 0, "servic": [0, 9], "owner": 0, "occup": [0, 59], "2": [0, 5, 6, 8, 9, 51, 54, 56, 57, 58, 59], "simpler": 0, "more": [0, 3, 4, 9, 49, 50, 52, 55, 58, 59], "easili": [0, 2, 6, 58], "verifi": [0, 9, 23, 30], "procur": 0, "process": [0, 3, 9, 23, 31, 51, 52, 54, 55, 56, 57, 58], "product": [0, 55], "3": [0, 3, 5, 6, 7, 8, 9, 54, 55, 56, 57, 58, 59], "open": [0, 5, 9, 58], "new": [0, 1, 2, 6, 9, 15, 23, 25, 27, 28, 29, 30, 34, 41, 50, 52, 55, 56, 57, 58], "busi": 0, "opportun": 0, "provid": [0, 2, 3, 4, 5, 6, 9, 25, 28, 30, 51, 54, 57, 58, 59], "remov": [0, 9, 30, 52, 59], "barrier": 0, "parti": 0, "current": [0, 4, 5, 6, 8, 9, 54, 56, 57, 58], "plan": 0, "brick": [0, 3, 4, 5, 6, 7, 8, 54, 56, 57, 58, 59], "project": [0, 55], "haystack": 0, "upcom": 0, "ashra": [0, 5, 6, 9, 54, 56, 58, 59], "223p": [0, 6, 54, 59], "both": [0, 5, 8, 25, 51, 58], "ui": 0, "level": [0, 4, 6, 9, 19, 29, 59], "expertis": 0, "user": [0, 9, 25, 45, 50, 55, 57], "maximum": 0, "adopt": 0, "diataxi": 0, "its": [0, 5, 6, 8, 23, 25, 30, 45, 56, 58, 59], "organ": [0, 51, 58], "follow": [0, 4, 5, 6, 7, 8, 9, 29, 51, 52, 55, 57, 58, 59], "section": [0, 9, 58, 59], "develop": 0, "command": [0, 9, 55, 59], "line": [0, 6, 7, 8, 9, 25, 56, 58], "interfac": [0, 9], "code": [0, 5, 8, 9, 56, 57, 58], "correct": [0, 55, 57, 58], "templat": [0, 7, 9, 23, 24, 27, 31, 45, 50, 51, 52, 54, 58], "write": [0, 5, 8, 9, 30, 34, 56, 57], "csv": [0, 30, 36], "from": [0, 2, 3, 4, 5, 6, 7, 9, 25, 27, 28, 29, 30, 31, 34, 35, 36, 37, 39, 43, 45, 47, 50, 52, 54, 55, 56, 57, 58, 59], "bacnet": [0, 5, 35, 50, 56], "ingress": [0, 7, 9, 30, 54, 57], "bibiographi": 0, "http": [0, 1, 3, 5, 6, 7, 8, 9, 54, 55, 56, 57, 58, 59], "fr": [0, 9], "gabe": 1, "fierro": 1, "avijit": 1, "saha": 1, "tobia": 1, "shapinski": 1, "matthew": 1, "steen": 1, "hannah": 1, "esling": 1, "applic": [1, 2, 4, 6, 8, 9, 58, 59], "driven": 1, "suffici": [1, 8, 58], "In": [1, 3, 5, 6, 8, 9, 54, 55, 56, 58], "proceed": 1, "9th": 1, "acm": 1, "intern": [1, 9, 58], "confer": 1, "citi": [1, 9], "transport": 1, "buildsi": 1, "22": [1, 6, 8, 9, 58], "228": [1, 9, 56, 58], "237": [1, 3], "york": 1, "ny": 1, "usa": 1, "2022": 1, "associ": [1, 4, 9, 33, 46, 50, 56, 58, 59], "machineri": 1, "url": [1, 27, 54, 57], "doi": 1, "org": [1, 3, 5, 6, 7, 8, 9, 56, 57, 58, 59], "10": [1, 2, 9, 25, 57], "1145": 1, "3563357": 1, "3564083": 1, "buildingmotif": [2, 3, 4, 5, 6, 7, 8, 55, 56, 57, 58, 59], "s": [2, 3, 6, 8, 9, 23, 25, 27, 28, 30, 34, 52, 56, 57, 58, 59], "mechan": [2, 9, 54], "extern": [2, 27, 56], "deliber": 2, "gener": [2, 3, 5, 6, 7, 9, 24, 25, 28, 30, 31, 34, 35, 36, 37, 38, 50, 51, 52, 54, 55, 56, 57, 59], "so": [2, 3, 7, 9, 52, 55, 56, 58], "thei": [2, 6, 9, 25, 27, 28, 29, 38, 50, 51, 54, 56, 59], "can": [2, 3, 5, 6, 7, 8, 9, 23, 25, 29, 30, 31, 49, 50, 52, 54, 55, 56, 57, 58, 59], "extend": [2, 9], "ingresshandl": [2, 34], "ha": [2, 3, 4, 5, 6, 9, 19, 22, 23, 28, 31, 41, 49, 56, 57, 58, 59], "two": [2, 6, 23, 25, 51, 52, 54, 59], "subclass": [2, 51], "recordingresshandl": [2, 34, 35, 37, 38], "produc": [2, 9, 25, 30, 31, 38, 51, 59], "graphingresshandl": [2, 9, 34, 37], "everi": [2, 25, 41], "concret": 2, "should": [2, 25, 28, 31, 38, 49, 52, 54, 55, 57, 58, 59], "inherit": 2, "one": [2, 3, 4, 5, 6, 27, 29, 30, 43, 49, 51, 52, 56, 58, 59], "class": [2, 3, 4, 5, 6, 7, 8, 9, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 49, 51, 52, 54, 57, 58], "defin": [2, 4, 5, 9, 23, 30, 50, 57, 58, 59], "method": [2, 3, 4, 5, 9, 23, 25, 27, 28, 29, 52, 57, 58], "list": [2, 3, 6, 9, 22, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 36, 37, 39, 40, 42, 49, 50, 51, 52, 54, 56, 58, 59], "A": [2, 3, 6, 24, 39, 40, 43, 45, 57, 58, 59], "simpl": [2, 8, 9, 56, 57, 58, 59], "python": [2, 3, 5, 9, 25, 50, 55, 56, 57, 58], "dataclass": [2, 5, 7, 8, 9, 23, 56, 57, 58, 59], "hint": [2, 9], "identifi": [2, 3, 8, 22, 23, 30, 40, 41, 43, 49, 52, 57, 59], "an": [2, 3, 4, 5, 6, 7, 8, 19, 23, 25, 27, 28, 29, 30, 31, 34, 36, 37, 38, 40, 43, 49, 51, 54, 56, 57, 58, 59], "categori": 2, "rtype": [2, 9, 33, 34, 39, 56, 58], "str": [2, 3, 9, 12, 17, 22, 23, 24, 27, 28, 29, 30, 31, 33, 34, 36, 38, 40, 42, 43, 45, 49, 50, 51, 52, 56, 58], "kei": [2, 3, 6, 9, 23, 25, 33, 39, 54, 57, 59], "pair": [2, 9, 39], "dict": [2, 17, 23, 24, 25, 28, 30, 31, 34, 40, 42, 50, 51, 52], "choic": [2, 3, 25, 41], "up": [2, 9, 25, 29, 55, 59], "each": [2, 4, 5, 6, 9, 23, 28, 30, 31, 33, 37, 38, 39, 50, 52, 54, 56], "instanc": [2, 5, 6, 8, 9, 19, 31, 34, 49, 51, 54, 56, 57, 58], "bacnetingresshandl": 2, "differenti": [2, 9], "devic": [2, 9, 33, 57], "contain": [2, 4, 6, 7, 8, 23, 25, 27, 28, 30, 33, 35, 39, 40, 43, 45, 50, 52, 54, 55, 57, 58, 59], "properti": [2, 4, 5, 6, 8, 19, 23, 27, 28, 29, 30, 31, 33, 34, 36, 37, 39, 42, 45, 49, 51, 52, 57, 59], "name": [2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 20, 23, 24, 25, 27, 28, 29, 30, 36, 37, 39, 45, 50, 52, 54, 56, 57, 58, 59], "unit": [2, 3, 5, 6, 54, 55, 57, 59], "csvingresshandl": [2, 7], "denot": [2, 59], "filenam": [2, 27, 36, 39, 52, 54], "store": [2, 25, 39, 45, 57], "column": [2, 7, 8, 30, 39], "cell": [2, 7, 8, 9, 39, 56, 58], "row": [2, 5, 8, 36, 39, 56, 58], "ns": [2, 5, 6, 8, 9, 30, 34, 35, 38, 45, 58], "rdflib": [2, 3, 7, 8, 9, 15, 19, 27, 28, 29, 30, 46, 50, 51, 52, 56, 57, 58, 59], "namespac": [2, 6, 7, 8, 9, 30, 34, 35, 38, 45, 52, 56, 57, 58, 59], "return": [2, 3, 9, 12, 14, 15, 17, 19, 22, 23, 25, 27, 28, 29, 30, 31, 33, 35, 37, 39, 40, 42, 45, 50, 51, 52, 56, 57, 58], "thi": [2, 3, 4, 5, 6, 8, 9, 12, 19, 23, 25, 27, 28, 29, 30, 31, 34, 37, 45, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59], "infer": [2, 6, 27, 35, 52, 54], "translat": [2, 8], "some": [2, 3, 9, 25, 30, 34, 40, 43, 56, 57, 58, 59], "either": [2, 29, 30, 33], "upstream": [2, 9, 35, 37, 38, 50], "ani": [2, 3, 4, 5, 6, 23, 25, 27, 28, 29, 30, 40, 43, 47, 57, 58, 59], "entiti": [2, 9, 30, 31, 34, 35, 38, 49, 56, 57, 58], "uri": [2, 4, 5, 8, 9, 12, 28, 29, 30, 31, 40, 43, 52, 54, 56, 57, 58], "creat": [2, 3, 5, 6, 7, 8, 9, 12, 15, 19, 22, 23, 27, 28, 29, 34, 52, 54, 55, 56, 58], "place": [2, 34, 35, 38, 52, 58, 59], "typic": [2, 57, 59], "end": [2, 25, 57], "pipelin": 2, "sever": [2, 6, 31, 54, 56, 57, 59], "full": [2, 5, 9, 52, 57, 59], "found": [2, 3, 5, 23, 30, 42, 47, 51, 54, 56, 58], "here": [2, 3, 6, 9, 25, 27, 55, 56, 58], "take": [2, 3, 4, 9, 15, 29, 34, 49, 54, 56, 57, 58], "ip": [2, 9, 33, 54], "subnet": [2, 9, 54], "argument": [2, 3, 8, 23, 25, 29, 30, 50, 54, 55, 57], "0": [2, 3, 8, 9, 29, 54, 55, 56], "24": [2, 9, 54, 56], "set": [2, 3, 4, 5, 9, 25, 28, 30, 31, 39, 51, 52, 54, 55, 56, 58], "correspond": [2, 5, 6, 9, 25, 51, 54, 59], "repres": [2, 4, 9, 29, 31, 34, 39, 57, 58, 59], "els": [2, 9, 30, 56, 58], "base": [2, 3, 4, 6, 9, 20, 41, 49, 55, 56], "address": [2, 9, 30, 54, 58, 59], "device_id": 2, "own": [2, 3, 8, 56, 58], "mydata": 2, "given": [2, 4, 5, 6, 8, 17, 23, 25, 28, 29, 30, 31, 34, 35, 38, 39, 40, 41, 42, 43, 47, 51, 52, 54, 56, 58], "call": [2, 6, 7, 8, 9, 25, 30, 54, 56, 57, 58], "generate_csv": [2, 7, 30], "empti": [2, 7, 28], "header": [2, 7, 58], "csvingress": [2, 7], "made": [2, 25, 55, 59], "pass": [2, 4, 9, 30, 50, 54, 56, 58], "templateingress": [2, 7, 38], "xlsxingresshandl": 2, "path": [2, 4, 5, 6, 8, 9, 27, 29, 30, 31, 34, 36, 49, 52, 54], "sheet": [2, 39], "requir": [2, 4, 5, 6, 9, 12, 19, 25, 30, 31, 51, 54, 55, 56, 57, 58, 59], "probabl": [2, 6, 40, 43, 56], "librari": [2, 5, 6, 7, 9, 23, 24, 30, 31, 45, 47, 50, 55, 56, 58, 59], "option": [2, 6, 9, 12, 22, 23, 27, 28, 29, 30, 31, 33, 36, 38, 39, 40, 43, 45, 49, 51, 52, 54], "mapper": [2, 7, 38], "function": [2, 3, 4, 5, 6, 8, 9, 12, 14, 15, 16, 17, 19, 30, 31, 38, 40, 41, 42, 43, 46, 47, 49, 50, 51, 52, 54, 57, 58, 59], "map": [2, 6, 23, 24, 30, 51, 52], "paramet": [2, 5, 6, 12, 14, 15, 17, 19, 22, 23, 25, 27, 28, 29, 30, 31, 34, 35, 40, 42, 45, 46, 47, 49, 50, 51, 52, 56, 57, 58, 59], "If": [2, 3, 4, 5, 6, 8, 9, 19, 23, 25, 28, 30, 31, 38, 41, 42, 45, 49, 51, 52, 55, 56, 57, 59], "left": [2, 30], "none": [2, 3, 7, 19, 22, 23, 25, 27, 28, 29, 30, 31, 33, 36, 40, 42, 43, 45, 49, 51, 52, 56, 58], "There": [2, 9, 54, 59], "templateingresswithchoos": [2, 38], "act": [2, 59], "essenti": [2, 3, 9, 59], "addit": [2, 9, 28, 50, 51, 52, 55, 57, 59], "dynam": [2, 55], "choos": [2, 9], "see": [2, 4, 6, 9, 54, 55, 56, 57, 58], "guid": [2, 9], "purpos": [3, 9, 56, 57, 58], "explan": [3, 31], "describ": [3, 54, 59], "rule": [3, 29, 50, 57, 58], "how": [3, 4, 5, 8, 9, 29, 51, 56, 57, 58], "One": [3, 58], "common": [3, 6, 9, 46, 52, 58], "tag": 3, "input": [3, 4, 6, 31, 37, 51, 52, 54, 56, 57], "output": [3, 9, 34, 54, 58], "human": [3, 31], "descript": [3, 9, 23, 24, 28, 54, 55, 56, 57, 58, 59], "often": [3, 5], "extract": [3, 4, 9, 25], "help": [3, 25, 29, 54, 58], "construct": [3, 5, 31, 41, 43, 49], "convent": [3, 37], "them": [3, 5, 9, 34, 36, 39, 45, 52, 56, 58], "type": [3, 4, 8, 12, 14, 15, 17, 19, 22, 23, 25, 27, 28, 29, 30, 31, 33, 35, 36, 39, 40, 41, 42, 43, 45, 49, 50, 51, 52, 55, 57, 58], "token": [3, 9, 37, 40, 41, 42], "featur": [3, 12, 52, 55, 56, 57, 58], "come": [3, 6], "soon": [3, 6, 57], "just": [3, 9, 52, 56, 57, 58], "part": [3, 5, 9, 23, 24, 25, 50, 51, 52, 55, 56, 57, 58], "larger": 3, "toolkit": 3, "concept": [3, 6], "smaller": 3, "togeth": [3, 59], "string": [3, 6, 8, 9, 25, 30, 34, 40, 41, 42, 43, 52, 54, 57], "tokenresult": [3, 40, 42, 43], "These": [3, 57], "short": [3, 59], "def": [3, 9, 25, 50, 56, 58], "parse_ahu_label": 3, "sequenc": [3, 28, 29, 41, 56, 58], "ahu": [3, 56, 57, 58], "constant": [3, 40, 41, 43], "air_handling_unit": 3, "delimit": [3, 40, 43], "regex": [3, 41], "r": 3, "d": [3, 9, 54], "match": [3, 31, 41, 49, 51, 58], "three": [3, 54], "specif": [3, 9, 31, 50, 58], "regular": [3, 41], "allow": [3, 8, 25, 45, 52, 57, 59], "you": [3, 5, 8, 9, 23, 27, 37, 54, 55, 56, 57, 58, 59], "concis": 3, "might": [3, 9, 30, 56, 58], "look": [3, 9, 56, 57, 58, 59], "term": [3, 9, 30], "uriref": [3, 8, 9, 27, 28, 29, 31, 40, 43, 49, 52, 56], "brickschema": [3, 5, 6, 7, 8, 9, 54, 57, 58, 59], "length": [3, 40, 41, 43], "id": [3, 14, 15, 17, 23, 24, 27, 28, 29, 30, 40, 43, 56, 58], "ah": 3, "null": [3, 40, 43], "expect": [3, 9, 23, 31, 51, 52], "got": 3, "label_pars": 3, "modul": [3, 8, 9, 10, 11, 13, 18, 21, 25, 26, 27, 32, 40, 48, 50], "most": [3, 6, 8, 9, 25, 27, 51, 56, 58], "commonli": [3, 6], "first": [3, 4, 6, 42, 50, 51, 56, 57, 58, 59], "doe": [3, 9, 25, 27, 41, 55, 56, 57, 58], "consum": 3, "mani": [3, 23, 24, 29, 41, 58, 59], "zero": [3, 49], "occurr": 3, "mayb": [3, 41, 50], "until": [3, 41], "anoth": [3, 6, 9, 30, 55, 56, 57, 59], "your": [3, 6, 9, 23, 57, 58], "_": [3, 9, 56], "za": [3, 59], "z0": 3, "9": [3, 5, 9, 56, 57, 58], "named_equip": 3, "equip_abbrevi": 3, "named_point": 3, "point_abbrevi": 3, "abov": [3, 7, 8, 9, 25, 55, 56, 58, 59], "air": [3, 57, 58, 59], "vav": [3, 4, 5, 6, 9, 56, 58, 59], "variabl": [3, 4, 8, 25, 54, 58, 59], "volum": [3, 58, 59], "save": [3, 8, 54, 56, 57, 58], "space": [3, 9], "automat": [3, 5, 6, 28, 54, 55, 58, 59], "expand": 3, "we": [3, 5, 6, 7, 8, 9, 19, 25, 27, 51, 55, 56, 57, 58, 59], "dictionari": [3, 6, 25, 28, 30, 31, 41, 50, 57], "my_abbrevi": 3, "fcu": 3, "fan_coil_unit": [3, 8], "variable_air_volume_box": 3, "crac": 3, "computer_room_air_condition": 3, "hx": 3, "heat_exchang": 3, "pmp": 3, "pump": 3, "rvav": [3, 4], "variable_air_volume_box_with_reheat": [3, 59], "hp": 3, "heat_pump": 3, "rtu": 3, "rooftop_unit": 3, "dmp": [3, 6], "damper": [3, 6, 57, 58, 59], "st": [3, 56], "statu": 3, "vlv": 3, "valv": 3, "chvlv": 3, "chilled_water_valv": 3, "hwvlv": 3, "hot_water_valv": 3, "vfd": 3, "variable_frequency_dr": 3, "ct": 3, "cooling_tow": 3, "mau": 3, "makeup_air_unit": 3, "room": [3, 7], "my_abbreviations_pars": 3, "Then": [3, 9, 57], "our": [3, 7, 25, 56, 58], "note": [3, 9, 25, 50, 55], "To": [3, 4, 8, 9, 25, 54, 55, 57, 58, 59], "earlier": 3, "work": [3, 4, 6, 9, 23, 25, 56, 57, 58], "rewrit": [3, 52], "parse_label": [3, 9], "123": [3, 9], "detail": [3, 6, 9, 19, 58], "messag": [3, 49, 54, 58], "when": [3, 5, 6, 20, 25, 27, 30, 31, 38, 52, 55, 56, 57, 58, 59], "fail": [3, 4, 9, 25, 31, 41, 49, 55, 56, 58], "debug": [3, 9, 19, 55], "understand": [3, 57], "why": [3, 58], "particular": [3, 9, 56], "did": [3, 9, 25], "format": [3, 9, 15, 27, 55, 56, 58, 59], "includ": [3, 6, 8, 25, 28, 30, 31, 49, 52, 54, 55, 56, 57, 58], "about": [3, 9, 31, 57, 58], "what": [3, 5, 8, 9, 25, 31, 49, 54, 56, 57, 58, 59], "wa": [3, 5, 56, 57, 58], "mean": [3, 25, 51, 52], "consid": [3, 5, 9, 23, 30], "buildingname_02": 3, "fcu503_chwvlvpo": 3, "fcu510_effocc": 3, "fcu507_unocchtgspt": 3, "fcu415_unocchtgspt": 3, "buildingname_01": 3, "fcu203_occclgspt": 3, "fcu529_unocchtgspt": 3, "fcu243_effocc": 3, "fcu362_chwvlvpo": 3, "common_equip_abbreviations_brick": 3, "chwvlvpo": 3, "position_sensor": 3, "hwvlvpo": 3, "roomtmp": 3, "air_temperature_sensor": [3, 6, 8], "room_rh": 3, "relative_humidity_sensor": 3, "unocchtgspt": 3, "unoccupied_air_temperature_heating_setpoint": 3, "occhtgspt": 3, "occupied_air_temperature_heating_setpoint": 3, "unoccclgspt": 3, "unoccupied_air_temperature_cooling_setpoint": 3, "occclgspt": 3, "occupied_air_temperature_cooling_setpoint": 3, "satmp": 3, "supply_air_temperature_sensor": [3, 5, 9, 59], "occcmd": 3, "occupancy_command": 3, "effocc": 3, "occupancy_statu": 3, "custom_pars": 3, "target": [3, 4, 8, 29, 42, 49, 56], "underscor": [3, 9], "number": [3, 31, 49, 52, 56, 58], "9a": 3, "z": 3, "equip": [3, 9, 56, 57, 58, 59], "ident": 3, "ensur": [4, 8, 23, 43, 50, 55, 58], "onli": [4, 5, 6, 29, 31, 55, 59], "yield": [4, 30, 51], "whether": [4, 30], "node": [4, 5, 6, 17, 28, 29, 30, 31, 49, 51, 52, 55, 58], "aid": 4, "execut": [4, 50, 58], "depend": [4, 5, 7, 9, 23, 24, 25, 28, 29, 30, 45, 50, 55, 56, 58], "edg": [4, 6], "were": [4, 5, 30, 57], "shape_to_queri": [4, 8, 29], "page": 4, "give": [4, 7, 17, 39, 50, 58], "overview": 4, "main": [4, 9, 54], "satisfi": [4, 5, 9, 29, 56, 57, 58], "constraint": [4, 5, 31, 49, 56, 58], "At": 4, "high": [4, 56, 58], "transform": 4, "assembl": 4, "complet": [4, 9, 51, 55], "definit": [4, 6, 9, 29, 50, 57, 59], "result": [4, 5, 7, 8, 9, 25, 28, 30, 31, 40, 41, 42, 43, 45, 50, 52, 56, 57, 58], "least": [4, 8], "add": [4, 6, 9, 22, 28, 29, 30, 41, 45, 49, 50, 51, 55, 56, 57, 58, 59], "sh": [4, 5, 6, 8, 9, 29, 31, 49, 52, 58], "pull": [4, 54, 56], "annot": [4, 57], "otherwis": [4, 6, 19, 25, 29, 30, 45, 52, 57], "assign": [4, 25, 56], "union": [4, 5, 27, 29, 30, 31, 36, 43, 45, 49], "within": [4, 5, 9, 27, 30, 56, 58], "independ": 4, "branch": [4, 54], "few": [4, 56, 57, 59], "directli": [4, 6, 8, 27, 54, 57, 58], "nodeshap": [4, 5, 6, 8, 49, 52, 58], "convert": [4, 25, 52], "pattern": [4, 8, 59], "targetclass": [4, 5, 6, 8, 29, 58], "c": [4, 9, 25], "subclassof": [4, 8, 29], "targetsubjectsof": 4, "p": [4, 6, 7, 9, 54, 57, 59], "ignor": [4, 30, 55], "targetobjectsof": 4, "targetnod": [4, 58], "n": [4, 29, 41], "bind": [4, 6, 8, 17, 23, 30, 52, 54, 56, 57, 58, 59], "AS": 4, "addition": 4, "except": [4, 9, 19, 20, 23, 27, 28, 30, 47, 52, 56, 57, 58], "than": [4, 6, 31, 50, 52], "combin": [4, 30, 31, 40, 42, 52], "interpret": [4, 9, 31, 58], "compon": [4, 5, 6, 23, 31, 57, 58, 59], "stage": [4, 55], "hasvalu": [4, 6, 8, 29], "interact": [5, 9, 23, 54, 55, 57], "interest": [5, 58], "document": [5, 6, 9, 47, 54, 59], "explain": 5, "recal": [5, 8, 54, 59], "condit": 5, "over": [5, 9, 49, 51, 55], "evalu": [5, 16, 17, 30, 49, 56, 58, 59], "against": [5, 28, 47, 52, 55, 58], "load": [5, 6, 7, 8, 9, 27, 28, 29, 30, 34, 56, 58, 59], "attempt": [5, 38, 55], "find": [5, 6, 51, 52, 55], "happen": [5, 6], "directori": [5, 6, 7, 9, 27, 52, 55, 56, 57, 58, 59], "git": [5, 9], "repositori": [5, 9, 55, 56, 57, 58], "search": [5, 6, 30, 51, 52, 56, 58], "file": [5, 6, 7, 8, 9, 19, 25, 27, 30, 34, 36, 39, 47, 50, 52, 54, 55, 56, 57, 58, 59], "recurs": [5, 23, 29, 30, 52], "collect": [5, 23, 24, 27, 28, 56, 57], "graphc": 5, "owl": [5, 6, 8, 27, 29, 54, 57, 58], "assumpt": 5, "ifi": 5, "could": [5, 56, 58, 59], "instanti": [5, 19, 38], "decompil": 5, "get_template_parts_from_shap": [5, 52], "recogn": 5, "qualifiedvalueshap": [5, 6, 8], "datatyp": [5, 6, 25], "mincount": [5, 6, 52], "qualifiedmincount": [5, 6, 8, 52], "maxcount": 5, "qualifiedmaxcount": 5, "i": [5, 8, 9, 28, 29, 55, 56], "invent": [5, 6, 30, 56], "unless": [5, 30], "attribut": [5, 9, 25, 50, 52, 57], "been": [5, 9, 19, 28, 30, 51, 56, 57, 58], "myshap": 5, "ttl": [5, 6, 8, 9, 15, 54, 56, 57, 58], "prefix": [5, 6, 7, 8, 46, 57, 58, 59], "www": [5, 6, 8, 57, 58], "w3": [5, 6, 8, 57, 58], "2002": [5, 6, 8, 57, 58], "07": [5, 6, 8, 9, 57, 58], "urn": [5, 6, 7, 8, 9, 35, 52, 56, 57, 58, 59], "terminal_unit": 5, "haspart": [5, 6, 8, 50, 57, 58, 59], "heat": [5, 58], "coil": [5, 57, 58, 59], "hc": 5, "haspoint": [5, 6, 7, 8, 9, 50, 57, 59], "supply_air_flow_sensor": [5, 59], "sat": [5, 9, 56], "heating_coil": [5, 57, 58, 59], "position_command": [5, 59], "damper_po": 5, "w": [5, 9, 52, 58], "f": [5, 8, 9, 56, 57, 58], "would": [5, 6, 25, 29, 52, 56, 57, 59], "memori": [5, 7, 8, 9, 52, 56, 57, 58], "bm": [5, 7, 8, 9, 23, 34, 35, 56, 57, 58], "sqlite": [5, 7, 8, 9, 55, 56, 57, 58], "ontology_graph": [5, 6, 9, 27, 56, 57, 58], "github": [5, 9, 54, 55], "com": [5, 9, 54], "releas": [5, 9, 54], "download": [5, 9, 54, 55, 56, 57, 58], "nightli": [5, 9, 54], "lib": [5, 7, 9, 31, 56, 57, 58, 59], "opt": [5, 9, 56, 57, 58], "hostedtoolcach": [5, 9, 56, 57, 58], "11": [5, 9, 56, 57, 58], "x64": [5, 9, 56, 57, 58], "python3": [5, 9, 55, 56, 57, 58], "site": [5, 9, 56, 57, 58], "packag": [5, 9, 55, 56, 57, 58], "pyshacl": [5, 9, 12, 52, 56, 57, 58], "extra": [5, 9, 56, 57], "__init__": [5, 9, 25, 56, 57, 58], "py": [5, 9, 23, 30, 54, 55, 56, 57, 58], "46": [5, 9, 56, 57, 58], "warn": [5, 9, 25, 30, 31, 56, 57, 58], "js": [5, 9, 55, 56, 57, 58], "becaus": [5, 6, 9, 23, 25, 51, 52, 56, 57, 58], "pyduktape2": [5, 9, 56, 57, 58], "extra_nam": [5, 9, 56, 57, 58], "req": [5, 9, 56, 57, 58], "2024": [5, 9], "09": [5, 9], "16": [5, 9], "18": [5, 9, 56], "25": [5, 9], "580": 5, "root": [5, 59], "resolv": [5, 9, 27, 29, 31, 56], "qudt": [5, 6], "No": [5, 8, 56, 58], "check": [5, 9, 23, 51, 55, 56, 58], "581": 5, "vocab": [5, 6], "582": 5, "sou": 5, "583": 5, "overlai": 5, "584": 5, "quantitykind": 5, "585": 5, "w3id": 5, "rec": [5, 9], "recimport": 5, "586": 5, "facad": 5, "587": 5, "dimensionvector": 5, "588": 5, "usertest": 5, "2020": [5, 9], "589": 5, "ref": [5, 9, 49], "28": [5, 9, 25], "556": 5, "depende": [5, 23, 56, 58], "n2434a5199c0f4ed9baa2a0450c89abdfb7623": 5, "560": [5, 56, 58], "n2434a5199c0f4ed9baa2a0450c89abdfb7619": 5, "565": [5, 9, 56, 58], "n2434a5199c0f4ed9baa2a0450c89abdfb7625": 5, "569": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7621": 5, "573": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7629": 5, "578": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7627": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7591": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7589": 5, "590": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7581": 5, "595": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7583": 5, "599": [5, 9], "n2434a5199c0f4ed9baa2a0450c89abdfb7587": 5, "603": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7585": 5, "607": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7699": 5, "611": [5, 9], "n2434a5199c0f4ed9baa2a0450c89abdfb7697": 5, "616": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7705": 5, "620": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7701": 5, "624": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7703": 5, "628": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7638": 5, "633": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7642": 5, "637": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7636": 5, "642": [5, 9], "n2434a5199c0f4ed9baa2a0450c89abdfb7644": 5, "646": 5, "n2434a5199c0f4ed9baa2a0450c89abdfb7640": 5, "onc": [5, 30], "have": [5, 6, 7, 9, 23, 25, 30, 50, 51, 52, 56, 57, 58, 59], "turn": [5, 9, 35, 37, 51, 52, 56, 57, 58], "explicitli": [5, 6, 56], "read": [5, 9, 36, 38, 39, 55], "out": [5, 7, 9, 30, 51, 56, 57], "get_template_by_nam": [5, 7, 27, 56, 57, 58, 59], "dump": [5, 34], "bodi": [5, 6, 7, 15, 27, 30, 50, 56, 57], "print": [5, 7, 8, 9, 30, 55, 56, 57, 58], "serial": [5, 7, 9, 25, 27, 56, 57, 58, 59], "___param___": [5, 6, 7, 52, 57, 59], "hc0": 5, "p13": 5, "sat0": 5, "As": [5, 58], "want": [5, 51, 57, 58, 59], "inlin": [5, 30, 38, 45, 52], "get": [5, 7, 9, 14, 15, 17, 22, 23, 25, 27, 28, 29, 30, 31, 50, 56, 57, 58], "sens": 5, "ad": [5, 9, 22, 25, 28, 50, 56], "inline_depend": [5, 7, 30, 56], "damper_pos0": 5, "observ": 5, "paramt": [5, 30, 59], "top": [6, 58, 59], "must": [6, 41, 51, 55, 58], "whose": [6, 25, 30], "below": [6, 8, 9, 25, 54, 55, 56, 57, 58], "mai": [6, 9, 19, 25, 55, 57, 58], "bound": [6, 30, 45, 59], "replac": [6, 27, 52, 57], "exactli": [6, 49, 56, 58], "those": [6, 23, 34, 56, 57, 58, 59], "appear": [6, 23, 56], "element": [6, 25], "refer": [6, 8, 23, 25, 30, 49, 50, 57], "For": [6, 9, 25, 52, 56, 57, 58, 59], "exampl": [6, 9, 25, 52, 54, 55, 56, 57, 59], "sensor": [6, 59], "equival": [6, 8, 25, 56, 58], "simpli": [6, 57], "cool": [6, 57, 58], "ztemp": 6, "occ": [6, 59], "co2": [6, 7, 59], "dat": 6, "feed": [6, 8, 50, 59], "zone": [6, 9, 56, 57, 58, 59], "arg": [6, 7, 9, 19, 23, 24, 25, 30, 40, 41, 42, 50, 59], "hvac_zon": [6, 59], "zone_air_temperature_sensor": [6, 9, 57, 59], "occupancy_sensor": [6, 59], "co2_level_sensor": [6, 59], "discharge_air_temperature_sensor": 6, "certain": [6, 8, 49, 58], "via": [6, 57], "tempalt": 6, "vav_shap": 6, "sensor_shap": 6, "shape1": 6, "temperature_sensor": [6, 7], "hasunit": 6, "deg_c": 6, "insid": [6, 25, 27, 28, 58, 59], "permit": [6, 31], "greater": 6, "ll": [6, 9, 56, 57, 58], "px": 6, "where": [6, 8, 9, 23, 25, 42, 54, 57], "x": 6, "increment": [6, 41], "integ": [6, 52], "iri": 6, "done": [6, 9, 55, 56, 58], "implicitli": 6, "rememb": 6, "befor": [6, 8, 19, 23, 55, 56, 57], "recommend": [6, 27, 30, 55, 56], "depndent": 6, "necessari": [6, 23, 31, 56, 57], "affect": 6, "second": [6, 59], "case": [6, 27, 56], "air_flow_sensor": 6, "p1": 6, "temp_sensor": 6, "1999": [6, 8], "02": [6, 8, 9], "syntax": [6, 8, 57, 59], "2000": [6, 8], "01": [6, 8, 9], "assum": [7, 9, 25, 56, 57, 58], "tutori": [7, 9, 56, 57, 58, 59], "my": [7, 56, 59], "thermostat": 7, "hasloc": 7, "tstat": 7, "point": [7, 50, 54, 56, 57, 58, 59], "temp": [7, 57, 59], "sp": 7, "temperature_setpoint": 7, "co2_sensor": 7, "tstat_templ": 7, "approiat": 7, "fill": [7, 30, 45, 51, 56], "tstat2": 7, "room345": 7, "345": [7, 9], "tstat3": 7, "room567": 7, "cow": 7, "567": 7, "handler": [7, 9, 19, 34, 37], "built": [7, 55], "record": [7, 9, 33, 34, 36, 37, 38, 39], "bldg": [7, 8, 9, 56, 57, 58], "my_sit": 7, "final": [7, 57], "suit": 8, "retriev": [8, 47, 58], "configur": [8, 9, 25, 55, 59], "oper": [8, 9, 56, 58], "figur": 8, "illustr": 8, "well": [8, 23, 57], "retreiv": 8, "deriv": 8, "propertyshap": [8, 49], "Not": 8, "pleas": [8, 9], "shapecollect": [8, 24, 27, 28, 29, 31], "sc": 8, "pars": [8, 9, 37, 40, 42, 56, 57, 58], "bmotif": [8, 58], "nrel": [8, 54, 56, 57, 58], "gov": [8, 57, 58], "simpleapp": 8, "app1": 8, "occupied_cooling_temperature_setpoint": 8, "coolsp": 8, "occupied_heating_temperature_setpoint": 8, "heatsp": 8, "roomtemp": 8, "e30c3c73": 8, "6b4a": 8, "4b91": 8, "831e": 8, "a9a1f579b874": 8, "ask": [8, 56, 57, 58], "shape_nam": [8, 52], "get_shapes_about_class": [8, 29], "shape_queri": 8, "select": [8, 9, 25, 28, 29, 56, 58], "app1_shap": 8, "app_queri": 8, "panda": 8, "datafram": 8, "pd": 8, "building1": 8, "content": [8, 24, 28, 34, 52, 54, 57, 59], "query_generation_exampl": 8, "re": [8, 56, 58], "df": 8, "iloc": 8, "modulenotfounderror": 8, "traceback": [8, 9, 25, 56, 58], "recent": [8, 9, 25, 56, 58], "last": [8, 9, 25, 56, 58], "5": [8, 9], "6": [8, 9], "alreadi": [9, 56, 57, 58], "local": [9, 54, 56, 57, 58], "environ": [9, 55, 56, 57, 58], "access": [9, 20, 45, 50, 54, 57], "demonstr": [9, 56], "accomplish": [9, 57], "basic": [9, 57, 58], "sure": [9, 23, 54, 55, 57], "awar": 9, "reach": [9, 55], "docker": 9, "compos": [9, 55, 59], "run": [9, 23, 27, 28, 54, 58], "virtual": [9, 55], "scan": 9, "sub": 9, "try": [9, 57, 58, 59], "simul": 9, "digit": 9, "twin": 9, "rest": [9, 41], "do": [9, 56], "connect": [9, 19, 22, 57, 58], "subprocess": 9, "shlex": 9, "virtual_bacnet": 9, "random": 9, "sy": 9, "bacpyp": 9, "app": 9, "bipsimpleappl": 9, "consolelog": 9, "configargumentpars": 9, "core": [9, 57], "modulelogg": 9, "bacpypes_debug": 9, "localdeviceobject": 9, "analoginputobject": 9, "devicecommunicationcontrolservic": 9, "readwritepropertymultipleservic": 9, "_debug": 9, "_log": 9, "global": [9, 30], "virtualbacnetapp": 9, "virtualdevic": 9, "self": [9, 25, 49, 56, 58], "host": [9, 54], "parser": [9, 37, 40, 41], "__doc__": 9, "parse_arg": 9, "ini": 9, "supplytempsensor": 9, "objectnam": 9, "objectidentifi": 9, "analoginput": 9, "presentvalu": 9, "randint": 9, "100": 9, "heatingsetpoint": 9, "hsp": 9, "coolingsetpoint": 9, "csp": 9, "zonetempsensor": 9, "add_object": 9, "__name__": 9, "__main__": [9, 25], "argv": 9, "len": 9, "dockerfil": 9, "ubuntu": 9, "latest": 9, "workdir": 9, "apt": 9, "updat": [9, 15, 23, 28, 58], "y": 9, "pip": [9, 55], "rm": 9, "rf": 9, "var": 9, "pip3": 9, "copi": [9, 27, 28, 30, 52, 54, 58], "virtualbacnet": 9, "172": [9, 54], "17": 9, "maxapdulengthaccept": 9, "1024": 9, "segmentationsupport": 9, "segmentedboth": 9, "vendoridentifi": 9, "15": 9, "yml": [9, 27, 47, 54, 55, 57, 59], "version": [9, 25, 54, 58], "4": [9, 25, 55, 57, 58, 59], "ipv4_address": 9, "ipam": 9, "driver": 9, "default": [9, 12, 22, 25, 27, 28, 29, 30, 42, 51, 52, 54, 58], "config": [9, 54, 55], "gatewai": 9, "docker_compose_start": 9, "split": 9, "16t16": 9, "34z": 9, "msg": 9, "home": 9, "runner": 9, "doc": [9, 47, 55], "obsolet": 9, "transfer": 9, "276b": 9, "0s": 9, "io": [9, 30, 57], "auth": 9, "registri": 9, "9s": 9, "dockerignor": 9, "context": [9, 22, 29, 45, 49], "2b": 9, "30kb": 9, "sha256": 9, "8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab63e": 9, "34kb": 9, "d35dfc2fe3ef66bcc085ca00d3152b482e6cafb23cdda1864154caf3b19094ba": 9, "424b": 9, "edbfe74c41f8a3501ce542e137cf28ea04dd03e6df8c9d66519b6ad761c2598a": 9, "31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356": 9, "0b": 9, "29": 9, "71mb": 9, "1s": 9, "87mb": 9, "2s": 9, "3s": 9, "8s": 9, "7": 9, "8": [9, 55, 58], "166": 9, "stabl": 9, "cli": 9, "caution": 9, "script": 9, "437": 9, "secur": 9, "nobl": 9, "inreleas": 9, "126": 9, "kb": 9, "475": 9, "archiv": 9, "256": 9, "858": 9, "multivers": 9, "amd64": 9, "13": 9, "951": 9, "restrict": 9, "402": 9, "univers": [9, 49], "360": 9, "199": 9, "444": 9, "258": 9, "449": 9, "backport": 9, "19": [9, 56], "mb": 9, "009": 9, "1808": 9, "107": 9, "331": 9, "12": 9, "117": 9, "124": 9, "641": 9, "155": 9, "14": [9, 25], "156": 9, "170": 9, "491": 9, "216": [9, 56, 58], "756": 9, "fetch": [9, 57], "4s": 9, "6999": 9, "318": 9, "tree": [9, 59], "435": 9, "state": [9, 25, 58, 59], "447": 9, "upgrad": [9, 55], "452": 9, "455": 9, "012": 9, "131": 9, "288": 9, "addus": 9, "binutil": 9, "x86": 9, "64": 9, "linux": 9, "gnu": 9, "bzip2": 9, "ca": 9, "certif": 9, "cpp": 9, "dirmngr": 9, "dpkg": 9, "dev": [9, 55], "fakeroot": 9, "fontconfig": 9, "font": 9, "dejavu": 9, "mono": 9, "gcc": 9, "gnupg": 9, "l10n": 9, "gpg": 9, "agent": 9, "wk": 9, "client": 9, "gpgconf": 9, "gpgsm": 9, "javascript": 9, "keyboxd": 9, "libalgorithm": 9, "diff": [9, 31, 56], "perl": 9, "xs": 9, "merg": 9, "libaom3": 9, "libasan8": 9, "libatomic1": 9, "libbinutil": 9, "libbrotli1": 9, "libbsd0": 9, "libbz2": 9, "libc": 9, "bin": [9, 55], "devtool": 9, "libc6": 9, "libcc1": 9, "libcrypt": 9, "libctf": 9, "nobfd0": 9, "libctf0": 9, "libde265": 9, "libdeflate0": 9, "libdpkg": 9, "libexpat1": 9, "libfakeroot": 9, "libfil": 9, "fcntllock": 9, "libfontconfig1": 9, "libfreetype6": 9, "libgcc": 9, "libgd3": 9, "libgdbm": 9, "compat4t64": 9, "libgdbm6t64": 9, "libgomp1": 9, "libgprofng0": 9, "libheif": 9, "plugin": 9, "aomdec": 9, "aomenc": 9, "libheif1": 9, "libhwasan0": 9, "libisl23": 9, "libitm1": 9, "libjansson4": 9, "libjbig0": 9, "libjpeg": 9, "turbo8": 9, "libjpeg8": 9, "libj": 9, "jqueri": 9, "sphinxdoc": 9, "libksba8": 9, "libldap": 9, "libldap2": 9, "liblerc4": 9, "liblocal": 9, "gettext": 9, "liblsan0": 9, "liblzma5": 9, "libmpc3": 9, "libmpfr6": 9, "libperl5": 9, "38t64": 9, "libpng16": 9, "16t64": 9, "libpython3": 9, "stdlib": 9, "minim": 9, "12t64": 9, "libquadmath0": 9, "libreadline8t64": 9, "libsasl2": 9, "db": [9, 30, 54, 55], "libsframe1": 9, "libsharpyuv0": 9, "libsqlite3": 9, "libssl3t64": 9, "libstdc": 9, "libtiff6": 9, "libtsan2": 9, "libubsan1": 9, "libwebp7": 9, "libx11": 9, "289": 9, "libxau6": 9, "libxcb1": 9, "libxdmcp6": 9, "libxpm4": 9, "lto": 9, "disabl": [9, 25], "manpag": 9, "media": 9, "netbas": 9, "openssl": 9, "patch": 9, "38": 9, "pinentri": 9, "curs": 9, "pkg": 9, "resourc": [9, 57, 58], "setuptool": 9, "wheel": 9, "readlin": 9, "rpcsvc": 9, "proto": 9, "tzdata": 9, "xz": 9, "zlib1g": 9, "290": 9, "suggest": 9, "cron": 9, "quota": 9, "ecryptf": 9, "gprofng": 9, "gui": 9, "dbu": 9, "session": [9, 19, 56, 57, 58], "libpam": 9, "systemd": 9, "gnome3": 9, "tor": 9, "debsig": 9, "debian": 9, "keyr": 9, "multilib": 9, "autoconf": 9, "automak": 9, "libtool": 9, "flex": 9, "bison": 9, "gdb": 9, "parcimoni": 9, "xloadimag": 9, "server": 9, "scdaemon": 9, "apache2": 9, "lighttpd": 9, "httpd": 9, "glibc": 9, "libnss": 9, "ni": 9, "nisplu": 9, "bzr": 9, "libgd": 9, "tool": [9, 27, 54], "gdbm": 9, "x265": 9, "ffmpegdec": 9, "jpegdec": 9, "jpegenc": 9, "j2kdec": 9, "j2kenc": 9, "rav1": 9, "svtenc": 9, "gssapi": 9, "mit": 9, "heimdal": 9, "ldap": 9, "otp": 9, "sql": [9, 25], "man": 9, "browser": 9, "ed": 9, "diffutil": 9, "libterm": 9, "libtap": 9, "har": 9, "tk": 9, "venv": [9, 55], "binfmt": 9, "450": 9, "451": 9, "769": 9, "143": 9, "newli": 9, "122": 9, "after": [9, 30, 41, 55, 57], "disk": [9, 57], "6ubuntu6": 9, "1283": 9, "888": 9, "39": 9, "0ubuntu8": 9, "3265": 9, "176": 9, "722": 9, "201": 9, "6ubuntu5": 9, "202": 9, "0ubuntu3": 9, "1940": 9, "315": 9, "1ubuntu0": 9, "834": 9, "343": 9, "2ubuntu0": 9, "87": [9, 56, 58], "348": 9, "dfsg": 9, "1ubuntu2": 9, "62": 9, "349": 9, "2343": 9, "477": 9, "0ubuntu2": 9, "27": 9, "478": 9, "479": 9, "2024a": 9, "3ubuntu1": 9, "273": 9, "487": 9, "1build0": 9, "34": 9, "really5": 9, "127": 9, "610": 9, "4build1": 9, "56": 9, "153": 9, "613": 9, "45": 9, "701": 9, "753": 9, "2069": 9, "788": 9, "20": [9, 25, 56], "651": 9, "799": 9, "21": [9, 58], "23": [9, 56, 58], "800": 9, "2build2": 9, "3110": 9, "043": 9, "1build1": 9, "044": 9, "6710": 9, "b": [9, 25, 54, 55], "045": 9, "26": 9, "4873": 9, "225": [9, 56, 58], "231": 9, "137ubuntu1": 9, "101": 9, "230": [9, 56, 58], "1003": 9, "341": 9, "30": 9, "20240203": 9, "159": 9, "31": 9, "41": 9, "32": [9, 54], "68": 9, "2ubuntu1": 9, "168": 9, "33": 9, "356": 9, "43": 9, "5build1": 9, "187": 9, "359": 9, "35": 9, "1build6": 9, "7160": 9, "471": [9, 56, 58], "36": [9, 56, 58, 59], "0ubuntu6": 9, "472": [9, 56, 58], "37": 9, "47": 9, "473": 9, "115": 9, "614": 9, "650": 9, "625": 9, "40": 9, "1384": 9, "648": 9, "267": 9, "653": 9, "42": 9, "4ubuntu2": 9, "239": 9, "656": 9, "657": 9, "44": 9, "572": 9, "762": 9, "97": 9, "764": 9, "94": 9, "765": 9, "851": 9, "780": 9, "48": 9, "2469": 9, "918": 9, "49": 9, "919": 9, "50": 9, "60": 9, "920": 9, "51": 9, "1698": 9, "948": 9, "52": 9, "112": 9, "950": 9, "53": 9, "0ubuntu7": 9, "67": 9, "54": 9, "2164": 9, "083": 9, "55": 9, "23ubuntu4": 9, "084": 9, "3build1": 9, "680": 9, "190": 9, "57": 9, "355": 9, "197": 9, "58": 9, "198": 9, "59": 9, "772": 9, "1032": 9, "61": 9, "7ubuntu1": 9, "5326": 9, "773": 9, "774": 9, "63": 9, "20240412": 9, "0ubuntu1": 9, "147": 9, "775": 9, "65": 9, "776": 9, "66": 9, "3024": 9, "922": 9, "1313": 9, "944": 9, "69": 9, "2736": 9, "70": 9, "1175": 9, "71": 9, "1632": 9, "72": 9, "73": 9, "2688": 9, "74": 9, "75": 9, "482": 9, "76": 9, "1212": 9, "77": 9, "5018": 9, "78": 9, "2399": 9, "79": [9, 56, 58], "80": 9, "81": 9, "964": 9, "82": 9, "1100": 9, "83": 9, "1build2": 9, "180": 9, "84": [9, 56, 58], "269": 9, "85": [9, 56, 58], "86": [9, 56, 58], "7build3": 9, "104": 9, "88": [9, 56, 58], "1074": 9, "89": 9, "10ubuntu1": 9, "4928": 9, "90": 9, "2ubuntu17": 9, "103": 9, "91": 9, "92": 9, "dfsg1": 9, "5ubuntu3": 9, "93": 9, "exp1ubuntu8": 9, "195": 9, "95": 9, "323": 9, "96": 9, "98": 9, "502": 9, "99": 9, "835": 9, "108": 9, "102": 9, "3ubuntu5": 9, "227": 9, "105": 9, "232": 9, "106": 9, "109": 9, "110": 9, "nmu1": 9, "5936": 9, "111": 9, "04": 9, "8build3": 9, "113": 9, "08": 9, "114": 9, "1941": 9, "116": 9, "1build3": 9, "139": 9, "118": 9, "4build3": 9, "119": 9, "1ubuntu4": 9, "120": 9, "121": 9, "8158": 9, "276": 9, "2ubuntu2": 9, "150": 9, "8c": 9, "2ubuntu11": 9, "2148": 9, "125": 9, "ds": 9, "179": 9, "128": 9, "05": 9, "129": 9, "git230720": 9, "130": 9, "9ubuntu5": 9, "132": 9, "133": [9, 56, 57, 58], "134": 9, "4ubuntu5": 9, "135": 9, "136": 9, "328": 9, "137": 9, "138": 9, "149": 9, "140": 9, "2339": 9, "141": 9, "894": 9, "142": 9, "5672": 9, "144": 9, "145": 9, "2013": 9, "146": 9, "498": 9, "148": 9, "396": 9, "1ubuntu1": 9, "1316": 9, "debconf": 9, "delai": 9, "sinc": [9, 25], "4376": 9, "prepar": 9, "unpack": 9, "dpkg_1": 9, "1_amd64": 9, "deb": 9, "libc6_2": 9, "3_amd64": 9, "00": 9, "unabl": 9, "frontend": 9, "dialog": 9, "usabl": [9, 25], "fall": 9, "back": [9, 57], "t": [9, 19, 23, 25, 50, 51, 54, 56, 58, 59], "locat": 9, "pm": 9, "inc": 9, "entri": 9, "usr": 9, "x86_64": 9, "share": [9, 23], "perl5": 9, "site_perl": 9, "teletyp": 9, "4377": 9, "bin_2": 9, "previous": [9, 25, 56], "unselect": 9, "4378": 9, "perl_1": 9, "6ubuntu5_amd64": 9, "libssl3t64_3": 9, "4_amd64": 9, "4392": 9, "minimal_3": 9, "2_amd64": 9, "libexpat1_2": 9, "zlib1g_1": 9, "3a1": 9, "4700": 9, "4711": 9, "0ubuntu2_amd64": 9, "types_10": 9, "0_all": 9, "netbase_6": 9, "4_all": 9, "tzdata_2024a": 9, "1_all": 9, "0_1": 9, "5273": 9, "liblzma5_5": 9, "common_8": 9, "4build1_al": 9, "libreadline8t64_8": 9, "4build1_amd64": 9, "libhistori": 9, "libreadlin": 9, "0_3": 9, "1ubuntu2_amd64": 9, "stdlib_3": 9, "12_3": 9, "5716": 9, "python3_3": 9, "38_5": 9, "2build2_al": 9, "libgdbm6t64_1": 9, "1build1_amd64": 9, "compat4t64_1": 9, "38t64_5": 9, "2build2_amd64": 9, "perl_5": 9, "adduser_3": 9, "137ubuntu1_al": 9, "7797": 9, "000": 9, "openssl_3": 9, "001": 9, "certificates_20240203_al": 9, "002": 9, "libbsd0_0": 9, "003": 9, "resources_68": 9, "004": 9, "libjansson4_2": 9, "005": 9, "16t64_1": 9, "5build1_amd64": 9, "006": 9, "libxau6_1": 9, "1build6_amd64": 9, "007": 9, "libxdmcp6_1": 9, "0ubuntu6_amd64": 9, "008": 9, "libxcb1_1": 9, "data_2": 9, "1build1_al": 9, "010": 9, "6_2": 9, "011": 9, "manpages_6": 9, "2_all": 9, "utils_5": 9, "013": 9, "common_2": 9, "4ubuntu2_amd64": 9, "014": 9, "libsframe1_2": 9, "015": 9, "libbinutils_2": 9, "016": 9, "nobfd0_2": 9, "017": 9, "libctf0_2": 9, "018": 9, "libgprofng0_2": 9, "019": 9, "gnu_2": 9, "020": 9, "binutils_2": 9, "021": 9, "022": 9, "dev_6": 9, "44_amd64": 9, "023": 9, "dev_1": 9, "3a4": 9, "024": 9, "proto_1": 9, "0ubuntu7_amd64": 9, "025": 9, "dev_2": 9, "026": 9, "base_13": 9, "23ubuntu4_amd64": 9, "027": 9, "libisl23_0": 9, "3build1_amd64": 9, "028": 9, "libmpfr6_4": 9, "029": 9, "libmpc3_1": 9, "030": 9, "gnu_13": 9, "031": 9, "13_13": 9, "032": 9, "gnu_4": 9, "3a13": 9, "7ubuntu1_amd64": 9, "033": 9, "cpp_4": 9, "034": 9, "0_14": 9, "0ubuntu1_amd64": 9, "035": 9, "libgomp1_14": 9, "03": 9, "036": 9, "libitm1_14": 9, "037": 9, "libatomic1_14": 9, "038": 9, "libasan8_14": 9, "039": 9, "liblsan0_14": 9, "040": 9, "libtsan2_14": 9, "041": 9, "libubsan1_14": 9, "042": 9, "libhwasan0_14": 9, "libquadmath0_14": 9, "dev_13": 9, "046": 9, "047": 9, "048": 9, "gcc_4": 9, "049": 9, "050": 9, "051": 9, "052": 9, "053": 9, "_4": 9, "054": 9, "make_4": 9, "1build2_amd64": 9, "055": 9, "056": 9, "bzip2_1": 9, "057": 9, "patch_2": 9, "7build3_amd64": 9, "058": 9, "list_47_al": 9, "059": 9, "060": 9, "essential_12": 9, "10ubuntu1_amd64": 9, "061": 9, "gpgconf_2": 9, "2ubuntu17_amd64": 9, "062": 9, "libksba8_1": 9, "063": 9, "db_2": 9, "064": 9, "2_2": 9, "065": 9, "libldap2_2": 9, "exp1ubuntu8_amd64": 9, "066": 9, "dirmngr_2": 9, "067": 9, "libfakeroot_1": 9, "068": 9, "fakeroot_1": 9, "069": 9, "mono_2": 9, "8_all": 9, "070": 9, "core_2": 9, "071": 9, "config_2": 9, "072": 9, "utils_2": 9, "073": 9, "gpg_2": 9, "074": 9, "curses_1": 9, "3ubuntu5_amd64": 9, "075": 9, "agent_2": 9, "076": 9, "gpgsm_2": 9, "077": 9, "keyboxd_2": 9, "078": 9, "gnupg_2": 9, "2ubuntu17_al": 9, "079": 9, "l10n_2": 9, "080": 9, "client_2": 9, "081": 9, "common_11": 9, "nmu1_al": 9, "082": 9, "perl_0": 9, "8build3_amd64": 9, "5_all": 9, "085": 9, "libaom3_3": 9, "086": 9, "libbrotli1_1": 9, "087": 9, "libfreetype6_2": 9, "1build3_amd64": 9, "088": 9, "libfontconfig1_2": 9, "06": 9, "089": 9, "libsharpyuv0_1": 9, "4build3_amd64": 9, "090": 9, "aomdec_1": 9, "1ubuntu4_amd64": 9, "091": 9, "092": 9, "libde265_1": 9, "093": 9, "libheif1_1": 9, "094": 9, "turbo8_2": 9, "2ubuntu2_amd64": 9, "095": 9, "libjpeg8_8c": 9, "2ubuntu11_amd64": 9, "096": 9, "libdeflate0_1": 9, "097": 9, "libjbig0_2": 9, "098": 9, "liblerc4_4": 9, "099": 9, "libwebp7_1": 9, "libtiff6_4": 9, "libxpm4_1": 9, "3a3": 9, "libgd3_2": 9, "9ubuntu5_amd64": 9, "devtools_2": 9, "4ubuntu5_amd64": 9, "aomenc_1": 9, "jquery_3": 9, "underscore_1": 9, "3_all": 9, "sphinxdoc_7": 9, "6_all": 9, "exp1ubuntu8_al": 9, "12t64_3": 9, "dev_3": 9, "modules_2": 9, "setuptools_68": 9, "wheel_0": 9, "pip_24": 9, "1ubuntu1_al": 9, "tty": 9, "geograph": 9, "area": 9, "live": 9, "question": 9, "narrow": 9, "down": 9, "present": [9, 29], "africa": 9, "antarctica": 9, "asia": 9, "australia": 9, "indian": 9, "america": 9, "arctic": 9, "atlant": 9, "europ": 9, "pacif": 9, "uniniti": 9, "join": 9, "dbdriver": 9, "stack": 9, "utc": 9, "now": [9, 55, 56, 57, 58, 59], "mon": 9, "sep": 9, "reconfigur": 9, "wish": 9, "chang": [9, 29, 55, 58], "val": 9, "substitut": [9, 30], "822": 9, "gen6": 9, "concaten": [9, 45], "altern": 9, "sysv": 9, "auto": 9, "mode": 9, "skip": [9, 52], "man1": 9, "gz": 9, "link": 9, "group": [9, 17, 59], "doesn": [9, 56, 58], "fake": 9, "es": 9, "sv": 9, "lzma": 9, "unlzma": 9, "unxz": 9, "lzcat": 9, "xzcat": 9, "lzmore": 9, "xzmore": 9, "lzless": 9, "xzless": 9, "lzdiff": 9, "xzdiff": 9, "lzcmp": 9, "xzcmp": 9, "lzgrep": 9, "xzgrep": 9, "lzegrep": 9, "xzegrep": 9, "lzfgrep": 9, "xzfgrep": 9, "ssl": 9, "cert": 9, "rtupdat": 9, "hook": [9, 25], "post": 9, "trigger": 9, "5s": 9, "error": [9, 28, 29, 30, 40, 42, 43, 47, 55, 58], "wide": 9, "xyz": 9, "non": [9, 25, 55], "m": [9, 55], "easiest": 9, "pipx": 9, "readm": [9, 55], "believ": 9, "mistak": 9, "contact": 9, "os": 9, "distribut": [9, 24, 50, 54], "overrid": [9, 25], "risk": 9, "break": 9, "pep": 9, "668": 9, "successfulli": 9, "exit": [9, 54], "solv": 9, "completedprocess": 9, "returncod": 9, "previou": [9, 56, 58], "log": [9, 19], "log_level": [9, 19], "test": [9, 28, 55, 56, 57, 58], "later": [9, 54], "bacnetnetwork": [9, 33, 35, 54], "scrape": 9, "individu": [9, 55], "discov": [9, 33], "don": [9, 23, 50, 54, 58, 59], "info": [9, 31], "start": [9, 41, 57, 58, 59], "bac0": 9, "lite": 9, "adjust": [9, 30], "verbos": 9, "ex": [9, 57], "silenc": 9, "taskmanag": 9, "initializationerror": 9, "therein": 9, "handl": [9, 29, 57], "Be": [9, 23], "good": 9, "net": 9, "citizen": 9, "ping": 9, "fals": [9, 25, 29, 30, 38, 49, 52, 56, 58], "discoveri": 9, "152": 9, "port": [9, 54], "mask": 9, "bbmdaddress": 9, "bbmdttl": 9, "bdtabl": 9, "ping_delai": 9, "db_param": 9, "param": [9, 23, 30, 50, 52, 56, 57, 58], "ip_addr": 9, "151": 9, "154": 9, "localipaddr": 9, "157": 9, "158": 9, "161": 9, "bokehserv": 9, "162": 9, "_points_to_trend": 9, "weakref": 9, "weakvaluedictionari": 9, "localobjnam": 9, "deviceid": 9, "firmwarerevis": 9, "maxsegmentsaccept": 9, "modelnam": 9, "vendorid": 9, "vendornam": 9, "spin": 9, "rais": [9, 19, 20, 23, 27, 28, 29, 30, 47, 50, 52, 56, 57, 58], "invalid": [9, 58], "softwar": 9, "47808": 9, "multipl": [9, 27, 54], "per": 9, "Or": 9, "specifi": [9, 19, 27, 49, 54, 58], "boid": 9, "int": [9, 14, 15, 17, 19, 23, 24, 27, 28, 29, 30, 31, 39, 40, 43, 49, 51, 52], "3056177": 9, "uniform": 9, "1000": 9, "kind": [9, 57, 59], "cotnain": 9, "arbitrari": [9, 56], "again": [9, 55, 56], "bacnettobrickingress": [9, 35], "usual": [9, 49, 50], "brick2bacnet": 9, "bacnet_network_graph": 9, "add_graph": [9, 28, 29, 56, 57, 58], "howev": [9, 25, 58], "next": [9, 57, 58, 59], "step": 9, "incorpor": [9, 30, 52], "techniqu": 9, "label": [9, 37], "show": [9, 54], "bigger": 9, "squint": 9, "divid": [9, 59], "let": [9, 56, 57, 58, 59], "put": [9, 57, 58], "tripl": [9, 22, 28, 29, 49, 52, 54, 56], "equip_nam": 9, "point_typ": 9, "brick_class": 9, "elif": [9, 56, 58], "zone_air_heating_temperature_setpoint": 9, "zone_air_cooling_temperature_setpoint": 9, "unknown": [9, 50], "yet": [9, 58], "wrap": [9, 19], "reus": 9, "littl": 9, "bit": [9, 58], "move": 9, "around": [9, 57], "mypointpars": 9, "indic": [9, 25, 30, 54], "output_graph": 9, "bacnet_graph": 9, "point_label": 9, "queri": [9, 29, 56, 58], "hasexternalrefer": 9, "invok": [9, 54], "point_ingress": 9, "augmented_graph": 9, "displai": 9, "relationship": [9, 24, 57, 59], "dvelop": 9, "idiosyncrat": 9, "futur": [9, 56, 58], "sophist": 9, "teardown": 9, "docker_compose_stop": 9, "create_app": 12, "db_uri": [12, 54], "shacl_engin": 12, "flask": [12, 14, 15, 17], "engin": [12, 19, 22, 23, 27, 52, 56, 58], "topquadr": [12, 52], "java": 12, "get_all_librari": 14, "respons": [14, 15, 16, 17], "get_all_shap": 14, "shape": [14, 23, 24, 27, 28, 29, 31, 52, 54, 56, 57], "get_librari": 14, "library_id": [14, 23, 24], "request": [14, 15, 17, 29], "get_all_model": 15, "get_model": 15, "models_id": 15, "get_model_graph": 15, "get_target_nod": 15, "create_model": 15, "update_model_graph": 15, "xml": 15, "validate_model": 15, "validate_shap": 15, "get_all_templ": 17, "get_templ": [17, 27, 56, 57, 58], "templates_id": 17, "evaluate_ingress": 17, "template_id": [17, 23, 30], "evaluate_bind": 17, "get_bind": 17, "binding_dict": 17, "liter": 17, "untyp": 17, "kwarg": [19, 24, 25, 40, 41, 42, 50], "setup_t": 19, "tabl": [19, 27, 28, 29, 30, 55, 56], "setup_log": 19, "stdout": 19, "close": 19, "clean": 19, "get_building_motif": [19, 56, 58], "singleton": 19, "singletonnotinstantiatedexcept": [19, 20], "hasn": 19, "buildingmotifengin": [19, 22], "sqlalchemi": [19, 25, 56, 58], "transact": 19, "experienc": 19, "weird": 19, "caus": [19, 49, 56], "begin": [19, 52], "cls_dict": 20, "metaclass": 20, "singelton": 20, "being": [20, 25, 34, 38], "initi": [20, 55], "graphconnect": 22, "db_identifi": 22, "buildingmotif_stor": 22, "create_graph": 22, "get_all_graph_identifi": 22, "get_graph": 22, "delete_graph": 22, "delet": [22, 23, 57], "tableconnect": [23, 56, 58], "create_db_model": 23, "dbmodel": [23, 24, 28], "get_all_db_model": 23, "get_db_model": 23, "get_db_model_by_nam": 23, "update_db_model_nam": 23, "update_db_model_descript": 23, "delete_db_model": 23, "create_db_shape_collect": 23, "dbshapecollect": [23, 24, 29], "get_all_db_shape_collect": 23, "get_db_shape_collect": 23, "delete_db_shape_collect": 23, "create_db_librari": 23, "dblibrari": [23, 24, 27, 56, 58], "get_all_db_librari": 23, "get_db_librari": 23, "get_db_library_by_nam": [23, 56, 58], "update_db_library_nam": 23, "delete_db_librari": 23, "create_db_templ": 23, "dbtemplat": [23, 24, 30], "get_all_db_templ": 23, "get_db_templ": 23, "get_db_template_by_nam": 23, "get_library_defining_db_templ": 23, "get_db_template_depend": 23, "tupl": [23, 25, 28, 29, 30, 31, 40, 42, 49, 51, 52], "depsassoci": [23, 24], "get_depend": [23, 30], "dependant_id": [23, 24], "update_db_template_nam": 23, "update_db_template_optional_arg": 23, "optional_arg": [23, 24, 27, 30], "add_template_dependency_preliminari": 23, "dependency_id": 23, "preliminari": 23, "serv": [23, 54], "popul": [23, 30, 31, 51, 56, 58], "direct": [23, 51], "acycl": 23, "upshot": 23, "nest": [23, 52], "s223": 23, "mapsto": 23, "check_all_template_depend": 23, "valueerror": [23, 27, 50], "required_param": 23, "check_template_dependency_relationship": 23, "dep": [23, 56, 58], "involv": 23, "seri": [23, 25], "perform": [23, 56, 58], "dure": [23, 30, 50, 52, 55], "template_connect": 23, "delete_template_depend": 23, "update_db_template_librari": 23, "delete_db_templ": 23, "graph_id": 24, "manifest_id": 24, "manifest": [24, 28, 56], "shape_collection_id": 24, "shape_collect": [24, 28, 31, 58], "dependee_id": 24, "body_id": 24, "jsontyp": 25, "custom": [25, 58], "json": [25, 34, 54], "jsonb": 25, "postgr": 25, "dialect": 25, "enforc": 25, "uniqu": [25, 27, 30, 52, 57], "encod": [25, 54], "impl": 25, "alia": 25, "hashabl": 25, "flag": [25, 49, 54], "aren": 25, "orm": [25, 56, 58], "cache_ok": 25, "true": [25, 27, 28, 29, 30, 38, 42, 51, 52, 55, 56, 58], "statement": 25, "externaltyp": 25, "safe": 25, "cach": [25, 34, 36, 37, 51, 52, 56, 58], "emit": 25, "typedecor": 25, "mytyp": 25, "internal_onli": 25, "_static_cache_kei": 25, "scheme": 25, "becom": 25, "cacheabl": 25, "render": 25, "accommod": 25, "unhash": 25, "accept": 25, "lookup": [25, 51, 56], "publish": 25, "sort": [25, 40, 43], "un": 25, "lookuptyp": 25, "userdefinedtyp": 25, "get_col_spec": 25, "kw": 25, "varchar": 25, "255": 25, "bind_processor": 25, "abl": [25, 30], "type_": 25, "stdin": 25, "sawarn": 25, "symbol": 25, "no_cach": 25, "wouldn": 25, "cannot": [25, 27], "itself": [25, 31, 57], "some_cach": 25, "typeerror": 25, "privat": 25, "public": 25, "themselv": 25, "_lookup": 25, "mixin": 25, "sql_cach": 25, "load_dialect_impl": 25, "typeengin": 25, "type_engin": 25, "determin": [25, 29, 38, 52, 57, 59], "ultim": 25, "By": [25, 29, 58, 59], "_id": [27, 28, 29, 30, 56, 58], "_name": [27, 28, 30, 56, 58], "_bm": [27, 28, 29, 30, 56, 58], "mirror": [27, 28, 29, 30], "classmethod": [27, 28, 29, 30, 31, 34], "overwrit": [27, 56, 58], "bool": [27, 28, 29, 30, 31, 38, 42, 49, 51, 52], "db_id": [27, 56, 58], "infer_templ": [27, 56, 58], "run_shacl_infer": [27, 56, 58], "priorit": 27, "remot": [27, 54], "load_from_libraries_yml": 27, "properli": 27, "order": [27, 50, 51], "commandlin": 27, "yaml": [27, 50, 54, 55, 59], "graph_import": 27, "create_templ": 27, "get_shape_collect": [27, 56, 58], "_descript": 28, "_manifest_id": 28, "neither": 28, "nor": 28, "add_tripl": [28, 29], "error_on_missing_import": [28, 29], "validationcontext": [28, 31], "singl": [28, 45, 56, 57, 58], "miss": [28, 29, 31, 55, 56], "deal": 28, "compil": [28, 45, 50], "test_model_against_shap": 28, "shapes_to_test": 28, "target_class": 28, "report": [28, 31, 52, 56, 58], "upon": [28, 54, 55, 59], "relat": [28, 57], "get_manifest": [28, 58], "update_manifest": [28, 56, 58], "graph_nam": 29, "subject": [29, 50, 57], "resolve_import": 29, "recursive_limit": 29, "limit": [29, 39, 57], "suppress": 29, "get_shapes_of_definition_typ": [29, 58], "definition_typ": 29, "include_label": 29, "desir": [29, 55, 58], "get_shapes_of_domain": 29, "domain": 29, "rdf_type": 29, "superclass": [29, 34], "appli": [29, 41, 50, 58, 59], "concern": 29, "sparql": 29, "in_memory_copi": 30, "add_depend": [30, 56, 58], "check_depend": 30, "remove_depend": 30, "all_paramet": 30, "exclud": [30, 56, 57, 58], "dependency_paramet": 30, "parameter_count": 30, "counter": 30, "histogram": 30, "count": [30, 49, 52, 58], "transit": 30, "dependency_for_paramet": 30, "to_inlin": 30, "preserve_arg": 30, "suffix": [30, 56], "collis": 30, "preserv": 30, "transitive_paramet": 30, "renam": 30, "confus": 30, "require_optional_arg": [30, 38], "warn_unus": 30, "unbound": 30, "even": 30, "include_opt": 30, "autogener": [30, 55, 56], "defining_librari": 30, "library_depend": 30, "find_subgraph": 30, "iter": [30, 42, 51], "subgraph": [30, 51], "partial": [30, 57], "entir": 30, "cover": [30, 57, 58], "pathlik": [30, 34, 39], "stringio": [30, 36], "bytesio": 30, "written": [30, 59], "sent": 30, "program": 30, "buffer": 30, "generate_spreadsheet": 30, "spreadsheet": 30, "byte": 30, "_template_id": 30, "graphdiff": 31, "focu": 31, "validation_result": [31, 56, 58], "actual": 31, "rather": [31, 50], "hold": [31, 56, 57], "reconcil": 31, "reason": [31, 55, 56, 58], "failed_shap": 31, "failed_compon": 31, "pathclasscount": 31, "minc": 31, "maxc": 31, "classnam": 31, "from_validation_report": 31, "pathshapecount": 31, "shapenam": 31, "extra_bodi": 31, "extra_dep": 31, "requiredpath": 31, "requiredclass": 31, "graphclasscardin": 31, "expectedcount": 31, "shapes_graph": 31, "report_str": [31, 58], "diffset": [31, 56, 58], "unord": 31, "as_templ": 31, "get_broken_ent": [31, 56], "broken": 31, "get_diffs_for_ent": [31, 56], "get_reasons_with_sever": 31, "validationresult": 31, "violat": 31, "filter": [31, 56, 58], "diffset_to_templ": 31, "grouped_diffset": 31, "wrong": 31, "respect": [31, 56, 57, 58], "_report_to_diffset": 31, "piec": 34, "bn": 35, "brick_bacnet_scan": 35, "expos": [36, 39], "namingconventioningress": 37, "attach": 37, "dump_failed_label": 37, "callabl": [38, 50, 51], "fill_unus": 38, "chooser": 38, "xlsxingress": 39, "sheetnam": 39, "analyze_failur": [40, 42], "failur": [40, 42, 56, 58], "analyz": [40, 42], "parse_list": [40, 42], "target_list": [40, 42], "results_to_token": [40, 42], "substring_n": 41, "substr": 41, "abbrevi": 41, "consecut": 41, "repeatedli": 41, "stop": 41, "everyth": 41, "extend_if_match": 41, "as_identifi": 41, "parseresult": 42, "success": [42, 55, 56, 58], "_error": 42, "factori": 42, "offset": 42, "occur": 42, "first_tru": 42, "pred": 42, "item": [42, 56, 58], "ensure_token": 43, "token_or_constructor": 43, "templatebuildercontext": 45, "add_templ": 45, "add_templates_from_librari": 45, "wrapper": [45, 57], "templatewrapp": 45, "still": [45, 56], "bind_prefix": 46, "validate_libraries_yaml": 47, "jsonschema": 47, "validationerror": 47, "deseri": 47, "programat": 49, "add_properti": 49, "add_list_properti": 49, "OR": 49, "AND": 49, "NOT": 49, "xone": 49, "of_class": 49, "class_": 49, "activ": [49, 55], "much": [49, 55], "always_run": 49, "blank": [49, 52], "insur": 49, "alwai": [49, 58], "exact": 49, "has_properti": 49, "has_path": 49, "zero_or_on": 49, "zero_or_mor": 49, "one_or_mor": 49, "mutual": 49, "exclus": 49, "min": [49, 52], "max": 49, "qualifi": 49, "precid": 49, "Is": 49, "matches_class": 49, "matches_shap": 49, "downstream": 50, "hastyp": 50, "isfedbi": 50, "author": 50, "introduc": [50, 59], "macro": 50, "signatur": 50, "foo": 50, "hardcod": 50, "decor": 50, "regist": 50, "_summary_": 50, "_description_": 50, "compile_template_spec": 50, "spec": [50, 54], "decod": 50, "vf2": 51, "algorithm": 51, "isomorph": [51, 52], "get_semantic_feas": 51, "g1": 51, "g2": 51, "_cach": 51, "_ontology_lookup_cach": 51, "feasibl": 51, "generate_all_subgraph": 51, "induc": 51, "decreas": 51, "size": 51, "largest": 51, "monomorph": 51, "digraph_to_rdflib": 51, "digraph": 51, "nx": 51, "rdflib_to_networkx_digraph": 51, "templatematch": 51, "graph_target": 51, "template_bind": 51, "template_graph": 51, "add_map": 51, "largest_mapping_s": 51, "building_subgraph_from_map": 51, "template_subgraph_from_map": 51, "remaining_template_graph": 51, "remain": [51, 52], "remaining_templ": 51, "mappings_it": 51, "descend": 51, "building_mapping_subgraphs_it": 51, "copy_graph": 52, "preserve_blank_nod": 52, "boolean": 52, "keep": 52, "inline_sh_nod": 52, "edit": 52, "combine_graph": 52, "graph_siz": 52, "measur": 52, "remove_triples_with_nod": 52, "replace_nod": 52, "old": 52, "get_ontology_fil": 52, "travers": 52, "shape_graph": 52, "template_to_shap": 52, "new_temporary_graph": 52, "more_namespac": 52, "get_paramet": 52, "abc": 52, "rewrite_shape_graph": 52, "origin": [52, 59], "rewritten": 52, "skip_uri": 52, "axiomat": 52, "xsd": 52, "shacl_valid": 52, "data_graph": 52, "fastest": 52, "shacl_infer": 52, "skolemize_shap": 52, "skolem": 52, "graph_hash": 52, "cryptograph": 52, "hash": 52, "calcul": 52, "consist": 52, "canonic": 52, "equal": 52, "recalcul": 52, "canon": 52, "expens": 52, "forget": [54, 58], "suppli": [54, 56], "right": 54, "programmat": 54, "h": 54, "dir": 54, "o": [54, 55], "ont": 54, "l": 54, "library_manifest_fil": 54, "get_default_libraries_yml": 54, "immedi": 54, "enclos": 54, "zonepac": 54, "temporarili": 54, "clone": [54, 55, 56, 57, 58], "repo": 54, "chiller": 54, "plant": 54, "invidu": 54, "diretori": 54, "output_fil": 54, "scanner": 54, "subcommand": 54, "listen": 54, "prerequisit": 55, "poetri": 55, "pre": 55, "commit": [55, 57], "env": 55, "migrat": 55, "window": 55, "unix": 55, "shell": 55, "bash": 55, "allexport": 55, "alemb": 55, "head": 55, "revis": 55, "localhost": 55, "5000": 55, "while": 55, "backend": 55, "psycopg2": 55, "binari": 55, "deploy": 55, "ci": 55, "reproduc": 55, "slight": 55, "comit": 55, "static": 55, "fix": [55, 56], "inspect": 55, "isort": 55, "black": 55, "mypi": 55, "pyproject": 55, "toml": 55, "flake8": 55, "manual": [55, 58], "log_cli": 55, "pytest": 55, "action": 55, "workflow": 55, "html": 55, "jupyt": 55, "book": 55, "sphinx": 55, "_build": 55, "dry": 55, "angular": 55, "md": 55, "4200": 55, "learn": [56, 57, 58, 59], "fork": [56, 57, 58], "subset": [56, 58], "g36": [56, 58, 59], "guideline36": [56, 58], "tutorial2_model": [56, 58], "tutorial2_manifest": 56, "noresultfound": [56, 58], "208": [56, 58], "cl": [56, 58], "206": [56, 58], "src": [56, 58], "207": [56, 58], "_load_from_directori": [56, 58], "209": [56, 58], "210": [56, 58], "211": [56, 58], "212": [56, 58], "213": [56, 58], "214": [56, 58], "215": [56, 58], "417": [56, 58], "415": [56, 58], "_read_yml_fil": [56, 58], "template_id_lookup": [56, 58], "dependency_cach": [56, 58], "416": [56, 58], "_resolve_template_depend": [56, 58], "418": [56, 58], "419": [56, 58], "_load_shapes_from_directori": [56, 58], "520": [56, 58], "518": [56, 58], "continu": [56, 58], "519": [56, 58], "_resolve_depend": [56, 58], "521": [56, 58], "522": [56, 58], "470": [56, 58], "468": [56, 58], "_template_depend": [56, 58], "469": [56, 58], "isinst": [56, 58], "to_templ": [56, 58], "id_lookup": [56, 58], "template_nam": [56, 58], "db_librari": [56, 58], "table_connect": [56, 58], "217": [56, 58], "218": [56, 58], "222": [56, 58], "223": [56, 58], "224": [56, 58], "229": [56, 58], "2870": [56, 58], "2852": [56, 58], "2853": [56, 58], "2854": [56, 58], "2855": [56, 58], "exc": [56, 58], "2868": [56, 58], "2869": [56, 58], "_iter": [56, 58], "1522": [56, 58], "scalarresult": [56, 58], "1514": [56, 58], "1515": [56, 58], "1516": [56, 58], "1517": [56, 58], "meth": [56, 58], "_engin": [56, 58], "1520": [56, 58], "1521": [56, 58], "_only_one_row": [56, 58], "1523": [56, 58], "raise_for_second_row": [56, 58], "raise_for_non": [56, 58], "scalar": [56, 58], "1524": [56, 58], "562": [56, 58], "resultintern": [56, 58], "561": [56, 58], "563": [56, 58], "564": [56, 58], "566": [56, 58], "too": [56, 57], "core_zn": [56, 57, 58], "psc_ac": [56, 57, 58], "minimum": [56, 58], "fan": [56, 57, 58], "ve": 56, "prompt": 56, "closer": 56, "generated_templ": 56, "loop": 56, "templ": [56, 59], "fairli": 56, "challeng": 56, "fact": 56, "advantag": [56, 57], "wtih": 56, "postfix": 56, "signific": 56, "highli": 56, "ahu_nam": [56, 57, 58], "points_and_part": 56, "resolve_core_zn": 56, "psc_acmixed_air_temperature_sensor": 56, "mat": 56, "psc_acfilter_differential_pressure_sensor": 56, "filterdp": 56, "psc_accooling_command": 56, "ccmd": 56, "psc_acheating_command": 56, "hcmd": 56, "psc_acoutside_air_temperature_sensor": 56, "oat": 56, "psc_acsupply_air_temperature_sensor": 56, "psc_acreturn_air_temperature_sensor": 56, "rat": 56, "resolvecore_zn": 56, "psc_acsa": 56, "know": [56, 57, 58, 59], "explor": 56, "thing": [56, 58, 59], "finish": 56, "sa": [56, 59], "repair": 56, "generated_templates_sf": 56, "sf": 56, "sf_name": 56, "fanfrequency_command": 56, "freq": 56, "fanstart_stop_command": 56, "startstop": 56, "fanfan_statu": 56, "guidelin": [56, 58, 59], "destin": [56, 57, 58], "tutorial3_model": 56, "similar": 57, "small": [57, 58], "offic": [57, 58], "commerci": [57, 58], "prototyp": [57, 58], "reader": 57, "familiar": 57, "turtl": [57, 59], "persist": 57, "simplic": 57, "tell": 57, "syntact": 57, "reveal": 57, "coupl": [57, 58], "predic": 57, "ten": 57, "water_valv": 57, "min_unoccupied_heating_discharge_air_flow_setpoint_limit": 57, "massage_room": 57, "ventilation_air_flow_ratio_limit": 57, "radiant_ceiling_panel": 57, "pump_room": 57, "occupied_return_air_temperature_setpoint": 57, "hot_water_radi": 57, "environment_box": 57, "cav": 57, "manipul": 57, "whole": 57, "5ce150cc": 57, "0406": 57, "457c": 57, "b3c8": 57, "78c97d73d352": 57, "belong": 57, "my_graph": 57, "my_external_fil": 57, "raw": 57, "air_handler_unit": 57, "touch": 57, "chill": 57, "water": 57, "ahu_templ": 57, "mandatori": 57, "psz_ac": 57, "condition": 57, "schedul": 57, "ahu_binding_dict": 57, "ahu_graph": 57, "instead": [57, 58], "oa_ra_damper_templ": 57, "outside_damp": 57, "damper_templ": 57, "fan_templ": 57, "supply_fan": [57, 58], "clg_coil_templ": 57, "cooling_coil": [57, 58], "fan_nam": 57, "fan_binding_dict": 57, "fan_graph": 57, "outdoor": 57, "oa_ra_damper_nam": 57, "outsidedamp": 57, "oa_ra_damper_binding_dict": 57, "oa_ra_damper_graph": 57, "damper_nam": 57, "damper_binding_dict": 57, "damper_graph": 57, "clg": [57, 58], "clg_coil_nam": 57, "clg_coil": 57, "clg_coil_binding_dict": 57, "clg_coil_graph": 57, "posit": [57, 59], "damper_position_command": [57, 59], "confirm": [57, 58], "outsidedamperposit": 57, "htg_coil_templ": [57, 58], "htg": [57, 58, 59], "htg_coil_nam": [57, 58], "htg_coil": [57, 58], "htg_coil_bind": [57, 58], "htg_coil_graph": [57, 58], "tutorial1_model": [57, 58], "energycod": 57, "tr": [57, 58], "readthedoc": 57, "feedback": 58, "correctli": 58, "languag": 58, "special": 58, "accord": 58, "suffic": 58, "my_site_constraint": 58, "exactcount": 58, "past": 58, "exercis": 58, "sz": 58, "tutorial1_manifest": 58, "block": 58, "treat": [58, 59], "complain": 58, "care": 58, "err": 58, "gather": 58, "eas": 58, "forgot": 58, "system_specif": 58, "readi": 58, "offici": 58, "text": 58, "difficult": 58, "background": 58, "understood": 58, "separ": 58, "tediou": 58, "technic": 58, "indivdu": 59, "termin": 59, "reheat": 59, "flow": 59, "co": 59, "topolog": 59, "further": 59, "zoom": 59, "problem": 59, "dependeci": 59, "dmppo": 59, "sugar": 59, "cmd": 59, "among": 59, "principl": 59, "manufactur": 59, "profil": 59, "organiz": 59, "subsystem": 59}, "objects": {"": [[10, 0, 0, "-", "buildingmotif"]], "buildingmotif": [[11, 0, 0, "-", "api"], [18, 0, 0, "-", "building_motif"], [21, 0, 0, "-", "database"], [26, 0, 0, "-", "dataclasses"], [32, 0, 0, "-", "ingresses"], [40, 0, 0, "-", "label_parsing"], [44, 0, 0, "-", "libraries"], [45, 0, 0, "-", "model_builder"], [46, 0, 0, "-", "namespaces"], [47, 0, 0, "-", "schemas"], [48, 0, 0, "-", "shape_builder"], [50, 0, 0, "-", "template_compilation"], [51, 0, 0, "-", "template_matcher"], [52, 0, 0, "-", "utils"]], "buildingmotif.api": [[12, 0, 0, "-", "app"], [13, 0, 0, "-", "views"]], "buildingmotif.api.app": [[12, 1, 1, "", "create_app"]], "buildingmotif.api.views": [[14, 0, 0, "-", "library"], [15, 0, 0, "-", "model"], [16, 0, 0, "-", "parser"], [17, 0, 0, "-", "template"]], "buildingmotif.api.views.library": [[14, 1, 1, "", "get_all_libraries"], [14, 1, 1, "", "get_all_shapes"], [14, 1, 1, "", "get_library"]], "buildingmotif.api.views.model": [[15, 1, 1, "", "create_model"], [15, 1, 1, "", "get_all_models"], [15, 1, 1, "", "get_model"], [15, 1, 1, "", "get_model_graph"], [15, 1, 1, "", "get_target_nodes"], [15, 1, 1, "", "update_model_graph"], [15, 1, 1, "", "validate_model"], [15, 1, 1, "", "validate_shape"]], "buildingmotif.api.views.parser": [[16, 1, 1, "", "evaluate"]], "buildingmotif.api.views.template": [[17, 1, 1, "", "evaluate_bindings"], [17, 1, 1, "", "evaluate_ingress"], [17, 1, 1, "", "get_all_templates"], [17, 1, 1, "", "get_bindings"], [17, 1, 1, "", "get_template"]], "buildingmotif.building_motif": [[19, 0, 0, "-", "building_motif"], [20, 0, 0, "-", "singleton"]], "buildingmotif.building_motif.building_motif": [[19, 2, 1, "", "BuildingMOTIF"], [19, 2, 1, "", "BuildingMotifEngine"], [19, 1, 1, "", "get_building_motif"]], "buildingmotif.building_motif.building_motif.BuildingMOTIF": [[19, 3, 1, "", "clean"], [19, 3, 1, "", "close"], [19, 4, 1, "", "session"], [19, 3, 1, "", "setup_logging"], [19, 3, 1, "", "setup_tables"]], "buildingmotif.building_motif.building_motif.BuildingMotifEngine": [[19, 3, 1, "", "begin"], [19, 3, 1, "", "connect"]], "buildingmotif.building_motif.singleton": [[20, 2, 1, "", "Singleton"], [20, 5, 1, "", "SingletonNotInstantiatedException"]], "buildingmotif.database": [[22, 0, 0, "-", "graph_connection"], [23, 0, 0, "-", "table_connection"], [24, 0, 0, "-", "tables"], [25, 0, 0, "-", "utils"]], "buildingmotif.database.graph_connection": [[22, 2, 1, "", "GraphConnection"]], "buildingmotif.database.graph_connection.GraphConnection": [[22, 3, 1, "", "create_graph"], [22, 3, 1, "", "delete_graph"], [22, 3, 1, "", "get_all_graph_identifiers"], [22, 3, 1, "", "get_graph"]], "buildingmotif.database.table_connection": [[23, 2, 1, "", "TableConnection"]], "buildingmotif.database.table_connection.TableConnection": [[23, 3, 1, "", "add_template_dependency_preliminary"], [23, 3, 1, "", "check_all_template_dependencies"], [23, 3, 1, "", "check_template_dependency_relationship"], [23, 3, 1, "", "create_db_library"], [23, 3, 1, "", "create_db_model"], [23, 3, 1, "", "create_db_shape_collection"], [23, 3, 1, "", "create_db_template"], [23, 3, 1, "", "delete_db_library"], [23, 3, 1, "", "delete_db_model"], [23, 3, 1, "", "delete_db_shape_collection"], [23, 3, 1, "", "delete_db_template"], [23, 3, 1, "", "delete_template_dependency"], [23, 3, 1, "", "get_all_db_libraries"], [23, 3, 1, "", "get_all_db_models"], [23, 3, 1, "", "get_all_db_shape_collections"], [23, 3, 1, "", "get_all_db_templates"], [23, 3, 1, "", "get_db_library"], [23, 3, 1, "", "get_db_library_by_name"], [23, 3, 1, "", "get_db_model"], [23, 3, 1, "", "get_db_model_by_name"], [23, 3, 1, "", "get_db_shape_collection"], [23, 3, 1, "", "get_db_template"], [23, 3, 1, "", "get_db_template_by_name"], [23, 3, 1, "", "get_db_template_dependencies"], [23, 3, 1, "", "get_library_defining_db_template"], [23, 3, 1, "", "update_db_library_name"], [23, 3, 1, "", "update_db_model_description"], [23, 3, 1, "", "update_db_model_name"], [23, 3, 1, "", "update_db_template_library"], [23, 3, 1, "", "update_db_template_name"], [23, 3, 1, "", "update_db_template_optional_args"]], "buildingmotif.database.tables": [[24, 2, 1, "", "DBLibrary"], [24, 2, 1, "", "DBModel"], [24, 2, 1, "", "DBShapeCollection"], [24, 2, 1, "", "DBTemplate"], [24, 2, 1, "", "DepsAssociation"]], "buildingmotif.database.tables.DBLibrary": [[24, 6, 1, "", "id"], [24, 6, 1, "", "name"], [24, 6, 1, "", "shape_collection"], [24, 6, 1, "", "shape_collection_id"], [24, 6, 1, "", "templates"]], "buildingmotif.database.tables.DBModel": [[24, 6, 1, "", "description"], [24, 6, 1, "", "graph_id"], [24, 6, 1, "", "id"], [24, 6, 1, "", "manifest"], [24, 6, 1, "", "manifest_id"], [24, 6, 1, "", "name"]], "buildingmotif.database.tables.DBShapeCollection": [[24, 6, 1, "", "graph_id"], [24, 6, 1, "", "id"]], "buildingmotif.database.tables.DBTemplate": [[24, 6, 1, "", "body_id"], [24, 6, 1, "", "dependants"], [24, 6, 1, "", "dependencies"], [24, 6, 1, "", "id"], [24, 6, 1, "", "library"], [24, 6, 1, "", "library_id"], [24, 6, 1, "", "name"], [24, 6, 1, "", "optional_args"]], "buildingmotif.database.tables.DepsAssociation": [[24, 6, 1, "", "args"], [24, 6, 1, "", "dependant_id"], [24, 6, 1, "", "dependee_id"], [24, 6, 1, "", "id"]], "buildingmotif.database.utils": [[25, 2, 1, "", "JSONType"]], "buildingmotif.database.utils.JSONType": [[25, 6, 1, "", "cache_ok"], [25, 6, 1, "", "hashable"], [25, 6, 1, "", "impl"], [25, 3, 1, "", "load_dialect_impl"]], "buildingmotif.dataclasses": [[27, 0, 0, "-", "library"], [28, 0, 0, "-", "model"], [29, 0, 0, "-", "shape_collection"], [30, 0, 0, "-", "template"], [31, 0, 0, "-", "validation"]], "buildingmotif.dataclasses.library": [[27, 2, 1, "", "Library"]], "buildingmotif.dataclasses.library.Library": [[27, 3, 1, "", "create"], [27, 3, 1, "", "create_template"], [27, 3, 1, "", "get_shape_collection"], [27, 3, 1, "", "get_template_by_name"], [27, 3, 1, "", "get_templates"], [27, 4, 1, "", "graph_imports"], [27, 4, 1, "", "id"], [27, 3, 1, "", "load"], [27, 3, 1, "", "load_from_libraries_yml"], [27, 4, 1, "", "name"]], "buildingmotif.dataclasses.model": [[28, 2, 1, "", "Model"]], "buildingmotif.dataclasses.model.Model": [[28, 3, 1, "", "add_graph"], [28, 3, 1, "", "add_triples"], [28, 3, 1, "", "compile"], [28, 3, 1, "", "create"], [28, 4, 1, "", "description"], [28, 3, 1, "", "get_manifest"], [28, 6, 1, "", "graph"], [28, 4, 1, "", "id"], [28, 3, 1, "", "load"], [28, 4, 1, "", "name"], [28, 3, 1, "", "test_model_against_shapes"], [28, 3, 1, "", "update_manifest"], [28, 3, 1, "", "validate"]], "buildingmotif.dataclasses.shape_collection": [[29, 2, 1, "", "ShapeCollection"]], "buildingmotif.dataclasses.shape_collection.ShapeCollection": [[29, 3, 1, "", "add_graph"], [29, 3, 1, "", "add_triples"], [29, 3, 1, "", "create"], [29, 3, 1, "", "get_shapes_about_class"], [29, 3, 1, "", "get_shapes_of_definition_type"], [29, 3, 1, "", "get_shapes_of_domain"], [29, 6, 1, "", "graph"], [29, 4, 1, "", "graph_name"], [29, 4, 1, "", "id"], [29, 3, 1, "", "load"], [29, 3, 1, "", "resolve_imports"], [29, 3, 1, "", "shape_to_query"]], "buildingmotif.dataclasses.template": [[30, 2, 1, "", "Dependency"], [30, 2, 1, "", "Template"]], "buildingmotif.dataclasses.template.Dependency": [[30, 6, 1, "", "args"], [30, 4, 1, "", "template"], [30, 4, 1, "", "template_id"]], "buildingmotif.dataclasses.template.Template": [[30, 3, 1, "", "add_dependency"], [30, 4, 1, "", "all_parameters"], [30, 6, 1, "", "body"], [30, 3, 1, "", "check_dependencies"], [30, 4, 1, "", "defining_library"], [30, 3, 1, "", "dependency_for_parameter"], [30, 4, 1, "", "dependency_parameters"], [30, 3, 1, "", "evaluate"], [30, 3, 1, "", "fill"], [30, 3, 1, "", "find_subgraphs"], [30, 3, 1, "", "generate_csv"], [30, 3, 1, "", "generate_spreadsheet"], [30, 3, 1, "", "get_dependencies"], [30, 4, 1, "", "id"], [30, 3, 1, "", "in_memory_copy"], [30, 3, 1, "", "inline_dependencies"], [30, 3, 1, "", "library_dependencies"], [30, 3, 1, "", "load"], [30, 4, 1, "", "name"], [30, 6, 1, "", "optional_args"], [30, 4, 1, "", "parameter_counts"], [30, 4, 1, "", "parameters"], [30, 3, 1, "", "remove_dependency"], [30, 3, 1, "", "to_inline"], [30, 4, 1, "", "transitive_parameters"]], "buildingmotif.dataclasses.validation": [[31, 2, 1, "", "GraphClassCardinality"], [31, 2, 1, "", "GraphDiff"], [31, 2, 1, "", "PathClassCount"], [31, 2, 1, "", "PathShapeCount"], [31, 2, 1, "", "RequiredClass"], [31, 2, 1, "", "RequiredPath"], [31, 2, 1, "", "ValidationContext"], [31, 1, 1, "", "diffset_to_templates"]], "buildingmotif.dataclasses.validation.GraphClassCardinality": [[31, 6, 1, "", "classname"], [31, 6, 1, "", "expectedCount"], [31, 3, 1, "", "reason"], [31, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.GraphDiff": [[31, 4, 1, "", "failed_component"], [31, 4, 1, "", "failed_shape"], [31, 6, 1, "", "focus"], [31, 6, 1, "", "graph"], [31, 3, 1, "", "reason"], [31, 3, 1, "", "resolve"], [31, 6, 1, "", "validation_result"]], "buildingmotif.dataclasses.validation.PathClassCount": [[31, 6, 1, "", "classname"], [31, 3, 1, "", "from_validation_report"], [31, 6, 1, "", "maxc"], [31, 6, 1, "", "minc"], [31, 6, 1, "", "path"], [31, 3, 1, "", "reason"], [31, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.PathShapeCount": [[31, 6, 1, "", "extra_body"], [31, 6, 1, "", "extra_deps"], [31, 3, 1, "", "from_validation_report"], [31, 6, 1, "", "maxc"], [31, 6, 1, "", "minc"], [31, 6, 1, "", "path"], [31, 3, 1, "", "reason"], [31, 3, 1, "", "resolve"], [31, 6, 1, "", "shapename"]], "buildingmotif.dataclasses.validation.RequiredClass": [[31, 6, 1, "", "classname"], [31, 3, 1, "", "reason"], [31, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.RequiredPath": [[31, 3, 1, "", "from_validation_report"], [31, 6, 1, "", "maxc"], [31, 6, 1, "", "minc"], [31, 6, 1, "", "path"], [31, 3, 1, "", "reason"], [31, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.ValidationContext": [[31, 3, 1, "", "as_templates"], [31, 4, 1, "", "diffset"], [31, 3, 1, "", "get_broken_entities"], [31, 3, 1, "", "get_diffs_for_entity"], [31, 3, 1, "", "get_reasons_with_severity"], [31, 6, 1, "", "model"], [31, 6, 1, "", "report"], [31, 6, 1, "", "report_string"], [31, 6, 1, "", "shape_collections"], [31, 6, 1, "", "shapes_graph"], [31, 6, 1, "", "valid"]], "buildingmotif.ingresses": [[33, 0, 0, "-", "bacnet"], [34, 0, 0, "-", "base"], [35, 0, 0, "-", "brick"], [36, 0, 0, "-", "csvingress"], [37, 0, 0, "-", "naming_convention"], [38, 0, 0, "-", "template"], [39, 0, 0, "-", "xlsx"]], "buildingmotif.ingresses.bacnet": [[33, 2, 1, "", "BACnetNetwork"]], "buildingmotif.ingresses.bacnet.BACnetNetwork": [[33, 4, 1, "", "records"]], "buildingmotif.ingresses.base": [[34, 2, 1, "", "GraphIngressHandler"], [34, 2, 1, "", "IngressHandler"], [34, 2, 1, "", "Record"], [34, 2, 1, "", "RecordIngressHandler"]], "buildingmotif.ingresses.base.GraphIngressHandler": [[34, 3, 1, "", "graph"]], "buildingmotif.ingresses.base.Record": [[34, 6, 1, "", "fields"], [34, 6, 1, "", "rtype"]], "buildingmotif.ingresses.base.RecordIngressHandler": [[34, 3, 1, "", "dump"], [34, 3, 1, "", "dumps"], [34, 3, 1, "", "load"], [34, 3, 1, "", "loads"], [34, 4, 1, "", "records"]], "buildingmotif.ingresses.brick": [[35, 2, 1, "", "BACnetToBrickIngress"]], "buildingmotif.ingresses.brick.BACnetToBrickIngress": [[35, 6, 1, "", "BNS"], [35, 3, 1, "", "graph"]], "buildingmotif.ingresses.csvingress": [[36, 2, 1, "", "CSVIngress"]], "buildingmotif.ingresses.csvingress.CSVIngress": [[36, 4, 1, "", "records"]], "buildingmotif.ingresses.naming_convention": [[37, 2, 1, "", "NamingConventionIngress"]], "buildingmotif.ingresses.naming_convention.NamingConventionIngress": [[37, 3, 1, "", "dump_failed_labels"], [37, 4, 1, "", "records"]], "buildingmotif.ingresses.template": [[38, 2, 1, "", "TemplateIngress"], [38, 2, 1, "", "TemplateIngressWithChooser"]], "buildingmotif.ingresses.template.TemplateIngress": [[38, 3, 1, "", "graph"]], "buildingmotif.ingresses.template.TemplateIngressWithChooser": [[38, 3, 1, "", "graph"]], "buildingmotif.ingresses.xlsx": [[39, 2, 1, "", "XLSXIngress"]], "buildingmotif.ingresses.xlsx.XLSXIngress": [[39, 4, 1, "", "records"]], "buildingmotif.label_parsing": [[40, 2, 1, "", "Constant"], [40, 2, 1, "", "Delimiter"], [40, 2, 1, "", "Identifier"], [40, 2, 1, "", "Null"], [40, 2, 1, "", "Parser"], [40, 2, 1, "", "Token"], [40, 2, 1, "", "TokenResult"], [40, 1, 1, "", "analyze_failures"], [41, 0, 0, "-", "combinators"], [40, 1, 1, "", "parse_list"], [42, 0, 0, "-", "parser"], [40, 1, 1, "", "results_to_tokens"], [43, 0, 0, "-", "tokens"]], "buildingmotif.label_parsing.Constant": [[40, 6, 1, "", "value"]], "buildingmotif.label_parsing.Delimiter": [[40, 6, 1, "", "value"]], "buildingmotif.label_parsing.Identifier": [[40, 6, 1, "", "value"]], "buildingmotif.label_parsing.Null": [[40, 6, 1, "", "value"]], "buildingmotif.label_parsing.Token": [[40, 6, 1, "", "value"]], "buildingmotif.label_parsing.TokenResult": [[40, 6, 1, "", "error"], [40, 6, 1, "", "id"], [40, 6, 1, "", "length"], [40, 6, 1, "", "token"], [40, 6, 1, "", "value"]], "buildingmotif.label_parsing.combinators": [[41, 2, 1, "", "abbreviations"], [41, 1, 1, "", "as_identifier"], [41, 2, 1, "", "choice"], [41, 2, 1, "", "constant"], [41, 2, 1, "", "extend_if_match"], [41, 2, 1, "", "many"], [41, 2, 1, "", "maybe"], [41, 2, 1, "", "regex"], [41, 2, 1, "", "rest"], [41, 2, 1, "", "sequence"], [41, 2, 1, "", "string"], [41, 2, 1, "", "substring_n"], [41, 2, 1, "", "until"]], "buildingmotif.label_parsing.parser": [[42, 2, 1, "", "ParseResult"], [42, 2, 1, "", "Parser"], [42, 1, 1, "", "analyze_failures"], [42, 1, 1, "", "first_true"], [42, 1, 1, "", "parse"], [42, 1, 1, "", "parse_list"], [42, 1, 1, "", "results_to_tokens"]], "buildingmotif.label_parsing.parser.ParseResult": [[42, 4, 1, "", "errors"], [42, 6, 1, "", "success"], [42, 6, 1, "", "tokens"]], "buildingmotif.label_parsing.tokens": [[43, 2, 1, "", "Constant"], [43, 2, 1, "", "Delimiter"], [43, 2, 1, "", "Identifier"], [43, 2, 1, "", "Null"], [43, 2, 1, "", "Token"], [43, 2, 1, "", "TokenResult"], [43, 1, 1, "", "ensure_token"]], "buildingmotif.label_parsing.tokens.Constant": [[43, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Delimiter": [[43, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Identifier": [[43, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Null": [[43, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Token": [[43, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.TokenResult": [[43, 6, 1, "", "error"], [43, 6, 1, "", "id"], [43, 6, 1, "", "length"], [43, 6, 1, "", "token"], [43, 6, 1, "", "value"]], "buildingmotif.model_builder": [[45, 2, 1, "", "TemplateBuilderContext"], [45, 2, 1, "", "TemplateWrapper"]], "buildingmotif.model_builder.TemplateBuilderContext": [[45, 3, 1, "", "add_template"], [45, 3, 1, "", "add_templates_from_library"], [45, 3, 1, "", "compile"]], "buildingmotif.model_builder.TemplateWrapper": [[45, 3, 1, "", "compile"], [45, 4, 1, "", "parameters"]], "buildingmotif.namespaces": [[46, 1, 1, "", "bind_prefixes"]], "buildingmotif.schemas": [[47, 1, 1, "", "validate_libraries_yaml"]], "buildingmotif.shape_builder": [[49, 0, 0, "-", "shape"]], "buildingmotif.shape_builder.shape": [[49, 1, 1, "", "AND"], [49, 1, 1, "", "NOT"], [49, 2, 1, "", "NodeShape"], [49, 1, 1, "", "OR"], [49, 2, 1, "", "PropertyShape"], [49, 2, 1, "", "Shape"], [49, 1, 1, "", "XONE"]], "buildingmotif.shape_builder.shape.NodeShape": [[49, 3, 1, "", "always_run"], [49, 3, 1, "", "count"], [49, 3, 1, "", "has_property"], [49, 3, 1, "", "of_class"]], "buildingmotif.shape_builder.shape.PropertyShape": [[49, 3, 1, "", "has_path"], [49, 3, 1, "", "matches"], [49, 3, 1, "", "matches_class"], [49, 3, 1, "", "matches_shape"]], "buildingmotif.shape_builder.shape.Shape": [[49, 3, 1, "", "AND"], [49, 3, 1, "", "NOT"], [49, 3, 1, "", "OR"], [49, 3, 1, "", "XONE"], [49, 3, 1, "", "add"], [49, 3, 1, "", "add_list_property"], [49, 3, 1, "", "add_property"]], "buildingmotif.template_compilation": [[50, 7, 1, "", "RULES"], [50, 1, 1, "", "bacnet"], [50, 1, 1, "", "body"], [50, 1, 1, "", "compile_template_spec"], [50, 1, 1, "", "feeds"], [50, 1, 1, "", "hasType"], [50, 1, 1, "", "isFedBy"], [50, 1, 1, "", "parts"], [50, 1, 1, "", "points"], [50, 1, 1, "", "rule"]], "buildingmotif.template_matcher": [[51, 2, 1, "", "TemplateMatcher"], [51, 1, 1, "", "digraph_to_rdflib"], [51, 1, 1, "", "generate_all_subgraphs"], [51, 1, 1, "", "get_semantic_feasibility"]], "buildingmotif.template_matcher.TemplateMatcher": [[51, 3, 1, "", "add_mapping"], [51, 6, 1, "", "building"], [51, 3, 1, "", "building_mapping_subgraphs_iter"], [51, 3, 1, "", "building_subgraph_from_mapping"], [51, 4, 1, "", "largest_mapping_size"], [51, 6, 1, "", "mappings"], [51, 3, 1, "", "mappings_iter"], [51, 3, 1, "", "remaining_template"], [51, 3, 1, "", "remaining_template_graph"], [51, 6, 1, "", "template"], [51, 6, 1, "", "template_bindings"], [51, 6, 1, "", "template_graph"], [51, 3, 1, "", "template_subgraph_from_mapping"]], "buildingmotif.utils": [[52, 1, 1, "", "combine_graphs"], [52, 1, 1, "", "copy_graph"], [52, 1, 1, "", "get_ontology_files"], [52, 1, 1, "", "get_parameters"], [52, 1, 1, "", "get_template_parts_from_shape"], [52, 1, 1, "", "graph_hash"], [52, 1, 1, "", "graph_size"], [52, 1, 1, "", "inline_sh_nodes"], [52, 1, 1, "", "new_temporary_graph"], [52, 1, 1, "", "remove_triples_with_node"], [52, 1, 1, "", "replace_nodes"], [52, 1, 1, "", "rewrite_shape_graph"], [52, 1, 1, "", "shacl_inference"], [52, 1, 1, "", "shacl_validate"], [52, 1, 1, "", "skip_uri"], [52, 1, 1, "", "skolemize_shapes"], [52, 1, 1, "", "template_to_shape"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method", "4": "py:property", "5": "py:exception", "6": "py:attribute", "7": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "exception", "Python exception"], "6": ["py", "attribute", "Python attribute"], "7": ["py", "data", "Python data"]}, "titleterms": {"buildingmotif": [0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54], "document": [0, 53, 55], "refer": 0, "tutori": 0, "guid": 0, "explan": 0, "appendix": 0, "bibliographi": 1, "ingress": [2, 32, 33, 34, 35, 36, 37, 38, 39], "type": [2, 9], "record": 2, "handler": 2, "graph": [2, 3, 57], "us": [2, 55, 58], "built": 2, "bacnet": [2, 9, 33, 54], "network": [2, 9], "csv": [2, 7], "file": 2, "xlsx": [2, 39], "spreadsheet": 2, "templat": [2, 5, 6, 17, 30, 38, 56, 57, 59], "instanti": 2, "exampl": [2, 3, 5], "brick": [2, 9, 35], "import": [2, 7, 57], "point": [3, 9], "label": 3, "pars": 3, "semant": 3, "synthesi": 3, "background": 3, "parser": [3, 16, 42], "combin": [3, 41], "defin": [3, 6], "new": 3, "abbrevi": 3, "error": 3, "handl": 3, "shacl": [4, 6, 8], "sparql": [4, 8], "convers": 4, "shape": [4, 5, 6, 8, 49, 58], "queri": [4, 8], "algorithm": 4, "select": 4, "claus": 4, "gener": [4, 8], "where": 4, "convert": 5, "how": 6, "yaml": 6, "format": 6, "depend": [6, 59], "explicit": 6, "implicit": 6, "inlin": 6, "evalu": [6, 57], "support": 8, "featur": 8, "setup": [8, 9, 56, 58], "find": [8, 58], "from": 8, "extern": 9, "pull": 9, "metadata": 9, "an": 9, "initi": 9, "model": [9, 15, 28, 56, 57, 58], "augment": 9, "our": 9, "strategi": 9, "infer": 9, "api": [11, 12, 13, 14, 15, 16, 17, 54], "app": [12, 55], "view": [13, 14, 15, 16, 17], "librari": [14, 27, 44, 54, 57], "building_motif": [18, 19, 20], "singleton": 20, "databas": [21, 22, 23, 24, 25, 55], "graph_connect": 22, "table_connect": 23, "tabl": 24, "util": [25, 52], "dataclass": [26, 27, 28, 29, 30, 31], "shape_collect": 29, "valid": [31, 56, 58], "base": 34, "csvingress": 36, "naming_convent": 37, "label_pars": [40, 41, 42, 43], "token": 43, "model_build": 45, "namespac": 46, "schema": 47, "shape_build": [48, 49], "template_compil": 50, "template_match": 51, "code": 53, "command": 54, "line": 54, "interfac": 54, "load": [54, 57], "cli": 54, "usag": 54, "bulk": 54, "directori": 54, "ontolog": [54, 58], "git": 54, "repositori": 54, "individu": [54, 57], "scan": 54, "server": 54, "develop": 55, "instal": 55, "postgr": 55, "continu": 55, "integr": 55, "local": 55, "remot": 55, "build": 55, "publish": 55, "web": 55, "run": 55, "docker": 55, "correct": 56, "creation": 57, "creat": 57, "ad": [57, 58, 59], "manual": 57, "rdf": 57, "tripl": 57, "Into": 57, "explor": 57, "manifest": 58, "write": [58, 59], "tip": 58, "suppli": 58, "extra": 58, "collect": 58, "fix": 58, "case": 58, "part": 59, "bodi": 59, "option": 59, "save": 59, "organ": 59}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9, "sphinx": 56}}) \ No newline at end of file +Search.setIndex({"docnames": ["README", "bibliography", "explanations/ingresses", "explanations/point-label-parsing", "explanations/shacl_to_sparql", "explanations/shapes-and-templates", "explanations/templates", "guides/csv-import", "guides/generating-queries", "guides/ingress-bacnet-to-brick", "reference/apidoc/_autosummary/buildingmotif", "reference/apidoc/_autosummary/buildingmotif.api", "reference/apidoc/_autosummary/buildingmotif.api.app", "reference/apidoc/_autosummary/buildingmotif.api.views", "reference/apidoc/_autosummary/buildingmotif.api.views.library", "reference/apidoc/_autosummary/buildingmotif.api.views.model", "reference/apidoc/_autosummary/buildingmotif.api.views.template", "reference/apidoc/_autosummary/buildingmotif.building_motif", "reference/apidoc/_autosummary/buildingmotif.building_motif.building_motif", "reference/apidoc/_autosummary/buildingmotif.building_motif.singleton", "reference/apidoc/_autosummary/buildingmotif.database", "reference/apidoc/_autosummary/buildingmotif.database.graph_connection", "reference/apidoc/_autosummary/buildingmotif.database.table_connection", "reference/apidoc/_autosummary/buildingmotif.database.tables", "reference/apidoc/_autosummary/buildingmotif.database.utils", "reference/apidoc/_autosummary/buildingmotif.dataclasses", "reference/apidoc/_autosummary/buildingmotif.dataclasses.library", "reference/apidoc/_autosummary/buildingmotif.dataclasses.model", "reference/apidoc/_autosummary/buildingmotif.dataclasses.shape_collection", "reference/apidoc/_autosummary/buildingmotif.dataclasses.template", "reference/apidoc/_autosummary/buildingmotif.dataclasses.validation", "reference/apidoc/_autosummary/buildingmotif.ingresses", "reference/apidoc/_autosummary/buildingmotif.ingresses.bacnet", "reference/apidoc/_autosummary/buildingmotif.ingresses.base", "reference/apidoc/_autosummary/buildingmotif.ingresses.brick", "reference/apidoc/_autosummary/buildingmotif.ingresses.csvingress", "reference/apidoc/_autosummary/buildingmotif.ingresses.naming_convention", "reference/apidoc/_autosummary/buildingmotif.ingresses.template", "reference/apidoc/_autosummary/buildingmotif.ingresses.xlsx", "reference/apidoc/_autosummary/buildingmotif.label_parsing", "reference/apidoc/_autosummary/buildingmotif.label_parsing.combinators", "reference/apidoc/_autosummary/buildingmotif.label_parsing.parser", "reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens", "reference/apidoc/_autosummary/buildingmotif.libraries", "reference/apidoc/_autosummary/buildingmotif.model_builder", "reference/apidoc/_autosummary/buildingmotif.namespaces", "reference/apidoc/_autosummary/buildingmotif.schemas", "reference/apidoc/_autosummary/buildingmotif.shape_builder", "reference/apidoc/_autosummary/buildingmotif.shape_builder.shape", "reference/apidoc/_autosummary/buildingmotif.template_compilation", "reference/apidoc/_autosummary/buildingmotif.template_matcher", "reference/apidoc/_autosummary/buildingmotif.utils", "reference/apidoc/index", "reference/cli_tool", "reference/developer_documentation", "tutorials/model_correction", "tutorials/model_creation", "tutorials/model_validation", "tutorials/template_writing"], "filenames": ["README.md", "bibliography.md", "explanations/ingresses.md", "explanations/point-label-parsing.md", "explanations/shacl_to_sparql.md", "explanations/shapes-and-templates.md", "explanations/templates.md", "guides/csv-import.md", "guides/generating-queries.md", "guides/ingress-bacnet-to-brick.md", "reference/apidoc/_autosummary/buildingmotif.rst", "reference/apidoc/_autosummary/buildingmotif.api.rst", "reference/apidoc/_autosummary/buildingmotif.api.app.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.library.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.model.rst", "reference/apidoc/_autosummary/buildingmotif.api.views.template.rst", "reference/apidoc/_autosummary/buildingmotif.building_motif.rst", "reference/apidoc/_autosummary/buildingmotif.building_motif.building_motif.rst", "reference/apidoc/_autosummary/buildingmotif.building_motif.singleton.rst", "reference/apidoc/_autosummary/buildingmotif.database.rst", "reference/apidoc/_autosummary/buildingmotif.database.graph_connection.rst", "reference/apidoc/_autosummary/buildingmotif.database.table_connection.rst", "reference/apidoc/_autosummary/buildingmotif.database.tables.rst", "reference/apidoc/_autosummary/buildingmotif.database.utils.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.library.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.model.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.shape_collection.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.template.rst", "reference/apidoc/_autosummary/buildingmotif.dataclasses.validation.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.bacnet.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.base.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.brick.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.csvingress.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.naming_convention.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.template.rst", "reference/apidoc/_autosummary/buildingmotif.ingresses.xlsx.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.combinators.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.parser.rst", "reference/apidoc/_autosummary/buildingmotif.label_parsing.tokens.rst", "reference/apidoc/_autosummary/buildingmotif.libraries.rst", "reference/apidoc/_autosummary/buildingmotif.model_builder.rst", "reference/apidoc/_autosummary/buildingmotif.namespaces.rst", "reference/apidoc/_autosummary/buildingmotif.schemas.rst", "reference/apidoc/_autosummary/buildingmotif.shape_builder.rst", "reference/apidoc/_autosummary/buildingmotif.shape_builder.shape.rst", "reference/apidoc/_autosummary/buildingmotif.template_compilation.rst", "reference/apidoc/_autosummary/buildingmotif.template_matcher.rst", "reference/apidoc/_autosummary/buildingmotif.utils.rst", "reference/apidoc/index.rst", "reference/cli_tool.md", "reference/developer_documentation.md", "tutorials/model_correction.md", "tutorials/model_creation.md", "tutorials/model_validation.md", "tutorials/template_writing.ipynb"], "titles": ["BuildingMOTIF", "Bibliography", "Ingresses", "Point Label Parsing", "SHACL to SPARQL Conversion", "Shapes and Templates", "Templates", "CSV Import", "Generating SPARQL Queries", "BACnet to Brick", "buildingmotif", "buildingmotif.api", "buildingmotif.api.app", "buildingmotif.api.views", "buildingmotif.api.views.library", "buildingmotif.api.views.model", "buildingmotif.api.views.template", "buildingmotif.building_motif", "buildingmotif.building_motif.building_motif", "buildingmotif.building_motif.singleton", "buildingmotif.database", "buildingmotif.database.graph_connection", "buildingmotif.database.table_connection", "buildingmotif.database.tables", "buildingmotif.database.utils", "buildingmotif.dataclasses", "buildingmotif.dataclasses.library", "buildingmotif.dataclasses.model", "buildingmotif.dataclasses.shape_collection", "buildingmotif.dataclasses.template", "buildingmotif.dataclasses.validation", "buildingmotif.ingresses", "buildingmotif.ingresses.bacnet", "buildingmotif.ingresses.base", "buildingmotif.ingresses.brick", "buildingmotif.ingresses.csvingress", "buildingmotif.ingresses.naming_convention", "buildingmotif.ingresses.template", "buildingmotif.ingresses.xlsx", "buildingmotif.label_parsing", "buildingmotif.label_parsing.combinators", "buildingmotif.label_parsing.parser", "buildingmotif.label_parsing.tokens", "buildingmotif.libraries", "buildingmotif.model_builder", "buildingmotif.namespaces", "buildingmotif.schemas", "buildingmotif.shape_builder", "buildingmotif.shape_builder.shape", "buildingmotif.template_compilation", "buildingmotif.template_matcher", "buildingmotif.utils", "Code Documentation", "Command Line Interface", "Developer Documentation", "Model Correction", "Model Creation", "Model Validation", "Template Writing"], "terms": {"enabl": [0, 18, 57], "technolog": 0, "semant": [0, 1, 50, 56, 57], "interoper": 0, "build": [0, 1, 3, 9, 23, 44, 50, 55, 56, 57], "through": [0, 4, 6, 55, 56, 58], "standard": [0, 49, 57], "metadata": [0, 1, 2, 3, 4, 5, 8, 23, 33, 53, 56, 57], "crucial": 0, "unlock": 0, "valu": [0, 2, 3, 4, 6, 8, 9, 16, 22, 24, 28, 30, 32, 38, 39, 40, 41, 42, 46, 49, 53, 55, 56, 58], "abund": 0, "divers": [0, 9], "network": [0, 32, 34, 53, 55], "data": [0, 2, 3, 7, 8, 9, 18, 33, 35, 36, 51, 56, 57], "avoid": [0, 29], "subsequ": [0, 9], "incompat": 0, "issu": [0, 8, 18, 22, 29, 57], "pave": 0, "wai": [0, 3, 5, 6, 24, 53, 55, 56], "advanc": 0, "like": [0, 2, 3, 7, 8, 9, 30, 55, 56, 58], "fault": 0, "detect": [0, 51], "diagnost": 0, "fdd": 0, "real": [0, 9, 55, 56], "time": [0, 9, 24], "energi": [0, 1], "optim": 0, "other": [0, 2, 3, 5, 6, 8, 9, 22, 24, 49, 50, 55, 56, 57, 58], "manag": [0, 3, 9, 18, 21, 55], "inform": [0, 3, 4, 5, 8, 9, 28, 30, 50, 53, 54, 55, 57], "system": [0, 1, 3, 9, 55, 56, 57, 58], "emi": 0, "improv": 0, "hvac": [0, 6, 57], "control": [0, 9, 22, 57], "grid": 0, "integr": 0, "effici": [0, 1], "geb": 0, "all": [0, 2, 3, 5, 6, 8, 9, 14, 15, 16, 18, 21, 22, 23, 24, 27, 28, 29, 33, 34, 37, 38, 40, 44, 50, 51, 53, 55, 56, 57, 58], "which": [0, 2, 5, 6, 7, 8, 9, 23, 24, 27, 28, 29, 37, 41, 48, 51, 53, 54, 55, 56, 57, 58], "ar": [0, 2, 3, 4, 5, 6, 8, 9, 18, 22, 23, 24, 27, 28, 29, 30, 37, 38, 44, 46, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58], "need": [0, 3, 8, 9, 22, 24, 26, 27, 28, 36, 54, 56, 57], "fulli": [0, 50], "de": 0, "carbon": 0, "util": [0, 5, 9, 53], "capabl": 0, "web": 0, "possibl": [0, 39, 42, 54, 56], "structur": [0, 2, 3, 9, 24, 28, 49, 51, 56, 57, 58], "express": [0, 3, 6, 9, 24, 32, 40], "machin": [0, 9], "readabl": [0, 3, 30], "same": [0, 2, 6, 8, 9, 24, 40, 50, 51, 53, 54, 55, 57, 58], "veri": [0, 9], "import": [0, 5, 6, 8, 9, 22, 26, 28, 51, 54, 55, 57, 58], "make": [0, 5, 8, 9, 19, 51, 53, 54, 55, 56, 57], "easier": [0, 8, 9, 54, 55, 56, 57], "implement": [0, 5, 9, 24], "field": [0, 2, 3, 9, 32, 33, 36, 38, 49], "practition": 0, "without": [0, 6, 19, 21, 24, 29, 51, 54, 56, 57], "knowledg": [0, 9], "comput": [0, 1, 2, 50], "scienc": 0, "ontolog": [0, 5, 6, 8, 26, 27, 28, 29, 50, 51, 55, 56, 58], "framework": [0, 3, 56], "bridg": 0, "gap": 0, "between": [0, 2, 6, 9, 22, 23, 30, 50], "theori": 0, "practic": [0, 56], "offer": 0, "toolset": 0, "creation": [0, 1, 9], "storag": 0, "visual": 0, "valid": [0, 4, 5, 8, 22, 23, 27, 29, 46, 51, 53, 56], "It": [0, 3, 6, 9, 24, 29, 55, 56, 57], "form": [0, 22, 51], "sdk": 0, "easi": [0, 9, 56], "us": [0, 3, 4, 5, 6, 7, 8, 9, 18, 22, 23, 24, 27, 28, 29, 36, 37, 39, 41, 49, 50, 51, 53, 55, 56, 58], "api": [0, 2, 54], "abstract": [0, 2, 30, 33], "underli": [0, 2, 18, 33, 35, 36, 56], "complex": [0, 3, 56], "rdf": [0, 2, 3, 4, 5, 6, 8, 9, 26, 28, 29, 33, 34, 37, 50, 51, 53, 55, 57, 58], "graph": [0, 4, 5, 6, 7, 8, 9, 15, 18, 21, 22, 26, 27, 28, 29, 30, 33, 34, 36, 37, 44, 45, 49, 50, 51, 53, 55, 57, 58], "databas": [0, 9, 12, 18, 26, 27, 28, 29, 53, 55, 56, 57], "shacl": [0, 5, 28, 30, 51, 57], "differ": [0, 2, 4, 9, 24, 30, 54, 55, 57, 58], "schema": [0, 3, 5, 6, 7, 8, 9, 55, 56, 57, 58], "also": [0, 2, 4, 6, 8, 9, 24, 44, 55, 56, 57, 58], "support": [0, 4, 9, 22, 26, 55, 56], "connector": 0, "exist": [0, 4, 6, 9, 22, 26, 28, 29, 55, 57, 58], "sourc": [0, 2, 3, 12, 14, 15, 16, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 54, 55, 56], "e": [0, 2, 4, 5, 8, 9, 27, 28, 54, 55, 56], "g": [0, 2, 4, 5, 8, 9, 50, 51, 54, 56], "autom": [0, 55, 56], "design": 0, "model": [0, 1, 3, 4, 7, 8, 22, 23, 29, 30, 34, 53, 58], "etc": [0, 2, 6, 9, 55, 56, 57, 58], "avail": [0, 51, 53, 55, 56, 57], "phase": 0, "life": 0, "cycl": 0, "The": [0, 2, 3, 4, 5, 6, 7, 8, 9, 22, 24, 29, 30, 32, 35, 38, 40, 44, 50, 51, 53, 54, 55, 56, 57, 58], "object": [0, 2, 3, 8, 9, 22, 24, 26, 27, 29, 30, 32, 48, 51, 55, 56, 57, 58], "1": [0, 2, 3, 5, 6, 7, 8, 9, 24, 28, 38, 40, 50, 53, 54, 55, 56, 57, 58], "lower": 0, "cost": 0, "reduc": 0, "instal": [0, 5, 9, 53, 55, 56, 57], "deliv": 0, "qualiti": 0, "servic": [0, 9], "owner": 0, "occup": [0, 58], "2": [0, 6, 8, 9, 50, 53, 55, 56, 57, 58], "simpler": 0, "more": [0, 3, 4, 9, 48, 49, 51, 54, 57, 58], "easili": [0, 2, 6, 57], "verifi": [0, 9, 22, 29], "procur": 0, "process": [0, 3, 9, 22, 30, 50, 51, 53, 54, 55, 56, 57], "product": [0, 54], "3": [0, 3, 5, 6, 7, 8, 9, 53, 54, 55, 56, 57, 58], "open": [0, 5, 9, 57], "new": [0, 1, 2, 6, 9, 15, 22, 24, 26, 27, 28, 29, 33, 40, 49, 51, 54, 55, 56, 57], "busi": 0, "opportun": 0, "provid": [0, 2, 3, 4, 5, 6, 9, 24, 27, 29, 50, 53, 56, 57, 58], "remov": [0, 9, 29, 51, 58], "barrier": 0, "parti": 0, "current": [0, 4, 5, 6, 8, 9, 53, 55, 56, 57], "plan": 0, "brick": [0, 3, 4, 5, 6, 7, 8, 53, 55, 56, 57, 58], "project": [0, 54], "haystack": 0, "upcom": 0, "ashra": [0, 6, 9, 53, 55, 57, 58], "223p": [0, 6, 53, 58], "both": [0, 5, 8, 24, 50, 57], "ui": 0, "level": [0, 4, 6, 9, 18, 28, 58], "expertis": 0, "user": [0, 9, 24, 44, 49, 54, 56], "maximum": 0, "adopt": 0, "diataxi": 0, "its": [0, 5, 6, 8, 22, 24, 29, 44, 55, 57, 58], "organ": [0, 50, 57], "follow": [0, 4, 5, 6, 7, 8, 9, 28, 50, 51, 54, 56, 57, 58], "section": [0, 9, 57, 58], "develop": 0, "command": [0, 9, 54, 58], "line": [0, 6, 7, 8, 9, 24, 55, 57], "interfac": [0, 9], "code": [0, 5, 8, 9, 55, 56, 57], "correct": [0, 54, 56, 57], "templat": [0, 7, 9, 22, 23, 26, 30, 44, 49, 50, 51, 53, 57], "write": [0, 5, 8, 9, 29, 33, 55, 56], "csv": [0, 29, 35], "from": [0, 2, 3, 4, 5, 6, 7, 9, 24, 26, 27, 28, 29, 30, 33, 34, 35, 36, 38, 42, 44, 46, 49, 51, 53, 54, 55, 56, 57, 58], "bacnet": [0, 34, 49, 55], "ingress": [0, 7, 9, 29, 53, 56], "bibiographi": 0, "http": [0, 1, 3, 5, 6, 7, 8, 9, 53, 54, 55, 56, 57, 58], "fr": [0, 9], "gabe": 1, "fierro": 1, "avijit": 1, "saha": 1, "tobia": 1, "shapinski": 1, "matthew": 1, "steen": 1, "hannah": 1, "esling": 1, "applic": [1, 2, 4, 6, 8, 9, 57, 58], "driven": 1, "suffici": [1, 8, 57], "In": [1, 3, 5, 6, 8, 9, 53, 54, 55, 57], "proceed": 1, "9th": 1, "acm": 1, "intern": [1, 9, 57], "confer": 1, "citi": [1, 9], "transport": 1, "buildsi": 1, "22": [1, 6, 8, 9, 57], "228": 1, "237": [1, 3], "york": 1, "ny": 1, "usa": 1, "2022": 1, "associ": [1, 4, 9, 32, 45, 49, 55, 57, 58], "machineri": 1, "url": [1, 26, 53, 56], "doi": 1, "org": [1, 3, 5, 6, 7, 8, 9, 55, 56, 57, 58], "10": [1, 2, 9, 24, 56], "1145": 1, "3563357": 1, "3564083": 1, "buildingmotif": [2, 3, 4, 5, 6, 7, 8, 54, 55, 56, 57, 58], "s": [2, 3, 6, 8, 9, 22, 24, 26, 27, 29, 33, 51, 55, 56, 57, 58], "mechan": [2, 9, 53], "extern": [2, 26, 55], "deliber": 2, "gener": [2, 3, 5, 6, 7, 9, 23, 24, 27, 29, 30, 33, 34, 35, 36, 37, 49, 50, 51, 53, 54, 55, 56, 58], "so": [2, 3, 7, 9, 51, 54, 55, 57], "thei": [2, 6, 9, 24, 26, 27, 28, 37, 49, 50, 53, 55, 58], "can": [2, 3, 5, 6, 7, 8, 9, 22, 24, 28, 29, 30, 48, 49, 51, 53, 54, 55, 56, 57, 58], "extend": [2, 9], "ingresshandl": [2, 33], "ha": [2, 3, 4, 5, 6, 9, 18, 21, 22, 27, 30, 40, 48, 55, 56, 57, 58], "two": [2, 6, 22, 24, 50, 51, 53, 58], "subclass": [2, 50], "recordingresshandl": [2, 33, 34, 36, 37], "produc": [2, 9, 24, 29, 30, 37, 50, 58], "graphingresshandl": [2, 9, 33, 36], "everi": [2, 24, 40], "concret": 2, "should": [2, 24, 27, 30, 37, 48, 51, 53, 54, 56, 57, 58], "inherit": 2, "one": [2, 3, 4, 6, 26, 28, 29, 42, 48, 50, 51, 55, 57, 58], "class": [2, 3, 4, 5, 6, 7, 8, 9, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 48, 50, 51, 53, 56, 57], "defin": [2, 4, 5, 9, 22, 29, 49, 56, 57, 58], "method": [2, 3, 4, 5, 9, 22, 24, 26, 27, 28, 51, 56, 57], "list": [2, 3, 6, 9, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 38, 39, 41, 48, 49, 50, 51, 53, 55, 57, 58], "A": [2, 3, 6, 23, 38, 39, 42, 44, 56, 57, 58], "simpl": [2, 8, 9, 55, 56, 57, 58], "python": [2, 3, 5, 9, 24, 49, 54, 55, 56, 57], "dataclass": [2, 5, 7, 8, 9, 22, 55, 56, 57, 58], "hint": [2, 9], "identifi": [2, 3, 8, 21, 22, 29, 39, 40, 42, 48, 51, 56, 58], "an": [2, 3, 4, 5, 6, 7, 8, 18, 22, 24, 26, 27, 28, 29, 30, 33, 35, 36, 37, 39, 42, 48, 50, 53, 55, 56, 57, 58], "categori": 2, "rtype": [2, 9, 32, 33, 38, 55, 57], "str": [2, 3, 9, 12, 16, 21, 22, 23, 26, 27, 28, 29, 30, 32, 33, 35, 37, 39, 41, 42, 44, 48, 49, 50, 51, 55, 57], "kei": [2, 3, 6, 9, 22, 24, 32, 38, 53, 56, 58], "pair": [2, 9, 38], "dict": [2, 16, 22, 23, 24, 27, 29, 30, 33, 39, 41, 49, 50, 51], "choic": [2, 3, 24, 40], "up": [2, 9, 24, 28, 54, 58], "each": [2, 4, 5, 6, 9, 22, 27, 29, 30, 32, 36, 37, 38, 49, 51, 53, 55], "instanc": [2, 5, 6, 8, 9, 18, 30, 33, 48, 50, 53, 55, 56, 57], "bacnetingresshandl": 2, "differenti": [2, 9], "devic": [2, 9, 32, 56], "contain": [2, 4, 6, 7, 8, 22, 24, 26, 27, 29, 32, 34, 38, 39, 42, 44, 49, 51, 53, 54, 56, 57, 58], "properti": [2, 4, 5, 6, 8, 18, 22, 26, 27, 28, 29, 30, 32, 33, 35, 36, 38, 41, 44, 48, 50, 51, 56, 58], "name": [2, 3, 4, 5, 6, 7, 8, 9, 16, 19, 22, 23, 24, 26, 27, 28, 29, 35, 36, 38, 44, 49, 51, 53, 55, 56, 57, 58], "unit": [2, 3, 6, 53, 54, 56, 58], "csvingresshandl": [2, 7], "denot": [2, 58], "filenam": [2, 26, 35, 38, 51, 53], "store": [2, 24, 38, 44, 56], "column": [2, 7, 8, 29, 38], "cell": [2, 7, 8, 9, 38, 55, 57], "row": [2, 8, 35, 38, 55, 57], "ns": [2, 5, 6, 8, 9, 29, 33, 34, 37, 44, 57], "rdflib": [2, 3, 7, 8, 9, 15, 18, 26, 27, 28, 29, 45, 49, 50, 51, 55, 56, 57, 58], "namespac": [2, 6, 7, 8, 9, 29, 33, 34, 37, 44, 51, 55, 56, 57, 58], "return": [2, 3, 9, 12, 14, 15, 16, 18, 21, 22, 24, 26, 27, 28, 29, 30, 32, 34, 36, 38, 39, 41, 44, 49, 50, 51, 55, 56, 57], "thi": [2, 3, 4, 5, 6, 8, 9, 18, 22, 24, 26, 27, 28, 29, 30, 33, 36, 44, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58], "infer": [2, 6, 34, 51, 53], "translat": [2, 8], "some": [2, 3, 9, 24, 29, 33, 39, 42, 55, 56, 57, 58], "either": [2, 28, 29, 32], "upstream": [2, 9, 34, 36, 37, 49], "ani": [2, 3, 4, 5, 6, 22, 24, 26, 27, 28, 29, 39, 42, 46, 56, 57, 58], "entiti": [2, 9, 29, 30, 33, 34, 37, 48, 55, 56, 57], "uri": [2, 4, 5, 8, 9, 12, 27, 28, 29, 30, 39, 42, 51, 53, 55, 56, 57], "creat": [2, 3, 5, 6, 7, 8, 9, 12, 15, 18, 21, 22, 26, 27, 28, 33, 51, 53, 54, 55, 57], "place": [2, 33, 34, 37, 51, 57, 58], "typic": [2, 56, 58], "end": [2, 24, 56], "pipelin": 2, "sever": [2, 6, 30, 53, 55, 56, 58], "full": [2, 5, 9, 51, 56, 58], "found": [2, 3, 22, 29, 41, 46, 50, 53, 55, 57], "here": [2, 3, 6, 9, 24, 26, 54, 55, 57], "take": [2, 3, 4, 9, 15, 28, 33, 48, 53, 55, 56, 57], "ip": [2, 9, 32, 53], "subnet": [2, 9, 53], "argument": [2, 3, 8, 22, 24, 28, 29, 49, 53, 54, 56], "0": [2, 3, 8, 9, 28, 53, 54, 55], "24": [2, 9, 53, 55], "set": [2, 3, 4, 5, 9, 24, 27, 29, 30, 38, 50, 51, 53, 54, 55, 57], "correspond": [2, 5, 6, 9, 24, 50, 53, 58], "repres": [2, 4, 9, 28, 30, 33, 38, 56, 57, 58], "els": [2, 9, 29, 55, 57], "base": [2, 3, 4, 6, 9, 19, 40, 48, 54, 55], "address": [2, 9, 29, 53, 57, 58], "device_id": 2, "own": [2, 3, 8, 55, 57], "mydata": 2, "given": [2, 4, 5, 6, 8, 16, 22, 24, 27, 28, 29, 30, 33, 34, 37, 38, 39, 40, 41, 42, 46, 50, 51, 53, 55, 57], "call": [2, 6, 7, 8, 9, 24, 29, 53, 55, 56, 57], "generate_csv": [2, 7, 29], "empti": [2, 7, 27], "header": [2, 7, 57], "csvingress": [2, 7], "made": [2, 24, 54, 58], "pass": [2, 4, 9, 29, 49, 53, 55, 57], "templateingress": [2, 7, 37], "xlsxingresshandl": 2, "path": [2, 4, 5, 6, 8, 9, 26, 28, 29, 30, 33, 35, 48, 51, 53], "sheet": [2, 38], "requir": [2, 4, 5, 6, 9, 18, 24, 29, 30, 50, 53, 54, 55, 56, 57, 58], "probabl": [2, 6, 39, 42, 55], "librari": [2, 5, 6, 7, 9, 22, 23, 29, 30, 44, 46, 49, 54, 55, 57, 58], "option": [2, 6, 9, 21, 22, 26, 27, 28, 29, 30, 32, 35, 37, 38, 39, 42, 44, 48, 50, 51, 53], "mapper": [2, 7, 37], "function": [2, 3, 4, 5, 6, 8, 9, 12, 14, 15, 16, 18, 29, 30, 37, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 53, 56, 57, 58], "map": [2, 6, 22, 23, 29, 50, 51], "paramet": [2, 5, 6, 12, 14, 15, 16, 18, 21, 22, 24, 26, 27, 28, 29, 30, 33, 34, 39, 41, 44, 45, 46, 48, 49, 50, 51, 55, 56, 57, 58], "If": [2, 3, 4, 5, 6, 8, 9, 18, 22, 24, 27, 29, 30, 37, 40, 41, 44, 48, 50, 51, 54, 55, 56, 58], "left": [2, 29], "none": [2, 3, 7, 18, 21, 22, 24, 26, 27, 28, 29, 30, 32, 35, 39, 41, 42, 44, 48, 50, 51, 55, 57], "There": [2, 9, 53, 58], "templateingresswithchoos": [2, 37], "act": [2, 58], "essenti": [2, 3, 9, 58], "addit": [2, 9, 27, 49, 50, 51, 54, 56, 58], "dynam": [2, 54], "choos": [2, 9], "see": [2, 4, 6, 9, 53, 54, 55, 56, 57], "guid": [2, 9], "purpos": [3, 9, 55, 56, 57], "explan": [3, 30], "describ": [3, 53, 58], "rule": [3, 28, 49, 56, 57], "how": [3, 4, 5, 8, 9, 28, 50, 55, 56, 57], "One": [3, 57], "common": [3, 6, 9, 45, 51, 57], "tag": 3, "input": [3, 4, 6, 30, 36, 50, 51, 53, 55, 56], "output": [3, 9, 33, 53, 57], "human": [3, 30], "descript": [3, 9, 22, 23, 27, 53, 54, 55, 56, 57, 58], "often": [3, 5], "extract": [3, 4, 9, 24], "help": [3, 24, 28, 53, 57], "construct": [3, 5, 30, 40, 42, 48], "convent": [3, 36], "them": [3, 5, 9, 33, 35, 38, 44, 51, 55, 57], "type": [3, 4, 8, 12, 14, 15, 16, 18, 21, 22, 24, 26, 27, 28, 29, 30, 32, 34, 35, 38, 39, 40, 41, 42, 44, 48, 49, 50, 51, 54, 56, 57], "token": [3, 9, 36, 39, 40, 41], "featur": [3, 51, 54, 55, 56, 57], "come": [3, 6], "soon": [3, 6, 56], "just": [3, 9, 51, 55, 56, 57], "part": [3, 5, 9, 22, 23, 24, 49, 50, 51, 54, 55, 56, 57], "larger": 3, "toolkit": 3, "concept": [3, 6], "smaller": 3, "togeth": [3, 58], "string": [3, 6, 8, 9, 24, 29, 33, 39, 40, 41, 42, 51, 53, 56], "tokenresult": [3, 39, 41, 42], "These": [3, 56], "short": [3, 58], "def": [3, 9, 24, 49, 55, 57], "parse_ahu_label": 3, "sequenc": [3, 27, 28, 40, 55, 57], "ahu": [3, 55, 56, 57], "constant": [3, 39, 40, 42], "air_handling_unit": 3, "delimit": [3, 39, 42], "regex": [3, 40], "r": 3, "d": [3, 9, 53], "match": [3, 30, 40, 48, 50, 57], "three": [3, 53], "specif": [3, 9, 30, 49, 57], "regular": [3, 40], "allow": [3, 8, 24, 44, 51, 56, 58], "you": [3, 5, 8, 9, 22, 26, 36, 53, 54, 55, 56, 57, 58], "concis": 3, "might": [3, 9, 29, 55, 57], "look": [3, 9, 55, 56, 57, 58], "term": [3, 9, 29], "uriref": [3, 8, 9, 26, 27, 28, 30, 39, 42, 48, 51, 55], "brickschema": [3, 5, 6, 7, 8, 9, 53, 55, 56, 57, 58], "length": [3, 39, 40, 42], "id": [3, 14, 15, 16, 22, 23, 26, 27, 28, 29, 55, 57], "ah": 3, "null": [3, 39, 42], "expect": [3, 9, 22, 30, 50, 51], "got": 3, "label_pars": 3, "modul": [3, 8, 9, 10, 11, 13, 17, 20, 24, 25, 26, 31, 39, 47, 49], "most": [3, 6, 8, 9, 24, 26, 50, 55, 57], "commonli": [3, 6], "first": [3, 4, 6, 41, 49, 50, 55, 56, 57, 58], "doe": [3, 9, 24, 26, 40, 54, 55, 56, 57], "consum": 3, "mani": [3, 22, 23, 28, 40, 57, 58], "zero": [3, 48], "occurr": 3, "mayb": [3, 40, 49], "until": [3, 40], "anoth": [3, 6, 9, 29, 54, 55, 56, 57, 58], "your": [3, 6, 9, 22, 56, 57], "_": [3, 9, 55], "za": [3, 58], "z0": 3, "9": [3, 5, 9, 55, 56, 57], "named_equip": 3, "equip_abbrevi": 3, "named_point": 3, "point_abbrevi": 3, "abov": [3, 7, 8, 9, 24, 54, 55, 57, 58], "air": [3, 56, 57, 58], "vav": [3, 4, 5, 6, 9, 55, 57, 58], "variabl": [3, 4, 8, 24, 53, 57, 58], "volum": [3, 57, 58], "save": [3, 8, 53, 55, 56, 57], "space": [3, 9], "automat": [3, 5, 6, 27, 53, 54, 57, 58], "expand": 3, "we": [3, 5, 6, 7, 8, 9, 18, 24, 26, 50, 54, 55, 56, 57, 58], "dictionari": [3, 6, 24, 27, 29, 30, 40, 49, 56], "my_abbrevi": 3, "fcu": 3, "fan_coil_unit": [3, 8], "variable_air_volume_box": 3, "crac": [3, 56], "computer_room_air_condition": 3, "hx": 3, "heat_exchang": 3, "pmp": 3, "pump": 3, "rvav": [3, 4], "variable_air_volume_box_with_reheat": [3, 58], "hp": 3, "heat_pump": 3, "rtu": 3, "rooftop_unit": 3, "dmp": [3, 6], "damper": [3, 6, 56, 57, 58], "st": [3, 55], "statu": 3, "vlv": 3, "valv": 3, "chvlv": 3, "chilled_water_valv": 3, "hwvlv": 3, "hot_water_valv": 3, "vfd": 3, "variable_frequency_dr": 3, "ct": 3, "cooling_tow": 3, "mau": 3, "makeup_air_unit": 3, "room": [3, 7], "my_abbreviations_pars": 3, "Then": [3, 9, 56], "our": [3, 7, 24, 55, 57], "note": [3, 9, 24, 49, 54], "To": [3, 4, 8, 9, 24, 53, 54, 56, 57, 58], "earlier": 3, "work": [3, 4, 6, 9, 22, 24, 55, 56, 57], "rewrit": [3, 51], "parse_label": [3, 9], "123": [3, 9], "detail": [3, 6, 9, 18, 57], "messag": [3, 48, 53, 57], "when": [3, 5, 6, 19, 24, 26, 29, 30, 37, 51, 54, 55, 56, 57, 58], "fail": [3, 4, 9, 24, 30, 40, 48, 54, 55, 57], "debug": [3, 9, 18, 54], "understand": [3, 56], "why": [3, 57], "particular": [3, 9, 55], "did": [3, 9, 24], "format": [3, 9, 15, 26, 54, 55, 57, 58], "includ": [3, 6, 8, 24, 27, 29, 30, 48, 51, 53, 54, 55, 56, 57], "about": [3, 9, 30, 56, 57], "what": [3, 5, 8, 9, 24, 30, 48, 53, 55, 56, 57, 58], "wa": [3, 5, 55, 56, 57], "mean": [3, 24, 50, 51], "consid": [3, 5, 9, 22, 29], "buildingname_02": 3, "fcu503_chwvlvpo": 3, "fcu510_effocc": 3, "fcu507_unocchtgspt": 3, "fcu415_unocchtgspt": 3, "buildingname_01": 3, "fcu203_occclgspt": 3, "fcu529_unocchtgspt": 3, "fcu243_effocc": 3, "fcu362_chwvlvpo": 3, "common_equip_abbreviations_brick": 3, "chwvlvpo": 3, "position_sensor": 3, "hwvlvpo": 3, "roomtmp": 3, "air_temperature_sensor": [3, 6, 8], "room_rh": 3, "relative_humidity_sensor": 3, "unocchtgspt": 3, "unoccupied_air_temperature_heating_setpoint": 3, "occhtgspt": 3, "occupied_air_temperature_heating_setpoint": 3, "unoccclgspt": 3, "unoccupied_air_temperature_cooling_setpoint": 3, "occclgspt": 3, "occupied_air_temperature_cooling_setpoint": 3, "satmp": 3, "supply_air_temperature_sensor": [3, 5, 9, 58], "occcmd": 3, "occupancy_command": 3, "effocc": 3, "occupancy_statu": 3, "custom_pars": 3, "target": [3, 4, 8, 28, 41, 48, 55], "underscor": [3, 9], "number": [3, 30, 48, 51, 55, 57], "9a": 3, "z": 3, "equip": [3, 9, 55, 56, 57, 58], "ident": 3, "ensur": [4, 8, 22, 42, 49, 54, 57], "onli": [4, 5, 6, 28, 30, 54, 58], "yield": [4, 29, 50], "whether": [4, 29], "node": [4, 5, 6, 16, 27, 28, 29, 30, 48, 50, 51, 54, 57], "aid": 4, "execut": [4, 49, 57], "depend": [4, 5, 7, 9, 22, 23, 24, 27, 28, 29, 44, 49, 54, 55, 57], "edg": [4, 6], "were": [4, 5, 29, 56], "shape_to_queri": [4, 8, 28], "page": 4, "give": [4, 7, 16, 38, 49, 57], "overview": 4, "main": [4, 9, 53], "satisfi": [4, 5, 9, 28, 55, 56, 57], "constraint": [4, 5, 30, 48, 55, 57], "At": 4, "high": [4, 55, 57], "transform": [4, 56], "assembl": 4, "complet": [4, 9, 50, 54], "definit": [4, 6, 9, 28, 49, 56, 58], "result": [4, 5, 7, 8, 9, 24, 27, 29, 30, 39, 40, 41, 42, 44, 49, 51, 55, 56, 57], "least": [4, 8], "add": [4, 6, 9, 21, 27, 28, 29, 40, 44, 48, 49, 50, 54, 55, 56, 57, 58], "sh": [4, 5, 6, 8, 9, 28, 30, 48, 51, 57], "pull": [4, 53, 55], "annot": [4, 56], "otherwis": [4, 6, 18, 24, 28, 29, 44, 51, 56], "assign": [4, 24, 55], "union": [4, 5, 26, 28, 29, 30, 35, 42, 44, 48], "within": [4, 5, 9, 26, 29, 55, 57], "independ": 4, "branch": [4, 53], "few": [4, 55, 56, 58], "directli": [4, 6, 8, 26, 53, 56, 57], "nodeshap": [4, 5, 6, 8, 48, 51, 57], "convert": [4, 24, 51], "pattern": [4, 8, 58], "targetclass": [4, 5, 6, 8, 28, 57], "c": [4, 9, 24], "subclassof": [4, 8, 28], "targetsubjectsof": 4, "p": [4, 6, 7, 9, 53, 56, 58], "ignor": [4, 29, 54], "targetobjectsof": 4, "targetnod": [4, 57], "n": [4, 28, 40], "bind": [4, 6, 8, 16, 22, 29, 51, 53, 55, 56, 57, 58], "AS": 4, "addition": 4, "except": [4, 9, 18, 19, 22, 26, 27, 29, 46, 51, 55, 56, 57], "than": [4, 6, 30, 49, 51], "combin": [4, 29, 30, 39, 41, 51], "interpret": [4, 9, 30, 57], "compon": [4, 5, 6, 22, 30, 56, 57, 58], "stage": [4, 54], "hasvalu": [4, 6, 8, 28], "interact": [5, 9, 22, 53, 54, 56], "interest": [5, 57], "document": [5, 6, 9, 46, 53, 58], "explain": 5, "recal": [5, 8, 53, 58], "condit": 5, "over": [5, 9, 48, 50, 54], "evalu": [5, 16, 29, 48, 55, 57, 58], "against": [5, 27, 46, 51, 54, 57], "load": [5, 6, 7, 8, 9, 26, 27, 28, 29, 33, 55, 57, 58], "attempt": [5, 37, 54], "find": [5, 6, 50, 51, 54], "happen": [5, 6], "directori": [5, 6, 7, 9, 26, 51, 54, 55, 56, 57, 58], "git": [5, 9], "repositori": [5, 9, 54, 55, 56, 57], "search": [5, 6, 29, 50, 51, 55, 57], "file": [5, 6, 7, 8, 9, 18, 24, 26, 29, 33, 35, 38, 46, 49, 51, 53, 54, 55, 56, 57, 58], "recurs": [5, 22, 28, 29, 51], "collect": [5, 22, 23, 26, 27, 55, 56], "graphc": 5, "owl": [5, 6, 8, 26, 28, 53, 56, 57], "assumpt": 5, "ifi": 5, "could": [5, 55, 57, 58], "instanti": [5, 18, 37], "decompil": 5, "get_template_parts_from_shap": [5, 51], "recogn": 5, "qualifiedvalueshap": [5, 6, 8], "datatyp": [5, 6, 24], "mincount": [5, 6, 51], "qualifiedmincount": [5, 6, 8, 51], "maxcount": 5, "qualifiedmaxcount": 5, "i": [5, 8, 9, 27, 28, 54, 55], "invent": [5, 6, 29, 55], "unless": [5, 29], "attribut": [5, 9, 24, 49, 51, 56], "been": [5, 9, 18, 27, 29, 50, 55, 56, 57], "myshap": 5, "ttl": [5, 6, 8, 9, 15, 53, 55, 56, 57], "prefix": [5, 6, 7, 8, 45, 56, 57, 58], "www": [5, 6, 8, 56, 57], "w3": [5, 6, 8, 56, 57], "2002": [5, 6, 8, 56, 57], "07": [5, 6, 8, 9, 56, 57], "urn": [5, 6, 7, 8, 9, 34, 51, 55, 56, 57, 58], "terminal_unit": 5, "haspart": [5, 6, 8, 49, 56, 57, 58], "heat": [5, 57], "coil": [5, 56, 57, 58], "hc": 5, "haspoint": [5, 6, 7, 8, 9, 49, 56, 58], "supply_air_flow_sensor": [5, 58], "sat": [5, 9, 55], "heating_coil": [5, 56, 57, 58], "position_command": [5, 58], "damper_po": 5, "w": [5, 9, 51, 57], "f": [5, 8, 9, 55, 56, 57], "would": [5, 6, 24, 28, 51, 55, 56, 58], "memori": [5, 7, 8, 9, 51, 55, 56, 57], "bm": [5, 7, 8, 9, 22, 33, 34, 55, 56, 57], "sqlite": [5, 7, 8, 9, 54, 55, 56, 57], "ontology_graph": [5, 6, 9, 26, 55, 56, 57], "github": [5, 9, 53, 54], "com": [5, 9, 53], "releas": [5, 9, 53], "download": [5, 9, 53, 54, 55, 56, 57], "nightli": [5, 9, 53], "lib": [5, 7, 9, 30, 55, 56, 57, 58], "opt": [5, 9, 55, 56, 57], "hostedtoolcach": [5, 9, 55, 56, 57], "11": [5, 9, 55, 56, 57], "x64": [5, 9, 55, 56, 57], "python3": [5, 9, 54, 55, 56, 57], "site": [5, 9, 55, 56, 57], "packag": [5, 9, 54, 55, 56, 57], "pyshacl": [5, 9, 51, 55, 56, 57], "extra": [5, 9, 55, 56], "__init__": [5, 9, 24, 55, 56, 57], "py": [5, 9, 22, 29, 53, 54, 55, 56, 57], "46": [5, 9, 55, 56, 57], "warn": [5, 9, 24, 29, 30, 55, 56, 57], "js": [5, 9, 54, 55, 56, 57], "becaus": [5, 6, 9, 22, 24, 50, 51, 55, 56, 57], "pyduktape2": [5, 9, 55, 56, 57], "extra_nam": [5, 9, 55, 56, 57], "req": [5, 9, 55, 56, 57], "2024": [5, 9], "09": [5, 9], "16": [5, 9], "17": [5, 9], "00": [5, 9], "52": [5, 9], "897": 5, "root": [5, 58], "depende": [5, 22, 55, 57], "n9f97a34d004a4f8e9fc96a0754d4e573b7640": 5, "902": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7638": 5, "906": [5, 9], "n9f97a34d004a4f8e9fc96a0754d4e573b7644": 5, "910": [5, 9], "n9f97a34d004a4f8e9fc96a0754d4e573b7642": 5, "914": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7636": 5, "918": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7585": 5, "922": [5, 9], "n9f97a34d004a4f8e9fc96a0754d4e573b7583": 5, "926": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7587": 5, "930": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7581": 5, "935": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7589": 5, "939": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7591": 5, "943": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7621": 5, "947": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7627": 5, "951": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7629": 5, "956": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7619": 5, "960": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7625": 5, "964": [5, 9], "n9f97a34d004a4f8e9fc96a0754d4e573b7623": 5, "968": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7703": 5, "973": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7705": 5, "977": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7699": 5, "981": [5, 9], "n9f97a34d004a4f8e9fc96a0754d4e573b7701": 5, "985": 5, "n9f97a34d004a4f8e9fc96a0754d4e573b7697": 5, "onc": [5, 29], "have": [5, 6, 7, 9, 22, 24, 29, 49, 50, 51, 55, 56, 57, 58], "turn": [5, 9, 34, 36, 50, 51, 55, 56, 57], "explicitli": [5, 6, 55], "read": [5, 9, 35, 37, 38, 54], "out": [5, 7, 9, 29, 50, 55, 56], "get_template_by_nam": [5, 7, 26, 55, 56, 57, 58], "dump": [5, 33], "bodi": [5, 6, 7, 15, 26, 29, 49, 55, 56], "print": [5, 7, 8, 9, 29, 54, 55, 56, 57], "serial": [5, 7, 9, 24, 26, 55, 56, 57, 58], "___param___": [5, 6, 7, 51, 56, 58], "hc0": 5, "p13": 5, "sat0": 5, "As": [5, 57], "want": [5, 50, 56, 57, 58], "inlin": [5, 29, 37, 44, 51], "get": [5, 7, 9, 14, 15, 16, 21, 22, 24, 26, 27, 28, 29, 30, 49, 55, 56, 57], "sens": 5, "ad": [5, 9, 21, 24, 27, 49, 55], "inline_depend": [5, 7, 29, 55], "damper_pos0": 5, "observ": 5, "paramt": [5, 29, 58], "top": [6, 57, 58], "must": [6, 40, 50, 54, 57], "whose": [6, 24, 29], "below": [6, 8, 9, 24, 53, 54, 55, 56, 57], "mai": [6, 9, 18, 24, 54, 56, 57], "bound": [6, 29, 44, 58], "replac": [6, 26, 51, 56], "exactli": [6, 48, 55, 57], "those": [6, 22, 33, 55, 56, 57, 58], "appear": [6, 22, 55], "element": [6, 24], "refer": [6, 8, 22, 24, 29, 48, 49, 56], "For": [6, 9, 24, 51, 55, 56, 57, 58], "exampl": [6, 9, 24, 51, 53, 54, 55, 56, 58], "sensor": [6, 58], "equival": [6, 8, 24, 55, 57], "simpli": [6, 56], "cool": [6, 56, 57], "ztemp": 6, "occ": [6, 58], "co2": [6, 7, 58], "dat": 6, "feed": [6, 8, 49, 58], "zone": [6, 9, 55, 56, 57, 58], "arg": [6, 7, 9, 18, 22, 23, 24, 29, 39, 40, 41, 49, 58], "hvac_zon": [6, 58], "zone_air_temperature_sensor": [6, 9, 56, 58], "occupancy_sensor": [6, 58], "co2_level_sensor": [6, 58], "discharge_air_temperature_sensor": 6, "certain": [6, 8, 48, 57], "via": [6, 56], "tempalt": 6, "vav_shap": 6, "sensor_shap": 6, "qudt": 6, "vocab": 6, "shape1": 6, "temperature_sensor": [6, 7], "hasunit": 6, "deg_c": 6, "insid": [6, 24, 26, 27, 57, 58], "permit": [6, 30], "greater": 6, "ll": [6, 9, 55, 56, 57], "px": 6, "where": [6, 8, 9, 22, 24, 41, 53, 56], "x": 6, "increment": [6, 40], "integ": [6, 51], "iri": 6, "done": [6, 9, 54, 55, 57], "implicitli": 6, "rememb": 6, "befor": [6, 8, 18, 22, 54, 55, 56], "recommend": [6, 26, 29, 54, 55], "depndent": 6, "necessari": [6, 22, 30, 55, 56], "affect": 6, "second": [6, 58], "case": [6, 26, 55], "air_flow_sensor": 6, "p1": 6, "temp_sensor": 6, "1999": [6, 8], "02": [6, 8, 9], "syntax": [6, 8, 56, 58], "2000": [6, 8], "01": [6, 8, 9], "assum": [7, 9, 24, 55, 56, 57], "tutori": [7, 9, 55, 56, 57, 58], "my": [7, 55, 58], "thermostat": 7, "hasloc": 7, "tstat": 7, "point": [7, 49, 53, 55, 56, 57, 58], "temp": [7, 56, 58], "sp": 7, "temperature_setpoint": 7, "co2_sensor": 7, "tstat_templ": 7, "approiat": 7, "fill": [7, 29, 44, 50, 55], "tstat2": 7, "room345": 7, "345": [7, 55, 57], "tstat3": 7, "room567": 7, "cow": 7, "567": 7, "handler": [7, 9, 18, 33, 36], "built": [7, 54], "record": [7, 9, 32, 33, 35, 36, 37, 38], "bldg": [7, 8, 9, 55, 56, 57], "my_sit": 7, "final": [7, 56], "suit": 8, "retriev": [8, 46, 57], "configur": [8, 9, 24, 54, 58], "oper": [8, 9, 55, 57], "figur": 8, "illustr": 8, "well": [8, 22, 56], "retreiv": 8, "deriv": 8, "propertyshap": [8, 48], "Not": 8, "pleas": [8, 9], "shapecollect": [8, 23, 26, 27, 28, 30], "sc": 8, "pars": [8, 9, 36, 39, 41, 55, 56, 57], "bmotif": [8, 57], "nrel": [8, 53, 55, 56, 57], "gov": [8, 56, 57], "simpleapp": 8, "app1": 8, "occupied_cooling_temperature_setpoint": 8, "coolsp": 8, "occupied_heating_temperature_setpoint": 8, "heatsp": 8, "roomtemp": 8, "c97c0001": 8, "51e9": 8, "406c": 8, "93da": 8, "edecb36c30ef": 8, "ask": [8, 55, 56, 57], "shape_nam": [8, 51], "get_shapes_about_class": [8, 28], "shape_queri": 8, "select": [8, 9, 24, 27, 28, 55, 57], "app1_shap": 8, "app_queri": 8, "panda": 8, "datafram": 8, "pd": 8, "building1": 8, "content": [8, 23, 27, 33, 51, 53, 56, 58], "query_generation_exampl": 8, "re": [8, 55, 57], "df": 8, "iloc": 8, "modulenotfounderror": 8, "traceback": [8, 9, 24, 55, 57], "recent": [8, 9, 24, 55, 57], "last": [8, 9, 24, 55, 57], "5": [8, 9], "6": [8, 9], "No": [8, 55, 57], "alreadi": [9, 55, 56, 57], "local": [9, 53, 55, 56, 57], "environ": [9, 54, 55, 56, 57], "access": [9, 19, 44, 49, 53, 56], "demonstr": [9, 55], "accomplish": [9, 56], "basic": [9, 56, 57], "sure": [9, 22, 53, 54, 56], "awar": 9, "reach": [9, 54], "docker": 9, "compos": [9, 54, 58], "run": [9, 22, 27, 53, 57], "virtual": [9, 54], "scan": 9, "sub": 9, "try": [9, 55, 56, 57, 58], "simul": 9, "digit": 9, "twin": 9, "rest": [9, 40], "do": [9, 55], "connect": [9, 18, 21, 56, 57], "subprocess": 9, "shlex": 9, "virtual_bacnet": 9, "random": 9, "sy": 9, "bacpyp": 9, "app": 9, "bipsimpleappl": 9, "consolelog": 9, "configargumentpars": 9, "core": [9, 56], "modulelogg": 9, "bacpypes_debug": 9, "localdeviceobject": 9, "analoginputobject": 9, "devicecommunicationcontrolservic": 9, "readwritepropertymultipleservic": 9, "_debug": 9, "_log": 9, "global": [9, 29], "virtualbacnetapp": 9, "virtualdevic": 9, "self": [9, 24, 48, 55, 57], "host": [9, 53], "parser": [9, 36, 39, 40], "__doc__": 9, "parse_arg": 9, "ini": 9, "supplytempsensor": 9, "objectnam": 9, "objectidentifi": 9, "analoginput": 9, "presentvalu": 9, "randint": 9, "100": 9, "heatingsetpoint": 9, "hsp": 9, "coolingsetpoint": 9, "csp": 9, "zonetempsensor": 9, "add_object": 9, "__name__": 9, "__main__": [9, 24], "argv": 9, "len": 9, "dockerfil": 9, "ubuntu": 9, "latest": 9, "workdir": 9, "apt": 9, "updat": [9, 15, 22, 27, 57], "y": 9, "pip": [9, 54], "rm": 9, "rf": 9, "var": 9, "pip3": 9, "copi": [9, 26, 27, 29, 51, 53, 57], "virtualbacnet": 9, "172": [9, 53], "599": 9, "maxapdulengthaccept": 9, "1024": 9, "segmentationsupport": 9, "segmentedboth": 9, "vendoridentifi": 9, "15": 9, "yml": [9, 26, 46, 53, 54, 56, 58], "version": [9, 24, 53, 57], "4": [9, 24, 54, 56, 57, 58], "ipv4_address": 9, "ipam": 9, "driver": 9, "default": [9, 21, 24, 26, 27, 28, 29, 41, 50, 51, 53, 57], "config": [9, 53, 54], "gatewai": 9, "docker_compose_start": 9, "split": 9, "16t17": 9, "58z": 9, "msg": 9, "home": 9, "runner": 9, "doc": [9, 46, 54], "obsolet": 9, "transfer": 9, "276b": 9, "0s": 9, "auth": 9, "registri": 9, "io": [9, 29, 56], "3s": 9, "dockerignor": 9, "context": [9, 21, 28, 44, 48], "2b": 9, "30kb": 9, "sha256": 9, "8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab63e": 9, "resolv": [9, 26, 28, 30, 55], "edbfe74c41f8a3501ce542e137cf28ea04dd03e6df8c9d66519b6ad761c2598a": 9, "31e907dcc94a592a57796786399eb004dcbba714389fa615f5efa05a91316356": 9, "24mb": 9, "29": 9, "71mb": 9, "1s": 9, "34kb": 9, "d35dfc2fe3ef66bcc085ca00d3152b482e6cafb23cdda1864154caf3b19094ba": 9, "424b": 9, "27": 9, "26mb": 9, "4s": 9, "8s": 9, "7": 9, "8": [9, 54, 57], "183": 9, "stabl": 9, "cli": 9, "caution": 9, "script": 9, "227": 9, "archiv": 9, "nobl": 9, "inreleas": 9, "256": 9, "kb": 9, "292": 9, "126": 9, "308": 9, "backport": 9, "357": 9, "amd64": 9, "1808": 9, "417": 9, "restrict": 9, "117": 9, "419": 9, "univers": [9, 48], "19": [9, 55], "mb": 9, "431": 9, "secur": 9, "512": 9, "multivers": 9, "331": 9, "514": 9, "515": 9, "491": 9, "517": 9, "641": 9, "520": 9, "12": 9, "402": 9, "525": 9, "13": 9, "814": 9, "14": [9, 24], "360": 9, "045": 9, "444": 9, "102": 9, "169": 9, "226": 9, "fetch": [9, 56], "25": 9, "770": 9, "tree": [9, 58], "877": 9, "state": [9, 24, 57, 58], "890": 9, "upgrad": [9, 54], "894": 9, "896": 9, "539": 9, "682": 9, "addus": 9, "binutil": 9, "x86": 9, "64": 9, "linux": 9, "gnu": 9, "bzip2": 9, "ca": 9, "certif": 9, "cpp": 9, "dirmngr": 9, "dpkg": 9, "dev": [9, 54], "fakeroot": 9, "fontconfig": 9, "font": 9, "dejavu": 9, "mono": 9, "gcc": 9, "gnupg": 9, "l10n": 9, "gpg": 9, "agent": 9, "wk": 9, "client": 9, "gpgconf": 9, "gpgsm": 9, "javascript": 9, "keyboxd": 9, "libalgorithm": 9, "diff": [9, 30, 55], "perl": 9, "xs": 9, "merg": 9, "libaom3": 9, "libasan8": 9, "libatomic1": 9, "libbinutil": 9, "libbrotli1": 9, "libbsd0": 9, "libbz2": 9, "683": 9, "libc": 9, "bin": [9, 54], "devtool": 9, "libc6": 9, "libcc1": 9, "libcrypt": 9, "libctf": 9, "nobfd0": 9, "libctf0": 9, "libde265": 9, "libdeflate0": 9, "libdpkg": 9, "libexpat1": 9, "libfakeroot": 9, "libfil": 9, "fcntllock": 9, "libfontconfig1": 9, "libfreetype6": 9, "libgcc": 9, "libgd3": 9, "libgdbm": 9, "compat4t64": 9, "libgdbm6t64": 9, "libgomp1": 9, "libgprofng0": 9, "libheif": 9, "plugin": 9, "aomdec": 9, "aomenc": 9, "libheif1": 9, "libhwasan0": 9, "libisl23": 9, "libitm1": 9, "libjansson4": 9, "libjbig0": 9, "libjpeg": 9, "turbo8": 9, "libjpeg8": 9, "libj": 9, "jqueri": 9, "sphinxdoc": 9, "libksba8": 9, "libldap": 9, "libldap2": 9, "liblerc4": 9, "liblocal": 9, "gettext": 9, "liblsan0": 9, "liblzma5": 9, "libmpc3": 9, "libmpfr6": 9, "libperl5": 9, "38t64": 9, "libpng16": 9, "16t64": 9, "libpython3": 9, "stdlib": 9, "minim": 9, "12t64": 9, "libquadmath0": 9, "libreadline8t64": 9, "libsasl2": 9, "db": [9, 29, 53, 54], "libsframe1": 9, "libsharpyuv0": 9, "libsqlite3": 9, "libssl3t64": 9, "libstdc": 9, "libtiff6": 9, "libtsan2": 9, "libubsan1": 9, "libwebp7": 9, "libx11": 9, "libxau6": 9, "libxcb1": 9, "libxdmcp6": 9, "libxpm4": 9, "lto": 9, "disabl": [9, 24], "manpag": 9, "media": 9, "netbas": 9, "openssl": 9, "patch": 9, "38": 9, "pinentri": 9, "curs": 9, "pkg": 9, "resourc": [9, 56, 57], "setuptool": 9, "wheel": 9, "readlin": 9, "rpcsvc": 9, "proto": 9, "tzdata": 9, "xz": 9, "zlib1g": 9, "684": 9, "suggest": 9, "cron": 9, "quota": 9, "ecryptf": 9, "gprofng": 9, "gui": 9, "dbu": 9, "session": [9, 18, 55, 56, 57], "libpam": 9, "systemd": 9, "gnome3": 9, "tor": 9, "debsig": 9, "debian": 9, "keyr": 9, "multilib": 9, "autoconf": 9, "automak": 9, "libtool": 9, "flex": 9, "bison": 9, "gdb": 9, "parcimoni": 9, "xloadimag": 9, "server": 9, "scdaemon": 9, "apache2": 9, "lighttpd": 9, "httpd": 9, "glibc": 9, "libnss": 9, "ni": 9, "nisplu": 9, "bzr": 9, "libgd": 9, "tool": [9, 26, 53], "gdbm": 9, "x265": 9, "ffmpegdec": 9, "jpegdec": 9, "jpegenc": 9, "j2kdec": 9, "j2kenc": 9, "rav1": 9, "svtenc": 9, "gssapi": 9, "mit": 9, "heimdal": 9, "ldap": 9, "otp": 9, "sql": [9, 24], "man": 9, "browser": 9, "ed": 9, "diffutil": 9, "libterm": 9, "libtap": 9, "har": 9, "tk": 9, "venv": [9, 54], "binfmt": 9, "836": 9, "837": 9, "838": 9, "839": 9, "967": 9, "143": 9, "newli": 9, "122": 9, "after": [9, 29, 40, 54, 56], "437": 9, "disk": [9, 56], "6ubuntu6": 9, "1283": 9, "078": 9, "39": 9, "0ubuntu8": 9, "3265": 9, "148": 9, "722": 9, "155": 9, "6ubuntu5": 9, "156": 9, "0ubuntu3": 9, "1940": 9, "168": 9, "1ubuntu0": 9, "834": 9, "174": 9, "2ubuntu0": 9, "87": [9, 55, 57], "175": 9, "dfsg": 9, "1ubuntu2": 9, "62": 9, "176": 9, "2343": 9, "192": [9, 55, 57], "0ubuntu2": 9, "193": [9, 55, 57], "2024a": 9, "3ubuntu1": 9, "273": 9, "195": [9, 55, 57], "1build0": 9, "34": 9, "196": [9, 55, 57], "really5": 9, "127": 9, "197": 9, "4build1": 9, "56": 9, "198": 9, "153": 9, "199": 9, "18": [9, 55], "45": 9, "701": 9, "209": 9, "2069": 9, "223": 9, "20": [9, 24, 55], "651": 9, "229": 9, "21": [9, 57], "23": [9, 55, 57], "230": 9, "2build2": 9, "3110": 9, "250": 9, "1build1": 9, "251": 9, "6710": 9, "b": [9, 24, 53, 54], "26": 9, "4873": 9, "284": 9, "231": 9, "286": 9, "28": [9, 24], "137ubuntu1": 9, "101": 9, "1003": 9, "293": 9, "30": 9, "20240203": 9, "159": 9, "294": 9, "31": 9, "41": 9, "295": 9, "32": [9, 53], "68": 9, "2ubuntu1": 9, "296": 9, "33": 9, "297": 9, "43": 9, "5build1": 9, "187": 9, "298": 9, "35": 9, "1build6": 9, "7160": 9, "299": 9, "36": [9, 55, 57, 58], "0ubuntu6": 9, "314": [9, 55, 57], "37": 9, "47": 9, "315": [9, 55, 57], "115": 9, "316": [9, 55, 57], "650": 9, "322": 9, "40": 9, "1384": 9, "267": 9, "332": 9, "42": 9, "4ubuntu2": 9, "239": 9, "334": 9, "335": 9, "44": 9, "572": [9, 55, 57], "338": 9, "97": 9, "339": 9, "94": 9, "340": 9, "851": 9, "347": [9, 55, 57], "48": 9, "2469": 9, "363": 9, "49": 9, "364": 9, "50": 9, "60": 9, "51": 9, "1698": 9, "376": 9, "112": 9, "377": 9, "53": 9, "0ubuntu7": 9, "67": 9, "378": 9, "54": 9, "2164": 9, "393": 9, "55": 9, "23ubuntu4": 9, "394": 9, "3build1": 9, "680": 9, "399": [9, 55, 57], "57": 9, "355": 9, "58": 9, "59": 9, "479": 9, "1032": 9, "480": 9, "61": 9, "7ubuntu1": 9, "5326": 9, "481": 9, "63": 9, "20240412": 9, "0ubuntu1": 9, "482": 9, "147": 9, "483": 9, "65": 9, "484": 9, "66": 9, "3024": 9, "505": 9, "1313": 9, "69": 9, "2736": 9, "531": 9, "70": 9, "1175": 9, "540": 9, "71": 9, "1632": 9, "552": 9, "72": 9, "554": 9, "73": 9, "2688": 9, "573": 9, "74": 9, "723": 9, "75": 9, "727": 9, "76": 9, "1212": 9, "77": 9, "5018": 9, "78": 9, "2399": 9, "745": 9, "79": [9, 55, 57], "830": 9, "80": 9, "831": 9, "81": 9, "82": 9, "1100": 9, "832": 9, "83": 9, "1build2": 9, "180": 9, "833": 9, "84": [9, 55, 57], "269": 9, "835": 9, "85": [9, 55, 57], "86": [9, 55, 57], "7build3": 9, "104": 9, "88": 9, "1074": 9, "846": 9, "89": 9, "10ubuntu1": 9, "4928": 9, "859": 9, "90": 9, "2ubuntu17": 9, "103": 9, "860": 9, "91": 9, "862": 9, "92": 9, "dfsg1": 9, "5ubuntu3": 9, "93": 9, "863": 9, "exp1ubuntu8": 9, "865": 9, "95": 9, "323": 9, "868": 9, "96": 9, "869": 9, "98": 9, "502": 9, "872": 9, "99": 9, "885": 9, "886": 9, "108": 9, "915": 9, "565": [9, 55, 57], "995": 9, "3ubuntu5": 9, "996": 9, "999": 9, "105": 9, "232": 9, "003": 9, "106": 9, "007": 9, "107": 9, "359": 9, "013": 9, "014": 9, "109": 9, "015": 9, "110": 9, "nmu1": 9, "5936": 9, "111": 9, "201": 9, "016": 9, "04": 9, "8build3": 9, "019": 9, "113": 9, "08": 9, "114": 9, "1941": 9, "032": 9, "035": 9, "116": 9, "1build3": 9, "038": 9, "139": 9, "039": 9, "118": 9, "4build3": 9, "119": 9, "1ubuntu4": 9, "120": 9, "166": 9, "041": 9, "121": 9, "8158": 9, "276": 9, "043": 9, "2ubuntu2": 9, "150": 9, "053": 9, "124": 9, "8c": 9, "2ubuntu11": 9, "2148": 9, "054": 9, "125": 9, "055": 9, "ds": 9, "179": 9, "056": 9, "128": 9, "058": 9, "129": 9, "git230720": 9, "065": 9, "130": 9, "066": 9, "131": 9, "9ubuntu5": 9, "067": 9, "132": 9, "068": 9, "133": [9, 55, 56, 57], "077": 9, "134": 9, "4ubuntu5": 9, "135": 9, "136": 9, "328": 9, "080": 9, "137": 9, "081": 9, "138": 9, "149": 9, "083": 9, "089": 9, "140": 9, "2339": 9, "141": 9, "142": 9, "5672": 9, "144": 9, "145": 9, "2013": 9, "146": 9, "498": 9, "158": 9, "396": [9, 55, 57], "161": 9, "162": 9, "1ubuntu1": 9, "1316": 9, "281": 9, "debconf": 9, "delai": 9, "sinc": [9, 24], "306": 9, "320": [9, 55, 57], "4376": 9, "325": 9, "prepar": 9, "unpack": 9, "dpkg_1": 9, "1_amd64": 9, "deb": 9, "333": 9, "447": [9, 55, 57], "583": 9, "588": 9, "libc6_2": 9, "3_amd64": 9, "652": 9, "unabl": 9, "frontend": 9, "dialog": 9, "usabl": [9, 24], "fall": 9, "back": [9, 56], "t": [9, 18, 22, 24, 49, 50, 53, 55, 57, 58], "locat": 9, "pm": 9, "inc": 9, "entri": 9, "check": [9, 22, 50, 54, 55, 57], "usr": 9, "x86_64": 9, "share": [9, 22], "perl5": 9, "site_perl": 9, "teletyp": 9, "687": 9, "242": 9, "4377": 9, "247": 9, "bin_2": 9, "252": 9, "367": 9, "previous": [9, 24, 55], "unselect": 9, "4378": 9, "372": 9, "perl_1": 9, "6ubuntu5_amd64": 9, "374": 9, "398": [9, 55, 57], "libssl3t64_3": 9, "4_amd64": 9, "407": 9, "510": 9, "4392": 9, "minimal_3": 9, "2_amd64": 9, "516": 9, "602": 9, "603": 9, "libexpat1_2": 9, "605": 9, "632": 9, "zlib1g_1": 9, "3a1": 9, "636": 9, "661": 9, "691": 9, "4700": 9, "695": 9, "700": 9, "750": 9, "762": 9, "766": 9, "436": 9, "4711": 9, "441": 9, "0ubuntu2_amd64": 9, "442": 9, "460": 9, "461": 9, "types_10": 9, "0_all": 9, "462": 9, "478": 9, "netbase_6": 9, "4_all": 9, "495": 9, "496": 9, "tzdata_2024a": 9, "1_all": 9, "497": 9, "590": 9, "0_1": 9, "597": 9, "623": 9, "644": 9, "5273": 9, "649": 9, "liblzma5_5": 9, "656": 9, "681": 9, "704": 9, "709": 9, "common_8": 9, "4build1_al": 9, "711": 9, "734": 9, "libreadline8t64_8": 9, "4build1_amd64": 9, "738": 9, "libhistori": 9, "743": 9, "747": 9, "libreadlin": 9, "752": 9, "773": 9, "0_3": 9, "1ubuntu2_amd64": 9, "775": 9, "798": 9, "799": 9, "stdlib_3": 9, "800": 9, "911": 9, "12_3": 9, "912": 9, "931": 9, "932": 9, "933": 9, "949": 9, "073": 9, "5716": 9, "079": 9, "python3_3": 9, "082": 9, "38_5": 9, "2build2_al": 9, "384": 9, "385": 9, "libgdbm6t64_1": 9, "1build1_amd64": 9, "387": 9, "405": 9, "406": 9, "compat4t64_1": 9, "421": 9, "422": 9, "38t64_5": 9, "2build2_amd64": 9, "423": 9, "607": 9, "608": 9, "perl_5": 9, "613": 9, "638": 9, "adduser_3": 9, "137ubuntu1_al": 9, "640": 9, "662": 9, "692": 9, "7797": 9, "698": 9, "000": 9, "openssl_3": 9, "699": 9, "736": 9, "737": 9, "001": 9, "certificates_20240203_al": 9, "739": 9, "781": 9, "782": 9, "002": 9, "libbsd0_0": 9, "783": 9, "resources_68": 9, "803": 9, "829": 9, "004": 9, "libjansson4_2": 9, "848": 9, "849": 9, "005": 9, "16t64_1": 9, "5build1_amd64": 9, "850": 9, "867": 9, "006": 9, "libxau6_1": 9, "1build6_amd64": 9, "884": 9, "libxdmcp6_1": 9, "0ubuntu6_amd64": 9, "904": 9, "008": 9, "libxcb1_1": 9, "923": 9, "009": 9, "data_2": 9, "1build1_al": 9, "924": 9, "983": 9, "010": 9, "6_2": 9, "984": 9, "011": 9, "manpages_6": 9, "2_all": 9, "042": 9, "012": 9, "utils_5": 9, "044": 9, "074": 9, "common_2": 9, "4ubuntu2_amd64": 9, "076": 9, "098": 9, "099": 9, "libsframe1_2": 9, "libbinutils_2": 9, "151": 9, "152": 9, "nobfd0_2": 9, "173": 9, "017": 9, "libctf0_2": 9, "018": 9, "libgprofng0_2": 9, "gnu_2": 9, "020": 9, "binutils_2": 9, "317": [9, 55, 57], "336": 9, "021": 9, "341": 9, "356": 9, "022": 9, "dev_6": 9, "44_amd64": 9, "358": 9, "562": [9, 55, 57], "564": [9, 55, 57], "023": 9, "dev_1": 9, "3a4": 9, "571": [9, 55, 57], "592": 9, "593": 9, "024": 9, "proto_1": 9, "0ubuntu7_amd64": 9, "595": 9, "616": 9, "617": 9, "025": 9, "dev_2": 9, "619": 9, "754": 9, "026": 9, "base_13": 9, "23ubuntu4_amd64": 9, "755": 9, "772": 9, "774": 9, "027": 9, "libisl23_0": 9, "3build1_amd64": 9, "801": 9, "802": 9, "028": 9, "libmpfr6_4": 9, "825": 9, "826": 9, "029": 9, "libmpc3_1": 9, "827": 9, "842": 9, "843": 9, "030": 9, "gnu_13": 9, "844": 9, "988": 9, "990": 9, "031": 9, "13_13": 9, "992": 9, "gnu_4": 9, "3a13": 9, "7ubuntu1_amd64": 9, "03": 9, "033": 9, "cpp_4": 9, "05": 9, "034": 9, "0_14": 9, "0ubuntu1_amd64": 9, "libgomp1_14": 9, "036": 9, "libitm1_14": 9, "037": 9, "libatomic1_14": 9, "libasan8_14": 9, "liblsan0_14": 9, "040": 9, "libtsan2_14": 9, "libubsan1_14": 9, "libhwasan0_14": 9, "libquadmath0_14": 9, "dev_13": 9, "046": 9, "047": 9, "048": 9, "gcc_4": 9, "049": 9, "050": 9, "051": 9, "052": 9, "_4": 9, "make_4": 9, "1build2_amd64": 9, "bzip2_1": 9, "057": 9, "patch_2": 9, "7build3_amd64": 9, "list_47_al": 9, "059": 9, "060": 9, "essential_12": 9, "10ubuntu1_amd64": 9, "061": 9, "gpgconf_2": 9, "2ubuntu17_amd64": 9, "062": 9, "libksba8_1": 9, "063": 9, "db_2": 9, "064": 9, "2_2": 9, "libldap2_2": 9, "exp1ubuntu8_amd64": 9, "dirmngr_2": 9, "libfakeroot_1": 9, "fakeroot_1": 9, "069": 9, "mono_2": 9, "8_all": 9, "070": 9, "core_2": 9, "071": 9, "config_2": 9, "072": 9, "utils_2": 9, "gpg_2": 9, "curses_1": 9, "3ubuntu5_amd64": 9, "075": 9, "agent_2": 9, "gpgsm_2": 9, "keyboxd_2": 9, "gnupg_2": 9, "2ubuntu17_al": 9, "l10n_2": 9, "client_2": 9, "common_11": 9, "nmu1_al": 9, "perl_0": 9, "8build3_amd64": 9, "084": 9, "5_all": 9, "085": 9, "libaom3_3": 9, "086": 9, "libbrotli1_1": 9, "087": 9, "libfreetype6_2": 9, "1build3_amd64": 9, "088": 9, "libfontconfig1_2": 9, "libsharpyuv0_1": 9, "4build3_amd64": 9, "090": 9, "aomdec_1": 9, "1ubuntu4_amd64": 9, "091": 9, "092": 9, "libde265_1": 9, "093": 9, "libheif1_1": 9, "094": 9, "turbo8_2": 9, "2ubuntu2_amd64": 9, "095": 9, "libjpeg8_8c": 9, "2ubuntu11_amd64": 9, "096": 9, "libdeflate0_1": 9, "097": 9, "libjbig0_2": 9, "liblerc4_4": 9, "libwebp7_1": 9, "libtiff6_4": 9, "libxpm4_1": 9, "3a3": 9, "libgd3_2": 9, "9ubuntu5_amd64": 9, "devtools_2": 9, "4ubuntu5_amd64": 9, "aomenc_1": 9, "jquery_3": 9, "underscore_1": 9, "3_all": 9, "sphinxdoc_7": 9, "6_all": 9, "exp1ubuntu8_al": 9, "12t64_3": 9, "dev_3": 9, "modules_2": 9, "setuptools_68": 9, "wheel_0": 9, "pip_24": 9, "1ubuntu1_al": 9, "tty": 9, "geograph": 9, "area": 9, "live": 9, "question": 9, "narrow": 9, "down": 9, "present": [9, 28], "africa": 9, "antarctica": 9, "asia": 9, "australia": 9, "indian": 9, "america": 9, "arctic": 9, "atlant": 9, "europ": 9, "pacif": 9, "uniniti": 9, "join": 9, "dbdriver": 9, "stack": 9, "utc": 9, "now": [9, 54, 55, 56, 57, 58], "mon": 9, "sep": 9, "reconfigur": 9, "wish": 9, "chang": [9, 28, 54, 57], "val": 9, "substitut": [9, 29], "822": 9, "gen6": 9, "concaten": [9, 44], "altern": 9, "sysv": 9, "auto": 9, "mode": 9, "skip": [9, 51], "man1": 9, "gz": 9, "link": 9, "group": [9, 16, 58], "doesn": [9, 55, 57], "fake": 9, "es": 9, "sv": 9, "lzma": 9, "unlzma": 9, "unxz": 9, "lzcat": 9, "xzcat": 9, "lzmore": 9, "xzmore": 9, "lzless": 9, "xzless": 9, "lzdiff": 9, "xzdiff": 9, "lzcmp": 9, "xzcmp": 9, "lzgrep": 9, "xzgrep": 9, "lzegrep": 9, "xzegrep": 9, "lzfgrep": 9, "xzfgrep": 9, "06": 9, "ssl": 9, "cert": 9, "rtupdat": 9, "hook": [9, 24], "post": 9, "trigger": 9, "434": 9, "error": [9, 27, 28, 29, 39, 41, 42, 46, 54, 57], "wide": 9, "xyz": 9, "non": [9, 24, 54], "m": [9, 54], "easiest": 9, "pipx": 9, "readm": [9, 54], "believ": 9, "mistak": 9, "contact": 9, "os": 9, "distribut": [9, 23, 49, 53], "overrid": [9, 24], "risk": 9, "break": 9, "pep": 9, "668": 9, "successfulli": 9, "exit": [9, 53], "solv": 9, "completedprocess": 9, "returncod": 9, "previou": [9, 55, 57], "log": [9, 18], "log_level": [9, 18], "test": [9, 27, 54, 55, 56, 57], "later": [9, 53], "bacnetnetwork": [9, 32, 34, 53], "scrape": 9, "individu": [9, 54], "discov": [9, 32], "don": [9, 22, 49, 53, 57, 58], "rec": 9, "724": 9, "info": [9, 30], "start": [9, 40, 56, 57, 58], "bac0": 9, "lite": 9, "adjust": [9, 29], "verbos": 9, "725": 9, "ex": [9, 56], "silenc": 9, "726": 9, "taskmanag": 9, "initializationerror": 9, "therein": 9, "handl": [9, 28, 55, 56, 57], "Be": [9, 22], "good": 9, "net": 9, "citizen": 9, "ping": 9, "fals": [9, 24, 28, 29, 37, 48, 51, 55, 57], "discoveri": 9, "port": [9, 53], "mask": 9, "bbmdaddress": 9, "bbmdttl": 9, "bdtabl": 9, "ping_delai": 9, "db_param": 9, "param": [9, 22, 29, 49, 51, 55, 56, 57], "ip_addr": 9, "154": 9, "localipaddr": 9, "157": 9, "bokehserv": 9, "_points_to_trend": 9, "weakref": 9, "weakvaluedictionari": 9, "localobjnam": 9, "deviceid": 9, "firmwarerevis": 9, "maxsegmentsaccept": 9, "modelnam": 9, "vendorid": 9, "vendornam": 9, "spin": 9, "rais": [9, 18, 19, 22, 26, 27, 28, 29, 46, 49, 51, 55, 56, 57], "invalid": [9, 57], "softwar": 9, "47808": 9, "multipl": [9, 26, 53], "per": 9, "Or": 9, "specifi": [9, 18, 26, 48, 53, 57], "boid": 9, "int": [9, 14, 15, 16, 18, 22, 23, 26, 27, 28, 29, 30, 38, 39, 42, 48, 50, 51], "3056177": 9, "uniform": 9, "1000": 9, "kind": [9, 56, 58], "cotnain": 9, "arbitrari": [9, 55], "again": [9, 54, 55], "bacnettobrickingress": [9, 34], "usual": [9, 48, 49], "brick2bacnet": 9, "bacnet_network_graph": 9, "add_graph": [9, 27, 28, 55, 56, 57], "howev": [9, 24, 57], "next": [9, 56, 57, 58], "step": 9, "incorpor": [9, 29, 51], "techniqu": 9, "label": [9, 36], "show": [9, 53], "bigger": 9, "squint": 9, "divid": [9, 58], "let": [9, 55, 56, 57, 58], "put": [9, 56, 57], "tripl": [9, 21, 27, 28, 48, 51, 53, 55], "equip_nam": 9, "point_typ": 9, "brick_class": 9, "elif": [9, 55, 57], "zone_air_heating_temperature_setpoint": 9, "zone_air_cooling_temperature_setpoint": 9, "unknown": [9, 49], "yet": [9, 57], "wrap": [9, 18], "reus": 9, "littl": 9, "bit": [9, 57], "move": 9, "around": [9, 56], "mypointpars": 9, "indic": [9, 24, 29, 53], "output_graph": 9, "bacnet_graph": 9, "point_label": 9, "queri": [9, 28, 55, 57], "ref": [9, 48], "hasexternalrefer": 9, "2020": 9, "invok": [9, 53], "point_ingress": 9, "augmented_graph": 9, "displai": 9, "relationship": [9, 23, 56, 58], "dvelop": 9, "idiosyncrat": 9, "futur": [9, 55, 57], "sophist": 9, "teardown": 9, "docker_compose_stop": 9, "create_app": 12, "db_uri": [12, 53], "flask": [12, 14, 15, 16], "get_all_librari": 14, "respons": [14, 15, 16], "get_all_shap": 14, "shape": [14, 22, 23, 26, 27, 28, 30, 51, 53, 55, 56], "get_librari": 14, "library_id": [14, 22, 23, 55, 57], "request": [14, 15, 16, 28], "get_all_model": 15, "get_model": 15, "models_id": 15, "get_model_graph": 15, "get_target_nod": 15, "create_model": 15, "update_model_graph": 15, "xml": 15, "validate_model": 15, "validate_shap": 15, "get_all_templ": 16, "get_templ": [16, 26, 55, 56, 57], "templates_id": 16, "evaluate_ingress": 16, "template_id": [16, 22, 29], "evaluate_bind": 16, "get_bind": 16, "binding_dict": 16, "liter": 16, "untyp": 16, "kwarg": [18, 23, 24, 39, 40, 41, 49], "setup_t": 18, "tabl": [18, 26, 27, 28, 29, 54, 55], "setup_log": 18, "stdout": 18, "close": 18, "engin": [18, 21, 22, 51, 55, 57], "clean": 18, "get_building_motif": [18, 55, 57], "singleton": 18, "singletonnotinstantiatedexcept": [18, 19], "hasn": 18, "buildingmotifengin": [18, 21], "sqlalchemi": [18, 24, 55, 57], "transact": 18, "experienc": 18, "weird": 18, "caus": [18, 48, 55], "begin": [18, 51], "cls_dict": 19, "metaclass": 19, "singelton": 19, "being": [19, 24, 33, 37], "initi": [19, 54], "graphconnect": 21, "db_identifi": 21, "buildingmotif_stor": 21, "create_graph": 21, "get_all_graph_identifi": 21, "get_graph": 21, "delete_graph": 21, "delet": [21, 22, 56], "tableconnect": [22, 55, 57], "create_db_model": 22, "dbmodel": [22, 23, 27], "get_all_db_model": 22, "get_db_model": 22, "get_db_model_by_nam": 22, "update_db_model_nam": 22, "update_db_model_descript": 22, "delete_db_model": 22, "create_db_shape_collect": 22, "dbshapecollect": [22, 23, 28], "get_all_db_shape_collect": 22, "get_db_shape_collect": 22, "delete_db_shape_collect": 22, "create_db_librari": 22, "dblibrari": [22, 23, 26], "get_all_db_librari": 22, "get_db_librari": 22, "get_db_library_by_nam": 22, "update_db_library_nam": 22, "delete_db_librari": 22, "create_db_templ": 22, "dbtemplat": [22, 23, 29, 55, 57], "get_all_db_templ": 22, "get_db_templ": 22, "get_db_template_by_nam": [22, 55, 57], "get_library_defining_db_templ": 22, "get_db_template_depend": 22, "tupl": [22, 24, 27, 28, 29, 30, 39, 41, 48, 50, 51], "depsassoci": [22, 23], "get_depend": [22, 29], "dependant_id": [22, 23], "update_db_template_nam": 22, "update_db_template_optional_arg": 22, "optional_arg": [22, 23, 26, 29], "add_template_dependency_preliminari": 22, "dependency_id": 22, "preliminari": 22, "serv": [22, 53], "popul": [22, 29, 30, 50, 55, 57], "direct": [22, 50], "acycl": 22, "upshot": 22, "nest": [22, 51], "s223": 22, "mapsto": 22, "check_all_template_depend": 22, "valueerror": [22, 26, 49, 55, 57], "required_param": 22, "check_template_dependency_relationship": 22, "dep": [22, 55, 57], "involv": 22, "seri": [22, 24], "perform": [22, 55, 57], "dure": [22, 29, 49, 51, 54, 55, 57], "template_connect": 22, "delete_template_depend": 22, "update_db_template_librari": 22, "delete_db_templ": 22, "graph_id": 23, "manifest_id": 23, "manifest": [23, 27, 55], "shape_collection_id": 23, "shape_collect": [23, 27, 30, 57], "dependee_id": 23, "body_id": 23, "jsontyp": 24, "custom": [24, 57], "json": [24, 33, 53], "jsonb": 24, "postgr": 24, "dialect": 24, "enforc": 24, "uniqu": [24, 26, 29, 51, 56], "encod": [24, 53], "impl": 24, "alia": 24, "hashabl": 24, "flag": [24, 48, 53], "aren": 24, "orm": [24, 55, 57], "cache_ok": 24, "true": [24, 26, 27, 28, 29, 37, 41, 50, 51, 54, 55, 57], "statement": 24, "externaltyp": 24, "safe": 24, "cach": [24, 33, 35, 36, 50, 51, 55, 57], "emit": 24, "typedecor": 24, "mytyp": 24, "internal_onli": 24, "_static_cache_kei": 24, "scheme": 24, "becom": 24, "cacheabl": 24, "render": 24, "accommod": 24, "unhash": 24, "accept": 24, "lookup": [24, 50, 55], "publish": 24, "sort": [24, 39, 42], "un": 24, "lookuptyp": 24, "userdefinedtyp": 24, "get_col_spec": 24, "kw": 24, "varchar": 24, "255": 24, "bind_processor": 24, "abl": [24, 29], "type_": 24, "stdin": 24, "sawarn": 24, "symbol": 24, "no_cach": 24, "wouldn": 24, "cannot": [24, 26], "itself": [24, 30, 56], "some_cach": 24, "typeerror": 24, "privat": 24, "public": 24, "themselv": 24, "_lookup": 24, "mixin": 24, "sql_cach": 24, "load_dialect_impl": 24, "typeengin": 24, "type_engin": 24, "determin": [24, 28, 37, 51, 56, 58], "ultim": 24, "By": [24, 28, 57, 58], "_id": [26, 27, 28, 29, 55, 57], "_name": [26, 27, 29, 55, 57], "_bm": [26, 27, 28, 29, 55, 57], "mirror": [26, 27, 28, 29], "classmethod": [26, 27, 28, 29, 30, 33], "overwrit": [26, 55, 57], "bool": [26, 27, 28, 29, 30, 37, 41, 48, 50, 51], "db_id": [26, 55, 57], "priorit": 26, "remot": [26, 53], "load_from_libraries_yml": 26, "properli": 26, "order": [26, 49, 50], "commandlin": 26, "yaml": [26, 49, 53, 54, 58], "graph_import": 26, "create_templ": 26, "get_shape_collect": [26, 55, 57], "_descript": 27, "_manifest_id": 27, "neither": 27, "nor": 27, "add_tripl": [27, 28], "error_on_missing_import": [27, 28], "validationcontext": [27, 30], "singl": [27, 44, 55, 56, 57], "miss": [27, 28, 30, 54, 55], "deal": 27, "compil": [27, 44, 49], "test_model_against_shap": 27, "shapes_to_test": 27, "target_class": 27, "report": [27, 30, 51, 55, 57], "upon": [27, 53, 54, 58], "relat": [27, 56], "get_manifest": [27, 57], "update_manifest": [27, 55, 57], "graph_nam": 28, "subject": [28, 49, 56], "resolve_import": 28, "recursive_limit": 28, "limit": [28, 38, 56], "suppress": 28, "get_shapes_of_definition_typ": [28, 57], "definition_typ": 28, "include_label": 28, "desir": [28, 54, 57], "get_shapes_of_domain": 28, "domain": 28, "rdf_type": 28, "superclass": [28, 33], "appli": [28, 40, 49, 57, 58], "concern": 28, "sparql": 28, "in_memory_copi": 29, "add_depend": [29, 55, 57], "check_depend": 29, "remove_depend": 29, "all_paramet": 29, "exclud": [29, 55, 56, 57], "dependency_paramet": 29, "parameter_count": 29, "counter": 29, "histogram": 29, "count": [29, 48, 51, 57], "transit": 29, "dependency_for_paramet": 29, "to_inlin": 29, "preserve_arg": 29, "suffix": [29, 55], "collis": 29, "preserv": 29, "transitive_paramet": 29, "renam": 29, "confus": 29, "require_optional_arg": [29, 37], "warn_unus": 29, "unbound": 29, "even": 29, "include_opt": 29, "autogener": [29, 54, 55], "defining_librari": 29, "library_depend": 29, "find_subgraph": 29, "iter": [29, 41, 50], "subgraph": [29, 50], "partial": [29, 56], "entir": 29, "cover": [29, 56, 57], "pathlik": [29, 33, 38], "stringio": [29, 35], "bytesio": 29, "written": [29, 58], "sent": 29, "program": 29, "buffer": 29, "generate_spreadsheet": 29, "spreadsheet": 29, "byte": 29, "_template_id": 29, "graphdiff": 30, "focu": 30, "validation_result": [30, 55, 57], "actual": 30, "rather": [30, 49], "hold": [30, 55, 56], "reconcil": 30, "reason": [30, 54, 55, 57], "failed_shap": 30, "failed_compon": 30, "pathclasscount": 30, "minc": 30, "maxc": 30, "classnam": 30, "from_validation_report": 30, "pathshapecount": 30, "shapenam": 30, "extra_bodi": 30, "extra_dep": 30, "requiredpath": 30, "requiredclass": 30, "graphclasscardin": 30, "expectedcount": 30, "shapes_graph": 30, "report_str": [30, 57], "diffset": [30, 55, 57], "unord": 30, "as_templ": 30, "get_broken_ent": [30, 55], "broken": 30, "get_diffs_for_ent": [30, 55], "get_reasons_with_sever": 30, "validationresult": 30, "violat": 30, "filter": [30, 55, 57], "diffset_to_templ": 30, "grouped_diffset": 30, "wrong": 30, "respect": [30, 55, 56, 57], "_report_to_diffset": 30, "piec": 33, "bn": 34, "brick_bacnet_scan": 34, "expos": [35, 38], "namingconventioningress": 36, "attach": 36, "dump_failed_label": 36, "callabl": [37, 49, 50], "fill_unus": 37, "chooser": 37, "xlsxingress": 38, "sheetnam": 38, "analyze_failur": [39, 41], "failur": [39, 41, 55, 57], "analyz": [39, 41], "parse_list": [39, 41], "target_list": [39, 41], "results_to_token": [39, 41], "substring_n": 40, "substr": 40, "abbrevi": 40, "consecut": 40, "repeatedli": 40, "stop": 40, "everyth": 40, "extend_if_match": 40, "as_identifi": 40, "parseresult": 41, "success": [41, 54, 55, 57], "_error": 41, "factori": 41, "offset": 41, "occur": [41, 55, 57], "first_tru": 41, "pred": 41, "item": [41, 55, 57], "ensure_token": 42, "token_or_constructor": 42, "templatebuildercontext": 44, "add_templ": 44, "add_templates_from_librari": 44, "wrapper": [44, 56], "templatewrapp": 44, "still": [44, 55], "bind_prefix": 45, "validate_libraries_yaml": 46, "jsonschema": 46, "validationerror": 46, "deseri": 46, "programat": 48, "add_properti": 48, "add_list_properti": 48, "OR": 48, "AND": 48, "NOT": 48, "xone": 48, "of_class": 48, "class_": 48, "activ": [48, 54], "much": [48, 54], "always_run": 48, "blank": [48, 51], "insur": 48, "alwai": [48, 57], "exact": 48, "has_properti": 48, "has_path": 48, "zero_or_on": 48, "zero_or_mor": 48, "one_or_mor": 48, "mutual": 48, "exclus": 48, "min": [48, 51], "max": 48, "qualifi": 48, "precid": 48, "Is": 48, "matches_class": 48, "matches_shap": 48, "downstream": 49, "hastyp": 49, "isfedbi": 49, "author": 49, "introduc": [49, 58], "macro": 49, "signatur": 49, "foo": 49, "hardcod": 49, "decor": 49, "regist": 49, "_summary_": 49, "_description_": 49, "compile_template_spec": 49, "spec": [49, 53], "decod": 49, "vf2": 50, "algorithm": 50, "isomorph": [50, 51], "get_semantic_feas": 50, "g1": 50, "g2": 50, "_cach": 50, "_ontology_lookup_cach": 50, "feasibl": 50, "generate_all_subgraph": 50, "induc": 50, "decreas": 50, "size": 50, "largest": 50, "monomorph": 50, "digraph_to_rdflib": 50, "digraph": 50, "nx": 50, "rdflib_to_networkx_digraph": 50, "templatematch": 50, "graph_target": 50, "template_bind": 50, "template_graph": 50, "add_map": 50, "largest_mapping_s": 50, "building_subgraph_from_map": 50, "template_subgraph_from_map": 50, "remaining_template_graph": 50, "remain": [50, 51], "remaining_templ": 50, "mappings_it": 50, "descend": 50, "building_mapping_subgraphs_it": 50, "copy_graph": 51, "preserve_blank_nod": 51, "boolean": 51, "keep": 51, "inline_sh_nod": 51, "edit": 51, "combine_graph": 51, "graph_siz": 51, "measur": 51, "remove_triples_with_nod": 51, "replace_nod": 51, "old": 51, "get_ontology_fil": 51, "travers": 51, "shape_graph": 51, "template_to_shap": 51, "new_temporary_graph": 51, "more_namespac": 51, "get_paramet": 51, "abc": 51, "rewrite_shape_graph": 51, "origin": [51, 58], "rewritten": 51, "skip_uri": 51, "axiomat": 51, "xsd": 51, "shacl_valid": 51, "data_graph": 51, "topquadr": 51, "fastest": 51, "shacl_infer": 51, "skolemize_shap": 51, "skolem": 51, "graph_hash": 51, "cryptograph": 51, "hash": 51, "calcul": 51, "consist": 51, "canonic": 51, "equal": 51, "recalcul": 51, "canon": 51, "expens": 51, "forget": [53, 57], "suppli": [53, 55], "right": 53, "programmat": 53, "h": 53, "dir": 53, "o": [53, 54], "ont": 53, "l": 53, "library_manifest_fil": 53, "get_default_libraries_yml": 53, "immedi": 53, "enclos": 53, "zonepac": 53, "temporarili": 53, "clone": [53, 54, 55, 56, 57], "repo": 53, "chiller": 53, "plant": 53, "invidu": 53, "diretori": 53, "output_fil": 53, "scanner": 53, "subcommand": 53, "listen": 53, "prerequisit": 54, "poetri": 54, "pre": 54, "commit": [54, 56], "env": 54, "migrat": 54, "window": 54, "unix": 54, "shell": 54, "bash": 54, "allexport": 54, "alemb": 54, "head": 54, "revis": 54, "localhost": 54, "5000": 54, "while": 54, "backend": 54, "psycopg2": 54, "binari": 54, "deploy": 54, "ci": 54, "reproduc": 54, "slight": 54, "comit": 54, "static": 54, "fix": [54, 55], "inspect": 54, "isort": 54, "black": 54, "mypi": 54, "pyproject": 54, "toml": 54, "flake8": 54, "manual": [54, 57], "log_cli": 54, "pytest": 54, "action": 54, "workflow": 54, "html": 54, "jupyt": 54, "book": 54, "sphinx": 54, "_build": 54, "dry": 54, "angular": 54, "md": 54, "4200": 54, "learn": [55, 56, 57, 58], "fork": [55, 56, 57], "subset": [55, 57], "g36": [55, 57, 58], "guideline36": [55, 57], "tutorial2_model": [55, 57], "tutorial2_manifest": 55, "noresultfound": [55, 57], "table_connect": [55, 57], "db_templat": [55, 57], "318": [55, 57], "2870": [55, 57], "2853": [55, 57], "2854": [55, 57], "2855": [55, 57], "exc": [55, 57], "2868": [55, 57], "2869": [55, 57], "_iter": [55, 57], "1522": [55, 57], "scalarresult": [55, 57], "1515": [55, 57], "1516": [55, 57], "1517": [55, 57], "meth": [55, 57], "_engin": [55, 57], "1520": [55, 57], "1521": [55, 57], "_only_one_row": [55, 57], "1523": [55, 57], "raise_for_second_row": [55, 57], "raise_for_non": [55, 57], "scalar": [55, 57], "1524": [55, 57], "resultintern": [55, 57], "561": [55, 57], "563": [55, 57], "194": [55, 57], "cl": [55, 57], "src": [55, 57], "_load_from_directori": [55, 57], "343": [55, 57], "_read_yml_fil": [55, 57], "template_id_lookup": [55, 57], "dependency_cach": [55, 57], "344": [55, 57], "_resolve_template_depend": [55, 57], "346": [55, 57], "_load_shapes_from_directori": [55, 57], "445": [55, 57], "continu": [55, 57], "446": [55, 57], "_resolve_depend": [55, 57], "448": [55, 57], "449": [55, 57], "_template_depend": [55, 57], "397": [55, 57], "isinst": [55, 57], "to_templ": [55, 57], "400": [55, 57], "id_lookup": [55, 57], "template_nam": [55, 57], "578": [55, 57], "569": [55, 57], "570": [55, 57], "576": [55, 57], "577": [55, 57], "dbt": [55, 57], "579": [55, 57], "580": [55, 57], "319": [55, 57], "leaving_chilled_water_flow_sensor": [55, 57], "too": [55, 56], "core_zn": [55, 56, 57], "psc_ac": [55, 56, 57], "minimum": [55, 57], "fan": [55, 56, 57], "ve": 55, "prompt": 55, "closer": 55, "generated_templ": 55, "loop": 55, "templ": [55, 58], "fairli": 55, "challeng": 55, "fact": 55, "advantag": [55, 56], "wtih": 55, "postfix": 55, "signific": 55, "highli": 55, "ahu_nam": [55, 56, 57], "points_and_part": 55, "resolve_core_zn": 55, "psc_acmixed_air_temperature_sensor": 55, "mat": 55, "psc_acfilter_differential_pressure_sensor": 55, "filterdp": 55, "psc_accooling_command": 55, "ccmd": 55, "psc_acheating_command": 55, "hcmd": 55, "psc_acoutside_air_temperature_sensor": 55, "oat": 55, "psc_acsupply_air_temperature_sensor": 55, "psc_acreturn_air_temperature_sensor": 55, "rat": 55, "resolvecore_zn": 55, "psc_acsa": 55, "know": [55, 56, 57, 58], "explor": 55, "thing": [55, 57, 58], "finish": 55, "sa": [55, 58], "repair": 55, "generated_templates_sf": 55, "sf": 55, "sf_name": 55, "fanfrequency_command": 55, "freq": 55, "fanstart_stop_command": 55, "startstop": 55, "fanfan_statu": 55, "guidelin": [55, 57, 58], "destin": [55, 56, 57], "tutorial3_model": 55, "similar": 56, "small": [56, 57], "offic": [56, 57], "commerci": [56, 57], "prototyp": [56, 57], "reader": 56, "familiar": 56, "turtl": [56, 58], "persist": 56, "simplic": 56, "tell": 56, "syntact": 56, "reveal": 56, "coupl": [56, 57], "predic": 56, "ten": 56, "entering_water_temperature_alarm": 56, "lobbi": 56, "water_temperature_sensor": 56, "ozone_level_sensor": 56, "luminous_intensityshap": 56, "fault_reset_command": 56, "damper_command": 56, "hvac_equip": 56, "manipul": 56, "whole": 56, "a2549c74": 56, "4292": 56, "41b9": 56, "9fe3": 56, "ac1b7259dbb4": 56, "belong": 56, "my_graph": 56, "my_external_fil": 56, "raw": 56, "air_handler_unit": 56, "touch": 56, "chill": 56, "water": 56, "ahu_templ": 56, "mandatori": 56, "psz_ac": 56, "condition": 56, "schedul": 56, "ahu_binding_dict": 56, "ahu_graph": 56, "instead": [56, 57], "oa_ra_damper_templ": 56, "outside_damp": 56, "damper_templ": 56, "fan_templ": 56, "supply_fan": [56, 57], "clg_coil_templ": 56, "cooling_coil": [56, 57], "fan_nam": 56, "fan_binding_dict": 56, "fan_graph": 56, "outdoor": 56, "oa_ra_damper_nam": 56, "outsidedamp": 56, "oa_ra_damper_binding_dict": 56, "oa_ra_damper_graph": 56, "damper_nam": 56, "damper_binding_dict": 56, "damper_graph": 56, "clg": [56, 57], "clg_coil_nam": 56, "clg_coil": 56, "clg_coil_binding_dict": 56, "clg_coil_graph": 56, "posit": [56, 58], "damper_position_command": [56, 58], "confirm": [56, 57], "outsidedamperposit": 56, "htg_coil_templ": [56, 57], "htg": [56, 57, 58], "htg_coil_nam": [56, 57], "htg_coil": [56, 57], "htg_coil_bind": [56, 57], "htg_coil_graph": [56, 57], "tutorial1_model": [56, 57], "energycod": 56, "tr": [56, 57], "readthedoc": 56, "feedback": 57, "correctli": 57, "languag": 57, "special": 57, "accord": 57, "suffic": 57, "my_site_constraint": 57, "exactcount": 57, "past": 57, "exercis": 57, "sz": 57, "tutorial1_manifest": 57, "block": 57, "treat": [57, 58], "complain": 57, "care": 57, "err": 57, "gather": 57, "eas": 57, "forgot": 57, "system_specif": 57, "readi": 57, "offici": 57, "text": 57, "difficult": 57, "background": 57, "understood": 57, "separ": 57, "tediou": 57, "technic": 57, "indivdu": 58, "termin": 58, "reheat": 58, "flow": 58, "co": 58, "topolog": 58, "further": 58, "zoom": 58, "problem": 58, "dependeci": 58, "dmppo": 58, "sugar": 58, "cmd": 58, "among": 58, "principl": 58, "manufactur": 58, "profil": 58, "organiz": 58, "subsystem": 58}, "objects": {"": [[10, 0, 0, "-", "buildingmotif"]], "buildingmotif": [[11, 0, 0, "-", "api"], [17, 0, 0, "-", "building_motif"], [20, 0, 0, "-", "database"], [25, 0, 0, "-", "dataclasses"], [31, 0, 0, "-", "ingresses"], [39, 0, 0, "-", "label_parsing"], [43, 0, 0, "-", "libraries"], [44, 0, 0, "-", "model_builder"], [45, 0, 0, "-", "namespaces"], [46, 0, 0, "-", "schemas"], [47, 0, 0, "-", "shape_builder"], [49, 0, 0, "-", "template_compilation"], [50, 0, 0, "-", "template_matcher"], [51, 0, 0, "-", "utils"]], "buildingmotif.api": [[12, 0, 0, "-", "app"], [13, 0, 0, "-", "views"]], "buildingmotif.api.app": [[12, 1, 1, "", "create_app"]], "buildingmotif.api.views": [[14, 0, 0, "-", "library"], [15, 0, 0, "-", "model"], [16, 0, 0, "-", "template"]], "buildingmotif.api.views.library": [[14, 1, 1, "", "get_all_libraries"], [14, 1, 1, "", "get_all_shapes"], [14, 1, 1, "", "get_library"]], "buildingmotif.api.views.model": [[15, 1, 1, "", "create_model"], [15, 1, 1, "", "get_all_models"], [15, 1, 1, "", "get_model"], [15, 1, 1, "", "get_model_graph"], [15, 1, 1, "", "get_target_nodes"], [15, 1, 1, "", "update_model_graph"], [15, 1, 1, "", "validate_model"], [15, 1, 1, "", "validate_shape"]], "buildingmotif.api.views.template": [[16, 1, 1, "", "evaluate_bindings"], [16, 1, 1, "", "evaluate_ingress"], [16, 1, 1, "", "get_all_templates"], [16, 1, 1, "", "get_bindings"], [16, 1, 1, "", "get_template"]], "buildingmotif.building_motif": [[18, 0, 0, "-", "building_motif"], [19, 0, 0, "-", "singleton"]], "buildingmotif.building_motif.building_motif": [[18, 2, 1, "", "BuildingMOTIF"], [18, 2, 1, "", "BuildingMotifEngine"], [18, 1, 1, "", "get_building_motif"]], "buildingmotif.building_motif.building_motif.BuildingMOTIF": [[18, 3, 1, "", "clean"], [18, 3, 1, "", "close"], [18, 4, 1, "", "session"], [18, 3, 1, "", "setup_logging"], [18, 3, 1, "", "setup_tables"]], "buildingmotif.building_motif.building_motif.BuildingMotifEngine": [[18, 3, 1, "", "begin"], [18, 3, 1, "", "connect"]], "buildingmotif.building_motif.singleton": [[19, 2, 1, "", "Singleton"], [19, 5, 1, "", "SingletonNotInstantiatedException"]], "buildingmotif.database": [[21, 0, 0, "-", "graph_connection"], [22, 0, 0, "-", "table_connection"], [23, 0, 0, "-", "tables"], [24, 0, 0, "-", "utils"]], "buildingmotif.database.graph_connection": [[21, 2, 1, "", "GraphConnection"]], "buildingmotif.database.graph_connection.GraphConnection": [[21, 3, 1, "", "create_graph"], [21, 3, 1, "", "delete_graph"], [21, 3, 1, "", "get_all_graph_identifiers"], [21, 3, 1, "", "get_graph"]], "buildingmotif.database.table_connection": [[22, 2, 1, "", "TableConnection"]], "buildingmotif.database.table_connection.TableConnection": [[22, 3, 1, "", "add_template_dependency_preliminary"], [22, 3, 1, "", "check_all_template_dependencies"], [22, 3, 1, "", "check_template_dependency_relationship"], [22, 3, 1, "", "create_db_library"], [22, 3, 1, "", "create_db_model"], [22, 3, 1, "", "create_db_shape_collection"], [22, 3, 1, "", "create_db_template"], [22, 3, 1, "", "delete_db_library"], [22, 3, 1, "", "delete_db_model"], [22, 3, 1, "", "delete_db_shape_collection"], [22, 3, 1, "", "delete_db_template"], [22, 3, 1, "", "delete_template_dependency"], [22, 3, 1, "", "get_all_db_libraries"], [22, 3, 1, "", "get_all_db_models"], [22, 3, 1, "", "get_all_db_shape_collections"], [22, 3, 1, "", "get_all_db_templates"], [22, 3, 1, "", "get_db_library"], [22, 3, 1, "", "get_db_library_by_name"], [22, 3, 1, "", "get_db_model"], [22, 3, 1, "", "get_db_model_by_name"], [22, 3, 1, "", "get_db_shape_collection"], [22, 3, 1, "", "get_db_template"], [22, 3, 1, "", "get_db_template_by_name"], [22, 3, 1, "", "get_db_template_dependencies"], [22, 3, 1, "", "get_library_defining_db_template"], [22, 3, 1, "", "update_db_library_name"], [22, 3, 1, "", "update_db_model_description"], [22, 3, 1, "", "update_db_model_name"], [22, 3, 1, "", "update_db_template_library"], [22, 3, 1, "", "update_db_template_name"], [22, 3, 1, "", "update_db_template_optional_args"]], "buildingmotif.database.tables": [[23, 2, 1, "", "DBLibrary"], [23, 2, 1, "", "DBModel"], [23, 2, 1, "", "DBShapeCollection"], [23, 2, 1, "", "DBTemplate"], [23, 2, 1, "", "DepsAssociation"]], "buildingmotif.database.tables.DBLibrary": [[23, 6, 1, "", "id"], [23, 6, 1, "", "name"], [23, 6, 1, "", "shape_collection"], [23, 6, 1, "", "shape_collection_id"], [23, 6, 1, "", "templates"]], "buildingmotif.database.tables.DBModel": [[23, 6, 1, "", "description"], [23, 6, 1, "", "graph_id"], [23, 6, 1, "", "id"], [23, 6, 1, "", "manifest"], [23, 6, 1, "", "manifest_id"], [23, 6, 1, "", "name"]], "buildingmotif.database.tables.DBShapeCollection": [[23, 6, 1, "", "graph_id"], [23, 6, 1, "", "id"]], "buildingmotif.database.tables.DBTemplate": [[23, 6, 1, "", "body_id"], [23, 6, 1, "", "dependants"], [23, 6, 1, "", "dependencies"], [23, 6, 1, "", "id"], [23, 6, 1, "", "library"], [23, 6, 1, "", "library_id"], [23, 6, 1, "", "name"], [23, 6, 1, "", "optional_args"]], "buildingmotif.database.tables.DepsAssociation": [[23, 6, 1, "", "args"], [23, 6, 1, "", "dependant_id"], [23, 6, 1, "", "dependee_id"], [23, 6, 1, "", "id"]], "buildingmotif.database.utils": [[24, 2, 1, "", "JSONType"]], "buildingmotif.database.utils.JSONType": [[24, 6, 1, "", "cache_ok"], [24, 6, 1, "", "hashable"], [24, 6, 1, "", "impl"], [24, 3, 1, "", "load_dialect_impl"]], "buildingmotif.dataclasses": [[26, 0, 0, "-", "library"], [27, 0, 0, "-", "model"], [28, 0, 0, "-", "shape_collection"], [29, 0, 0, "-", "template"], [30, 0, 0, "-", "validation"]], "buildingmotif.dataclasses.library": [[26, 2, 1, "", "Library"]], "buildingmotif.dataclasses.library.Library": [[26, 3, 1, "", "create"], [26, 3, 1, "", "create_template"], [26, 3, 1, "", "get_shape_collection"], [26, 3, 1, "", "get_template_by_name"], [26, 3, 1, "", "get_templates"], [26, 4, 1, "", "graph_imports"], [26, 4, 1, "", "id"], [26, 3, 1, "", "load"], [26, 3, 1, "", "load_from_libraries_yml"], [26, 4, 1, "", "name"]], "buildingmotif.dataclasses.model": [[27, 2, 1, "", "Model"]], "buildingmotif.dataclasses.model.Model": [[27, 3, 1, "", "add_graph"], [27, 3, 1, "", "add_triples"], [27, 3, 1, "", "compile"], [27, 3, 1, "", "create"], [27, 4, 1, "", "description"], [27, 3, 1, "", "get_manifest"], [27, 6, 1, "", "graph"], [27, 4, 1, "", "id"], [27, 3, 1, "", "load"], [27, 4, 1, "", "name"], [27, 3, 1, "", "test_model_against_shapes"], [27, 3, 1, "", "update_manifest"], [27, 3, 1, "", "validate"]], "buildingmotif.dataclasses.shape_collection": [[28, 2, 1, "", "ShapeCollection"]], "buildingmotif.dataclasses.shape_collection.ShapeCollection": [[28, 3, 1, "", "add_graph"], [28, 3, 1, "", "add_triples"], [28, 3, 1, "", "create"], [28, 3, 1, "", "get_shapes_about_class"], [28, 3, 1, "", "get_shapes_of_definition_type"], [28, 3, 1, "", "get_shapes_of_domain"], [28, 6, 1, "", "graph"], [28, 4, 1, "", "graph_name"], [28, 4, 1, "", "id"], [28, 3, 1, "", "load"], [28, 3, 1, "", "resolve_imports"], [28, 3, 1, "", "shape_to_query"]], "buildingmotif.dataclasses.template": [[29, 2, 1, "", "Dependency"], [29, 2, 1, "", "Template"]], "buildingmotif.dataclasses.template.Dependency": [[29, 6, 1, "", "args"], [29, 4, 1, "", "template"], [29, 4, 1, "", "template_id"]], "buildingmotif.dataclasses.template.Template": [[29, 3, 1, "", "add_dependency"], [29, 4, 1, "", "all_parameters"], [29, 6, 1, "", "body"], [29, 3, 1, "", "check_dependencies"], [29, 4, 1, "", "defining_library"], [29, 3, 1, "", "dependency_for_parameter"], [29, 4, 1, "", "dependency_parameters"], [29, 3, 1, "", "evaluate"], [29, 3, 1, "", "fill"], [29, 3, 1, "", "find_subgraphs"], [29, 3, 1, "", "generate_csv"], [29, 3, 1, "", "generate_spreadsheet"], [29, 3, 1, "", "get_dependencies"], [29, 4, 1, "", "id"], [29, 3, 1, "", "in_memory_copy"], [29, 3, 1, "", "inline_dependencies"], [29, 3, 1, "", "library_dependencies"], [29, 3, 1, "", "load"], [29, 4, 1, "", "name"], [29, 6, 1, "", "optional_args"], [29, 4, 1, "", "parameter_counts"], [29, 4, 1, "", "parameters"], [29, 3, 1, "", "remove_dependency"], [29, 3, 1, "", "to_inline"], [29, 4, 1, "", "transitive_parameters"]], "buildingmotif.dataclasses.validation": [[30, 2, 1, "", "GraphClassCardinality"], [30, 2, 1, "", "GraphDiff"], [30, 2, 1, "", "PathClassCount"], [30, 2, 1, "", "PathShapeCount"], [30, 2, 1, "", "RequiredClass"], [30, 2, 1, "", "RequiredPath"], [30, 2, 1, "", "ValidationContext"], [30, 1, 1, "", "diffset_to_templates"]], "buildingmotif.dataclasses.validation.GraphClassCardinality": [[30, 6, 1, "", "classname"], [30, 6, 1, "", "expectedCount"], [30, 3, 1, "", "reason"], [30, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.GraphDiff": [[30, 4, 1, "", "failed_component"], [30, 4, 1, "", "failed_shape"], [30, 6, 1, "", "focus"], [30, 6, 1, "", "graph"], [30, 3, 1, "", "reason"], [30, 3, 1, "", "resolve"], [30, 6, 1, "", "validation_result"]], "buildingmotif.dataclasses.validation.PathClassCount": [[30, 6, 1, "", "classname"], [30, 3, 1, "", "from_validation_report"], [30, 6, 1, "", "maxc"], [30, 6, 1, "", "minc"], [30, 6, 1, "", "path"], [30, 3, 1, "", "reason"], [30, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.PathShapeCount": [[30, 6, 1, "", "extra_body"], [30, 6, 1, "", "extra_deps"], [30, 3, 1, "", "from_validation_report"], [30, 6, 1, "", "maxc"], [30, 6, 1, "", "minc"], [30, 6, 1, "", "path"], [30, 3, 1, "", "reason"], [30, 3, 1, "", "resolve"], [30, 6, 1, "", "shapename"]], "buildingmotif.dataclasses.validation.RequiredClass": [[30, 6, 1, "", "classname"], [30, 3, 1, "", "reason"], [30, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.RequiredPath": [[30, 3, 1, "", "from_validation_report"], [30, 6, 1, "", "maxc"], [30, 6, 1, "", "minc"], [30, 6, 1, "", "path"], [30, 3, 1, "", "reason"], [30, 3, 1, "", "resolve"]], "buildingmotif.dataclasses.validation.ValidationContext": [[30, 3, 1, "", "as_templates"], [30, 4, 1, "", "diffset"], [30, 3, 1, "", "get_broken_entities"], [30, 3, 1, "", "get_diffs_for_entity"], [30, 3, 1, "", "get_reasons_with_severity"], [30, 6, 1, "", "model"], [30, 6, 1, "", "report"], [30, 6, 1, "", "report_string"], [30, 6, 1, "", "shape_collections"], [30, 6, 1, "", "shapes_graph"], [30, 6, 1, "", "valid"]], "buildingmotif.ingresses": [[32, 0, 0, "-", "bacnet"], [33, 0, 0, "-", "base"], [34, 0, 0, "-", "brick"], [35, 0, 0, "-", "csvingress"], [36, 0, 0, "-", "naming_convention"], [37, 0, 0, "-", "template"], [38, 0, 0, "-", "xlsx"]], "buildingmotif.ingresses.bacnet": [[32, 2, 1, "", "BACnetNetwork"]], "buildingmotif.ingresses.bacnet.BACnetNetwork": [[32, 4, 1, "", "records"]], "buildingmotif.ingresses.base": [[33, 2, 1, "", "GraphIngressHandler"], [33, 2, 1, "", "IngressHandler"], [33, 2, 1, "", "Record"], [33, 2, 1, "", "RecordIngressHandler"]], "buildingmotif.ingresses.base.GraphIngressHandler": [[33, 3, 1, "", "graph"]], "buildingmotif.ingresses.base.Record": [[33, 6, 1, "", "fields"], [33, 6, 1, "", "rtype"]], "buildingmotif.ingresses.base.RecordIngressHandler": [[33, 3, 1, "", "dump"], [33, 3, 1, "", "dumps"], [33, 3, 1, "", "load"], [33, 3, 1, "", "loads"], [33, 4, 1, "", "records"]], "buildingmotif.ingresses.brick": [[34, 2, 1, "", "BACnetToBrickIngress"]], "buildingmotif.ingresses.brick.BACnetToBrickIngress": [[34, 6, 1, "", "BNS"], [34, 3, 1, "", "graph"]], "buildingmotif.ingresses.csvingress": [[35, 2, 1, "", "CSVIngress"]], "buildingmotif.ingresses.csvingress.CSVIngress": [[35, 4, 1, "", "records"]], "buildingmotif.ingresses.naming_convention": [[36, 2, 1, "", "NamingConventionIngress"]], "buildingmotif.ingresses.naming_convention.NamingConventionIngress": [[36, 3, 1, "", "dump_failed_labels"], [36, 4, 1, "", "records"]], "buildingmotif.ingresses.template": [[37, 2, 1, "", "TemplateIngress"], [37, 2, 1, "", "TemplateIngressWithChooser"]], "buildingmotif.ingresses.template.TemplateIngress": [[37, 3, 1, "", "graph"]], "buildingmotif.ingresses.template.TemplateIngressWithChooser": [[37, 3, 1, "", "graph"]], "buildingmotif.ingresses.xlsx": [[38, 2, 1, "", "XLSXIngress"]], "buildingmotif.ingresses.xlsx.XLSXIngress": [[38, 4, 1, "", "records"]], "buildingmotif.label_parsing": [[39, 2, 1, "", "Constant"], [39, 2, 1, "", "Delimiter"], [39, 2, 1, "", "Identifier"], [39, 2, 1, "", "Null"], [39, 2, 1, "", "Parser"], [39, 2, 1, "", "Token"], [39, 2, 1, "", "TokenResult"], [39, 1, 1, "", "analyze_failures"], [40, 0, 0, "-", "combinators"], [39, 1, 1, "", "parse_list"], [41, 0, 0, "-", "parser"], [39, 1, 1, "", "results_to_tokens"], [42, 0, 0, "-", "tokens"]], "buildingmotif.label_parsing.Constant": [[39, 6, 1, "", "value"]], "buildingmotif.label_parsing.Delimiter": [[39, 6, 1, "", "value"]], "buildingmotif.label_parsing.Identifier": [[39, 6, 1, "", "value"]], "buildingmotif.label_parsing.Null": [[39, 6, 1, "", "value"]], "buildingmotif.label_parsing.Token": [[39, 6, 1, "", "value"]], "buildingmotif.label_parsing.TokenResult": [[39, 6, 1, "", "error"], [39, 6, 1, "", "length"], [39, 6, 1, "", "token"], [39, 6, 1, "", "value"]], "buildingmotif.label_parsing.combinators": [[40, 2, 1, "", "abbreviations"], [40, 1, 1, "", "as_identifier"], [40, 2, 1, "", "choice"], [40, 2, 1, "", "constant"], [40, 2, 1, "", "extend_if_match"], [40, 2, 1, "", "many"], [40, 2, 1, "", "maybe"], [40, 2, 1, "", "regex"], [40, 2, 1, "", "rest"], [40, 2, 1, "", "sequence"], [40, 2, 1, "", "string"], [40, 2, 1, "", "substring_n"], [40, 2, 1, "", "until"]], "buildingmotif.label_parsing.parser": [[41, 2, 1, "", "ParseResult"], [41, 2, 1, "", "Parser"], [41, 1, 1, "", "analyze_failures"], [41, 1, 1, "", "first_true"], [41, 1, 1, "", "parse"], [41, 1, 1, "", "parse_list"], [41, 1, 1, "", "results_to_tokens"]], "buildingmotif.label_parsing.parser.ParseResult": [[41, 4, 1, "", "errors"], [41, 6, 1, "", "success"], [41, 6, 1, "", "tokens"]], "buildingmotif.label_parsing.tokens": [[42, 2, 1, "", "Constant"], [42, 2, 1, "", "Delimiter"], [42, 2, 1, "", "Identifier"], [42, 2, 1, "", "Null"], [42, 2, 1, "", "Token"], [42, 2, 1, "", "TokenResult"], [42, 1, 1, "", "ensure_token"]], "buildingmotif.label_parsing.tokens.Constant": [[42, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Delimiter": [[42, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Identifier": [[42, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Null": [[42, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.Token": [[42, 6, 1, "", "value"]], "buildingmotif.label_parsing.tokens.TokenResult": [[42, 6, 1, "", "error"], [42, 6, 1, "", "length"], [42, 6, 1, "", "token"], [42, 6, 1, "", "value"]], "buildingmotif.model_builder": [[44, 2, 1, "", "TemplateBuilderContext"], [44, 2, 1, "", "TemplateWrapper"]], "buildingmotif.model_builder.TemplateBuilderContext": [[44, 3, 1, "", "add_template"], [44, 3, 1, "", "add_templates_from_library"], [44, 3, 1, "", "compile"]], "buildingmotif.model_builder.TemplateWrapper": [[44, 3, 1, "", "compile"], [44, 4, 1, "", "parameters"]], "buildingmotif.namespaces": [[45, 1, 1, "", "bind_prefixes"]], "buildingmotif.schemas": [[46, 1, 1, "", "validate_libraries_yaml"]], "buildingmotif.shape_builder": [[48, 0, 0, "-", "shape"]], "buildingmotif.shape_builder.shape": [[48, 1, 1, "", "AND"], [48, 1, 1, "", "NOT"], [48, 2, 1, "", "NodeShape"], [48, 1, 1, "", "OR"], [48, 2, 1, "", "PropertyShape"], [48, 2, 1, "", "Shape"], [48, 1, 1, "", "XONE"]], "buildingmotif.shape_builder.shape.NodeShape": [[48, 3, 1, "", "always_run"], [48, 3, 1, "", "count"], [48, 3, 1, "", "has_property"], [48, 3, 1, "", "of_class"]], "buildingmotif.shape_builder.shape.PropertyShape": [[48, 3, 1, "", "has_path"], [48, 3, 1, "", "matches"], [48, 3, 1, "", "matches_class"], [48, 3, 1, "", "matches_shape"]], "buildingmotif.shape_builder.shape.Shape": [[48, 3, 1, "", "AND"], [48, 3, 1, "", "NOT"], [48, 3, 1, "", "OR"], [48, 3, 1, "", "XONE"], [48, 3, 1, "", "add"], [48, 3, 1, "", "add_list_property"], [48, 3, 1, "", "add_property"]], "buildingmotif.template_compilation": [[49, 7, 1, "", "RULES"], [49, 1, 1, "", "bacnet"], [49, 1, 1, "", "body"], [49, 1, 1, "", "compile_template_spec"], [49, 1, 1, "", "feeds"], [49, 1, 1, "", "hasType"], [49, 1, 1, "", "isFedBy"], [49, 1, 1, "", "parts"], [49, 1, 1, "", "points"], [49, 1, 1, "", "rule"]], "buildingmotif.template_matcher": [[50, 2, 1, "", "TemplateMatcher"], [50, 1, 1, "", "digraph_to_rdflib"], [50, 1, 1, "", "generate_all_subgraphs"], [50, 1, 1, "", "get_semantic_feasibility"]], "buildingmotif.template_matcher.TemplateMatcher": [[50, 3, 1, "", "add_mapping"], [50, 6, 1, "", "building"], [50, 3, 1, "", "building_mapping_subgraphs_iter"], [50, 3, 1, "", "building_subgraph_from_mapping"], [50, 4, 1, "", "largest_mapping_size"], [50, 6, 1, "", "mappings"], [50, 3, 1, "", "mappings_iter"], [50, 3, 1, "", "remaining_template"], [50, 3, 1, "", "remaining_template_graph"], [50, 6, 1, "", "template"], [50, 6, 1, "", "template_bindings"], [50, 6, 1, "", "template_graph"], [50, 3, 1, "", "template_subgraph_from_mapping"]], "buildingmotif.utils": [[51, 1, 1, "", "combine_graphs"], [51, 1, 1, "", "copy_graph"], [51, 1, 1, "", "get_ontology_files"], [51, 1, 1, "", "get_parameters"], [51, 1, 1, "", "get_template_parts_from_shape"], [51, 1, 1, "", "graph_hash"], [51, 1, 1, "", "graph_size"], [51, 1, 1, "", "inline_sh_nodes"], [51, 1, 1, "", "new_temporary_graph"], [51, 1, 1, "", "remove_triples_with_node"], [51, 1, 1, "", "replace_nodes"], [51, 1, 1, "", "rewrite_shape_graph"], [51, 1, 1, "", "shacl_inference"], [51, 1, 1, "", "shacl_validate"], [51, 1, 1, "", "skip_uri"], [51, 1, 1, "", "skolemize_shapes"], [51, 1, 1, "", "template_to_shape"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method", "4": "py:property", "5": "py:exception", "6": "py:attribute", "7": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "exception", "Python exception"], "6": ["py", "attribute", "Python attribute"], "7": ["py", "data", "Python data"]}, "titleterms": {"buildingmotif": [0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53], "document": [0, 52, 54], "refer": 0, "tutori": 0, "guid": 0, "explan": 0, "appendix": 0, "bibliographi": 1, "ingress": [2, 31, 32, 33, 34, 35, 36, 37, 38], "type": [2, 9], "record": 2, "handler": 2, "graph": [2, 3, 56], "us": [2, 54, 57], "built": 2, "bacnet": [2, 9, 32, 53], "network": [2, 9], "csv": [2, 7], "file": 2, "xlsx": [2, 38], "spreadsheet": 2, "templat": [2, 5, 6, 16, 29, 37, 55, 56, 58], "instanti": 2, "exampl": [2, 3, 5], "brick": [2, 9, 34], "import": [2, 7, 56], "point": [3, 9], "label": 3, "pars": 3, "semant": 3, "synthesi": 3, "background": 3, "parser": [3, 41], "combin": [3, 40], "defin": [3, 6], "new": 3, "abbrevi": 3, "error": 3, "handl": 3, "shacl": [4, 6, 8], "sparql": [4, 8], "convers": 4, "shape": [4, 5, 6, 8, 48, 57], "queri": [4, 8], "algorithm": 4, "select": 4, "claus": 4, "gener": [4, 8], "where": 4, "convert": 5, "how": 6, "yaml": 6, "format": 6, "depend": [6, 58], "explicit": 6, "implicit": 6, "inlin": 6, "evalu": [6, 56], "support": 8, "featur": 8, "setup": [8, 9, 55, 57], "find": [8, 57], "from": 8, "extern": 9, "pull": 9, "metadata": 9, "an": 9, "initi": 9, "model": [9, 15, 27, 55, 56, 57], "augment": 9, "our": 9, "strategi": 9, "infer": 9, "api": [11, 12, 13, 14, 15, 16, 53], "app": [12, 54], "view": [13, 14, 15, 16], "librari": [14, 26, 43, 53, 56], "building_motif": [17, 18, 19], "singleton": 19, "databas": [20, 21, 22, 23, 24, 54], "graph_connect": 21, "table_connect": 22, "tabl": 23, "util": [24, 51], "dataclass": [25, 26, 27, 28, 29, 30], "shape_collect": 28, "valid": [30, 55, 57], "base": 33, "csvingress": 35, "naming_convent": 36, "label_pars": [39, 40, 41, 42], "token": 42, "model_build": 44, "namespac": 45, "schema": 46, "shape_build": [47, 48], "template_compil": 49, "template_match": 50, "code": 52, "command": 53, "line": 53, "interfac": 53, "load": [53, 56], "cli": 53, "usag": 53, "bulk": 53, "directori": 53, "ontolog": [53, 57], "git": 53, "repositori": 53, "individu": [53, 56], "scan": 53, "server": 53, "develop": 54, "instal": 54, "postgr": 54, "continu": 54, "integr": 54, "local": 54, "remot": 54, "build": 54, "publish": 54, "web": 54, "run": 54, "docker": 54, "correct": 55, "creation": 56, "creat": 56, "ad": [56, 57, 58], "manual": 56, "rdf": 56, "tripl": 56, "Into": 56, "explor": 56, "manifest": 57, "write": [57, 58], "tip": 57, "suppli": 57, "extra": 57, "collect": 57, "fix": 57, "case": 57, "part": 58, "bodi": 58, "option": 58, "save": 58, "organ": 58}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9, "sphinx": 56}}) \ No newline at end of file diff --git a/tutorials/model_correction.html b/tutorials/model_correction.html index 2bd598d88..563b66711 100644 --- a/tutorials/model_correction.html +++ b/tutorials/model_correction.html @@ -531,102 +531,107 @@

    Setup#

    ---------------------------------------------------------------------------
     NoResultFound                             Traceback (most recent call last)
    -Cell In[1], line 20
    -     18 # load libraries excluded from the python package (available from the repository)
    -     19 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl")
    ----> 20 g36 = Library.load(directory="../../libraries/ashrae/guideline36")
    -     23 # load tutorial 2 model and manifest
    -     24 model.graph.parse("tutorial2_model.ttl", format="ttl")
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:208, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference)
    -    206     if not src.exists():
    -    207         raise Exception(f"Directory {src} does not exist")
    ---> 208     return cls._load_from_directory(
    -    209         src,
    -    210         overwrite=overwrite,
    -    211         infer_templates=infer_templates,
    -    212         run_shacl_inference=run_shacl_inference,
    -    213     )
    -    214 elif name is not None:
    -    215     bm = get_building_motif()
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:417, in Library._load_from_directory(cls, directory, overwrite, infer_templates, run_shacl_inference)
    -    415     lib._read_yml_file(file, template_id_lookup, dependency_cache)
    -    416 # now that we have all the templates, we can populate the dependencies
    ---> 417 lib._resolve_template_dependencies(template_id_lookup, dependency_cache)
    -    418 # load shape collections from all ontology files in the directory
    -    419 lib._load_shapes_from_directory(directory)
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:520, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache)
    -    518         continue
    -    519     for dep in dependency_cache[template.id]:
    ---> 520         self._resolve_dependency(template, dep, template_id_lookup)
    -    521 # check that all dependencies are valid (use parameters that exist, etc)
    -    522 for template in self.get_templates():
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:470, in Library._resolve_dependency(self, template, dep, template_id_lookup)
    -    468 # if dep is a _template_dependency, turn it into a template
    -    469 if isinstance(dep, _template_dependency):
    ---> 470     dependee = dep.to_template(template_id_lookup)
    -    471     template.add_dependency(dependee, dep.bindings)
    -    472     return
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup)
    -     84     return Template.load(id_lookup[self.template_name])
    -     85 # if not in the local cache, then search the database for the template
    -     86 # within the given library
    ----> 87 library = Library.load(name=self.library)
    -     88 return library.get_template_by_name(self.template_name)
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:216, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference)
    -    214 elif name is not None:
    -    215     bm = get_building_motif()
    ---> 216     db_library = bm.table_connection.get_db_library_by_name(name)
    -    217     return cls(_id=db_library.id, _name=db_library.name, _bm=bm)
    -    218 else:
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:230, in TableConnection.get_db_library_by_name(self, name)
    -    222 def get_db_library_by_name(self, name: str) -> DBLibrary:
    -    223     """Get database library by name.
    -    224 
    -    225     :param name: name of DBLibrary
    -   (...)
    -    228     :rtype: DBLibrary
    -    229     """
    ---> 230     return self.bm.session.query(DBLibrary).filter(DBLibrary.name == name).one()
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:316, in TableConnection.get_db_template_by_name(self, name)
    +    314 try:
    +    315     db_template = (
    +--> 316         self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one()
    +    317     )
    +    318 except NoResultFound:
     
     File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/orm/query.py:2870, in Query.one(self)
    -   2852 def one(self):
    -   2853     """Return exactly one result or raise an exception.
    +   2853 """Return exactly one result or raise an exception.
        2854 
    -   2855     Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects
    +   2855 Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects
        (...)
        2868 
    -   2869     """
    --> 2870     return self._iter().one()
    +   2869 """
    +-> 2870 return self._iter().one()
     
     File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:1522, in ScalarResult.one(self)
    -   1514 def one(self):
    -   1515     """Return exactly one object or raise an exception.
    +   1515 """Return exactly one object or raise an exception.
        1516 
    -   1517     Equivalent to :meth:`_engine.Result.one` except that
    +   1517 Equivalent to :meth:`_engine.Result.one` except that
        (...)
        1520 
    -   1521     """
    --> 1522     return self._only_one_row(
    -   1523         raise_for_second_row=True, raise_for_none=True, scalar=False
    -   1524     )
    +   1521 """
    +-> 1522 return self._only_one_row(
    +   1523     raise_for_second_row=True, raise_for_none=True, scalar=False
    +   1524 )
     
     File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:562, in ResultInternal._only_one_row(self, raise_for_second_row, raise_for_none, scalar)
    -    560 if row is None:
    -    561     if raise_for_none:
    ---> 562         raise exc.NoResultFound(
    -    563             "No row was found when one was required"
    -    564         )
    -    565     else:
    -    566         return None
    +    561 if raise_for_none:
    +--> 562     raise exc.NoResultFound(
    +    563         "No row was found when one was required"
    +    564     )
    +    565 else:
     
     NoResultFound: No row was found when one was required
    +
    +During handling of the above exception, another exception occurred:
    +
    +NoResultFound                             Traceback (most recent call last)
    +Cell In[1], line 20
    +     18 # load libraries excluded from the python package (available from the repository)
    +     19 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl")
    +---> 20 g36 = Library.load(directory="../../libraries/ashrae/guideline36")
    +     23 # load tutorial 2 model and manifest
    +     24 model.graph.parse("tutorial2_model.ttl", format="ttl")
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:194, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite)
    +    192     if not src.exists():
    +    193         raise Exception(f"Directory {src} does not exist")
    +--> 194     return cls._load_from_directory(src, overwrite=overwrite)
    +    195 elif name is not None:
    +    196     bm = get_building_motif()
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:345, in Library._load_from_directory(cls, directory, overwrite)
    +    343     lib._read_yml_file(file, template_id_lookup, dependency_cache)
    +    344 # now that we have all the templates, we can populate the dependencies
    +--> 345 lib._resolve_template_dependencies(template_id_lookup, dependency_cache)
    +    346 # load shape collections from all ontology files in the directory
    +    347 lib._load_shapes_from_directory(directory)
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:447, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache)
    +    445         continue
    +    446     for dep in dependency_cache[template.id]:
    +--> 447         self._resolve_dependency(template, dep, template_id_lookup)
    +    448 # check that all dependencies are valid (use parameters that exist, etc)
    +    449 for template in self.get_templates():
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:398, in Library._resolve_dependency(self, template, dep, template_id_lookup)
    +    396 # if dep is a _template_dependency, turn it into a template
    +    397 if isinstance(dep, _template_dependency):
    +--> 398     dependee = dep.to_template(template_id_lookup)
    +    399     template.add_dependency(dependee, dep.bindings)
    +    400     return
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup)
    +     84 # if not in the local cache, then search the database for the template
    +     85 # within the given library
    +     86 library = Library.load(name=self.library)
    +---> 87 return library.get_template_by_name(self.template_name)
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:578, in Library.get_template_by_name(self, name)
    +    569 def get_template_by_name(self, name: str) -> Template:
    +    570     """Get template by name from library.
    +    571 
    +    572     :param name: template name
    +   (...)
    +    576     :rtype: Template
    +    577     """
    +--> 578     dbt = self._bm.table_connection.get_db_template_by_name(name)
    +    579     if dbt.library_id != self._id:
    +    580         raise ValueError(f"Template {name} not in library {self._name}")
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:319, in TableConnection.get_db_template_by_name(self, name)
    +    315     db_template = (
    +    316         self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one()
    +    317     )
    +    318 except NoResultFound:
    +--> 319     raise NoResultFound(f"No template found with name {name}")
    +    320 return db_template
    +
    +NoResultFound: No template found with name https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor
     
    diff --git a/tutorials/model_creation.html b/tutorials/model_creation.html index 7e1e98ae8..e8ba1cafd 100644 --- a/tutorials/model_creation.html +++ b/tutorials/model_creation.html @@ -588,16 +588,16 @@

    Loading Libraries
    The Brick library contains the following templates:
     

    -
      - https://brickschema.org/schema/Brick#Water_Valve
    -  - https://brickschema.org/schema/Brick#Min_Unoccupied_Heating_Discharge_Air_Flow_Setpoint_Limit
    -  - https://brickschema.org/schema/Brick#Massage_Room
    -  - https://brickschema.org/schema/Brick#Ventilation_Air_Flow_Ratio_Limit
    -  - https://brickschema.org/schema/Brick#Radiant_Ceiling_Panel
    -  - https://brickschema.org/schema/Brick#Pump_Room
    -  - https://brickschema.org/schema/Brick#Occupied_Return_Air_Temperature_Setpoint
    -  - https://brickschema.org/schema/Brick#Hot_Water_Radiator
    -  - https://brickschema.org/schema/Brick#Environment_Box
    -  - https://brickschema.org/schema/Brick#CAV
    +
      - https://brickschema.org/schema/Brick#Entering_Water_Temperature_Alarm
    +  - https://brickschema.org/schema/Brick#Lobby
    +  - https://brickschema.org/schema/Brick#Water_Temperature_Sensor
    +  - https://brickschema.org/schema/Brick#Ozone_Level_Sensor
    +  - https://brickschema.org/schema/Brick#Luminous_IntensityShape
    +  - https://brickschema.org/schema/Brick#Fault_Reset_Command
    +  - https://brickschema.org/schema/Brick#CRAC
    +  - https://brickschema.org/schema/Brick#Transformer
    +  - https://brickschema.org/schema/Brick#Damper_Command
    +  - https://brickschema.org/schema/Brick#HVAC_Equipment
     
    @@ -621,7 +621,7 @@

    Adding Individual RDF Triples to a Model -
    <Graph identifier=5ce150cc-0406-457c-b3c8-78c97d73d352 (<class 'rdflib.graph.Graph'>)>
    +
    <Graph identifier=a2549c74-4292-41b9-9fe3-ac1b7259dbb4 (<class 'rdflib.graph.Graph'>)>
     
    @@ -667,7 +667,7 @@

    Importing RDF Graphs Into a Model -
    <Graph identifier=5ce150cc-0406-457c-b3c8-78c97d73d352 (<class 'rdflib.graph.Graph'>)>
    +
    <Graph identifier=a2549c74-4292-41b9-9fe3-ac1b7259dbb4 (<class 'rdflib.graph.Graph'>)>
     
    @@ -909,7 +909,7 @@

    Adding Evaluated Templates to the Model -
    ---------------------------------------------------------------------------
     NoResultFound                             Traceback (most recent call last)
    -Cell In[1], line 23
    -     21 # load libraries excluded from the python package (available from the repository)
    -     22 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl")
    ----> 23 g36 = Library.load(directory="../../libraries/ashrae/guideline36")
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:208, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference)
    -    206     if not src.exists():
    -    207         raise Exception(f"Directory {src} does not exist")
    ---> 208     return cls._load_from_directory(
    -    209         src,
    -    210         overwrite=overwrite,
    -    211         infer_templates=infer_templates,
    -    212         run_shacl_inference=run_shacl_inference,
    -    213     )
    -    214 elif name is not None:
    -    215     bm = get_building_motif()
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:417, in Library._load_from_directory(cls, directory, overwrite, infer_templates, run_shacl_inference)
    -    415     lib._read_yml_file(file, template_id_lookup, dependency_cache)
    -    416 # now that we have all the templates, we can populate the dependencies
    ---> 417 lib._resolve_template_dependencies(template_id_lookup, dependency_cache)
    -    418 # load shape collections from all ontology files in the directory
    -    419 lib._load_shapes_from_directory(directory)
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:520, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache)
    -    518         continue
    -    519     for dep in dependency_cache[template.id]:
    ---> 520         self._resolve_dependency(template, dep, template_id_lookup)
    -    521 # check that all dependencies are valid (use parameters that exist, etc)
    -    522 for template in self.get_templates():
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:470, in Library._resolve_dependency(self, template, dep, template_id_lookup)
    -    468 # if dep is a _template_dependency, turn it into a template
    -    469 if isinstance(dep, _template_dependency):
    ---> 470     dependee = dep.to_template(template_id_lookup)
    -    471     template.add_dependency(dependee, dep.bindings)
    -    472     return
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup)
    -     84     return Template.load(id_lookup[self.template_name])
    -     85 # if not in the local cache, then search the database for the template
    -     86 # within the given library
    ----> 87 library = Library.load(name=self.library)
    -     88 return library.get_template_by_name(self.template_name)
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:216, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite, infer_templates, run_shacl_inference)
    -    214 elif name is not None:
    -    215     bm = get_building_motif()
    ---> 216     db_library = bm.table_connection.get_db_library_by_name(name)
    -    217     return cls(_id=db_library.id, _name=db_library.name, _bm=bm)
    -    218 else:
    -
    -File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:230, in TableConnection.get_db_library_by_name(self, name)
    -    222 def get_db_library_by_name(self, name: str) -> DBLibrary:
    -    223     """Get database library by name.
    -    224 
    -    225     :param name: name of DBLibrary
    -   (...)
    -    228     :rtype: DBLibrary
    -    229     """
    ---> 230     return self.bm.session.query(DBLibrary).filter(DBLibrary.name == name).one()
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:316, in TableConnection.get_db_template_by_name(self, name)
    +    314 try:
    +    315     db_template = (
    +--> 316         self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one()
    +    317     )
    +    318 except NoResultFound:
     
     File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/orm/query.py:2870, in Query.one(self)
    -   2852 def one(self):
    -   2853     """Return exactly one result or raise an exception.
    +   2853 """Return exactly one result or raise an exception.
        2854 
    -   2855     Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects
    +   2855 Raises ``sqlalchemy.orm.exc.NoResultFound`` if the query selects
        (...)
        2868 
    -   2869     """
    --> 2870     return self._iter().one()
    +   2869 """
    +-> 2870 return self._iter().one()
     
     File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:1522, in ScalarResult.one(self)
    -   1514 def one(self):
    -   1515     """Return exactly one object or raise an exception.
    +   1515 """Return exactly one object or raise an exception.
        1516 
    -   1517     Equivalent to :meth:`_engine.Result.one` except that
    +   1517 Equivalent to :meth:`_engine.Result.one` except that
        (...)
        1520 
    -   1521     """
    --> 1522     return self._only_one_row(
    -   1523         raise_for_second_row=True, raise_for_none=True, scalar=False
    -   1524     )
    +   1521 """
    +-> 1522 return self._only_one_row(
    +   1523     raise_for_second_row=True, raise_for_none=True, scalar=False
    +   1524 )
     
     File /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/sqlalchemy/engine/result.py:562, in ResultInternal._only_one_row(self, raise_for_second_row, raise_for_none, scalar)
    -    560 if row is None:
    -    561     if raise_for_none:
    ---> 562         raise exc.NoResultFound(
    -    563             "No row was found when one was required"
    -    564         )
    -    565     else:
    -    566         return None
    +    561 if raise_for_none:
    +--> 562     raise exc.NoResultFound(
    +    563         "No row was found when one was required"
    +    564     )
    +    565 else:
     
     NoResultFound: No row was found when one was required
    +
    +During handling of the above exception, another exception occurred:
    +
    +NoResultFound                             Traceback (most recent call last)
    +Cell In[1], line 23
    +     21 # load libraries excluded from the python package (available from the repository)
    +     22 brick = Library.load(ontology_graph="../../libraries/brick/Brick-subset.ttl")
    +---> 23 g36 = Library.load(directory="../../libraries/ashrae/guideline36")
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:194, in Library.load(cls, db_id, ontology_graph, directory, name, overwrite)
    +    192     if not src.exists():
    +    193         raise Exception(f"Directory {src} does not exist")
    +--> 194     return cls._load_from_directory(src, overwrite=overwrite)
    +    195 elif name is not None:
    +    196     bm = get_building_motif()
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:345, in Library._load_from_directory(cls, directory, overwrite)
    +    343     lib._read_yml_file(file, template_id_lookup, dependency_cache)
    +    344 # now that we have all the templates, we can populate the dependencies
    +--> 345 lib._resolve_template_dependencies(template_id_lookup, dependency_cache)
    +    346 # load shape collections from all ontology files in the directory
    +    347 lib._load_shapes_from_directory(directory)
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:447, in Library._resolve_template_dependencies(self, template_id_lookup, dependency_cache)
    +    445         continue
    +    446     for dep in dependency_cache[template.id]:
    +--> 447         self._resolve_dependency(template, dep, template_id_lookup)
    +    448 # check that all dependencies are valid (use parameters that exist, etc)
    +    449 for template in self.get_templates():
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:398, in Library._resolve_dependency(self, template, dep, template_id_lookup)
    +    396 # if dep is a _template_dependency, turn it into a template
    +    397 if isinstance(dep, _template_dependency):
    +--> 398     dependee = dep.to_template(template_id_lookup)
    +    399     template.add_dependency(dependee, dep.bindings)
    +    400     return
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:87, in _template_dependency.to_template(self, id_lookup)
    +     84 # if not in the local cache, then search the database for the template
    +     85 # within the given library
    +     86 library = Library.load(name=self.library)
    +---> 87 return library.get_template_by_name(self.template_name)
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/dataclasses/library.py:578, in Library.get_template_by_name(self, name)
    +    569 def get_template_by_name(self, name: str) -> Template:
    +    570     """Get template by name from library.
    +    571 
    +    572     :param name: template name
    +   (...)
    +    576     :rtype: Template
    +    577     """
    +--> 578     dbt = self._bm.table_connection.get_db_template_by_name(name)
    +    579     if dbt.library_id != self._id:
    +    580         raise ValueError(f"Template {name} not in library {self._name}")
    +
    +File ~/work/BuildingMOTIF/BuildingMOTIF/buildingmotif/database/table_connection.py:319, in TableConnection.get_db_template_by_name(self, name)
    +    315     db_template = (
    +    316         self.bm.session.query(DBTemplate).filter(DBTemplate.name == name).one()
    +    317     )
    +    318 except NoResultFound:
    +--> 319     raise NoResultFound(f"No template found with name {name}")
    +    320 return db_template
    +
    +NoResultFound: No template found with name https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor