From 4d46221c05a14248e605a798ab62d5cb89469983 Mon Sep 17 00:00:00 2001 From: vanithakattumuri Date: Mon, 5 Aug 2024 21:11:15 +0900 Subject: [PATCH 01/22] Updated the latest pami version='2024.8.5' --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c717bc40..ff335d20 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name='pami', - version='2024.7.2', + version='2024.8.5', author='Rage Uday Kiran', author_email='uday.rage@gmail.com', description='This software is being developed at the University of Aizu, Aizu-Wakamatsu, Fukushima, Japan', From 27f93da461746303b4963612b8f8d4fa7b3514db Mon Sep 17 00:00:00 2001 From: choubeyy Date: Wed, 7 Aug 2024 02:45:44 +0530 Subject: [PATCH 02/22] Added Uncertain Graph Mining algorithm MUSE --- PAMI/extras/graph/convertFormat.py | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 PAMI/extras/graph/convertFormat.py diff --git a/PAMI/extras/graph/convertFormat.py b/PAMI/extras/graph/convertFormat.py new file mode 100644 index 00000000..9dbc6856 --- /dev/null +++ b/PAMI/extras/graph/convertFormat.py @@ -0,0 +1,33 @@ +# Usage +# obj = ConvertFormat('iFile', 'oFile') +# +class ConvertFormat: + def __init__(self, iFile, oFile): + self.iFile = iFile + self.oFile = oFile + self.convert() + + def _writeGraphToFile(self, graph, oFile): + node_str = ' '.join(f"{node} {label}" for node, label in sorted(graph['nodes'])) + edge_str = ' '.join(f"{u} {v} {label}" for u, v, label in graph['edges']) + oFile.write(f"{node_str} : {edge_str}\n") + + def convert(self): + graph = {} + with open(self.iFile, 'r') as iFile, open(self.oFile, 'w') as oFile: + for line in iFile: + parts = line.strip().split() + if not parts: + continue + if parts[0] == 't': + if graph: + self._writeGraphToFile(graph, oFile) + graph = {'nodes': [], 'edges': []} + elif parts[0] == 'v': + graph['nodes'].append((int(parts[1]), parts[2])) + elif parts[0] == 'e': + graph['edges'].append((int(parts[1]), int(parts[2]), parts[3])) + if graph: + self._writeGraphToFile(graph, oFile) + + From 51e63f1397a9d708e1a7176b92e5b8f05198cc07 Mon Sep 17 00:00:00 2001 From: choubeyy Date: Wed, 7 Aug 2024 02:51:45 +0530 Subject: [PATCH 03/22] Added method to convert graph transactions to a new format --- PAMI/extras/graph/convertFormat.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/PAMI/extras/graph/convertFormat.py b/PAMI/extras/graph/convertFormat.py index 9dbc6856..733e4296 100644 --- a/PAMI/extras/graph/convertFormat.py +++ b/PAMI/extras/graph/convertFormat.py @@ -28,6 +28,4 @@ def convert(self): elif parts[0] == 'e': graph['edges'].append((int(parts[1]), int(parts[2]), parts[3])) if graph: - self._writeGraphToFile(graph, oFile) - - + self._writeGraphToFile(graph, oFile) \ No newline at end of file From 6f0fb8142ea0523dafe1b9798363e13a6173873c Mon Sep 17 00:00:00 2001 From: choubeyy Date: Wed, 7 Aug 2024 02:54:03 +0530 Subject: [PATCH 04/22] Added method to convert graph transactions to a new format --- PAMI/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 338 bytes .../graph/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 171 bytes .../flatTransactions.cpython-311.pyc | Bin 0 -> 2266 bytes .../graphTransactionExtras.cpython-311.pyc | Bin 0 -> 5714 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 182 bytes .../basic/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 188 bytes .../basic/__pycache__/abstract.cpython-311.pyc | Bin 0 -> 2290 bytes .../basic/__pycache__/dfsCode.cpython-311.pyc | Bin 0 -> 6016 bytes .../basic/__pycache__/edge.cpython-311.pyc | Bin 0 -> 2677 bytes .../__pycache__/extendedEdge.cpython-311.pyc | Bin 0 -> 5271 bytes .../frequentSubgraph.cpython-311.pyc | Bin 0 -> 2191 bytes .../basic/__pycache__/graph.cpython-311.pyc | Bin 0 -> 9976 bytes .../basic/__pycache__/gspan.cpython-311.pyc | Bin 0 -> 37488 bytes .../sparseTriangularMatrix.cpython-311.pyc | Bin 0 -> 4289 bytes .../basic/__pycache__/vertex.cpython-311.pyc | Bin 0 -> 3231 bytes .../topK/__pycache__/DFSCode.cpython-311.pyc | Bin 0 -> 7139 bytes .../topK/__pycache__/DFSThread.cpython-311.pyc | Bin 0 -> 2875 bytes .../topK/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 187 bytes .../topK/__pycache__/abstract.cpython-311.pyc | Bin 0 -> 2412 bytes .../topK/__pycache__/edge.cpython-311.pyc | Bin 0 -> 2593 bytes .../__pycache__/extendedEdge.cpython-311.pyc | Bin 0 -> 6201 bytes .../frequentSubgraph.cpython-311.pyc | Bin 0 -> 2119 bytes .../topK/__pycache__/graph.cpython-311.pyc | Bin 0 -> 10091 bytes .../sparseTriangularMatrix.cpython-311.pyc | Bin 0 -> 4311 bytes .../topK/__pycache__/tkg.cpython-311.pyc | Bin 0 -> 33190 bytes .../topK/__pycache__/vertex.cpython-311.pyc | Bin 0 -> 3362 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 188 bytes .../muse/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 193 bytes .../muse/__pycache__/abstract.cpython-311.pyc | Bin 0 -> 1661 bytes .../muse/__pycache__/dfsCode.cpython-311.pyc | Bin 0 -> 4310 bytes .../muse/__pycache__/edge.cpython-311.pyc | Bin 0 -> 1916 bytes .../muse/__pycache__/graph.cpython-311.pyc | Bin 0 -> 3227 bytes .../muse/__pycache__/vertex.cpython-311.pyc | Bin 0 -> 2676 bytes 33 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 PAMI/__pycache__/__init__.cpython-311.pyc create mode 100644 PAMI/extras/graph/__pycache__/__init__.cpython-311.pyc create mode 100644 PAMI/extras/graph/__pycache__/flatTransactions.cpython-311.pyc create mode 100644 PAMI/extras/graph/__pycache__/graphTransactionExtras.cpython-311.pyc create mode 100644 PAMI/subgraphMining/__pycache__/__init__.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/__init__.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/abstract.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/dfsCode.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/edge.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/extendedEdge.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/frequentSubgraph.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/graph.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/gspan.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/sparseTriangularMatrix.cpython-311.pyc create mode 100644 PAMI/subgraphMining/basic/__pycache__/vertex.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/DFSCode.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/DFSThread.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/__init__.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/abstract.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/edge.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/extendedEdge.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/frequentSubgraph.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/graph.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/sparseTriangularMatrix.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/tkg.cpython-311.pyc create mode 100644 PAMI/subgraphMining/topK/__pycache__/vertex.cpython-311.pyc create mode 100644 PAMI/uncertainGraphMining/__pycache__/__init__.cpython-311.pyc create mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/__init__.cpython-311.pyc create mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/abstract.cpython-311.pyc create mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/dfsCode.cpython-311.pyc create mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/edge.cpython-311.pyc create mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/graph.cpython-311.pyc create mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/vertex.cpython-311.pyc diff --git a/PAMI/__pycache__/__init__.cpython-311.pyc b/PAMI/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..564646ef1b998a1a97a4141dc450e6b95830aa5d GIT binary patch literal 338 zcmXv~O-sW-5Z!H3svB!>Im#YH>?MddiwMDr1gX}KUP5Gu-K|+{H(|3Cl2iYK2Y-V2 zk4mqeycK%u$&J-F@a7FOJRbAWY!YN}`~5h2GySU?{(=9*$~EF0F%%+(L(FPnjai|^ z?0eL%mxrY9_X0wE+V{2QO442+g?y%2p_5e7v3OFkDm+rwkGvD_xNP0|mlt%v;(}fY z70c3nNH`rx@yb;$bV1V*^+h?oZrh6n0857e3kTqLok}whfOu-m)n+kNoC%!+e429zmOFFi&Al0!?;gyYs#L=q{s6{lVPpUR literal 0 HcmV?d00001 diff --git a/PAMI/extras/graph/__pycache__/__init__.cpython-311.pyc b/PAMI/extras/graph/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fdc88a52405dcb44f919dbca6f79e2a7fd4d94e GIT binary patch literal 171 zcmZ3^%ge<81c5JO(?IlN5CH>>P{wCAAY(d13PUi1CZpdrtv?IN^{T>{1?;!p;u=pIt>Hiyt-c)T)$R4$7W{9L<( zy>YA2nyaB1tfCoC#rMz*uX2Eb$^(k30CPo0nkXpN4O20wGH2-}gU+=X7!g~Ghi7*H zU=!)6f@H9~q9S0x(+TWIxh@ju6R1|mQAS4gCdMz%en~ZxrY7mUVx-a3&-teZjUYVk?*0XX?QWH;;57Q`lU2ULtM~}?dSz9BHup+ftcc+E{%W8SsBlZz z6!WOURRUMQoxS%xt1X7kS4G%{gL&+qG)DJ_?q8{Jz&W%Uuvkp3Vu@|5o4J#rv(=8} z{s&+o+2^aE1>a`MS+RRbtK@VwqpMR&ndp=#q@YualyXGXT~#Qiu2HhATl3_$c9)W& ziOKX3Q4Ey~WhT>f$fp@Ih;~OQmJ1r2ZOsFjb+_y`N{d!`(E|F*B(GW7#ar%o&ajUS z%a(N`PjrK1vSq~}a|MM`pEPHdiiEZ%Oo0N7eCn1$^|@4@f;T9`cXfD(%n?{n3Bd^f zuV$!DfR;>4QyrdamdQ>u5i}v`kQ4E?orYaP436Z6bfeS`jyl1j7n;L^rz7Nbl{!2_ zrk&Q≉gu&HiQuEe{0l5g~e&_3{bnWc*`q}HX_(VNEVTX@x zWozM+cKGBD8Fmw^aUfbh5Vu2dvj@WO$SroeF|F+mfXX+KujJt2Lk6GrS1>dLo zYL)_tSGM8xxZOaIE90}^x5`6ya#df~z5^I4S8d;=uXZEro&Ba2-nStyfpPza?aZq0 zkjj70b@oB#rhAYouwUm~482)&8l6W}Smy5VH_jRpmkT>j;LE&kvihC35Fvq zlyt-4LCKH+mYEPe?Te)e;Bs)z!LlQOyeVa=;fmUm^Z z80`1G)q45z?;4qRpE0S{8PYy(}@84b25~oCd*E*EEh}aVu9IV zS^j!aDR?7h2xglH84Lpairl<$58Gq{b|C@=9RpbNe@y|4r{QGUARH72o5+XZfC!s= z9XxhM41dzz0_?NwFS-}H;syGtc?Jep{?Us7aE=%^kDkIn`#L;leJ|cH;1d52Ctx4Z literal 0 HcmV?d00001 diff --git a/PAMI/extras/graph/__pycache__/graphTransactionExtras.cpython-311.pyc b/PAMI/extras/graph/__pycache__/graphTransactionExtras.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc31db4a42d8c772ab915c7e46fd6f768d57906d GIT binary patch literal 5714 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 aCGt|i`YSsxGYl+lbNZCFf44<1Rq8)VCn&N2 literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/__pycache__/__init__.cpython-311.pyc b/PAMI/subgraphMining/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..679b9ec6c225693b1286f5ad5a2bf8a387881da8 GIT binary patch literal 182 zcmZ3^%ge<81c5JO(?IlN5CH>>P{wCAAY(d13PUi1CZpd@Ma95+9fu85ut?z=$Gdpcnu>P{wCAAY(d13PUi1CZpd)=dU}j`w{J;PsikN|70FU`F A9smFU literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/basic/__pycache__/abstract.cpython-311.pyc b/PAMI/subgraphMining/basic/__pycache__/abstract.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f234573a68bc8a5489e85065ad6976eba2cd2f28 GIT binary patch literal 2290 zcma)7&2Jk;6rcU@+VK~564JCq>L4T}bI6I4g^=2$t$IjWngY_wuo`>E_KN**XVxL) zfO5#8|3UwQBGemyiI3KvkT{^+T!m9lyf?dRXNeJvpWnRqo0*;WH8a078dU=AtIO|( zR*8^5P{|wUs$KmC-D~0!SMy1r*;=66x<*{xHGCs5ZBxmnUkWVSQgX>J2Nk=bWXsh+F5{8-tLy@K2k4$E_ZdPU8~Qj-D9zAM7Vh)|athgE-*vIC3vF9Mh80W5Fh4 z5XuLSj`t&%gV=f`_{%8|X-sFdrOay10uHQ~h8Tw?3oaJ38a2C%o;1VU^RQ2hp40@S#HT7a52 z(6U>CI9Q40jKH{XfIjC9WsKOB1q`yQ!A$+^vntKn^Jz%qF{f%JW&S7U=k{?(O#VjH0U;os@fzi%N?T-heLocb}1 zhU+qkPW_AL(KMb+WAwb}e~SMjT1AJetF;BUP03DHsYK;t@Js9>QyyY1=52ij|6F?b z0_rk=9Aw2goQ8wgi=bX3uq|{UtLgcrd4*lePnKMj|AT&);k%ZJu57wbznk%W}2&-I_gxCisOVV;Et129Vdv~sgH8q zab8ZDpNy3$zik!xtpOl?U&?A``P9)P%7sLO)@=#itVnaRGb_@Zd^#)AoOEYJnv>eO`dt(5%}9Z+TR11J XSxyU!YLNV!?A7r*ME_bdqzdA1tq@a@ literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/basic/__pycache__/dfsCode.cpython-311.pyc b/PAMI/subgraphMining/basic/__pycache__/dfsCode.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7024acb315a0c92ee6a96cfbf75c02806e5c2df0 GIT binary patch literal 6016 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 literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/basic/__pycache__/graph.cpython-311.pyc b/PAMI/subgraphMining/basic/__pycache__/graph.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..edcc0c08a7eba7b611a1dfaf566b2855917cd970 GIT binary patch literal 9976 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 Gakr_svTL1HBuy`Ub;6|>0!mG|2Kn;orLtT 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 O#Q(^}e@{@6Hva=6vF4@# literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/topK/__pycache__/__init__.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b5e11718bf6fd373705856f68a5727981fbf640 GIT binary patch literal 187 zcmZ3^%ge<81c5JO(?IlN5CH>>P{wCAAY(d13PUi1CZpd49j|Xx};^XxSDt~d<y?;IiQ#yNPJ*sWMurn03(W+fnoqwzAw1| literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/topK/__pycache__/abstract.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/abstract.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bcab64786922171dc0fcd3d6661a55b5501d65e8 GIT binary patch literal 2412 zcma)7OK;mo5MDm@up}#fsEO+|ELs#bQ25eIAQS}>J28U5t`oa0K&TZcaU~JqL)j%= z$A`iPAMy|K4^kBQGeS=UPX&4?d{f|_a_Y>Il)_p?yIReDGqby#*Y5sOuU84QCzn4A zo@#{rflS_j7wzgd7+w*Z*pf>;$&@_VlqF)zw&E(DYN`UOuIA~cF0kg7ys}vqSa&O4 z)vO9!a+kcCSrfSI*1d+=5V+zldrh+`aMiuxt(Yr-iM`~mdTZvIz%_T>TnAarZJ8}G ze&F3SZ)Lg-^FtxqG;fO$=E`J`*!2ryH>mVlA>jXly(PvC$K5N3c%wLqm~U!^C6?pBkG4oQE!;d)xV=G zq^F=&AJ{`&QhRV3Qs1U_#N!3=tDxcA2-o2&yaME$Osk|)f2m#pL;86@ky-52aAx&W$hRRf%#8sHJi{^uj!Wlm zwIQXJXN;|I)HV)*8et&9fYXeA;D?qlSIE+h=8F&53fQnEvsD-p6*u8%onf#wlvJ_Y zL@n~OW#QLcun7~cGVf}_JJtfx|M2c~=H2&@BS;t|jZq%Cp%DyHJE2hhc@oj3fAKqr z!f_O$-$n0J`9ES+bhkQRTX0(C)=8d5gr9;}Yy*k#4@)p_i?jFV%)evs%!BwFL*dXM z^829^K$!+$nQucz(^G8ZrN!sD$r3A4w%cnPxR-5(R?p%To#TQwag;PnZr<7Tmv=)Dw zW8mPZrj@0Mh@4eLQ3?D7sPog(nAg+6RyiqmyT0YoZa1lRyIx>NF5+6Z`#iGTRKrwQ z&hW&sTS#sr`4|aSxX7INFl!=<1WTU(4CH+F`(0a|%BohM5+H9CqOV>2mf;H`-$Ylv+^$D?r9 z!I4XD03EwQ=sG>P01+j6HY#Hm86Jg>o0Pg4kOQ75-GHZQD5mCJ`KvUyU$eXLAv|0B zF3_nWNm5KcnJnrtxj8BJm~2jpJtoGa*kiIiDfXCbOo}}wtx2)RV^bWbe+8X@-0gLTA&h@^*7#Fbszu$ literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/topK/__pycache__/edge.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/edge.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebdaaf865d4cb7e8361576e6e5c7d43d129c8247 GIT binary patch literal 2593 zcmb7F%}*Og6rc6ynqV*lQYarCK|`^GKnBuAsER~@rfG{?C9TvVORL2@;0>^bnZ=}* zTXD#N1BV_W;j~oZkhY-akYf)0BLMY)e5%w_Zm!&3IQ6~R^?GS(rHt+0yf-s`^Sa5Q97-hVo;8ke}h_j0Iu@?vrFNTVKFgahcjU z5PO7?1;ro>0YiC27J^0qFk}P)!$t@&VuS&sMg&kbq99GJgyxK8maXf6;)3q4wkTzm zloHW!U5-)!xcaT66a>!Gu%sAD5l$I_VwjK;Xd$^Ea!8ee5{ZU4$YF#)hp-+6flbsM z_t-jTf?2kpx(^ESX%`@-Fspv~hm?)y|^< zAE6$@!shNZQm^_oc%UKvCHnTIfq)s4PKGLhLJEH4m6#{0qULmwo5>ptwnKugE^!qO z^B4mDO<+9HpXVRUOl3Y3jEl@&k<+cr#}=FAW`Sj9nOL#&>zQ?Z&CGlt9w>O@mci(~9vqRJzV$0*G4x+oak-u6FK(cB5zQ9dha(fT`uI zyQi!_xppw|q~&nnaN}s``R${=ldiX4bf0wHh6C{(_|!lG$$HrY4APh@wMl?If|>XL zC}*t5lROG*UOrk8{|U$~rTD%VxqHms8(V)M=rZ`mqIrw`EAYuc!^uE5 zgBBH~AW#cRc^uiOZb`w#X6YZ7YlAJ(3jpp>Nl$Ot-rxFmq&%`??{4jE9nLH*XCf08Sy$m}>$r1k=Da5ZmUW;W_9GquwnLlH0P0uYVzDjv(7 zfufF?jk*ETu7G;H0~Pfd204q8eL3r}eg8D*t7Em-G02~RSVuAl&w>#rB=N z*sBHfzWW$5??g#y&`##&$6z02%K`fy?e4z;`*?qS-=p3AR@jHm>g{{9vkyrUD1Poa zd?v@TD}tKP+qUx3h0tF)qikbSUv)j5x6s+9Qy8+rUUau;`1`$Nq|#&x(-O9BWf@21 zod{g)MDpygyv=05+I#eY}to!V0 z*EcuL5*?4@2c1v*PZMKR5^NjCg=qQ4{>{_GU^NH}zxfx!uuzSVw$8^b2iKpDohDM% zXfSq3!A0R(G^2JCU=QA3@Gnr#_zqq*;Jx?*4{u*1roe~3#}_qRob!BM?>IVz-Vg1R z^7`AR+a@^MeQ3~rnqPdtvUbD4#TYIR7gAHS7#V>l4(8Yhl?6IQ&y{2{*yu;HtS`%b zywI2X4m%1ai4g#&nA1vma{ry<)_M3IzWMAehk7ylOWL6j)p=PP>0}IF0ZU(FnpSDj zw6(mkxr%hNrePvEJG=#i^LB(z1neHX2caL}h)7woWjc9-UPsT00>HNSsRrWV8Kp{m z*dGc{R*47Ap>RL4E&$tytP9Pt@I;k(a4i&0gS5-hQ3(}ELo30V4ffb g;)Adz)tv^S8dMae8b~Q9`*Qq4uK)QTyYh;^0oJudlmGw# literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/topK/__pycache__/extendedEdge.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/extendedEdge.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f91d12338ef9317ea46945b29db4696050b9ec9f GIT binary patch literal 6201 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 literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/topK/__pycache__/frequentSubgraph.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/frequentSubgraph.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0549a763db024752ffd3ef7a230a0a2a9714bcb GIT binary patch literal 2119 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 literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/topK/__pycache__/sparseTriangularMatrix.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/sparseTriangularMatrix.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..647b26a374ac185f02eeba6aada62376a7a7ac6d GIT binary patch literal 4311 zcmbtXUrZy%8K3=U3>eH|!Wr%^S;9due=ohusU?&IncfwlqwSGI4e{05^DeO9e>b~6 zILB7*ArI~e=}3i&+Y;54(ks!u?bAwUtrQ8VFU^}PS}EeG-^|*J7jP;y z>+x^r&o?vQ%>3s2zWqa6TML5cQm3{&)r`pg z*0Y3Ub`b@*NUegrnQGziI%IZ{f|eK=EwM7Q#L4W3Xo;6OKtbjKU9te!B)b6JauZ;) z?1mAW&F;mdgf-&L%p_IUCd_{~TQluZLNhOmBtc&-hXiCw>Tj;l3jf1lfO)w8yTIc+?IAdTECU4p)sYXJX*-$PUsmmvM|(&ycOexY!q*mn)m{@d2uYO6;~ zY-F096pxq|6Lt^O1dE}_*ah__4+?80zm`zrrl9IdOfy|lGO5JnfPe{CO&%(fCPx<5 zWGzrLo2|^Ejx}=Hu*&K>&8Bdet|I;7H?NZ16)g`yFHA>gj{nlvlfS$-^1OHWS?_SE zchu+|E&0X_-&h54&973(1{Aa%HPMn82jtQ-zK13 z5|<1>|B~Tf%FUHM9gpW9&F8Nc{S%N10qYG|@?0@ISBf;1z2_cpJlfdSf1cgS7Tp)= zwngf13n2-;xnDpA2*PC8b;u!v1(MJ5SuW0JfGi}J;ouh1Rs#1K+@9fOMrG=2Gu#xk z5&x6no%P3e7J7EdCwd*XW_Wvqy4f;Zy~HNFS!V-eCfx=WiHoqco&hd>$F{U{@d#F8 z)GHB3K#6?H&xn#vZ&fm(fjNg;Hl&VpLyB7BIaoU6Qa~O#i%B;hA%=5J_m4; zMD1!#jUe%K>464Za*Fkmk$wq4DdlO)-Fx&}?zM97h5S#pyK})@@Sv7GXl>t?ch-xo zeUQrH;69UoKR3HIpXW-Ri$$6ayf5V6+Iw%`XIvU9dPypejBfKgt@)tQAr`tz9YaN$ z4m!H*N~^}`7}}pHb&OdhTktfY$c|7#6(F;V9Bu#zYf zMb3T=HE=NT^qIQ$B%8V?a5{wLs~PR4Px)hxPk>Or=8s%31{kqpk7Nqg7u5;7(g)5FG@gquW9427)c%2``3+F~mi2Y_-3EmG zpFQ6MeKcYdfTwQM<xv2!7uv;3i2oGpY`~3OqznI>hF8eR;wHAVge`vqE z=)dxH*>`^D^}J^I`YVWO8z^`AcjgORvFq~JmDbv1l;aD57V=3HmtsmdY_^2Mv4ot8 zlDsDzzL%1s)fR{WzEyC3bvccahz*e3HODUqyLV&UK pa_V~Ip0bucjlTy{RN)!OR5*rVD(nv#2F5)b|3&Nn-Jq4u{9iZH3U>ei literal 0 HcmV?d00001 diff --git a/PAMI/subgraphMining/topK/__pycache__/tkg.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/tkg.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8da0ba685ada6ad671a72fbea6c89546b0d7e9d8 GIT binary patch literal 33190 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 literal 0 HcmV?d00001 diff --git a/PAMI/uncertainGraphMining/muse/__pycache__/dfsCode.cpython-311.pyc b/PAMI/uncertainGraphMining/muse/__pycache__/dfsCode.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d2260f430eb92c3dffcfef16f4c362445d2388f GIT binary patch literal 4310 zcmbVPO>7&-6`o!0l1ot%6N!o?%T0+uRZ9QJrW(kGE4i>u$rkK5a%lyKN`s}iD~dKn z(z8pcW><&~2Fe;jtrT`e7b!{vfuq1Z_>hASIi$B9Nr8Zb1p)-tce$my{K_LC>RAFJvNytC3U?riR**guHO~R84L?(BL%st`> zc?_?a=FAozS{yAcoGgS%K#W^m@ypcSpam( zBA`ol0!p$Aq)CP=G!;Idk(Ib53MHaC4tV!`0GlL1bP|P}nPd_sUvgKzS8P%`5>)?XmVMJgcS9rmdQr4v87~W=Ir~^Cgjp_g=(>6 z`T~t*7vE2&lj%fcDW@tCc|k?RMzXgJDH??aEgH?gQCD}wszFuNE`T+%>wBvpth)>F z+e203F2s70;LDaY1({7)&<(4Flp2?A*Xo?k>keJeMcujJd<1%)E+&{br)b9>W!rlHYgdISJgDs`^AcclJpslWJ6alZ8K*2yPRPbbR*=PJ_qs&u|=J+u@0$8B~& z0q0};@E^#unpVS>deU&ddeXU4LyJ{Q$Ro%;wu{Ys)LdHSbyBjXm~>s|Sx(`i@omjukqa*(7T{^$a(cAEKEEAf86KV6KWLw)-1u}3F1?=6VVdJXp z&dnNv7HDynV6>}YeLrAy``HI3qgmS$u+^F1@=(t_hf5b_R%+$%`a|>{$VYT20k`3R z6K;4CiiYR@a#Gc(7aHgr2&g&j1~4S(V7d;sg8k5~&_QSkNG4H*Y)o4ON0U^6)G~b= z2MNemLzI;)GzmD)kkU#ru{fWhDz3tGJ#{WKae0r$VmJ>tvx?^iosRdO=dNcXRFMX% z(m+`n*!2w*hwfk6@g3Rr9jW+^Rei^5M08)}Oe}b=-K}e%9WNc<(C)8ntUS@a zS}9!I^&Tj$l)c07?Dh^8bLHM4cy@jL_osJ!L)*TglCpK}$*HHa-@NzruXZM`ZckjT zOoXcw;qvT9)!BGixlz8URuyeWS>0AvE6T@J<>MM5!)N(tg!G-`pEHCS$b;0)i+{XW zyjHqantFJB>%x=Srx(9b{t^3ovf`Vm`ew?$nHM$BzSiw76KTl~QwTD@<2H$A2LeJ0 z+yV#TRs#CkwW0s(7@6st!YvB_8N7Rk0UmId2*)DS^{!P;=YG%cN2+D=A=%_OvfgdS zABq$XI1GN|gu#KOGuk2qUzF(guQ3Pp(mkF~z}aQ#nf$P2+N2uJ&13lfU}0oDm5Ikv z>X{L{Uq1|20{}0+C*OnV%ROW8lx}SVi{hsp8^18ijmUN_zyp<2DaKidix>!L5JjOo z@c-I$m!5{H^S!Uo=KzlQDZq<0@~yY0ah9#n-=?8l=^3j6ddI5Xv9dH~TFl;k7>V;S ziw!|$6E0bInu12Feb6HL6Tein98LRS|NJR9gZ|8dAJ2>GPnwmWsvmdEzmTCzF>R#D zgy^t(;obAI8S%z+-LuLyGDYY9KtAEuJK^?30-V85PQo4?hwk(QfVoFzNO{>YjvB-> zOW8B|pIBRj{(*Ui27}q%4xtDHFqZeQ`4oc>_>Hq0PP>9_6eA2}aS6A~3SzeO{UByn z9Yo>Ci8b;a6J8QNcZ1Z5_iz=;(qSg}3V1TOsHI~|N;GP8M59X?IhVqGXEb^%7fYEf z6r(-uL+~S@2cz#H;LVtxM8I1MV+%zqGC*Bb4Pedw)p$-kP$M=tIWYvTrvaUUI8Y-t zbh2v*?qz7fz}laswE~vE=wzHmXw^e4$ zyk~OKzK{PH`ZCu60i(wU_i>l?Iq)`=I(O@zw+=zcQ-B}a+@`~XOT?w@VFYZxt6R5j z&eXA$#v*X`!(d(lg;;JFrJx@IZM?nfD~0aYoDDT;J2Y&zQG2#g^qBM<0=stGmV%le zv?OMc)+Ke|LRhd5=DX_aGK)t+?jGLs%*E+tY49~CW-R#M6OT4eJj$Hbh1Xvv<5TN& zo#<|?drjVJuGFr;|F`P?T7O%X4zjg^)1f~{O~w%>5SV{Ci@6ZO6v8yZC4?6Lf(MYD zLcA@hX@ExmB8oqPtBeKRwx?k}2i#4I_c?^Fqz=&9QXItAR$z-@3S5C`fTU-I7Byc= wRc2 z-ZyXNmw|ykhNgevwz?78&s+NlR`U3eYYsLO6nl=1< zNr^0hG(Ey)2iE~j*5D0h2nRt!0^=RpNPu<1VGS9Kz7)-33v8F?bvcmMC-F=LX&YyV} zinqLySt))~vFBW8-7e1A-d(?1E7r_ar#OEjcPoN5tm68nQ@QDywNlQhIF*&+>Y8U4 zDW1!<2Z3rB==BYwK0vZu?oi6i8wYH#{kJlY0tyA`>{$3o(DPEBTfe30(n`o&MC!?aR6tc|0XfnS` zGDs9N*hi(s?!<+)oOq5gFXC|>Ddj*enO>>4dU`X%X49~)&5kIE=baU?zt%>!zJ2oj zwzaeJ)PMG{mHFhQHod1!x76ta2Em+^>fwqW#R!~L$2$4|B=S$u&?A|BD;NA_LO zTm1n3IB)o4yY1KDr}agHKei)3PP&x;8po>7@tlh1n{*OrjvkG4Nt9opRQ(dp6|J3Z zmtoQ{?0eAaO#5IE8HV4x4cK6>wXyB-pEEDDi+kF|kn!}`{>bRowf&*YlhpRLotald zABIdCo;uc%K*t-57<@YZ?BiEMlc6G|ubeCsx&?%=GccOC8j&olsQrkG5j-veaNI>l z0)opwr67Qkucs;YiS^0ZY(04?yFP_?`chULtl8`#*Y!k?9w$x%YR0u|Zdc7jbQHmO zI)Lguw|#YIx~1jt|MkLeA4S&hbARL`i%`vpH1jz2v{ibVuAYjyY8yt-XBewhYpqOn zzhT^4Gs}_39l%hRM0ZCB-X?gLfU0$ui7CaU5$!E$M!Ip+q#I?*vY{9E+@^B-QZ#J?nxgGc}X literal 0 HcmV?d00001 diff --git a/PAMI/uncertainGraphMining/muse/__pycache__/graph.cpython-311.pyc b/PAMI/uncertainGraphMining/muse/__pycache__/graph.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd139389dff2d67ea217a8c0cf17ffaf4d30db00 GIT binary patch literal 3227 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 N@E4B#{geq|?_U~Q8%F>D literal 0 HcmV?d00001 From 855805e6b9ede53c4c9330cbd3ad46746d6bf2c9 Mon Sep 17 00:00:00 2001 From: choubeyy Date: Wed, 7 Aug 2024 02:56:50 +0530 Subject: [PATCH 05/22] Revert "Added method to convert graph transactions to a new format" This reverts commit ffdc21ec957baa10793c51432561ac8d061a10f1. --- PAMI/__pycache__/__init__.cpython-311.pyc | Bin 338 -> 0 bytes .../graph/__pycache__/__init__.cpython-311.pyc | Bin 171 -> 0 bytes .../flatTransactions.cpython-311.pyc | Bin 2266 -> 0 bytes .../graphTransactionExtras.cpython-311.pyc | Bin 5714 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 182 -> 0 bytes .../basic/__pycache__/__init__.cpython-311.pyc | Bin 188 -> 0 bytes .../basic/__pycache__/abstract.cpython-311.pyc | Bin 2290 -> 0 bytes .../basic/__pycache__/dfsCode.cpython-311.pyc | Bin 6016 -> 0 bytes .../basic/__pycache__/edge.cpython-311.pyc | Bin 2677 -> 0 bytes .../__pycache__/extendedEdge.cpython-311.pyc | Bin 5271 -> 0 bytes .../frequentSubgraph.cpython-311.pyc | Bin 2191 -> 0 bytes .../basic/__pycache__/graph.cpython-311.pyc | Bin 9976 -> 0 bytes .../basic/__pycache__/gspan.cpython-311.pyc | Bin 37488 -> 0 bytes .../sparseTriangularMatrix.cpython-311.pyc | Bin 4289 -> 0 bytes .../basic/__pycache__/vertex.cpython-311.pyc | Bin 3231 -> 0 bytes .../topK/__pycache__/DFSCode.cpython-311.pyc | Bin 7139 -> 0 bytes .../topK/__pycache__/DFSThread.cpython-311.pyc | Bin 2875 -> 0 bytes .../topK/__pycache__/__init__.cpython-311.pyc | Bin 187 -> 0 bytes .../topK/__pycache__/abstract.cpython-311.pyc | Bin 2412 -> 0 bytes .../topK/__pycache__/edge.cpython-311.pyc | Bin 2593 -> 0 bytes .../__pycache__/extendedEdge.cpython-311.pyc | Bin 6201 -> 0 bytes .../frequentSubgraph.cpython-311.pyc | Bin 2119 -> 0 bytes .../topK/__pycache__/graph.cpython-311.pyc | Bin 10091 -> 0 bytes .../sparseTriangularMatrix.cpython-311.pyc | Bin 4311 -> 0 bytes .../topK/__pycache__/tkg.cpython-311.pyc | Bin 33190 -> 0 bytes .../topK/__pycache__/vertex.cpython-311.pyc | Bin 3362 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 188 -> 0 bytes .../muse/__pycache__/__init__.cpython-311.pyc | Bin 193 -> 0 bytes .../muse/__pycache__/abstract.cpython-311.pyc | Bin 1661 -> 0 bytes .../muse/__pycache__/dfsCode.cpython-311.pyc | Bin 4310 -> 0 bytes .../muse/__pycache__/edge.cpython-311.pyc | Bin 1916 -> 0 bytes .../muse/__pycache__/graph.cpython-311.pyc | Bin 3227 -> 0 bytes .../muse/__pycache__/vertex.cpython-311.pyc | Bin 2676 -> 0 bytes 33 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 PAMI/__pycache__/__init__.cpython-311.pyc delete mode 100644 PAMI/extras/graph/__pycache__/__init__.cpython-311.pyc delete mode 100644 PAMI/extras/graph/__pycache__/flatTransactions.cpython-311.pyc delete mode 100644 PAMI/extras/graph/__pycache__/graphTransactionExtras.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/__pycache__/__init__.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/__init__.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/abstract.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/dfsCode.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/edge.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/extendedEdge.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/frequentSubgraph.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/graph.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/gspan.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/sparseTriangularMatrix.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/basic/__pycache__/vertex.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/DFSCode.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/DFSThread.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/__init__.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/abstract.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/edge.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/extendedEdge.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/frequentSubgraph.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/graph.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/sparseTriangularMatrix.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/tkg.cpython-311.pyc delete mode 100644 PAMI/subgraphMining/topK/__pycache__/vertex.cpython-311.pyc delete mode 100644 PAMI/uncertainGraphMining/__pycache__/__init__.cpython-311.pyc delete mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/__init__.cpython-311.pyc delete mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/abstract.cpython-311.pyc delete mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/dfsCode.cpython-311.pyc delete mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/edge.cpython-311.pyc delete mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/graph.cpython-311.pyc delete mode 100644 PAMI/uncertainGraphMining/muse/__pycache__/vertex.cpython-311.pyc diff --git a/PAMI/__pycache__/__init__.cpython-311.pyc b/PAMI/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 564646ef1b998a1a97a4141dc450e6b95830aa5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmXv~O-sW-5Z!H3svB!>Im#YH>?MddiwMDr1gX}KUP5Gu-K|+{H(|3Cl2iYK2Y-V2 zk4mqeycK%u$&J-F@a7FOJRbAWY!YN}`~5h2GySU?{(=9*$~EF0F%%+(L(FPnjai|^ z?0eL%mxrY9_X0wE+V{2QO442+g?y%2p_5e7v3OFkDm+rwkGvD_xNP0|mlt%v;(}fY z70c3nNH`rx@yb;$bV1V*^+h?oZrh6n0857e3kTqLok}whfOu-m)n+kNoC%!+e429zmOFFi&Al0!?;gyYs#L=q{s6{lVPpUR diff --git a/PAMI/extras/graph/__pycache__/__init__.cpython-311.pyc b/PAMI/extras/graph/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 3fdc88a52405dcb44f919dbca6f79e2a7fd4d94e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmZ3^%ge<81c5JO(?IlN5CH>>P{wCAAY(d13PUi1CZpdrtv?IN^{T>{1?;!p;u=pIt>Hiyt-c)T)$R4$7W{9L<( zy>YA2nyaB1tfCoC#rMz*uX2Eb$^(k30CPo0nkXpN4O20wGH2-}gU+=X7!g~Ghi7*H zU=!)6f@H9~q9S0x(+TWIxh@ju6R1|mQAS4gCdMz%en~ZxrY7mUVx-a3&-teZjUYVk?*0XX?QWH;;57Q`lU2ULtM~}?dSz9BHup+ftcc+E{%W8SsBlZz z6!WOURRUMQoxS%xt1X7kS4G%{gL&+qG)DJ_?q8{Jz&W%Uuvkp3Vu@|5o4J#rv(=8} z{s&+o+2^aE1>a`MS+RRbtK@VwqpMR&ndp=#q@YualyXGXT~#Qiu2HhATl3_$c9)W& ziOKX3Q4Ey~WhT>f$fp@Ih;~OQmJ1r2ZOsFjb+_y`N{d!`(E|F*B(GW7#ar%o&ajUS z%a(N`PjrK1vSq~}a|MM`pEPHdiiEZ%Oo0N7eCn1$^|@4@f;T9`cXfD(%n?{n3Bd^f zuV$!DfR;>4QyrdamdQ>u5i}v`kQ4E?orYaP436Z6bfeS`jyl1j7n;L^rz7Nbl{!2_ zrk&Q≉gu&HiQuEe{0l5g~e&_3{bnWc*`q}HX_(VNEVTX@x zWozM+cKGBD8Fmw^aUfbh5Vu2dvj@WO$SroeF|F+mfXX+KujJt2Lk6GrS1>dLo zYL)_tSGM8xxZOaIE90}^x5`6ya#df~z5^I4S8d;=uXZEro&Ba2-nStyfpPza?aZq0 zkjj70b@oB#rhAYouwUm~482)&8l6W}Smy5VH_jRpmkT>j;LE&kvihC35Fvq zlyt-4LCKH+mYEPe?Te)e;Bs)z!LlQOyeVa=;fmUm^Z z80`1G)q45z?;4qRpE0S{8PYy(}@84b25~oCd*E*EEh}aVu9IV zS^j!aDR?7h2xglH84Lpairl<$58Gq{b|C@=9RpbNe@y|4r{QGUARH72o5+XZfC!s= z9XxhM41dzz0_?NwFS-}H;syGtc?Jep{?Us7aE=%^kDkIn`#L;leJ|cH;1d52Ctx4Z diff --git a/PAMI/extras/graph/__pycache__/graphTransactionExtras.cpython-311.pyc b/PAMI/extras/graph/__pycache__/graphTransactionExtras.cpython-311.pyc deleted file mode 100644 index cc31db4a42d8c772ab915c7e46fd6f768d57906d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5714 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 aCGt|i`YSsxGYl+lbNZCFf44<1Rq8)VCn&N2 diff --git a/PAMI/subgraphMining/__pycache__/__init__.cpython-311.pyc b/PAMI/subgraphMining/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 679b9ec6c225693b1286f5ad5a2bf8a387881da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ3^%ge<81c5JO(?IlN5CH>>P{wCAAY(d13PUi1CZpd@Ma95+9fu85ut?z=$Gdpcnu>P{wCAAY(d13PUi1CZpd)=dU}j`w{J;PsikN|70FU`F A9smFU diff --git a/PAMI/subgraphMining/basic/__pycache__/abstract.cpython-311.pyc b/PAMI/subgraphMining/basic/__pycache__/abstract.cpython-311.pyc deleted file mode 100644 index f234573a68bc8a5489e85065ad6976eba2cd2f28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2290 zcma)7&2Jk;6rcU@+VK~564JCq>L4T}bI6I4g^=2$t$IjWngY_wuo`>E_KN**XVxL) zfO5#8|3UwQBGemyiI3KvkT{^+T!m9lyf?dRXNeJvpWnRqo0*;WH8a078dU=AtIO|( zR*8^5P{|wUs$KmC-D~0!SMy1r*;=66x<*{xHGCs5ZBxmnUkWVSQgX>J2Nk=bWXsh+F5{8-tLy@K2k4$E_ZdPU8~Qj-D9zAM7Vh)|athgE-*vIC3vF9Mh80W5Fh4 z5XuLSj`t&%gV=f`_{%8|X-sFdrOay10uHQ~h8Tw?3oaJ38a2C%o;1VU^RQ2hp40@S#HT7a52 z(6U>CI9Q40jKH{XfIjC9WsKOB1q`yQ!A$+^vntKn^Jz%qF{f%JW&S7U=k{?(O#VjH0U;os@fzi%N?T-heLocb}1 zhU+qkPW_AL(KMb+WAwb}e~SMjT1AJetF;BUP03DHsYK;t@Js9>QyyY1=52ij|6F?b z0_rk=9Aw2goQ8wgi=bX3uq|{UtLgcrd4*lePnKMj|AT&);k%ZJu57wbznk%W}2&-I_gxCisOVV;Et129Vdv~sgH8q zab8ZDpNy3$zik!xtpOl?U&?A``P9)P%7sLO)@=#itVnaRGb_@Zd^#)AoOEYJnv>eO`dt(5%}9Z+TR11J XSxyU!YLNV!?A7r*ME_bdqzdA1tq@a@ diff --git a/PAMI/subgraphMining/basic/__pycache__/dfsCode.cpython-311.pyc b/PAMI/subgraphMining/basic/__pycache__/dfsCode.cpython-311.pyc deleted file mode 100644 index 7024acb315a0c92ee6a96cfbf75c02806e5c2df0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6016 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 diff --git a/PAMI/subgraphMining/basic/__pycache__/graph.cpython-311.pyc b/PAMI/subgraphMining/basic/__pycache__/graph.cpython-311.pyc deleted file mode 100644 index edcc0c08a7eba7b611a1dfaf566b2855917cd970..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9976 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 Gakr_svTL1HBuy`Ub;6|>0!mG|2Kn;orLtT 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 O#Q(^}e@{@6Hva=6vF4@# diff --git a/PAMI/subgraphMining/topK/__pycache__/__init__.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 1b5e11718bf6fd373705856f68a5727981fbf640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmZ3^%ge<81c5JO(?IlN5CH>>P{wCAAY(d13PUi1CZpd49j|Xx};^XxSDt~d<y?;IiQ#yNPJ*sWMurn03(W+fnoqwzAw1| diff --git a/PAMI/subgraphMining/topK/__pycache__/abstract.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/abstract.cpython-311.pyc deleted file mode 100644 index bcab64786922171dc0fcd3d6661a55b5501d65e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2412 zcma)7OK;mo5MDm@up}#fsEO+|ELs#bQ25eIAQS}>J28U5t`oa0K&TZcaU~JqL)j%= z$A`iPAMy|K4^kBQGeS=UPX&4?d{f|_a_Y>Il)_p?yIReDGqby#*Y5sOuU84QCzn4A zo@#{rflS_j7wzgd7+w*Z*pf>;$&@_VlqF)zw&E(DYN`UOuIA~cF0kg7ys}vqSa&O4 z)vO9!a+kcCSrfSI*1d+=5V+zldrh+`aMiuxt(Yr-iM`~mdTZvIz%_T>TnAarZJ8}G ze&F3SZ)Lg-^FtxqG;fO$=E`J`*!2ryH>mVlA>jXly(PvC$K5N3c%wLqm~U!^C6?pBkG4oQE!;d)xV=G zq^F=&AJ{`&QhRV3Qs1U_#N!3=tDxcA2-o2&yaME$Osk|)f2m#pL;86@ky-52aAx&W$hRRf%#8sHJi{^uj!Wlm zwIQXJXN;|I)HV)*8et&9fYXeA;D?qlSIE+h=8F&53fQnEvsD-p6*u8%onf#wlvJ_Y zL@n~OW#QLcun7~cGVf}_JJtfx|M2c~=H2&@BS;t|jZq%Cp%DyHJE2hhc@oj3fAKqr z!f_O$-$n0J`9ES+bhkQRTX0(C)=8d5gr9;}Yy*k#4@)p_i?jFV%)evs%!BwFL*dXM z^829^K$!+$nQucz(^G8ZrN!sD$r3A4w%cnPxR-5(R?p%To#TQwag;PnZr<7Tmv=)Dw zW8mPZrj@0Mh@4eLQ3?D7sPog(nAg+6RyiqmyT0YoZa1lRyIx>NF5+6Z`#iGTRKrwQ z&hW&sTS#sr`4|aSxX7INFl!=<1WTU(4CH+F`(0a|%BohM5+H9CqOV>2mf;H`-$Ylv+^$D?r9 z!I4XD03EwQ=sG>P01+j6HY#Hm86Jg>o0Pg4kOQ75-GHZQD5mCJ`KvUyU$eXLAv|0B zF3_nWNm5KcnJnrtxj8BJm~2jpJtoGa*kiIiDfXCbOo}}wtx2)RV^bWbe+8X@-0gLTA&h@^*7#Fbszu$ diff --git a/PAMI/subgraphMining/topK/__pycache__/edge.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/edge.cpython-311.pyc deleted file mode 100644 index ebdaaf865d4cb7e8361576e6e5c7d43d129c8247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2593 zcmb7F%}*Og6rc6ynqV*lQYarCK|`^GKnBuAsER~@rfG{?C9TvVORL2@;0>^bnZ=}* zTXD#N1BV_W;j~oZkhY-akYf)0BLMY)e5%w_Zm!&3IQ6~R^?GS(rHt+0yf-s`^Sa5Q97-hVo;8ke}h_j0Iu@?vrFNTVKFgahcjU z5PO7?1;ro>0YiC27J^0qFk}P)!$t@&VuS&sMg&kbq99GJgyxK8maXf6;)3q4wkTzm zloHW!U5-)!xcaT66a>!Gu%sAD5l$I_VwjK;Xd$^Ea!8ee5{ZU4$YF#)hp-+6flbsM z_t-jTf?2kpx(^ESX%`@-Fspv~hm?)y|^< zAE6$@!shNZQm^_oc%UKvCHnTIfq)s4PKGLhLJEH4m6#{0qULmwo5>ptwnKugE^!qO z^B4mDO<+9HpXVRUOl3Y3jEl@&k<+cr#}=FAW`Sj9nOL#&>zQ?Z&CGlt9w>O@mci(~9vqRJzV$0*G4x+oak-u6FK(cB5zQ9dha(fT`uI zyQi!_xppw|q~&nnaN}s``R${=ldiX4bf0wHh6C{(_|!lG$$HrY4APh@wMl?If|>XL zC}*t5lROG*UOrk8{|U$~rTD%VxqHms8(V)M=rZ`mqIrw`EAYuc!^uE5 zgBBH~AW#cRc^uiOZb`w#X6YZ7YlAJ(3jpp>Nl$Ot-rxFmq&%`??{4jE9nLH*XCf08Sy$m}>$r1k=Da5ZmUW;W_9GquwnLlH0P0uYVzDjv(7 zfufF?jk*ETu7G;H0~Pfd204q8eL3r}eg8D*t7Em-G02~RSVuAl&w>#rB=N z*sBHfzWW$5??g#y&`##&$6z02%K`fy?e4z;`*?qS-=p3AR@jHm>g{{9vkyrUD1Poa zd?v@TD}tKP+qUx3h0tF)qikbSUv)j5x6s+9Qy8+rUUau;`1`$Nq|#&x(-O9BWf@21 zod{g)MDpygyv=05+I#eY}to!V0 z*EcuL5*?4@2c1v*PZMKR5^NjCg=qQ4{>{_GU^NH}zxfx!uuzSVw$8^b2iKpDohDM% zXfSq3!A0R(G^2JCU=QA3@Gnr#_zqq*;Jx?*4{u*1roe~3#}_qRob!BM?>IVz-Vg1R z^7`AR+a@^MeQ3~rnqPdtvUbD4#TYIR7gAHS7#V>l4(8Yhl?6IQ&y{2{*yu;HtS`%b zywI2X4m%1ai4g#&nA1vma{ry<)_M3IzWMAehk7ylOWL6j)p=PP>0}IF0ZU(FnpSDj zw6(mkxr%hNrePvEJG=#i^LB(z1neHX2caL}h)7woWjc9-UPsT00>HNSsRrWV8Kp{m z*dGc{R*47Ap>RL4E&$tytP9Pt@I;k(a4i&0gS5-hQ3(}ELo30V4ffb g;)Adz)tv^S8dMae8b~Q9`*Qq4uK)QTyYh;^0oJudlmGw# diff --git a/PAMI/subgraphMining/topK/__pycache__/extendedEdge.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/extendedEdge.cpython-311.pyc deleted file mode 100644 index f91d12338ef9317ea46945b29db4696050b9ec9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6201 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 diff --git a/PAMI/subgraphMining/topK/__pycache__/frequentSubgraph.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/frequentSubgraph.cpython-311.pyc deleted file mode 100644 index a0549a763db024752ffd3ef7a230a0a2a9714bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2119 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 diff --git a/PAMI/subgraphMining/topK/__pycache__/sparseTriangularMatrix.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/sparseTriangularMatrix.cpython-311.pyc deleted file mode 100644 index 647b26a374ac185f02eeba6aada62376a7a7ac6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4311 zcmbtXUrZy%8K3=U3>eH|!Wr%^S;9due=ohusU?&IncfwlqwSGI4e{05^DeO9e>b~6 zILB7*ArI~e=}3i&+Y;54(ks!u?bAwUtrQ8VFU^}PS}EeG-^|*J7jP;y z>+x^r&o?vQ%>3s2zWqa6TML5cQm3{&)r`pg z*0Y3Ub`b@*NUegrnQGziI%IZ{f|eK=EwM7Q#L4W3Xo;6OKtbjKU9te!B)b6JauZ;) z?1mAW&F;mdgf-&L%p_IUCd_{~TQluZLNhOmBtc&-hXiCw>Tj;l3jf1lfO)w8yTIc+?IAdTECU4p)sYXJX*-$PUsmmvM|(&ycOexY!q*mn)m{@d2uYO6;~ zY-F096pxq|6Lt^O1dE}_*ah__4+?80zm`zrrl9IdOfy|lGO5JnfPe{CO&%(fCPx<5 zWGzrLo2|^Ejx}=Hu*&K>&8Bdet|I;7H?NZ16)g`yFHA>gj{nlvlfS$-^1OHWS?_SE zchu+|E&0X_-&h54&973(1{Aa%HPMn82jtQ-zK13 z5|<1>|B~Tf%FUHM9gpW9&F8Nc{S%N10qYG|@?0@ISBf;1z2_cpJlfdSf1cgS7Tp)= zwngf13n2-;xnDpA2*PC8b;u!v1(MJ5SuW0JfGi}J;ouh1Rs#1K+@9fOMrG=2Gu#xk z5&x6no%P3e7J7EdCwd*XW_Wvqy4f;Zy~HNFS!V-eCfx=WiHoqco&hd>$F{U{@d#F8 z)GHB3K#6?H&xn#vZ&fm(fjNg;Hl&VpLyB7BIaoU6Qa~O#i%B;hA%=5J_m4; zMD1!#jUe%K>464Za*Fkmk$wq4DdlO)-Fx&}?zM97h5S#pyK})@@Sv7GXl>t?ch-xo zeUQrH;69UoKR3HIpXW-Ri$$6ayf5V6+Iw%`XIvU9dPypejBfKgt@)tQAr`tz9YaN$ z4m!H*N~^}`7}}pHb&OdhTktfY$c|7#6(F;V9Bu#zYf zMb3T=HE=NT^qIQ$B%8V?a5{wLs~PR4Px)hxPk>Or=8s%31{kqpk7Nqg7u5;7(g)5FG@gquW9427)c%2``3+F~mi2Y_-3EmG zpFQ6MeKcYdfTwQM<xv2!7uv;3i2oGpY`~3OqznI>hF8eR;wHAVge`vqE z=)dxH*>`^D^}J^I`YVWO8z^`AcjgORvFq~JmDbv1l;aD57V=3HmtsmdY_^2Mv4ot8 zlDsDzzL%1s)fR{WzEyC3bvccahz*e3HODUqyLV&UK pa_V~Ip0bucjlTy{RN)!OR5*rVD(nv#2F5)b|3&Nn-Jq4u{9iZH3U>ei diff --git a/PAMI/subgraphMining/topK/__pycache__/tkg.cpython-311.pyc b/PAMI/subgraphMining/topK/__pycache__/tkg.cpython-311.pyc deleted file mode 100644 index 8da0ba685ada6ad671a72fbea6c89546b0d7e9d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33190 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 diff --git a/PAMI/uncertainGraphMining/muse/__pycache__/dfsCode.cpython-311.pyc b/PAMI/uncertainGraphMining/muse/__pycache__/dfsCode.cpython-311.pyc deleted file mode 100644 index 3d2260f430eb92c3dffcfef16f4c362445d2388f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4310 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 wRc2 z-ZyXNmw|ykhNgevwz?78&s+NlR`U3eYYsLO6nl=1< zNr^0hG(Ey)2iE~j*5D0h2nRt!0^=RpNPu<1VGS9Kz7)-33v8F?bvcmMC-F=LX&YyV} zinqLySt))~vFBW8-7e1A-d(?1E7r_ar#OEjcPoN5tm68nQ@QDywNlQhIF*&+>Y8U4 zDW1!<2Z3rB==BYwK0vZu?oi6i8wYH#{kJlY0tyA`>{$3o(DPEBTfe30(n`o&MC!?aR6tc|0XfnS` zGDs9N*hi(s?!<+)oOq5gFXC|>Ddj*enO>>4dU`X%X49~)&5kIE=baU?zt%>!zJ2oj zwzaeJ)PMG{mHFhQHod1!x76ta2Em+^>fwqW#R!~L$2$4|B=S$u&?A|BD;NA_LO zTm1n3IB)o4yY1KDr}agHKei)3PP&x;8po>7@tlh1n{*OrjvkG4Nt9opRQ(dp6|J3Z zmtoQ{?0eAaO#5IE8HV4x4cK6>wXyB-pEEDDi+kF|kn!}`{>bRowf&*YlhpRLotald zABIdCo;uc%K*t-57<@YZ?BiEMlc6G|ubeCsx&?%=GccOC8j&olsQrkG5j-veaNI>l z0)opwr67Qkucs;YiS^0ZY(04?yFP_?`chULtl8`#*Y!k?9w$x%YR0u|Zdc7jbQHmO zI)Lguw|#YIx~1jt|MkLeA4S&hbARL`i%`vpH1jz2v{ibVuAYjyY8yt-XBewhYpqOn zzhT^4Gs}_39l%hRM0ZCB-X?gLfU0$ui7CaU5$!E$M!Ip+q#I?*vY{9E+@^B-QZ#J?nxgGc}X diff --git a/PAMI/uncertainGraphMining/muse/__pycache__/graph.cpython-311.pyc b/PAMI/uncertainGraphMining/muse/__pycache__/graph.cpython-311.pyc deleted file mode 100644 index cd139389dff2d67ea217a8c0cf17ffaf4d30db00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3227 zcmcguOKcNI7@mE2Z6`}&OvnS82hhYg;nCzmicnFEafC$DM-+%GSC;W^%m&*DyH1o^ zYaS8@A98RJQhcD54=9DEQn{5@l}an5-dfvQ$*Yx+B2_)~<~F?)sa5}(jTbwC3ND@9 z{pX+gAM@`&^MAXa?b_9ZpnV#+Ir|BR&@XsUYwQ-Y=?7*N2}q#gC_x1&3iEWFPB1}+ z@JyUd*n&0+(P$hA>@6hN)@X#*;W1l~6Syhlwf}~PUdrGuh;m9?297-|#6;-r{=n3k zc|nYBS&*(~zj+vjt4KsaN>6=VeF77DU>y`W970p$b=uVS=JC!?@HL`sg! zk%h~X(b}tEuguo7nIcYAN=0EjPnv{aMAb$yJgNnORQje}rR(J?bF)K51?+K0Q<*jJ zvu^pqiJBtM18UOC8nh%B&LxtDiO7QCk`fDXDH=(M0*P5MT$dK5xDb%%6I-bPBUTaP zvohW?xfzII7iJZlH3h$5AGBxhpE((tRzz6|ol`DHlA(8#qFLT*+Pbx3#sTwa z4rh$CB}(p0?XHaw0_nCIt=CqWQ=kfd|H}iba*b79udTAgL!G_KbXm(6oEBThsE+L= z)9CT_?N|Q6Mdzg_W9Bl|)7~b-852`y#q*MqGHk$J7&f~RqY01BM=pu+;W~cA;IRR~ z6cNcd#iaUVdr$AFgzoMeQB5&0yAPVoaxD+LDDo9^9KY1^>?@1(-PiN+PzRdF9GyAPGz{hGVKikh5*gk*jC@!>C*KVN>3{v!Qo z(fFPUKTzfe3Rg?KSL3}!-U}e{G7(6tduy*MyCEOZ`U1y1 zfeM^cfC@ARz1gOajMMI=$Sy*M_f5eDePjp7ew!aCK<4!RZCim4Ne#ApuqB3L*oM|U zE7yvS?wz6F#YiZBz#6M4RTpMsm1p2nG-pX)1&ILLej?cR3U~y%Uu77TnX@ngcnf;~ zS6HZb+Z6~F4&mwgNL042@;IWfjWoVTgRSlLY%}%@m-MMN6(b$SA1fdKcNCBv3q1i% zse)tMOOqkanaZhlz%Iz;x|L4~tvp)!S%v=*^RPK(EHb~^+)^aIC@MyC4Oak)q3Bsr{(dezc05P9J5`Y(VeqsdNsOI|oahN3_l( zRpi)(g_!18y{r3fN8!zTo*dwbzGrWqzI`HhLiY^ayY}#s=6So~@s&NklE<%k{Evkv z$>Q`yEih9FM9P6kDG=2H(fq~Scy4^7ySL!Z(>dSkn&JR@a-8n!SZ%%CTA&NQ`}T(& zj|NJvG0inrBzJW;3E7QY9oZIA$MEHtg#StS14>2`VmNFxg~N$?VKI(*J{-Qf7>Sz_ z86z^mZut=AhJZXk#EA*(_$gen z3qqBcWPviWpfLK7EcloL=x07amH7b!Oa%Vfx7 zZkwNFz+3M^Ur;~01yCgwS|PeOSy4c9{UJ*PG|zWN=Ey!xC46-y%j$u(+s4OcuCAK5 zvz85me#^`)@&Ihbg8&xVh{xmS_ud>&zh{};N++#lqmX{LU{3Swnwg$9trfdiN|%g$ zHhuSvJ4p$vg$y`tWD7IgC@tT~7P5tv}mV8IHOG=&f}f zV1t}=T;23<1y8zez$1JT>xM^Y6MknfO)?%YP|#O#CgUK$nUGK5DX+)gX}BZ!tk69e zKk()#M0<{K6{Zpj*WghP7^RX~V4$|4>NnYvX`#`0oMRrAe6e zfPxm;3jLw=9%;QhLx)=5vDQ~}Zytdq8P5YyP!=qn1EHCP>l+mT+NZ)N3tw=YQI||R z$;uJO6``S*7CH}(L_4=W-MsRQHjxqUz}*@wYG6a8kQYODpdDADacTEKO}q9ihJhsp zqQ!6+?BKa$-j+Kq2)ko=dJX2wHLX{gZ_F5!#aX`&!WXnkHt8aTiq#r(XPWH6>;e4c z)mUkmF9{{p6hJ>L>x92(BHzHKSb!gf)@g-4QdZC$`BkgXuaqq)?|s5C&#@dwZ}BLI z^$6zJeDR){FRqzR0d9z7I}c6dfNrLkFHMz)9nM^=L)xPgxnjo1SyLdm%dWzX)*!$? z8>AMSmG_SQ+x+k8qp@UdEV<19SfIDo9JA!+Qy zH3lXh+uxVraTuFDj?KFD+Zqi#I1!DzAXJInP!$zwH^i;E8(Yw0=djwn6%~3RuZU3* zrMKafLs=_Zuxta{6WWrMw3ng93BpcA1$5oK4;`xAAuH7`c+(mI*dR}$y*tA{ zbR9-Vj-w-|gtqmbboOkIiBj7c-W@rL4%D=P{~){Y|HuYyJSOK7v_(eY0MPd26|ur? z7=GRlx*%M?k}BHCd?{z<&4O(*+3N>j`ZDhvcIFG-sA8&G34o{Y9(dB(UyJlh;<4SH zqiBCk>zBkEB1y2jiYVjxRpHy(SZm+HmlbqxJ?OsgREVBGRSwG#j3lSW#eE`^@CU@p{Kd40~;r_|~`GJ%WwaHcv=)d6b z5(t+vwZZ%5uZtTDrS4xgtYztPOFz|hoNV$|4h*8V*wygtJGZC5o_VyswO-S12=`Kn zcKn_ejJ&Dq^^mUTi)=NAazxkfuNpZy!^5xv$6YuUD~}=cAmBOhA%qtZkQjdj0b?#q zhz=l&2DxL5tX}{&yx*zfQ+rN{2O+A)p(I=gP_-LX2SB}!sso^2L)8IL-=U~`81Sis zxVZx%pE`i517K?kmpcHj-$eB?NG9liDnTWgW`gJ1ggm+_{;JFJH4sjHl+sgWkiw3w N@E4B#{geq|?_U~Q8%F>D From a6f6bb94405825b5ba52358d421a9a5f5db5e99c Mon Sep 17 00:00:00 2001 From: choubeyy Date: Wed, 7 Aug 2024 16:12:35 +0530 Subject: [PATCH 06/22] Added snthetic graph generator --- .../createSyntheticGraphTransactions.py | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py diff --git a/PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py b/PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py new file mode 100644 index 00000000..60fdda9e --- /dev/null +++ b/PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py @@ -0,0 +1,104 @@ +# +# obj = SyntheticGraphGenerator(numOfGraphTransactions, avgNumVertices, avgNumEdges, distinctVertexlLabels, distinctEdgeLabels, 'oFile', graphFormat) +# graphFormat = 'old' or 'new', default is 'old' +# +import random + +class SyntheticGraphGenerator: + def __init__(self, numGraphs, avgNumVertices, avgNumEdges, numVertexLabels, numEdgeLabels, outputFileName, format='old'): + self.numGraphs = numGraphs + self.avgNumVertices = avgNumVertices + self.avgNumEdges = avgNumEdges + self.numVertexLabels = numVertexLabels + self.numEdgeLabels = numEdgeLabels + self.outputFileName = outputFileName + self.format = format + self._validate() + self.generate() + + def _validate(self): + if self.avgNumVertices < 1: + raise ValueError("Average number of vertices should be greater than 0") + if self.avgNumEdges < 0: + raise ValueError("Average number of edges should be greater than or equal to 0") + if self.numVertexLabels < 1: + raise ValueError("Number of labels should be greater than 0") + if self.numEdgeLabels < 1: + raise ValueError("Number of labels should be greater than 0") + if self.numGraphs < 1: + raise ValueError("Number of graphs should be greater than 0") + + if self.avgNumVertices < self.avgNumEdges: + raise ValueError("Average number of vertices should be greater than or equal to average number of edges") + + if self.avgNumEdges > self.avgNumVertices * (self.avgNumVertices - 1) / 2: + raise ValueError("Average number of edges should be less than or equal to n(n-1)/2") + + if self.avgNumVertices < self.numVertexLabels: + raise ValueError("Average number of vertices should be greater than or equal to number of vertex labels") + + if self.avgNumEdges < self.numEdgeLabels: + raise ValueError("Average number of edges should be greater than or equal to number of edge labels") + + + + def generate(self): + with open(self.outputFileName, 'w') as oFile: + for i in range(self.numGraphs): + numVertices = random.randint(self.avgNumVertices-3, self.avgNumVertices+3) + numEdges = random.randint(self.avgNumEdges-3, self.avgNumEdges+3) + + if numVertices < numEdges: + numVertices = numEdges + 1 + + if numEdges > numVertices * (numVertices - 1) / 2: + numEdges = numVertices * (numVertices - 1) // 2 + + if numVertices < self.numVertexLabels: + numVertices = self.numVertexLabels + + if numEdges < self.numEdgeLabels: + numEdges = self.numEdgeLabels + + graph = {'nodes': [], 'edges': []} + + # Add vertices + for j in range(numVertices): + graph['nodes'].append((j, random.randint(0, self.numVertexLabels-1))) + + # Ensure connectivity by creating a spanning tree first + connectedNodes = set() + connectedNodes.add(0) + while len(connectedNodes) < numVertices: + u = random.choice(list(connectedNodes)) + v = random.choice([node for node in range(numVertices) if node not in connectedNodes]) + graph['edges'].append((u, v, random.randint(0, self.numEdgeLabels-1))) + connectedNodes.add(v) + + # Add remaining edges randomly + additionalEdges = numEdges - (numVertices - 1) + for _ in range(additionalEdges): + while True: + u = random.randint(0, numVertices-1) + v = random.randint(0, numVertices-1) + if u != v and (u, v, _) not in graph['edges'] and (v, u, _) not in graph['edges']: + graph['edges'].append((u, v, random.randint(0, self.numEdgeLabels-1))) + break + + if self.format == 'new': + self._writeGraphToFileNewFormat(graph, oFile) + else: + self._writeGraphToFile(graph, oFile, i) + + + def _writeGraphToFile(self, graph, oFile, i): + oFile.write(f't # {i}\n') + for node in graph['nodes']: + oFile.write(f"v {node[0]} {node[1]}\n") + for edge in graph['edges']: + oFile.write(f"e {edge[0]} {edge[1]} {edge[2]}\n") + + def _writeGraphToFileNewFormat(self, graph, oFile): + node_str = ' '.join(f"{node} {label}" for node, label in sorted(graph['nodes'])) + edge_str = ' '.join(f"{u} {v} {label}" for u, v, label in graph['edges']) + oFile.write(f"{node_str} : {edge_str}\n") From 81633aa0207e26060238973df36c60dfee4382b9 Mon Sep 17 00:00:00 2001 From: choubeyy Date: Thu, 8 Aug 2024 00:56:47 +0530 Subject: [PATCH 07/22] Handlelower bound to prevent negative values --- .../createSyntheticGraphTransactions.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py b/PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py index 60fdda9e..11ad3ade 100644 --- a/PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py +++ b/PAMI/extras/syntheticDataGenerator/createSyntheticGraphTransactions.py @@ -3,6 +3,7 @@ # graphFormat = 'old' or 'new', default is 'old' # import random +from PAMI.extras.visualize import graphs class SyntheticGraphGenerator: def __init__(self, numGraphs, avgNumVertices, avgNumEdges, numVertexLabels, numEdgeLabels, outputFileName, format='old'): @@ -40,13 +41,11 @@ def _validate(self): if self.avgNumEdges < self.numEdgeLabels: raise ValueError("Average number of edges should be greater than or equal to number of edge labels") - - def generate(self): with open(self.outputFileName, 'w') as oFile: for i in range(self.numGraphs): - numVertices = random.randint(self.avgNumVertices-3, self.avgNumVertices+3) - numEdges = random.randint(self.avgNumEdges-3, self.avgNumEdges+3) + numVertices = random.randint(max(self.avgNumVertices-3, 1), self.avgNumVertices+3) + numEdges = random.randint(max(self.avgNumEdges-3, 0), self.avgNumEdges+3) if numVertices < numEdges: numVertices = numEdges + 1 @@ -102,3 +101,8 @@ def _writeGraphToFileNewFormat(self, graph, oFile): node_str = ' '.join(f"{node} {label}" for node, label in sorted(graph['nodes'])) edge_str = ' '.join(f"{u} {v} {label}" for u, v, label in graph['edges']) oFile.write(f"{node_str} : {edge_str}\n") + +if __name__ == "__main__": + obj = SyntheticGraphGenerator(10, 2, 1, 1, 1, 'synthetic_graphs.txt', 'old') + vis = graphs.graphDatabase('synthetic_graphs.txt') + vis.plot() \ No newline at end of file From b78b3d00dbf5262f7391d3a7e9dc351b3af1782e Mon Sep 17 00:00:00 2001 From: sangeeth-007-hub Date: Tue, 13 Aug 2024 15:12:43 +0530 Subject: [PATCH 08/22] Update y.s.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8fd175c0..b44a9672 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ # Introduction PAttern MIning (PAMI) is a Python library containing several algorithms to discover user interest-based patterns in a wide-spectrum of datasets across multiple computing platforms. Useful links to utilize the services of this library were provided below: - +NAME:SANGEETH 1. Youtube tutorial https://www.youtube.com/playlist?list=PLKP768gjVJmDer6MajaLbwtfC9ULVuaCZ From 29a9c3f408e05f531f68c7e2efe499b1170eac3c Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 20:56:04 +0900 Subject: [PATCH 09/22] Update Apriori.py change input of save() outFile to oFile --- PAMI/frequentPattern/basic/Apriori.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PAMI/frequentPattern/basic/Apriori.py b/PAMI/frequentPattern/basic/Apriori.py index 9017f081..b0b3ce92 100644 --- a/PAMI/frequentPattern/basic/Apriori.py +++ b/PAMI/frequentPattern/basic/Apriori.py @@ -353,22 +353,22 @@ def getPatternsAsDataFrame(self) -> _ab._pd.DataFrame: return dataFrame - def save(self, outFile: str, seperator = "\t" ) -> None: + def save(self, oFile: str, seperator = "\t" ) -> None: """ Complete set of frequent patterns will be loaded in to an output file - :param outFile: name of the output file - :type outFile: csvfile + :param oFile: name of the output file + :type oFile: csvfile :return: None """ - # self._oFile = outFile + # self._oFile = oFile # writer = open(self._oFile, 'w+') # for x, y in self._finalPatterns.items(): # patternsAndSupport = x.strip() + ":" + str(y[0]) # writer.write("%s \n" % patternsAndSupport) - with open(outFile, 'w') as f: + with open(oFile, 'w') as f: for x, y in self._finalPatterns.items(): x = seperator.join(x) f.write(f"{x}:{y}\n") From 1c32d27a87421b994d57556b3d5f03c13315b5fb Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 21:22:02 +0900 Subject: [PATCH 10/22] Update TransactionalDatabase.py change the paramater name seperator to sep --- .../syntheticDataGenerator/TransactionalDatabase.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PAMI/extras/syntheticDataGenerator/TransactionalDatabase.py b/PAMI/extras/syntheticDataGenerator/TransactionalDatabase.py index 817b8c46..8e5413f5 100644 --- a/PAMI/extras/syntheticDataGenerator/TransactionalDatabase.py +++ b/PAMI/extras/syntheticDataGenerator/TransactionalDatabase.py @@ -87,7 +87,7 @@ class TransactionalDatabase: """ - def __init__(self, databaseSize, avgItemsPerTransaction, numItems,seperator = "\t") -> None: + def __init__(self, databaseSize, avgItemsPerTransaction, numItems,sep = "\t") -> None: """ Initialize the transactional database with the given parameters @@ -97,14 +97,14 @@ def __init__(self, databaseSize, avgItemsPerTransaction, numItems,seperator = "\ :type avgItemsPerTransaction: int :param numItems: total number of items :type numItems: int - :param seperator: separator to distinguish the items in a transaction - :type seperator: str + :param sep: separator to distinguish the items in a transaction + :type sep: str """ self.databaseSize = databaseSize self.avgItemsPerTransaction = avgItemsPerTransaction self.numItems = numItems - self.seperator = seperator + self.sep = sep self.db = [] def _generateArray(self, nums, avg, maxItems) -> list: @@ -171,7 +171,7 @@ def save(self, filename) -> None: with open(filename, 'w') as f: for line in self.db: - f.write(str(self.seperator).join(map(str, line)) + '\n') + f.write(str(self.sep).join(map(str, line)) + '\n') def getTransactions(self, sep = "\t") -> pd.DataFrame: """ @@ -197,5 +197,5 @@ def getTransactions(self, sep = "\t") -> pd.DataFrame: obj.create() obj.save(sys.argv[5]) else: - raise ValueError("Invalid number of arguments. Args: or Args: ") + raise ValueError("Invalid number of arguments. Args: or Args: ") \ No newline at end of file From c989fcf1f88522a8792f6195b2ad626e7d5a29e6 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 21:35:06 +0900 Subject: [PATCH 11/22] Update usingBeta.py change the parameter name threshold to LS --- PAMI/extras/calculateMISValues/usingBeta.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/PAMI/extras/calculateMISValues/usingBeta.py b/PAMI/extras/calculateMISValues/usingBeta.py index 48c22e76..e15b6f6b 100644 --- a/PAMI/extras/calculateMISValues/usingBeta.py +++ b/PAMI/extras/calculateMISValues/usingBeta.py @@ -46,7 +46,7 @@ class usingBeta(): Name of the Input file to get the patterns as DataFrame :param beta: str : Name of the output file to store complete set of frequent patterns - :param threshold: int : + :param LS: int : The user can specify threshold either in count or proportion of database size. If the program detects the data type of threshold is integer, then it treats threshold is expressed in count. :param sep: str : This variable is used to distinguish items from one another in a transaction. The default seperator is tab space. However, the users can override their default separator. @@ -66,13 +66,13 @@ class usingBeta(): _iFile: str = ' ' _beta: int = int() _sep: str = str() - _threshold: int = int() + _LS: int = int() _finalPatterns: dict = {} - def __init__(self, iFile: str, beta: int, threshold: int, sep: str): + def __init__(self, iFile: str, beta: int, LS: int, sep: str): self._iFile = iFile self._beta = beta - self._threshold = threshold + self._LS = LS self._sep = sep self._lno = 0 @@ -131,9 +131,9 @@ def calculateMIS(self) -> None: self._creatingItemSets() frequentItems = self._creatingFrequentItems() for x, y in frequentItems.items(): - #self._finalPatterns[x] = min([y, self._threshold]) - if y < self._threshold: - self._finalPatterns[x] = self._threshold + #self._finalPatterns[x] = min([y, self._LS]) + if y < self._LS: + self._finalPatterns[x] = self._LS else: self._finalPatterns[x] = y From e235349fafd7ec4825eef763caff17bf9cb26eff Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 21:45:50 +0900 Subject: [PATCH 12/22] Update CFPGrowthPlus.py change the function name Mine to mine --- .../basic/CFPGrowthPlus.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PAMI/multipleMinimumSupportBasedFrequentPattern/basic/CFPGrowthPlus.py b/PAMI/multipleMinimumSupportBasedFrequentPattern/basic/CFPGrowthPlus.py index 0637cfc9..c9c47a79 100644 --- a/PAMI/multipleMinimumSupportBasedFrequentPattern/basic/CFPGrowthPlus.py +++ b/PAMI/multipleMinimumSupportBasedFrequentPattern/basic/CFPGrowthPlus.py @@ -506,7 +506,7 @@ def startMine(self): """ self.mine() - def Mine(self): + def mine(self): """ main program to start the operation From 023db09734ce4cc4ba9dd09aeb4ff086cb8678be Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 21:52:29 +0900 Subject: [PATCH 13/22] Update RSFPGrowth.py change the function name Mine to mine --- PAMI/relativeFrequentPattern/basic/RSFPGrowth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PAMI/relativeFrequentPattern/basic/RSFPGrowth.py b/PAMI/relativeFrequentPattern/basic/RSFPGrowth.py index 723015f7..615e1dca 100644 --- a/PAMI/relativeFrequentPattern/basic/RSFPGrowth.py +++ b/PAMI/relativeFrequentPattern/basic/RSFPGrowth.py @@ -639,7 +639,7 @@ def startMine(self) -> None: self.__memoryUSS = process.memory_full_info().uss self.__memoryRSS = process.memory_info().rss - def Mine(self) -> None: + def mine(self) -> None: """ Main program to start the operation :return: None From a2ee8cc8899152711307ae76a5229e86be3b2832 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 21:57:46 +0900 Subject: [PATCH 14/22] Update usingBeta.py Set sep as standard input to sep with \t --- PAMI/extras/calculateMISValues/usingBeta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PAMI/extras/calculateMISValues/usingBeta.py b/PAMI/extras/calculateMISValues/usingBeta.py index e15b6f6b..a429ab18 100644 --- a/PAMI/extras/calculateMISValues/usingBeta.py +++ b/PAMI/extras/calculateMISValues/usingBeta.py @@ -69,7 +69,7 @@ class usingBeta(): _LS: int = int() _finalPatterns: dict = {} - def __init__(self, iFile: str, beta: int, LS: int, sep: str): + def __init__(self, iFile: str, beta: int, LS: int, sep: str="\t"): self._iFile = iFile self._beta = beta self._LS = LS From 06f7cbf19621f1426b4643a261e07ca37e5994d2 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 22:18:14 +0900 Subject: [PATCH 15/22] Update confidence.py Set sep as standard input to sep with \t --- PAMI/AssociationRules/basic/confidence.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PAMI/AssociationRules/basic/confidence.py b/PAMI/AssociationRules/basic/confidence.py index 5b14e0b2..b32d93e2 100644 --- a/PAMI/AssociationRules/basic/confidence.py +++ b/PAMI/AssociationRules/basic/confidence.py @@ -153,7 +153,7 @@ class confidence: _memoryRSS = float() _associationRules = {} - def __init__(self, iFile, minConf, sep): + def __init__(self, iFile, minConf, sep="\t"): """ :param iFile: input file name or path :type iFile: str From a409e304903276d490367bb7d3459f03c7566cd0 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 22:32:58 +0900 Subject: [PATCH 16/22] Update TemporalDatabase.py change the parameters name --- PAMI/extras/dbStats/TemporalDatabase.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PAMI/extras/dbStats/TemporalDatabase.py b/PAMI/extras/dbStats/TemporalDatabase.py index 9b14dc0d..52b34c9d 100644 --- a/PAMI/extras/dbStats/TemporalDatabase.py +++ b/PAMI/extras/dbStats/TemporalDatabase.py @@ -41,7 +41,7 @@ import numpy as np from urllib.request import urlopen from typing import Dict, Union - +import PAMI.extras.graph.plotLineGraphFromDictionary as plt class TemporalDatabase: """ @@ -442,7 +442,7 @@ def plotGraphs(self) -> None: ['b', 'd', 'g', 'c', 'i'], ['b', 'd', 'g', 'e', 'j']]} # data = pd.DataFrame.from_dict('temporal_T10I4D100K.csv') - import PAMI.extras.graph.plotLineGraphFromDictionary as plt + if len(sys.argv) < 3: print("Please provide two arguments.") From 2a76ab8a5f3b17239d6575feb738af2546b5e8e9 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 22:33:34 +0900 Subject: [PATCH 17/22] Update TemporalDatabase.py change the parameters name --- .../TemporalDatabase.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/PAMI/extras/syntheticDataGenerator/TemporalDatabase.py b/PAMI/extras/syntheticDataGenerator/TemporalDatabase.py index aaf42435..006c00f1 100644 --- a/PAMI/extras/syntheticDataGenerator/TemporalDatabase.py +++ b/PAMI/extras/syntheticDataGenerator/TemporalDatabase.py @@ -5,7 +5,7 @@ # # from PAMI.extras.syntheticDataGenerator import TemporalDatabase as db # -# temporalDB = db(numOfTransactions, avgTransactionLength, numItems, outFileName) +# temporalDB = db(databaseSize, avgTransactionLength, numItems, outFileName) # # temporalDB.create(percentage) # @@ -37,15 +37,15 @@ class TemporalDatabase: """ - :Description: - creates a temporal database with required parameter (e.g.,numOfTransactions, avgLenOfTransactions, numItems and outputFile). + :Description: - creates a temporal database with required parameter (e.g.,databaseSize, avgItemsPerTransaction, numItems and outputFile). - output can be printed in two ways either in text file or dataframe depending on the input type. :Attributes: - :param numOfTransactions: int + :param databaseSize: int number of transactions - :param avgLenOfTransactions: int + :param avgItemsPerTransaction: int average length of transactions :param numItems: int @@ -77,7 +77,7 @@ class TemporalDatabase: Perform a coin flip with the given probability tuning(): - Tune the arrayLength to match avgLenOfTransactions + Tune the arrayLength to match avgItemsPerTransaction createTemporalFile(): create Temporal database or dataframe depending on input @@ -89,7 +89,7 @@ class TemporalDatabase: Format: - (.venv) $ python3 TemporalDatabase.py + (.venv) $ python3 TemporalDatabase.py Example Usage: @@ -101,13 +101,13 @@ class TemporalDatabase: from PAMI.extras.syntheticDataGenerator import TemporalDatabase as db - temporalDB = db(numOfTransactions, avgTransactionLength, numItems, outFileName) + temporalDB = db(databaseSize, avgTransactionLength, numItems, outFileName) temporalDB.create(percentage) """ - def __init__(self, numOfTransactions: int, avgLenOfTransactions: int, + def __init__(self, databaseSize: int, avgItemsPerTransaction: int, numItems: int, outputFile: str, percentage: int=50, sep: str='\t', typeOfFile: str="Database") -> None: @@ -115,8 +115,8 @@ def __init__(self, numOfTransactions: int, avgLenOfTransactions: int, Initialize the generateTemporalDatabase class with required parameters. """ - self.numOfTransactions = numOfTransactions - self.avgLenOfTransactions = avgLenOfTransactions + self.databaseSize = databaseSize + self.avgItemsPerTransaction = avgItemsPerTransaction self.numItems = numItems self.outputFile = outputFile if percentage > 1: @@ -189,18 +189,18 @@ def create(self) -> None: db = [] lineSize = [] - for i in range(self.numOfTransactions): + for i in range(self.databaseSize): db.append([i]) if self.performCoinFlip(self.percentage): lineSize.append([i,0]) - # make it so that sum of lineSize[1] equal to numTransactions * avgLenOfTransactions - sumRes = self.numOfTransactions * self.avgLenOfTransactions + # make it so that sum of lineSize[1] equal to numTransactions * avgItemsPerTransaction + sumRes = self.databaseSize * self.avgItemsPerTransaction self.tuning(lineSize, sumRes) for i in range(len(lineSize)): if lineSize[i][1] > self.numItems: - raise ValueError("Error: Either increase numItems or decrease avgLenOfTransactions or modify percentage") + raise ValueError("Error: Either increase numItems or decrease avgItemsPerTransaction or modify percentage") line = np.random.choice(range(1, self.numItems + 1), lineSize[i][1], replace=False) db[lineSize[i][0]].extend(line) From f4f3025d0316ea6fa0786cdb4bc608b482b8a43d Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 22:39:29 +0900 Subject: [PATCH 18/22] Update CPFPMiner.py change the function name Mine to mine --- PAMI/periodicFrequentPattern/closed/CPFPMiner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PAMI/periodicFrequentPattern/closed/CPFPMiner.py b/PAMI/periodicFrequentPattern/closed/CPFPMiner.py index 76ed1844..ae243ae2 100644 --- a/PAMI/periodicFrequentPattern/closed/CPFPMiner.py +++ b/PAMI/periodicFrequentPattern/closed/CPFPMiner.py @@ -499,7 +499,7 @@ def startMine(self): self._memoryRSS = process.memory_info().rss print("Closed periodic frequent patterns were generated successfully using CPFPMiner algorithm ") - def Mine(self): + def mine(self): """ Mining process will start from here """ From 98063cee7d8df42999b89ffcc67d7dabb2a4ae76 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 22:46:20 +0900 Subject: [PATCH 19/22] Update MaxPFGrowth.py change the function name Mine to mine --- PAMI/periodicFrequentPattern/maximal/MaxPFGrowth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PAMI/periodicFrequentPattern/maximal/MaxPFGrowth.py b/PAMI/periodicFrequentPattern/maximal/MaxPFGrowth.py index fc8ff257..8ff97985 100644 --- a/PAMI/periodicFrequentPattern/maximal/MaxPFGrowth.py +++ b/PAMI/periodicFrequentPattern/maximal/MaxPFGrowth.py @@ -725,7 +725,7 @@ def startMine(self) -> None: self._memoryRSS = _process.memory_info().rss print("Maximal Periodic Frequent patterns were generated successfully using MAX-PFPGrowth algorithm ") - def Mine(self) -> None: + def mine(self) -> None: """ Mining process will start from this function :return: None From 823b09c7b101f50ad6842fa970206c3871727786 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 22:46:33 +0900 Subject: [PATCH 20/22] Update kPFPMiner.py add function mine --- .../topk/kPFPMiner/kPFPMiner.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/PAMI/periodicFrequentPattern/topk/kPFPMiner/kPFPMiner.py b/PAMI/periodicFrequentPattern/topk/kPFPMiner/kPFPMiner.py index 4750fde3..ea8e290f 100644 --- a/PAMI/periodicFrequentPattern/topk/kPFPMiner/kPFPMiner.py +++ b/PAMI/periodicFrequentPattern/topk/kPFPMiner/kPFPMiner.py @@ -392,6 +392,40 @@ def startMine(self): self._memoryUSS = process.memory_full_info().uss self._memoryRSS = process.memory_info().rss + def mine(self): + """ + Main function of the program + + """ + self._startTime = _ab._time.time() + if self._iFile is None: + raise Exception("Please enter the file path or file name:") + if self._k is None: + raise Exception("Please enter the Minimum Support") + self._creatingItemSets() + self._k = self._convert(self._k) + plist = self._frequentOneItem() + for i in range(len(plist)): + itemI = plist[i] + tidSetI = self._tidList[itemI] + itemSetX = [itemI] + itemSets = [] + tidSets = [] + for j in range(i + 1, len(plist)): + itemJ = plist[j] + tidSetJ = self._tidList[itemJ] + y1 = list(set(tidSetI).intersection(tidSetJ)) + if self.getPer_Sup(y1) <= self._maximum: + itemSets.append(itemJ) + tidSets.append(y1) + self._Generation(itemSetX, itemSets, tidSets) + print("kPFPMiner has successfully generated top-k frequent patterns") + self._endTime = _ab._time.time() + self._memoryUSS = float() + self._memoryRSS = float() + process = _ab._psutil.Process(_ab._os.getpid()) + self._memoryUSS = process.memory_full_info().uss + self._memoryRSS = process.memory_info().rss def getMemoryUSS(self): """Total amount of USS memory consumed by the mining process will be retrieved from this function From ecda7a9dfcae24f48a0a9ab22479df5006a227d9 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Thu, 15 Aug 2024 22:52:45 +0900 Subject: [PATCH 21/22] Update EPCPGrowth.py add function mine --- .../basic/EPCPGrowth.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/PAMI/periodicCorrelatedPattern/basic/EPCPGrowth.py b/PAMI/periodicCorrelatedPattern/basic/EPCPGrowth.py index 45b7b448..65daa546 100644 --- a/PAMI/periodicCorrelatedPattern/basic/EPCPGrowth.py +++ b/PAMI/periodicCorrelatedPattern/basic/EPCPGrowth.py @@ -645,6 +645,45 @@ def startMine(self) -> None: self._memoryRSS = process.memory_info().rss print("Correlated Periodic-Frequent patterns were generated successfully using EPCPGrowth algorithm ") + def mine(self) -> None: + """ + Mining process will start from this function + """ + + global _minSup, _maxPer, _minAllConf, _maxPerAllConf, _lno + self._startTime = _ab._time.time() + if self._iFile is None: + raise Exception("Please enter the file path or file name:") + if self._minSup is None: + raise Exception("Please enter the Minimum Support") + self._creatingItemSets() + self._minSup = self._convert(self._minSup) + self._minAllConf = float(self._minAllConf) + self._maxPer = self._convert(self._maxPer) + self._maxPerAllConf = float(self._maxPerAllConf) + _minSup, _minAllConf, _maxPer, _maxPerAllConf, _lno = self._minSup, self._minAllConf, self._maxPer, self._maxPerAllConf, len(self._Database) + #print(_minSup, _minAllConf, _maxPer, _maxPerAllConf) + if self._minSup > len(self._Database): + raise Exception("Please enter the minSup in range between 0 to 1") + generatedItems, pfList = self._periodicFrequentOneItem() + updatedDatabases = self._updateDatabases(generatedItems) + for x, y in self._rank.items(): + self._rankedUp[y] = x + info = {self._rank[k]: v for k, v in generatedItems.items()} + Tree = self._buildTree(updatedDatabases, info) + patterns = Tree.generatePatterns([]) + self._finalPatterns = {} + for i in patterns: + sample = self._savePeriodic(i[0]) + self._finalPatterns[sample] = i[1] + self._endTime = _ab._time.time() + process = _ab._psutil.Process(_ab._os.getpid()) + self._memoryUSS = float() + self._memoryRSS = float() + self._memoryUSS = process.memory_full_info().uss + self._memoryRSS = process.memory_info().rss + print("Correlated Periodic-Frequent patterns were generated successfully using EPCPGrowth algorithm ") + def getMemoryUSS(self) -> float: """ Total amount of USS memory consumed by the mining process will be retrieved from this function From f72a6d5035e026d8033ec05dd30594a9362937b6 Mon Sep 17 00:00:00 2001 From: s1280130 Date: Mon, 19 Aug 2024 16:37:20 +0900 Subject: [PATCH 22/22] update convert change the folder name converter to convert. and rewrite DF2DB program and put it in convert folder --- .../{converters => convert}/CSV2BitInteger.py | 0 .../{converters => convert}/CSV2Integer.py | 0 .../{converters => convert}/CSV2Parquet.py | 0 PAMI/extras/convert/DF2DB.py | 120 +++++++ .../Subgraphs2FlatTransactions.py | 0 .../{DF2DB => convert/_DF2DB}/DF2DBPlus.py | 0 .../_DF2DB}/TransactionDB2denseDF.py | 0 .../DF2DB.py => convert/_DF2DB/_DF2DB.py} | 0 .../_DF2DB/_DenseFormatDF.py} | 0 .../_DF2DB/_SparseFormatDF.py} | 0 .../{DF2DB => convert/_DF2DB}/__init__.py | 0 .../{DF2DB => convert/_DF2DB}/createTDB.py | 0 PAMI/extras/convert/_DF2DB/denseDF2DB.py | 321 ++++++++++++++++++ .../_DF2DB}/denseDF2DBPlus.py | 0 .../_DF2DB}/denseDF2DB_dump.py | 0 PAMI/extras/convert/_DF2DB/sparseDF2DB.py | 157 +++++++++ .../_DF2DB}/sparseDF2DBPlus.py | 0 .../{converters => convert}/__init__.py | 0 PAMI/extras/convert/denseDF2DB.py | 291 ++++++++++++++++ PAMI/extras/convert/sparseDF2DB.py | 182 ++++++++++ 20 files changed, 1071 insertions(+) rename PAMI/extras/{converters => convert}/CSV2BitInteger.py (100%) rename PAMI/extras/{converters => convert}/CSV2Integer.py (100%) rename PAMI/extras/{converters => convert}/CSV2Parquet.py (100%) create mode 100644 PAMI/extras/convert/DF2DB.py rename PAMI/extras/{converters => convert}/Subgraphs2FlatTransactions.py (100%) rename PAMI/extras/{DF2DB => convert/_DF2DB}/DF2DBPlus.py (100%) rename PAMI/extras/{DF2DB => convert/_DF2DB}/TransactionDB2denseDF.py (100%) rename PAMI/extras/{DF2DB/DF2DB.py => convert/_DF2DB/_DF2DB.py} (100%) rename PAMI/extras/{DF2DB/DenseFormatDF.py => convert/_DF2DB/_DenseFormatDF.py} (100%) rename PAMI/extras/{DF2DB/SparseFormatDF.py => convert/_DF2DB/_SparseFormatDF.py} (100%) rename PAMI/extras/{DF2DB => convert/_DF2DB}/__init__.py (100%) rename PAMI/extras/{DF2DB => convert/_DF2DB}/createTDB.py (100%) create mode 100644 PAMI/extras/convert/_DF2DB/denseDF2DB.py rename PAMI/extras/{DF2DB => convert/_DF2DB}/denseDF2DBPlus.py (100%) rename PAMI/extras/{DF2DB => convert/_DF2DB}/denseDF2DB_dump.py (100%) create mode 100644 PAMI/extras/convert/_DF2DB/sparseDF2DB.py rename PAMI/extras/{DF2DB => convert/_DF2DB}/sparseDF2DBPlus.py (100%) rename PAMI/extras/{converters => convert}/__init__.py (100%) create mode 100644 PAMI/extras/convert/denseDF2DB.py create mode 100644 PAMI/extras/convert/sparseDF2DB.py diff --git a/PAMI/extras/converters/CSV2BitInteger.py b/PAMI/extras/convert/CSV2BitInteger.py similarity index 100% rename from PAMI/extras/converters/CSV2BitInteger.py rename to PAMI/extras/convert/CSV2BitInteger.py diff --git a/PAMI/extras/converters/CSV2Integer.py b/PAMI/extras/convert/CSV2Integer.py similarity index 100% rename from PAMI/extras/converters/CSV2Integer.py rename to PAMI/extras/convert/CSV2Integer.py diff --git a/PAMI/extras/converters/CSV2Parquet.py b/PAMI/extras/convert/CSV2Parquet.py similarity index 100% rename from PAMI/extras/converters/CSV2Parquet.py rename to PAMI/extras/convert/CSV2Parquet.py diff --git a/PAMI/extras/convert/DF2DB.py b/PAMI/extras/convert/DF2DB.py new file mode 100644 index 00000000..e0f3a5d7 --- /dev/null +++ b/PAMI/extras/convert/DF2DB.py @@ -0,0 +1,120 @@ +# DF2DB in this code dataframe is converting databases into sparse or dense transactional, temporal, Utility. +# +# +# **Importing this algorithm into a python program** +# -------------------------------------------------------- +# +# from PAMI.extras.DF2DB import DF2DB as db +# +# obj = db.DF2DB(idf, "sparse/dense") +# +# obj.convert2Transactional("outputFileName", ">=", 16) # To create transactional database +# +# obj.convert2Temporal("outputFileName", ">=", 16) # To create temporal database +# +# obj.convert2Utility("outputFileName") # To create utility database +# + + + + +__copyright__ = """ +Copyright (C) 2021 Rage Uday Kiran + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" +import PAMI.extras.convert.denseDF2DB as dense +import PAMI.extras.convert.sparseDF2DB as sparse +import sys +from typing import Union + +class DF2DB: + """ + :Description: This class will create database for given DataFrame based on Threshold values and conditions are defined in the class. + Converts Dataframe into sparse or dense dataframes. + + :Attributes: + + :param inputDF: DataFrame : + It is sparse or dense DataFrame + :param thresholdValue: int or float : + It is threshold value of all item + :param condition: str : + It is condition of all item + :param DFtype: str : + It is DataFrame type. It should be sparse or dense. Default DF is sparse. + + + **Importing this algorithm into a python program** + -------------------------------------------------------- + .. code-block:: python + + from PAMI.extras.DF2DB import DF2DB as db + + obj = db.DF2DB(idf, "sparse/dense") + + obj.convert2Transactional("outputFileName",condition,threshold) # To create transactional database + + obj.convert2Temporal("outputFileName",condition,threshold) # To create temporal database + + obj.convert2Utility("outputFileName",condition,threshold) # To create utility database + """, + + + def __init__(self, inputDF, DFtype='dense') -> None: + self.inputDF = inputDF + self.DFtype = DFtype.lower() + if DFtype == 'sparse': + self.DF2DB = sparse.sparseDF2DB(self.inputDF) + elif DFtype == 'dense': + self.DF2DB = dense.denseDF2DB(self.inputDF) + else: + raise Exception('DF type should be sparse or dense') + def convert2TransactionalDatabase(self, oFile: str, condition: str, thresholdValue: Union[int, float]) -> str: + """ + create transactional database and return oFileName + :param oFile: file name or path to store database + :type oFile: str + :return: oFile name + :rtype: str + """ + self.DF2DB.convert2TransactionalDatabase(oFile,condition,thresholdValue) + return self.DF2DB.getFileName() + + def convert2TemporalDatabase(self, oFile: str, condition: str, thresholdValue: Union[int, float]) -> str: + """ + create temporal database and return oFile name + :param oFile: file name or path to store database + :type oFile: str + :return: oFile name + :rtype: str + """ + self.DF2DB.convert2TemporalDatabase(oFile,condition,thresholdValue) + return self.DF2DB.getFileName() + + def convert2UtilityDatabase(self, oFile: str) -> str: + """ + create utility database and return oFile name + :param oFile: file name or path to store database + :type oFile: str + :return: outputFile name + :rtype: str + """ + self.DF2DB.convert2UtilityDatabase(oFile) + return self.DF2DB.getFileName() + + +if __name__ == '__main__': + obj = DF2DB(sys.argv[1]) + obj.getTransactionalDatabase(sys.argv[2],sys.argv[3],sys.argv[4]) \ No newline at end of file diff --git a/PAMI/extras/converters/Subgraphs2FlatTransactions.py b/PAMI/extras/convert/Subgraphs2FlatTransactions.py similarity index 100% rename from PAMI/extras/converters/Subgraphs2FlatTransactions.py rename to PAMI/extras/convert/Subgraphs2FlatTransactions.py diff --git a/PAMI/extras/DF2DB/DF2DBPlus.py b/PAMI/extras/convert/_DF2DB/DF2DBPlus.py similarity index 100% rename from PAMI/extras/DF2DB/DF2DBPlus.py rename to PAMI/extras/convert/_DF2DB/DF2DBPlus.py diff --git a/PAMI/extras/DF2DB/TransactionDB2denseDF.py b/PAMI/extras/convert/_DF2DB/TransactionDB2denseDF.py similarity index 100% rename from PAMI/extras/DF2DB/TransactionDB2denseDF.py rename to PAMI/extras/convert/_DF2DB/TransactionDB2denseDF.py diff --git a/PAMI/extras/DF2DB/DF2DB.py b/PAMI/extras/convert/_DF2DB/_DF2DB.py similarity index 100% rename from PAMI/extras/DF2DB/DF2DB.py rename to PAMI/extras/convert/_DF2DB/_DF2DB.py diff --git a/PAMI/extras/DF2DB/DenseFormatDF.py b/PAMI/extras/convert/_DF2DB/_DenseFormatDF.py similarity index 100% rename from PAMI/extras/DF2DB/DenseFormatDF.py rename to PAMI/extras/convert/_DF2DB/_DenseFormatDF.py diff --git a/PAMI/extras/DF2DB/SparseFormatDF.py b/PAMI/extras/convert/_DF2DB/_SparseFormatDF.py similarity index 100% rename from PAMI/extras/DF2DB/SparseFormatDF.py rename to PAMI/extras/convert/_DF2DB/_SparseFormatDF.py diff --git a/PAMI/extras/DF2DB/__init__.py b/PAMI/extras/convert/_DF2DB/__init__.py similarity index 100% rename from PAMI/extras/DF2DB/__init__.py rename to PAMI/extras/convert/_DF2DB/__init__.py diff --git a/PAMI/extras/DF2DB/createTDB.py b/PAMI/extras/convert/_DF2DB/createTDB.py similarity index 100% rename from PAMI/extras/DF2DB/createTDB.py rename to PAMI/extras/convert/_DF2DB/createTDB.py diff --git a/PAMI/extras/convert/_DF2DB/denseDF2DB.py b/PAMI/extras/convert/_DF2DB/denseDF2DB.py new file mode 100644 index 00000000..992c7046 --- /dev/null +++ b/PAMI/extras/convert/_DF2DB/denseDF2DB.py @@ -0,0 +1,321 @@ +# denseDF2DB in this code the dense dataframe is converting databases into different transactional, temporal, utility types. +# +# **Importing this algorithm into a python program** +# -------------------------------------------------------- +# +# from PAMI.extras.DF2DB import denseDF2DB as db +# +# obj = db.denseDF2DB(idf, ">=", 16) +# +# obj.save(oFile) +# +# obj.createTransactional("outputFileName") # To create transactional database +# +# obj.createTemporal("outputFileName") # To create temporal database +# +# obj.createUtility("outputFileName") # To create utility database +# +# obj.getFileName("outputFileName") # To get file name of the database +# + + + + +__copyright__ = """ + Copyright (C) 2021 Rage Uday Kiran + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import pandas as pd +import sys +class denseDF2DB(): + """ + :Description: This class create Data Base from DataFrame. + + :Attributes: + + :param inputDF: dataframe : + It is dense DataFrame + :param condition: str : + It is condition to judge the value in dataframe + :param thresholdValue: int or float : + User defined value. + + **Importing this algorithm into a python program** + -------------------------------------------------------- + .. code-block:: python + + from PAMI.extras.DF2DB import denseDF2DB as db + + obj = db.denseDF2DB(iDdf, ">=", 16) + + obj.save(oFile) + + obj.createTransactional("outputFileName") # To create transactional database + + obj.createTemporal("outputFileName") # To create temporal database + + obj.createUtility("outputFileName") # To create utility database + + obj.getFileName("outputFileName") # To get file name of the database + + """ + + def __init__(self, inputDF, condition: str, thresholdValue: float) -> None: + self.inputDF = inputDF + self.condition = condition + self.thresholdValue = thresholdValue + self.tids = [] + self.items = [] + self.outputFile = ' ' + self.items = list(self.inputDF.columns.values)[1:] + self.inputDF = self.inputDF.set_index('tid') + self.tids = list(self.inputDF.index) + + + def createTransactional(self, outputFile: str) -> None: + """ + :Description: Create transactional data base + + :param outputFile: Write transactional data base into outputFile + + :type outputFile: str + + :return: None + + """ + + self.outputFile = outputFile + with open(outputFile, 'w') as f: + if self.condition == '>': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] > self.thresholdValue] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{transaction}') + else: + continue + f.write('\n') + + elif self.condition == '>=': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] >= self.thresholdValue] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{transaction}') + else: + continue + f.write('\n') + + elif self.condition == '<=': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] <= self.thresholdValue] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{transaction}') + else: + continue + f.write('\n') + + elif self.condition == '<': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] < self.thresholdValue] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{transaction}') + else: + continue + f.write('\n') + elif self.condition == '==': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] == self.thresholdValue] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{transaction}') + else: + continue + f.write('\n') + elif self.condition == '!=': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] != self.thresholdValue] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{transaction}') + else: + continue + f.write('\n') + else: + print('Condition error') + + + + def createTemporal(self, outputFile: str) -> None: + """ + :Description: Create temporal data base + + :param outputFile: Write temporal data base into outputFile + + :type outputFile: str + + :return: None + """ + + self.outputFile = outputFile + with open(outputFile, 'w') as f: + if self.condition == '>': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] > self.thresholdValue] + if len(transaction) > 1: + f.write(f'{tid}') + for item in transaction: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{tid}') + f.write(f',{transaction}') + else: + continue + f.write('\n') + + elif self.condition == '>=': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] >= self.thresholdValue] + if len(transaction) > 1: + f.write(f'{tid}') + for item in transaction: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{tid}') + f.write(f',{transaction}') + else: + continue + f.write('\n') + + elif self.condition == '<=': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] <= self.thresholdValue] + if len(transaction) > 1: + f.write(f'{tid}') + for item in transaction: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{tid}') + f.write(f',{transaction}') + else: + continue + f.write('\n') + + elif self.condition == '<': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] < self.thresholdValue] + if len(transaction) > 1: + f.write(f'{tid}') + for item in transaction: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{tid}') + f.write(f',{transaction}') + else: + continue + f.write('\n') + elif self.condition == '==': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] == self.thresholdValue] + if len(transaction) > 1: + f.write(f'{tid}') + for item in transaction: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{tid}') + f.write(f',{transaction}') + else: + continue + f.write('\n') + elif self.condition == '!=': + for tid in self.tids: + transaction = [item for item in self.items if self.inputDF.at[tid, item] != self.thresholdValue] + if len(transaction) > 1: + f.write(f'{tid}') + for item in transaction: + f.write(f',{item}') + elif len(transaction) == 1: + f.write(f'{tid}') + f.write(f',{transaction}') + else: + continue + f.write('\n') + + else: + print('Condition error') + + def createUtility(self, outputFile: str) -> None: + """ + + :Description: Create the utility database. + + :param outputFile: Write utility database into outputFile + + :type outputFile: str + + :return: None + + """ + + self.outputFile = outputFile + with open(self.outputFile, 'w') as f: + for tid in self.tids: + df = self.inputDF.loc[tid].dropna() + f.write(f'{df.index[0]}') + for item in df.index[1:]: + f.write(f'\t{item}') + f.write(f':{df.sum()}:') + f.write(f'{df.at[df.index[0]]}') + for item in df.index[1:]: + f.write(f'\t{df.at[item]}') + f.write('\n') + + def getFileName(self) -> str: + """ + :return: outputFile name + + :rtype: str + """ + + return self.outputFile + + +if __name__ == '__main__': + + + obj = denseDF2DB(sys.argv[1], sys.argv[2],sys.argv[3]) + obj.getFileName(sys.argv[4]) + diff --git a/PAMI/extras/DF2DB/denseDF2DBPlus.py b/PAMI/extras/convert/_DF2DB/denseDF2DBPlus.py similarity index 100% rename from PAMI/extras/DF2DB/denseDF2DBPlus.py rename to PAMI/extras/convert/_DF2DB/denseDF2DBPlus.py diff --git a/PAMI/extras/DF2DB/denseDF2DB_dump.py b/PAMI/extras/convert/_DF2DB/denseDF2DB_dump.py similarity index 100% rename from PAMI/extras/DF2DB/denseDF2DB_dump.py rename to PAMI/extras/convert/_DF2DB/denseDF2DB_dump.py diff --git a/PAMI/extras/convert/_DF2DB/sparseDF2DB.py b/PAMI/extras/convert/_DF2DB/sparseDF2DB.py new file mode 100644 index 00000000..47fec943 --- /dev/null +++ b/PAMI/extras/convert/_DF2DB/sparseDF2DB.py @@ -0,0 +1,157 @@ +# SparseFormatDF in this code the dense dataframe is converting databases into different transactional, temporal, utility types. +# +# **Importing this algorithm into a python program** +# -------------------------------------------------------- +# +# from PAMI.extras.convert import sparseDF2DB as db +# +# obj = db.sparseDF2DB(idf, ">=", 16) +# +# obj.save(oFile) +# +# obj.createTransactional("outputFileName") # To create transactional database +# +# obj.createTemporal("outputFileName") # To create temporal database +# +# obj.createUtility("outputFileName") # To create utility database +# +# obj.getFileName("outputFileName") # To get file name of the database +# + + + + +__copyright__ = """ +Copyright (C) 2021 Rage Uday Kiran + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" +import pandas as pd +import sys + +class sparseDF2DB: + """ + :Description: This class create Data Base from DataFrame. + + :Attributes: + + :param inputDF: dataframe : + It is dense DataFrame + :param condition: str : + It is condition to judge the value in dataframe + :param thresholdValue: int or float : + User defined value. + + **Importing this algorithm into a python program** + -------------------------------------------------------- + .. code-block:: python + + from PAMI.extras.DF2DB import SparseFormatDF as db + + obj = db.SparseFormatDF(iDdf, ">=", 16) + + obj.save(oFile) + + obj.createTransactional("outputFileName") # To create transactional database + + obj.createTemporal("outputFileName") # To create temporal database + + obj.createUtility("outputFileName") # To create utility database + + obj.getFileName("outputFileName") # To get file name of the database + """ + + + def __init__(self, inputDF, condition: str, thresholdValue: float) -> None: + self.inputDF = inputDF + self.condition = condition + self.thresholdValue = thresholdValue + self.outputFile = '' + if self.condition == '>': + self.df = self.inputDF.query(f'value > {self.thresholdValue}') + elif self.condition == '>=': + self.df = self.inputDF.query(f'value >= {self.thresholdValue}') + elif self.condition == '<=': + self.df = self.inputDF.query(f'value <= {self.thresholdValue}') + elif self.condition == '<': + self.df = self.inputDF.query(f'value < {self.thresholdValue}') + else: + print('Condition error') + self.df = self.df.drop(columns='value') + self.df = self.df.groupby('tid')['item'].apply(list) + + def createTransactional(self, outputFile: str) -> None: + """ + Create transactional data base + :param outputFile: Write transactional data base into outputFile + :type outputFile: str + :return: None + """ + self.outputFile = outputFile + with open(self.outputFile, 'w') as f: + for line in self.df: + f.write(f'{line[0]}') + for item in line[1:]: + f.write(f',{item}') + f.write('\n') + + def createTemporal(self, outputFile: str) -> None: + """ + Create temporal data base + :param outputFile: Write temporal data base into outputFile + :type outputFile: str + :return: None + """ + + self.outputFile = outputFile + with open(self.outputFile, 'w') as f: + for tid in self.df.index: + f.write(f'{tid}') + for item in self.df[tid]: + f.write(f',{item}') + f.write('\n') + + def createUtility(self, outputFile: str) -> None: + """ + Create the utility database. + :param outputFile: Write utility database into outputFile + :type outputFile: str + :return: None + """ + + self.outputFile = outputFile + items = self.inputDF.groupby(level=0)['item'].apply(list) + values = self.inputDF.groupby(level=0)['value'].apply(list) + sums = self.inputDF.groupby(level=0)['value'].sum() + index = list(items.index) + with open(self.outputFile, 'w') as f: + for tid in index: + f.write(f'{items[tid][0]}') + for item in items[tid][1:]: + f.write(f'\t{item}') + f.write(f':{sums[tid]}:') + f.write(f'{values[tid][0]}') + for value in values[tid][1:]: + f.write(f'\t{value}') + f.write('\n') + + def getFileName(self) -> str: + + return self.outputFile + +if __name__ == '__main__': + + obj = sparseDF2DB(sys.argv[1], sys.argv[2],sys.argv[3]) + obj.getFileName(sys.argv[4]) + diff --git a/PAMI/extras/DF2DB/sparseDF2DBPlus.py b/PAMI/extras/convert/_DF2DB/sparseDF2DBPlus.py similarity index 100% rename from PAMI/extras/DF2DB/sparseDF2DBPlus.py rename to PAMI/extras/convert/_DF2DB/sparseDF2DBPlus.py diff --git a/PAMI/extras/converters/__init__.py b/PAMI/extras/convert/__init__.py similarity index 100% rename from PAMI/extras/converters/__init__.py rename to PAMI/extras/convert/__init__.py diff --git a/PAMI/extras/convert/denseDF2DB.py b/PAMI/extras/convert/denseDF2DB.py new file mode 100644 index 00000000..18d301f6 --- /dev/null +++ b/PAMI/extras/convert/denseDF2DB.py @@ -0,0 +1,291 @@ +# DenseFormatDF in this code the dense dataframe is converting databases into different transactional, temporal, utility types. +# +# **Importing this algorithm into a python program** +# -------------------------------------------------------- +# +# from PAMI.extras.convert import denseDF2DB as db +# +# obj = db.denseDF2DB(idf) +# +# obj.save(oFile) +# +# obj.convert2TransactionalDatabase("outputFileName", ">=", 16) # To create transactional database +# +# obj.convert2TemporalDatabase("outputFileName", ">=", 16) # To create temporal database +# +# obj.convert2MultipleTimeSeries("outputFileName", ">=", 16) # To create Mutliple TimeSeries database +# +# obj.convert2UtilityDatabase("outputFileName", ">=", 16) # To create utility database +# +# obj.getFileName() # To get file name of the database +# + + + + + +__copyright__ = """ +Copyright (C) 2021 Rage Uday Kiran + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import operator +from typing import Union + +condition_operator = { + '<': operator.lt, + '>': operator.gt, + '<=': operator.le, + '>=': operator.ge, + '==': operator.eq, + '!=': operator.ne +} + + +class denseDF2DB: + """ + :Description: This class create Data Base from DataFrame. + + :Attributes: + + :param inputDF: dataframe : + It is dense DataFrame + :param condition: str : + It is condition to judge the value in dataframe + :param thresholdValue: int or float : + User defined value. + + + **Importing this algorithm into a python program** + -------------------------------------------------------- + .. code-block:: python + + from PAMI.extras.convert import denseDF2DB as db + + obj = db.denseDF2DB(iDdf ) + + obj.convert2TransactionalDatabase("outputFileName", ">=", 16) # To create transactional database + + obj.convert2TemporalDatabase("outputFileName", ">=", 16) # To create temporal database + + obj.convert2MultipleTimeSeries("outputFileName", ">=", 16) # To create Multiple TimeSeries database + + obj.convert2UtilityDatabase("outputFileName") # To create utility database + + obj.getFileName("outputFileName") # To get file name of the database + """ + + def __init__(self, inputDF) -> None: + self.inputDF = inputDF + self.tids = [] + self.items = [] + self.outputFile = ' ' + self.items = list(self.inputDF.columns.values) + self.tids = list(self.inputDF.index) + + def convert2TransactionalDatabase(self, outputFile: str, condition: str, thresholdValue: Union[int, float]) -> None: + """ + :Description: Create transactional data base + + :Attributes: + + :param outputFile: Write transactional database into outputFile + + :type outputFile: str + + :param condition: It is condition to judge the value in dataframe + + :type condition: str + + :param thresholdValue: User defined value. + + :type thresholdValue: Union[int, float] + """ + + + self.outputFile = outputFile + with open(outputFile, 'w') as f: + if condition not in condition_operator: + print('Condition error') + else: + for tid in self.tids: + transaction = [item for item in self.items if + condition_operator[condition](self.inputDF.at[tid, item], thresholdValue)] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f'\t{item}') + elif len(transaction) == 1: + f.write(f'{transaction[0]}') + else: + continue + f.write('\n') + + def convert2TemporalDatabase(self, outputFile: str, condition: str, thresholdValue: Union[int, float]) -> None: + """ + :Description: Create temporal database + + :param outputFile: Write temporal database into outputFile + + :type outputFile: str + + :param condition: It is condition to judge the value in dataframe + + :type condition: str + + :param thresholdValue: User defined value. + + :type thresholdValue: Union + """ + + self.outputFile = outputFile + with open(outputFile, 'w') as f: + if condition not in condition_operator: + print('Condition error') + else: + for tid in self.tids: + transaction = [item for item in self.items if + condition_operator[condition](self.inputDF.at[tid, item], thresholdValue)] + if len(transaction) > 1: + f.write(f'{tid + 1}') + for item in transaction: + f.write(f'\t{item}') + elif len(transaction) == 1: + f.write(f'{tid + 1}') + f.write(f'\t{transaction[0]}') + else: + continue + f.write('\n') + + def convert2MultipleTimeSeries(self, outputFile: str, condition: str, + thresholdValue: Union[int, float], interval: int) -> None: + """ + :Description: Create the multiple time series database. + + :param outputFile: Write multiple time series database into outputFile. + + :type outputFile: str + + :param interval: Breaks the given timeseries into intervals. + + :type interval: int + + :param condition: It is condition to judge the value in dataframe + + :param thresholdValue: User defined value. + + :type thresholdValue: int or float + """ + self.outputFile = outputFile + writer = open(self.outputFile, 'w+') + # with open(self.outputFile, 'w+') as f: + count = 0 + tids = [] + items = [] + values = [] + for tid in self.tids: + count += 1 + transaction = [item for item in self.items if + condition_operator[condition](self.inputDF.at[tid, item], thresholdValue)] + for i in transaction: + tids.append(count) + items.append(i) + values.append(self.inputDF.at[tid, i]) + if count == interval: + s1, s, ss = str(), str(), str() + if len(values) > 0: + + for j in range(len(tids)): + s1 = s1 + str(tids[j]) + '\t' + for j in range(len(items)): + s = s + items[j] + '\t' + for j in range(len(values)): + ss = ss + str(values[j]) + '\t' + + s2 = s1 + ':' + s + ':' + ss + writer.write("%s\n" % s2) + tids, items, values = [], [], [] + count = 0 + + def convert2UncertainTransactional(self, outputFile: str, condition: str, + thresholdValue: Union[int, float]) -> None: + self.outputFile = outputFile + with open(outputFile, 'w') as f: + if condition not in condition_operator: + print('Condition error') + else: + for tid in self.tids: + transaction = [item for item in self.items if + condition_operator[condition](self.inputDF.at[tid, item], thresholdValue)] + uncertain = [self.inputDF.at[tid, item] for item in self.items if + condition_operator[condition](self.inputDF.at[tid, item], thresholdValue)] + if len(transaction) > 1: + f.write(f'{transaction[0]}') + for item in transaction[1:]: + f.write(f'\t{item}') + f.write(f':') + for value in uncertain: + tt = 0.1 + 0.036 * abs(25 - value) + tt = round(tt, 2) + f.write(f'\t{tt}') + elif len(transaction) == 1: + f.write(f'{transaction[0]}') + tt = 0.1 + 0.036 * abs(25 - uncertain[0]) + tt = round(tt, 2) + f.write(f':{tt}') + else: + continue + f.write('\n') + + def convert2UtilityDatabase(self, outputFile: str) -> None: + """ + :Description: Create the utility database. + + :param outputFile: Write utility database into outputFile + + :type outputFile: str + + :return: None + """ + + self.outputFile = outputFile + with open(self.outputFile, 'w') as f: + for tid in self.tids: + df = self.inputDF.loc[tid].dropna() + f.write(f'{df.index[0]}') + for item in df.index[1:]: + f.write(f'\t{item}') + f.write(f':{df.sum()}:') + f.write(f'{df.at[df.index[0]]}') + + for item in df.index[1:]: + f.write(f'\t{df.at[item]}') + f.write('\n') + + def getFileName(self) -> str: + """ + :return: outputFile name + :rtype: str + """ + + return self.outputFile + +# Dataframes do not run from a terminal + +# if __name__ == '__main__': +# obj = denseDF2DB(sys.argv[1]) +# obj.convert2TransactionalDatabase( sys.argv[2], sys.argv[3]sys.argv[4]) +# transactionalDB = obj.getFileName() +# print(transactionalDB) \ No newline at end of file diff --git a/PAMI/extras/convert/sparseDF2DB.py b/PAMI/extras/convert/sparseDF2DB.py new file mode 100644 index 00000000..97589118 --- /dev/null +++ b/PAMI/extras/convert/sparseDF2DB.py @@ -0,0 +1,182 @@ +# SparseFormatDF in this code the dense dataframe is converting databases into different transactional, temporal, utility types. +# +# **Importing this algorithm into a python program** +# -------------------------------------------------------- +# +# from PAMI.extras.convert import sparseDF2DB as db +# +# obj = db.sparseDF2DB(idf) +# +# obj.save(oFile) +# +# obj.convert2TransactionalDatabase("outputFileName", ">=", 16) # To create transactional database +# +# obj.convert2TemporalDatabase("outputFileName", ">=", 16) # To create temporal database +# +# obj.convert2UtilityDatabase("outputFileName") # To create utility database +# +# obj.getFileName() # To get file name of the database +# + + + + +__copyright__ = """ +Copyright (C) 2021 Rage Uday Kiran + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" +import pandas as pd +import sys +from typing import Union +class sparseDF2DB: + """ + :Description: This class create Data Base from DataFrame. + + :Attributes: + + :param inputDF: dataframe : + It is dense DataFrame + :param condition: str : + It is condition to judge the value in dataframe + :param thresholdValue: int or float : + User defined value. + + **Importing this algorithm into a python program** + -------------------------------------------------------- + .. code-block:: python + + from PAMI.extras.DF2DB import SparseFormatDF as db + + obj = db.SparseFormatDF(iDdf) + + obj.convert2TransactionalDatabase("outputFileName", ">=", 16) # To create transactional database + + obj.convert2TemporalDatabase("outputFileName", ">=", 16) # To create temporal database + + obj.convert2UtilityDatabase("outputFileName", ">=", 16) # To create utility database + + obj.getFileName("outputFileName", ">=", 16) # To get file name of the database + """ + + + def __init__(self, inputDF) -> None: + self.inputDF = inputDF + self.condition = "" + self.thresholdValue = 0 + self.outputFile = '' + + def setParametors(self,outputFile: str, condition: str, thresholdValue: Union[int, float]): + self.condition = condition + self.thresholdValue = thresholdValue + self.outputFile = outputFile + if self.condition == '>': + self.df = self.inputDF.query(f'value > {self.thresholdValue}') + elif self.condition == '>=': + self.df = self.inputDF.query(f'value >= {self.thresholdValue}') + elif self.condition == '<=': + self.df = self.inputDF.query(f'value <= {self.thresholdValue}') + elif self.condition == '<': + self.df = self.inputDF.query(f'value < {self.thresholdValue}') + else: + print('Condition error') + self.df = self.df.drop(columns='value') + self.df = self.df.groupby('tid')['item'].apply(list) + + def convert2TransactionalDatabase(self, outputFile: str, condition: str, thresholdValue: Union[int, float]) -> None: + """ + Create transactional data base + :param outputFile: str: + Write transactional data base into outputFile + + :param inputDF: dataframe : + It is dense DataFrame + :param condition: str : + It is condition to judge the value in dataframe + :param thresholdValue: int or float : + User defined value. + :return: None + """ + self.setParametors(outputFile, condition, thresholdValue) + with open(self.outputFile, 'w') as f: + for line in self.df: + f.write(f'{line[0]}') + for item in line[1:]: + f.write(f',{item}') + f.write('\n') + + def convert2TemporalDatabase(self, outputFile: str, condition: str, thresholdValue: float) -> None: + """ + Create temporal data base + :param outputFile: str: + Write transactional data base into outputFile + + :param inputDF: dataframe : + It is dense DataFrame + :param condition: str : + It is condition to judge the value in dataframe + :param thresholdValue: int or float : + User defined value. + :return: None + """ + self.setParametors(outputFile, condition, thresholdValue) + + with open(self.outputFile, 'w') as f: + for tid in self.df.index: + f.write(f'{tid}') + for item in self.df[tid]: + f.write(f',{item}') + f.write('\n') + + def convert2UtilityDatabase(self, outputFile: str) -> None: + """ + Create the utility database. + :param outputFile: str: + Write transactional data base into outputFile + + :param inputDF: dataframe : + It is dense DataFrame + :param condition: str : + It is condition to judge the value in dataframe + :param thresholdValue: int or float : + User defined value.r + :return: None + """ + + self.outputFile = outputFile + items = self.inputDF.groupby(level=0)['item'].apply(list) + values = self.inputDF.groupby(level=0)['value'].apply(list) + sums = self.inputDF.groupby(level=0)['value'].sum() + index = list(items.index) + with open(self.outputFile, 'w') as f: + for tid in index: + f.write(f'{items[tid][0]}') + for item in items[tid][1:]: + f.write(f'\t{item}') + f.write(f':{sums[tid]}:') + f.write(f'{values[tid][0]}') + for value in values[tid][1:]: + f.write(f'\t{value}') + f.write('\n') + + def getFileName(self) -> str: + + return self.outputFile + +if __name__ == '__main__': + + obj = sparseDF2DB(sys.argv[1]) + obj.createTemporal(sys.argv[2],sys.argv[3],sys.argv[4]) + obj.getFileName() +