From 5e28a8d1086f3f4e8a395d2d0a4c9115f0a4222d Mon Sep 17 00:00:00 2001 From: Andrei Bondarenko Date: Tue, 28 Sep 2021 19:53:12 +0200 Subject: [PATCH] Missing files and requirements --- framework/interactive_prompt.py | 3 +- requirements.txt | 1 + services/__init__.py | 2 + services/bottom/V1.py | 76 ++++++++++++++++++++++++++++++++ state.p | Bin 72727 -> 75409 bytes state/test/fixtures/state.py | 2 +- 6 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 services/bottom/V1.py diff --git a/framework/interactive_prompt.py b/framework/interactive_prompt.py index 81db73e..a9b5e16 100644 --- a/framework/interactive_prompt.py +++ b/framework/interactive_prompt.py @@ -5,6 +5,7 @@ from pprint import pprint import prompt_questions as questions from inspect import signature from uuid import UUID +from ast import literal_eval def generate_context_question(ctx_type, services): @@ -53,7 +54,7 @@ def main(): args_questions = [] types = {} for p in signature(method).parameters.values(): - types[p.name] = p.annotation # can't use filter in question dict, doesn't work for some reason... + types[p.name] = p.annotation if p.annotation else literal_eval # can't use filter in question dict, doesn't work for some reason... if p.annotation == UUID: args_questions.append({ 'type': 'list', diff --git a/requirements.txt b/requirements.txt index b49798e..9b9d2f6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ pytest==6.2.4 neo4j==4.3.4 rdflib==6.0.0 +PyInquirer==1.0.3 diff --git a/services/__init__.py b/services/__init__.py index e36ebb5..a82215b 100644 --- a/services/__init__.py +++ b/services/__init__.py @@ -1,9 +1,11 @@ from services.scd import SCD from services.point.cartesian import PointCartesian from services.point.polar import PointPolar +from services.bottom.V1 import Bottom implemented = { "SCD": SCD, "PointCartesian": PointCartesian, "PointPolar": PointPolar, + "Bottom": Bottom } diff --git a/services/bottom/V1.py b/services/bottom/V1.py new file mode 100644 index 0000000..0d9a774 --- /dev/null +++ b/services/bottom/V1.py @@ -0,0 +1,76 @@ +from uuid import UUID +from state.base import State +from services.bottom.V0 import Bottom as BottomV0 + + +class Bottom: + def __init__(self, model: UUID, state: State): + type_model_id = state.read_dict(state.read_root(), "Bottom") + self.type_model = UUID(state.read_value(type_model_id)) + self.model = model + self.bottom = BottomV0(state) + + def create_node(self, name: str, value=None): + + if value is None: + n = self.bottom.create_node() + else: + n = self.bottom.create_node(value) + self.bottom.create_edge(self.model, n, label=name) + + def create_edge(self, name: str, source: str, target: str): + try: + src, = self.bottom.read_outgoing_elements(self.model, source) + except ValueError: + raise RuntimeError(f"No element named {source}") + try: + tgt, = self.bottom.read_outgoing_elements(self.model, source) + except ValueError: + raise RuntimeError(f"No element named {target}") + e = self.bottom.create_edge(src, tgt) + self.bottom.create_edge(self.model, e, label=name) + + def read_value(self, name: str): + try: + element, = self.bottom.read_outgoing_elements(self.model, name) + return self.bottom.read_value(element) + except ValueError: + raise RuntimeError(f"No element named {name}") + + def read_edge_source(self, name: str): + try: + element, = self.bottom.read_outgoing_elements(self.model, name) + return self.bottom.read_value(element) + except ValueError: + raise RuntimeError(f"No element named {name}") + + def read_edge_target(self, name: str): + pass + + def delete_element(self, name: str): + try: + element, = self.bottom.read_outgoing_elements(self.model, name) + self.bottom.delete_element(element) + except ValueError: + raise RuntimeError(f"No element named {name}") + + def list_elements(self): + tm_names = {} + for key in self.bottom.read_keys(self.type_model): + element, = self.bottom.read_outgoing_elements(self.type_model, key) + tm_names[element] = key + unsorted = [] + for key in self.bottom.read_keys(self.model): + element, = self.bottom.read_outgoing_elements(self.model, key) + element_types = self.bottom.read_outgoing_elements(element, "Morphism") + type_model_elements = self.bottom.read_outgoing_elements(self.type_model) + element_type_node, = [e for e in element_types if e in type_model_elements] + unsorted.append(f"{key} : {tm_names[element_type_node]}") + return sorted(unsorted) + + def to_bottom(self): + pass # already encoded as bottom + + def from_bottom(self): + pass # already encoded as bottom + diff --git a/state.p b/state.p index a7d43373ff49742173fb5dd8857c81f7aca3c6b8..d0e03d52a609bcb37eb780681bbad7df8981543e 100644 GIT binary patch delta 12147 zcmbQfgJt4b7M2ExKkkAVT%+`S-~FDT~j zMl*LmNC`+^Mjf)w10dl)C_49{>a6!Y2vP&m3UdG4}?VxpzQHz@dq(8>IOzNX7?6^KCTE_d!a)feA`y$f@8#JxD49MfW{4-H$*@ zz~OHmFw{=~YXxz?gVlqQ7l;Qc ztg=9*<^(Va68aBT0J09mB#0*h=79nX#FGK@KtTlJsepN)vIE4c z*8y`uAp+u>fO(*h0P$?VJW!ql@!Y{YP;i5I{$L&`Y(czmFb@=#AYMF}m%dLtoCO1rAVF88bB!PhJ z18D*!lnGgUP&r6)5rgs|2}BOcgCr0&C=ZfA^q@RQ`Y?m?AnC)7pTQTL(I5%L6DkQw zAc0UGB!NUid5{E>2<1T%NG6n*&c8WuYYh`qo5P|iO)glZGSqm8_8}3(~{C;Pk4w!!sRP=yZCm0zRycx63f&|uplwJj~z*4s$nkMcF z+kN{Xy1BeCI)C$p*xCiQ-r4X6P`}X8QoO22yz`&4o4aDjJIp-dT1=ju) zV)84H0NCVDAQo8aJIG|U$rJbbXoLCUpaK}ol4Az@K^Y_f)}#$$fu#&48|+t~tiR6( z5;y@6iOKEzvaG@Kr4RuIhO9;qs|)0sP7n($I{{+wRFDAJ;JF~yYLUr0`zzJKDh@#e z7#OlnLe!oE34qmJ1F=?%Og^)}5@Pvps6gO>EJ#o&u)tzQ2gK?FS#APifsM9i0sG1U zBmg$h1H=ML`Lawl+^;rS@t_wZq2$74N+6mlK>}b+jUX0SQyWCn-h*C(VE!_=%xad& zJ^Pd=TOV?O$ef1DT!84=bm%VAYLUqk56d#G7TLVvFdw7#Ly%*mLB$N%uq0LnhR&>X z5dRTKCLhEC%apKARy?gXng8fjh@Q1@nJugg3>{fJL42^DgCG`I&oPJ|(_@F#!1nxy z%doM5^l*a;IhzJ8i z)+(^t^&mc2?RF4rwaDfLC&QrTeuaoIFl7A!t7QZ=D!^(vL9Epxn`KUiF=~O`>kbiN zV94@g2e~&G#0RU52C=|?Oqi^2T7C23Gulu+GvP7|z^F!QsIHX9>Vr5^$CRoTUM08NgW;S~RtB6^ z0B2ReSq*Sj2b?tl&YA&dEr7FDz*!sMtR0*T_0ZD)09^0{oOJ=tx&dcBfU{n}Ss&o6 zA8-}}sObR-K{!hQ&XRz$f)wCP4LHjH&a!~B9N;VuI4c0oih#57xxn?($4k*n8lsc^ zE|>FYh%zu_9RVrO5S@JSvK&bKuu*$27AZpH41rW9GYN<9@`4qVF+1#M=Zvlv}2{L&F zhy_-&7GhBIwcsEy|14bQ1~&skk6=K4W?qSNVo^zIab{v(e6rD$tOsx<&p}F!?(R5 ziE1lEX0p^BsFmj-RvJyox&o2{TX_e>0&9N=(cX9mY9%A6=LMGG-~(C73*v*V6a}%s zGE#hCzlq%ShWOeFE@KaonR?epBOMg;`5>7L5UZMxfuV=B0F-p5WHrNuJ0KeL?&%AH zm92owtcA!-hRK|T%UlA>)SD)zOaZs>d)S=vOG@%{r+}O8JuH6tDXCMkKn?dE4&VHu zf{e`K+$mWzTR3>?VSfQZQp9W&t zf}*4l!~*rXN;7pV62#6~yhy zng*h#XH5rDi?U{bsI^%$LDY_{Ss?0g)@%@UE^7{mx|uZ>L_LH!{WZkRUm-sDpS2KF zV}Zv|7J*pcF_gt17I+|K35W$AO{rfBVuFWLmVsE#piang5X%q5S^;83f>oJIRAH@0qVm$$|z@s`(K`hWfPu6n~%aj$=#&`i@ zI)Pe>uR$#E$j}=Qs~#lw4#a8)vEGANQ$VawAl4BO>obUT5ybimV%-F>zJXZJK&+o2 zmKdo0_Y1^Q2C@EtSlS@gUr_jGS%8=fpx6VCEHQ#ur64h85UUo%Vga$bKrD6;3p|L$ z0b(5oiE)8g=RquP5bF+z#Rp>XfSPjrAeJPEB?w|Ef>=TzmL7;DS`T8zftX?-RyK$w z0b&({Sdt)C1BfL9Vu6RlWI?RGATfCm>nMn&0AgJNv6Mk9@Bo_%hy@y8E6wl&CCK@p z)G{S&0fc%53I%yaP#fbdlnHHZfQC9sGa^7*=7H4KWqkxG01dHaeSx!nfLNxWMDQEV z`VV3`fW(+Uc7s{qW(H`)q%^CNk%0kZDk!UEm4lS669L&jAH-Y_(z^!4+6ZFZ0I@cK zSWiK$Eg%+nJZ~$A#l^(HP?}W@HV@K4Zf0a)D9-AIh=99K-C&V^hzQsf)4?JOkwmtD z{9l~45=m$eSkW9wCW*1&jPg5)onoIgyWi~fz(N|}oSUTt>NRf%dD08S+5uvPgIK#jtY#2vH;6R>#M%pDtpKt1 zfmmC?!J-B>4q}5I*iH+G2-r7fU=h&R0mL`;3|UTKAs>h$uy^9YA|Xg3>0psUhzQuA ze6R>;JON@5Lsm6dq!pqDY|ad@NH3De0V7 ztYaV+c*OTOh?T$$N-Y<`#zBJRCfI_gXbQ|bGr%H?AZozg z*$Ng}g(R{UEOHzo0ygI;SOhfE0yF0#Smbs+L=o7acVMB%NFv|BA`C3x@CB<8W&ypq5-a}vy?%V&Lxm1y+N$YAXWs3brr;F0kN)uSQA-5<Z54OP)A_De~IamZV&I9v~Gg!nIq6X~J1h7abl1K(vqzEDcHm8849^@U+ z*bmI08nB`^h$65-Gr=N#NFoctBCC-^_JKtW7Gbj^U{)2|GOS67Ki~vXb`lFK$k}|X;CKO#Qt*I91Rx?{H4n7iT3vgun*Hffa#9rC=eF1s0hHQ3Ez;4p?LXL<^J2WNpD0h;D0&3XoL1lXZZKvrhGfQW$Ad;p95f{1_}`U5Ni8gzp>l!YA> zmKN;b&;^@QZw3~!f(U^PasrF^Kt#X>d4WYhBXTf&qjWHHR@8%q?m!fQ4Y~yuxd#ye8}tk;@&O_OHs~E#1T=I9Gw2ssM3MvS zGq4(Q4v=4^AtGRNltCgHNiZ$eAZ~p|4vg;%;%Ah>xZYrHCyWc4Vk*v<594NoWmmzt z#bEAM7`GbCJpki2gSn?++-@-U8kh@ee@_PUAA|V}3|X_m+_y09VlekRjJq1d&0<6} zY^GMKF@QnVX0Q~fpn)mg4HgkWD9$w`iEzspvVMa_KuH{`rap_A6BJK3kV-euTwQUN7E-Ao z3|3QvBq9wKIfo>o3>HyaD>-VvxiI*5(Wr$v_hE28--M z5(x&2yhUqm*!6G-2M7qHu+DHzX z3>K+H5}6GaIgcc=7%XxD$;{V*LlQX*7Lh=5&}pzp7Lv$i zu*e=Hk=tMqJ|qV{292>6XC)vBy#_1Vge3AAEbYySYyb3}a#99Oz=+FVN)`M93Al7XV%K*fB0b&_}SR$Z7O=A!X zyq3Zg#Igj5nSoe-AeI$~RRm&LgIM527PcVPYHm>b%MQfc0g|={u`YvHP9WBI5X%|F zVgZe{xPn*)AeI}5Wy=Fh=9jLkAu~mhKPX8xeOM$izM;^ zEbH459{Xv?f?Y4oSoiEMko$;tUo6 zg$K->FtA7hL`^+-95fCrlmrn18=VCfDM1ox2aD7oiS&a-WS+*D~ zvKFESZ1MrH$X2Kbc>Lo8SO^q9Fm1QNB2OWTz)pM&76A>b!_>S7i~NMB0UOQ30}3-n z9&jjvMMS_Nau5-)6J@|6pka2fIiUJa11w|&Q3TfJ3Kp?K67dC#q<}>K?Bbrq6`f6S&ATLC`ix@#EJm1 zqCl)j5DUBtDH_C@3=)e0u@-<>u^<+Bc~Sz1bsr>_2x7efv64Y73DCG?3W%l32g)m; zb%LNaBG`+0Ah(2zg8UC&P!a`F2WG{CSfJH)SxGQfX;uZ;=a9To1`Z3*bOSgD85pvf zz#=^mHDKfCgGHtwi7W?;Y=nq_llXcbaQO$CgMb;d8?5LkL=o7a8(@*MNFoowBCjAK zV1r(OML_ctFmt|uMgBq5fXxx)1*Hu(UPRiE1c}sVfmR{Hv}uEczzb|(B6eUA4~RB! zLUaR*fF>|tYJ$KbF%UIi%kse@DM%vaV39_M2sk0ugGK5=Ga4|1y1_zIA&S5TtpJP6 zMH1Nn76C;MOxIzs$XSRQuoF*%ML-iCFg4e~A`c;Iz$SkIi@XH60;UMGP^mbJjSn0| zU^lYxfdUOQ0|HYc02Yygr~wpA5-|mf_&`L!^B-Pd5kH6sc!DDgERq0PFH}1v z3#=#(ER=+#C<`o70v6H8$^@mxB2b#n2C>>etQ-()GKiH2Vyy*fn8P!hy`A6R|;Z*mN}JzXDw={Kqgs0>+6caYo}l$fB1wz0SsChRXZiC45Uqv zfBH2>Mt^q5q{oHrN=%INCF>zm8=!@A;M56ra~3EOfL)dap5Fj@5NtYFtQ6{1jjRQr zKmjd5giMWq*N}ndLO}j61setO2zbf~yc`icc>-F9mj#|J3E^j`XDEdRibmE^kZ}h< z1bBW0v_dZnJaGdGsZy}rAmhOERN(cC;29Xu(!DJ3ybCD!O5wo=T4e@Ve+HVEf~+M2 zPv{^ApGGKT&Ic5L8Fdgpf>yDCS*2hSWF>ey3$!#bqZ7OqyA({;PJv7gfz}`vm-es} O<>!}7$>1wZ(gOhdDF4F% delta 9498 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 x%{WIgtTYR1 1: