diff --git a/Pipfile b/Pipfile index c60ed2c..d8fcd96 100644 --- a/Pipfile +++ b/Pipfile @@ -12,7 +12,6 @@ networkx = "*" jupyterlab = "*" altair = "*" beakerx = "*" -dionysus = "*" ipyparallel = "*" dask = {extras = ["complete"]} graphviz = "*" @@ -22,5 +21,11 @@ bokeh = "*" scikit-learn = "*" sklearn_tda = {git = "https://github.com/MathieuCarriere/sklearn_tda"} cython = "*" +dionysus = {git = "https://github.com/mrzv/dionysus.git"} +nltk = "*" +pyclustering = "*" +dill = "*" +python-language-server = {extras = ["all"]} +"network2tikz" = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index e940d6d..81486d3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "05e3399522b22302218e7257393571823c8820f342c48adbf3bd490988ad16f4" + "sha256": "09d52d6813195a12528ce0bdf157449a71b8491677818225cf22db63182017d1" }, "pipfile-spec": 6, "requires": {}, @@ -16,11 +16,17 @@ "default": { "altair": { "hashes": [ - "sha256:7926e2e1680457d70d52c5157468770f28b6ab6b126ba65fbd3824ebf6422e8b", - "sha256:e8b222588dde98ec614e6808357fde7fa321118db44cc909df2bf30158d931c0" + "sha256:6bdbc62a9b3fc22212e548a2a5f068c0dd378a9f5d99f1016346d7637894cfa9", + "sha256:c158699026eb5a19f95c1ca742e2e82bc20c27013ef5785f10836283e2233f8a" ], "index": "pypi", - "version": "==2.1.0" + "version": "==2.2.2" + }, + "autopep8": { + "hashes": [ + "sha256:655e3ee8b4545be6cfed18985f581ee9ecc74a232550ee46e9797b6fbf4f336d" + ], + "version": "==1.4" }, "backcall": { "hashes": [ @@ -31,17 +37,17 @@ }, "beakerx": { "hashes": [ - "sha256:2a319d54a80d585652a36b2e3ab130a9e848544048379b2d2b5c01884d5664b2" + "sha256:e71f041a6b8bcbd7700921d28d11f166daa0c9ea17847d75f8572b7d4e6484cc" ], "index": "pypi", - "version": "==0.21.1" + "version": "==1.1.0" }, "bleach": { "hashes": [ - "sha256:b8fa79e91f96c2c2cd9fd1f9eda906efb1b88b483048978ba62fef680e962b34", - "sha256:eb7386f632349d10d9ce9d4a838b134d4731571851149f9cc2c05a9a837a9a44" + "sha256:0ee95f6167129859c5dce9b1ca291ebdb5d8cd7e382ca0e237dfd0dad63f63d8", + "sha256:24754b9a7d530bf30ce7cbc805bc6cce785660b4a10ff3a43633728438c105ab" ], - "version": "==2.1.3" + "version": "==2.1.4" }, "bokeh": { "hashes": [ @@ -59,10 +65,10 @@ }, "cloudpickle": { "hashes": [ - "sha256:54858c7b7dc763ed894ff91059c1d0b017d593fe23850d3d8d75f47d98398197", - "sha256:ac7acd0dcb1c52fa14873f801efe0c53e6457bcc5f01542cb445a6515d9a4b72" + "sha256:6ea4b548f61a4f616b065182716318c7dced8c053517f35ac59cec22802daf3d", + "sha256:ce26435f16a855dfbebb1f7f8d967884080b167ee6374d7ff0951aaf2455972b" ], - "version": "==0.5.3" + "version": "==0.5.5" }, "cycler": { "hashes": [ @@ -73,51 +79,45 @@ }, "cython": { "hashes": [ - "sha256:0344e9352b0915910e212c38403b63f902ce1cba75dde7a43a9112ff960eb2a5", - "sha256:0a390c39e912fc5f82d5feae2d16ea061971407099e1efb0fecb255cb96fbeff", - "sha256:0f2b2e09f94c498f555935e732b7321b5f62f00e7a789238f6c5ddd66987a54d", - "sha256:15614592616b6dd5e919e158796350ebeba6cb6b5d2998cfff41b53f568c8355", - "sha256:1aae6d6e9858888144cea147eb5e677830f45faaff3d305d77378c3cba55f526", - "sha256:200583297f23e558744bc4688d8a2b2605ab6ad7d1494a9fd8c8094ad65ebf3c", - "sha256:295facc211a6b55db9979455b856180f2839be22ab767ffdea55986bee83ca9f", - "sha256:36c16bf39280fe857213d8da31c07a6179d3878c3dc2e435dce0974b9f8f0729", - "sha256:3fef8dfa9cf86ab7814ca31369374ddd5b9524f54406aa83b53b5937965b8e88", - "sha256:439d233d3214e3d69c033a9a93516758f2c8a03e83ea51ae14b6eed13687d224", - "sha256:455ab39c6c0849a6c008fcdf2fae42475f18d0801a3be229e8f75367bbe3b325", - "sha256:56821e3791209e6a11992e294afbf7e3dcda7d4fd54d06396dd521928d3d14fe", - "sha256:62b594584889b33bbea7e71f9d7c5c6539091b341334ef7ca1ae7e30a9dd3e15", - "sha256:6468345ee884a244d3b5250dad8696015ed8c6d24379b64767340379c1ff158a", - "sha256:70f81a75fb25c1c3c61843e3a6fe771a76c4ebf4d154455a7eff0740ad47dff4", - "sha256:8011090beb09251cb4ece1e14263e574b38eda696b788552b369ad343373d0e9", - "sha256:80d6a0369333a162fc32a22637f5870f3e87fb038c7b58860bbe00b05b58aa62", - "sha256:85b04e32af58a3c008c0ba8169017770aaa342a5972b748f81d043d66363e437", - "sha256:951cbd5e479aaff70ea7aa09eb8c50e2c98c9bc08abc5a72e504c90ebd4564bb", - "sha256:9c4db4cfc8ac219b50484a505e3327142db04d5e9954aaed00ab729ef4beb142", - "sha256:9ed273d82116fa148c92901b9639030e087979d455982bd7bf727fb486c0bd17", - "sha256:a1af59e6c9b4acc07c429d8495fc016a35e0a1270f28c57317352f512df7e214", - "sha256:b894ff4daf8dfaf657bf2d5e7190a4de11b2400b1e0fb0902974d35c23a26dea", - "sha256:bd6ce209cc00cac2a7e216d4145a6b323b30d1c7414e369fbd427bf07d966f2a", - "sha256:c2659981150b4de04397dcfd4bff64e384d3ba25af60d1b22820fdf108298cb2", - "sha256:c347d0a129c9742fefeaecf2455576c5ae73362aa01a27cea26fac237b7e2a87", - "sha256:c981a750858f1727995acf861ab030b267d264ca6efda2f01104941187a3675f", - "sha256:cc4152b19ec168391f7815d24b70c8911829ba281bd5fcd98cab9dc21abe62ff", - "sha256:d0f5b1668e7f7f6fc9849f49a20c5db10562a0ab29cd66818894dfebbca7b304", - "sha256:d7152006ed1a3adb8f978077b57d237ddafa188240af53cd72b5c79e4ed000e3", - "sha256:e5f877472993474296125c22b84c334b550010815e513cccce73da854a132d64", - "sha256:e7c2c87ff2f99ed4be1bb046d6eddfb388af627928037f9e0a420c05daaf14ed", - "sha256:edd7d499685655031be5b4d33005096b6345f81eeb7ab9d2dd415db0c7bcf64e", - "sha256:f99a777fda569a88deea863eac2722b5e88957c4d5f4413949740da791857ac9" + "sha256:022592d419fc754509d0e0461eb2958dbaa45fb60d51c8a61778c58994edbe36", + "sha256:07659f4c57582104d9486c071de512fbd7e087a3a630535298442cc0e20a3f5a", + "sha256:13c73e2ffa93a615851e03fad97591954d143b5b62361b9adef81f46a31cd8ef", + "sha256:13eab5a2835a84ff62db343035603044c908d2b3b6eec09d67fdf9970acf7ac9", + "sha256:183b35a48f58862c4ec1e821f07bb7b1156c8c8559c85c32ae086f28947474eb", + "sha256:2f526b0887128bf20ab2acc905a975f62b5a04ab2f63ecbe5a30fc28285d0e0c", + "sha256:32de8637f5e6c5a76667bc7c8fc644bd9314dc19af36db8ce30a0b92ada0f642", + "sha256:4172c183ef4fb2ace6a29cdf7fc9200c5a471a7f775ff691975b774bd9ed3ad2", + "sha256:553956ec06ecbd731ef0c538eb28a5b46bedea7ab89b18237ff28b4b99d65eee", + "sha256:660eeb6870687fd3eda91e00ba4e72220545c254c8c4d967fd0c910f4fbb8cbc", + "sha256:693a8619ef066ece055ed065a15cf440f9d3ebd1bca60e87ea19144833756433", + "sha256:759c799e9ef418f163b5412e295e14c0a48fe3b4dcba9ab8aab69e9f511cfefd", + "sha256:827d3a91b7a7c31ce69e5974496fd9a8ba28eb498b988affb66d0d30de11d934", + "sha256:87e57b5d730cfab225d95e7b23abbc0c6f77598bd66639e93c73ce8afbae6f38", + "sha256:9400e5db8383346b0694a3e794d8bded18a27b21123516dcdf4b79d7ec28e98b", + "sha256:9ec27681c5b1b457aacb1cbda5db04aa28b76da2af6e1e1fd15f233eafe6a0b0", + "sha256:ae4784f040a3313c8bd00c8d04934b7ade63dc59692d8f00a5235be8ed72a445", + "sha256:b2ba8310ebd3c0e0b884d5e95bbd99d467d6af922acd1e44fe4b819839b2150e", + "sha256:b64575241f64f6ec005a4d4137339fb0ba5e156e826db2fdb5f458060d9979e0", + "sha256:c78ad0df75a9fc03ab28ca1b950c893a208c451a18f76796c3e25817d6994001", + "sha256:cdbb917e41220bd3812234dbe59d15391adbc2c5d91ae11a5273aab9e32ba7ec", + "sha256:d2223a80c623e2a8e97953ab945dfaa9385750a494438dcb55562eb1ddd9565a", + "sha256:e22f21cf92a9f8f007a280e3b3462c886d9068132a6c698dec10ad6125e3ca1e", + "sha256:ea5c16c48e561f4a6f6b8c24807494b77a79e156b8133521c400f22ca712101b", + "sha256:ee7a9614d51fe16e32ca5befe72e0808baff481791728449d0b17c8b0fe29eb9", + "sha256:ef86de9299e4ab2ebb129fb84b886bf40b9aced9807c6d6d5f28b46fb905f82c", + "sha256:f3e4860f5458a9875caa3de65e255720c0ed2ce71f0bcdab02497b32104f9db8", + "sha256:fc6c20a8ac22202a779ad4c59756647be0826993d2151a03c015e76d2368ae5f" ], "index": "pypi", - "version": "==0.28.3" + "version": "==0.28.5" }, "dask": { "hashes": [ - "sha256:b50b435c51bf5ca30c2667d0d92649765b732a2e6bebe7e219e6dd3fe8d7ac4e", - "sha256:b89dc77ef23c380005db9441c3c42010fef47034c687f8d93d0e2619efa060c9" + "sha256:692924fbd5894afd1c71a73af974aa86bd4d07b0620e56af2d7d329900cf384a", + "sha256:aae1f237870c01773bca5a75289f10166b84e13b9e966d8431e945f1f1febb99" ], "index": "pypi", - "version": "==0.18.1" + "version": "==0.19.1" }, "decorator": { "hashes": [ @@ -126,21 +126,22 @@ ], "version": "==4.3.0" }, - "dionysus": { + "dill": { "hashes": [ - "sha256:3348014522b5166c51802c4e3e735685005ca098895debd000387c1f9de0987e", - "sha256:757fbc7cdfe69e7b267255a8b36456e9447830d1838a23cd6cfaed7da77083da", - "sha256:a5c8a18b6e9be0f8ae3eb12edff1c0b4cf931ae18479106f91fbc9b27e458155" + "sha256:624dc244b94371bb2d6e7f40084228a2edfff02373fe20e018bef1ee92fdd5b3" ], "index": "pypi", - "version": "==2.0.5" + "version": "==0.2.8.2" + }, + "dionysus": { + "git": "https://github.com/mrzv/dionysus.git" }, "distributed": { "hashes": [ - "sha256:6dcd885ea3b92bdc5af4ebb82ef37c073e60c9cdd24bc97d270a1cfed970e86b", - "sha256:73b992604118c1489f621586209a50c75d1df146e7eccbffbc790ac028a97ca4" + "sha256:2ef5a9612bcd06fe1bfdb4ca741834a87ba199e3bfe615f21e490e172fbd1a3f", + "sha256:9d4693442efe40e05e4304fe6d8174989c6eb4bad1afe70480c98263ef8e1cdb" ], - "version": "==1.22.0" + "version": "==1.23.1" }, "entrypoints": { "hashes": [ @@ -149,13 +150,19 @@ ], "version": "==0.2.3" }, + "future": { + "hashes": [ + "sha256:e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb" + ], + "version": "==0.16.0" + }, "graphviz": { "hashes": [ - "sha256:4958a19cbd8461757a08db308a4a15c3d586660417e1e364f0107d2fe481689f", - "sha256:7caa53f0b0be42c5f2eaa3f3d71dcc863b15bacceb5d531c2ad7519e1980ff82" + "sha256:310bacfb969f0ac7c872610500e017c3e82b24a8abd33d289e99af162de30cb8", + "sha256:865afa6ab9775cf29db03abd8e571a164042c726c35a1b3c1e2b8c4c645e2993" ], "index": "pypi", - "version": "==0.8.4" + "version": "==0.9" }, "heapdict": { "hashes": [ @@ -172,11 +179,11 @@ }, "ipykernel": { "hashes": [ - "sha256:395f020610e33ffa0b0c9c0cd1a1d927d51ab9aa9f30a7ae36bb0c908a33e89c", - "sha256:935941dba29d856eee34b8b5261d971bd5012547239ed73ddfff099143748c37", - "sha256:c091449dd0fad7710ddd9c4a06e8b9e15277da306590bc07a3a1afa6b4453c8f" + "sha256:00d88b7e628e4e893359119b894451611214bce09776a3bf8248fe42cb48ada6", + "sha256:a706b975376efef98b70e10cd167ab9506cf08a689d689a3c7daf344c15040f6", + "sha256:c5a498c70f7765c34f3397cf943b069057f5bef4e0218e4cfbb733e9f38fa5fa" ], - "version": "==4.8.2" + "version": "==4.9.0" }, "ipyparallel": { "hashes": [ @@ -188,10 +195,11 @@ }, "ipython": { "hashes": [ - "sha256:a0c96853549b246991046f32d19db7140f5b1a644cc31f0dc1edc86713b7676f", - "sha256:eca537aa61592aca2fef4adea12af8e42f5c335004dfa80c78caf80e8b525e5c" + "sha256:007dcd929c14631f83daff35df0147ea51d1af420da303fd078343878bd5fb62", + "sha256:b0f2ef9eada4a68ef63ee10b6dde4f35c840035c50fd24265f8052c98947d5a4" ], - "version": "==6.4.0" + "markers": "python_version >= '3.3'", + "version": "==6.5.0" }, "ipython-genutils": { "hashes": [ @@ -202,10 +210,10 @@ }, "ipywidgets": { "hashes": [ - "sha256:9985e91c300f7bb41ca97627ed8a8ce22750584cefd023ffbe4b0c18edb84605", - "sha256:ab9869cda5af7ba449d8f707b29b7e97a7db97d6366805d6b733338f51096f54" + "sha256:ba46e7228b951191c2288478a6f321c67013c0674aff074c8ad32a9723729e1d", + "sha256:d2bea16c0f08df978f63b58c9e91ac4c4bcc0ba5f90ca9a34c310678597542c3" ], - "version": "==7.2.1" + "version": "==7.4.1" }, "jedi": { "hashes": [ @@ -260,18 +268,18 @@ }, "jupyterlab": { "hashes": [ - "sha256:6a1af69fe0c0890891b5bb4cb9914edca68ed59b00ed50cd2bc78e230c739b55", - "sha256:88290656a2db2e38ef913a257ec283f3b5bd99144ed3d52899c9af7030077554" + "sha256:86854ad08e10aac67d2092051caba7831600c75df8c8ded3e0ddf96861242048", + "sha256:a85dcbf06febeaaaeace5a324e672e380738ac98c088792f675bef94420f23e2" ], "index": "pypi", - "version": "==0.32.1" + "version": "==0.34.7" }, "jupyterlab-launcher": { "hashes": [ - "sha256:c78646afa354856a7ba3d9583122b89603d24587126f4c49a04dd42f50c831ec", - "sha256:d6308617fbdb3949c76356e8149c9835b65b01653fdefd983085c61d75f3c810" + "sha256:bd91a0938d415fed3a9214aa918a66dd90ccff0c5b59c8a73134b1e6afd857c6", + "sha256:f880eada0b8b1f524d5951dc6fcae0d13b169897fc8a247d75fb5beadd69c5f0" ], - "version": "==0.10.5" + "version": "==0.13.1" }, "kiwisolver": { "hashes": [ @@ -285,18 +293,23 @@ "sha256:4329008a167fac233e398e8a600d1b91539dc33c5a3eadee84c0d4b04d4494fa", "sha256:45813e0873bbb679334a161b28cb9606d9665e70561fd6caa8863e279b5e464b", "sha256:53a5b27e6b5717bdc0125338a822605084054c80f382051fb945d2c0e6899a20", + "sha256:574f24b9805cb1c72d02b9f7749aa0cc0b81aa82571be5201aa1453190390ae5", "sha256:66f82819ff47fa67a11540da96966fb9245504b7f496034f534b81cacf333861", "sha256:79e5fe3ccd5144ae80777e12973027bd2f4f5e3ae8eb286cabe787bed9780138", + "sha256:83410258eb886f3456714eea4d4304db3a1fc8624623fc3f38a487ab36c0f653", "sha256:8b6a7b596ce1d2a6d93c3562f1178ebd3b7bb445b3b0dd33b09f9255e312a965", "sha256:9576cb63897fbfa69df60f994082c3f4b8e6adb49cccb60efb2a80a208e6f996", "sha256:95a25d9f3449046ecbe9065be8f8380c03c56081bc5d41fe0fb964aaa30b2195", + "sha256:a424f048bebc4476620e77f3e4d1f282920cef9bc376ba16d0b8fe97eec87cde", "sha256:aaec1cfd94f4f3e9a25e144d5b0ed1eb8a9596ec36d7318a504d813412563a85", "sha256:acb673eecbae089ea3be3dcf75bfe45fc8d4dcdc951e27d8691887963cf421c7", "sha256:b15bc8d2c2848a4a7c04f76c9b3dc3561e95d4dabc6b4f24bfabe5fd81a0b14f", "sha256:b1c240d565e977d80c0083404c01e4d59c5772c977fae2c483f100567f50847b", + "sha256:c595693de998461bcd49b8d20568c8870b3209b8ea323b2a7b0ea86d85864694", "sha256:ce3be5d520b4d2c3e5eeb4cd2ef62b9b9ab8ac6b6fedbaa0e39cdb6f50644278", "sha256:e0f910f84b35c36a3513b96d816e6442ae138862257ae18a0019d2fc67b041dc", "sha256:ea36e19ac0a483eea239320aef0bd40702404ff8c7e42179a2d9d36c5afcb55c", + "sha256:efabbcd4f406b532206b8801058c8bab9e79645b9880329253ae3322b7b02cd5", "sha256:f923406e6b32c86309261b8195e24e18b6a8801df0cfc7814ac44017bfcb3939" ], "version": "==1.0.1" @@ -315,29 +328,38 @@ }, "matplotlib": { "hashes": [ - "sha256:07055eb872fa109bd88f599bdb52065704b2e22d475b67675f345d75d32038a0", - "sha256:0f2f253d6d51f5ed52a819921f8a0a8e054ce0daefcfbc2557e1c433f14dc77d", - "sha256:1ef9fd285334bd6b0495b6de9d56a39dc95081577f27bafabcf28e0d318bed31", - "sha256:3eb17a4dc45e1ceefb899423e8152e10169fa281f960421c762fd8532186c323", - "sha256:3fb2db66ef98246bafc04b4ef4e9b0e73c6369f38a29716844e939d197df816a", - "sha256:3fd90b407d1ab0dae686a4200030ce305526ff20b85a443dc490d194114b2dfa", - "sha256:45dac8589ef1721d7f2ab0f48f986694494dfcc5d13a3e43a5cb6c816276094e", - "sha256:4bb10087e09629ba3f9b25b6c734fd3f99542f93d71c5b9c023f28cb377b43a9", - "sha256:4dc7ef528aad21f22be85e95725234c5178c0f938e2228ca76640e5e84d8cde8", - "sha256:4f6a516d5ef39128bb16af7457e73dde25c30625c4916d8fbd1cc7c14c55e691", - "sha256:70f0e407fbe9e97f16597223269c849597047421af5eb8b60dbaca0382037e78", - "sha256:7b3d03c876684618e2a2be6abeb8d3a033c3a1bb38a786f751199753ef6227e6", - "sha256:8944d311ce37bee1ba0e41a9b58dcf330ffe0cf29d7654c3d07c572215da68ac", - "sha256:8ff08eaa25c66383fe3b6c7eb288da3c22dcedc4b110a0b592b35f68d0e093b2", - "sha256:9d12378d6a236aa38326e27f3a29427b63edce4ce325745785aec1a7535b1f85", - "sha256:abfd3d9390eb4f2d82cbcaa3a5c2834c581329b64eccb7a071ed9d5df27424f7", - "sha256:bc4d7481f0e8ec94cb1afc4a59905d6274b3b4c389aba7a2539e071766671735", - "sha256:c78883145da9b5620aec523fa14ea814e07f2ba26a16b7f68ff7300604a911b3", - "sha256:dc0ba2080fd0cfdd07b3458ee4324d35806733feb2b080838d7094731d3f73d9", - "sha256:f26fba7fc68994ab2805d77e0695417f9377a00d36ba4248b5d0f1e5adb08d24" + "sha256:0ba8e3ec1b0feddc6b068fe70dc38dcf2917e301ad8d2b3f848c14ad463a4157", + "sha256:10a48e33e64dbd95f0776ba162f379c5cc55301c2d155506e79ce0c26b52f2ce", + "sha256:1376535fe731adbba55ab9e48896de226b7e89dbb55390c5fbd8f7161b7ae3be", + "sha256:16f0f8ba22df1e2c9f06c87088de45742322fde282a93b5c744c0f969cf7932e", + "sha256:1c6c999f2212858021329537f8e0f98f3f29086ec3683511dd1ecec84409f51d", + "sha256:2316dc177fc7b3d8848b49365498de0c385b4c9bba511edddd24c34fbe3d37a4", + "sha256:3398bfb533482bf21974cecf28224dd23784ad4e4848be582903f7a2436ec12e", + "sha256:3477cb1e1061b34210acc43d20050be8444478ff50b8adfac5fe2b45fc97df01", + "sha256:3cc06333b8264428d02231804e2e726b902e9161dc16f573183dee6cb7ef621f", + "sha256:4259ea7cb2c238355ee13275eddd261d869cefbdeb18a65f35459589d6d17def", + "sha256:4addcf93234b6122f530f90f485fd3d00d158911fbc1ed24db3fa66cd49fe565", + "sha256:50c0e24bcbce9c54346f4a2f4e97b0ed111f0413ac3fe9954061ae1c8aa7021f", + "sha256:62ed7597d9e54db6e133420d779c642503c25eba390e1178d85dfb2ba0d05948", + "sha256:69f6d51e41a17f6a5f70c56bb10b8ded9f299609204495a7fa2782a3a755ffc5", + "sha256:6d232e49b74e3d2db22c63c25a9a0166d965e87e2b057f795487f1f244b61d9d", + "sha256:7355bf757ecacd5f0ac9dd9523c8e1a1103faadf8d33c22664178e17533f8ce5", + "sha256:886b1045c5105631f10c1cbc999f910e44d33af3e9c7efd68c2123efc06ab636", + "sha256:9e1f353edd7fc7e5e9101abd5bc0201946f77a1b59e0da49095086c03db856ed", + "sha256:b3a343dfcbe296dbe0f26c731beee72a792ff948407e6979524298ae7bc3234e", + "sha256:d93675af09ca497a25f4f8d62f3313cf0f21e45427a87487049fe84898b99909", + "sha256:e2409ef9d37804dfb566f39c962e6ed70f281ff516b8131b3e6b4e6442711ff1", + "sha256:f8b653b0f89938ba72e92ab080c2f3aa24c1b72e2f61add22880cd1b9a6e3cdd" ], "index": "pypi", - "version": "==2.2.2" + "version": "==2.2.3" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" }, "mistune": { "hashes": [ @@ -380,6 +402,14 @@ ], "version": "==4.4.0" }, + "network2tikz": { + "hashes": [ + "sha256:93f5d902b0ad8f19d4cb5a89e97d42f0e2bf40b920737a81cb57faeca7c90815", + "sha256:eb7ddf0f2e317e773b79d669f3c010db19b785cf17dc9383b571754d2b0b1fb7" + ], + "index": "pypi", + "version": "==0.1.6" + }, "networkx": { "hashes": [ "sha256:64272ca418972b70a196cb15d9c85a5a6041f09a2f32e0d30c0255f25d458bb1" @@ -387,46 +417,53 @@ "index": "pypi", "version": "==2.1" }, + "nltk": { + "hashes": [ + "sha256:fe0eda251be65843be86d7de9abfbf7161732256f742e623b21243ec47bdb718" + ], + "index": "pypi", + "version": "==3.3.0" + }, "notebook": { "hashes": [ - "sha256:95dc9afa0444d05a0b76d6d1f5133c34a92a95f4e248efef3f59ccd2c2616c7d", - "sha256:fa915c231e64a30d19cc2c70ccab6444cbaa93e44e92b5f8233dd9147ad0e664" + "sha256:66dd59e76e755584ae9450eb015c39f55d4bb1d8ec68f2c694d2b3cba7bf5c7e", + "sha256:e2c8e931cc19db4f8c63e6a396efbc13a228b2cb5b2919df011b946f28239a08" ], - "version": "==5.5.0" + "version": "==5.6.0" }, "numpy": { "hashes": [ - "sha256:07379fe0b450f6fd6e5934a9bc015025bb4ce1c8fbed3ca8bef29328b1bc9570", - "sha256:085afac75bbc97a096744fcfc97a4b321c5a87220286811e85089ae04885acdd", - "sha256:2d6481c6bdab1c75affc0fc71eb1bd4b3ecef620d06f2f60c3f00521d54be04f", - "sha256:2df854df882d322d5c23087a4959e145b953dfff2abe1774fec4f639ac2f3160", - "sha256:381ad13c30cd1d0b2f3da8a0c1a4aa697487e8bb0e9e0cbeb7439776bcb645f8", - "sha256:385f1ce46e08676505b692bfde918c1e0b350963a15ef52d77691c2cf0f5dbf6", - "sha256:4130e5ae16c656b7de654dc5e595cfeb85d3a4b0bb0734d19c0dce6dc7ee0e07", - "sha256:4d278c2261be6423c5e63d8f0ceb1b0c6db3ff83f2906f4b860db6ae99ca1bb5", - "sha256:51c5dcb51cf88b34b7d04c15f600b07c6ccbb73a089a38af2ab83c02862318da", - "sha256:589336ba5199c8061239cf446ee2f2f1fcc0c68e8531ee1382b6fc0c66b2d388", - "sha256:5ae3564cb630e155a650f4f9c054589848e97836bebae5637240a0d8099f817b", - "sha256:5edf1acc827ed139086af95ce4449b7b664f57a8c29eb755411a634be280d9f2", - "sha256:6b82b81c6b3b70ed40bc6d0b71222ebfcd6b6c04a6e7945a936e514b9113d5a3", - "sha256:6c57f973218b776195d0356e556ec932698f3a563e2f640cfca7020086383f50", - "sha256:758d1091a501fd2d75034e55e7e98bfd1370dc089160845c242db1c760d944d9", - "sha256:8622db292b766719810e0cb0f62ef6141e15fe32b04e4eb2959888319e59336b", - "sha256:8b8dcfcd630f1981f0f1e3846fae883376762a0c1b472baa35b145b911683b7b", - "sha256:91fdd510743ae4df862dbd51a4354519dd9fb8941347526cd9c2194b792b3da9", - "sha256:97fa8f1dceffab782069b291e38c4c2227f255cdac5f1e3346666931df87373e", - "sha256:9b705f18b26fb551366ab6347ba9941b62272bf71c6bbcadcd8af94d10535241", - "sha256:9d69967673ab7b028c2df09cae05ba56bf4e39e3cb04ebe452b6035c3b49848e", - "sha256:9e1f53afae865cc32459ad211493cf9e2a3651a7295b7a38654ef3d123808996", - "sha256:a4a433b3a264dbc9aa9c7c241e87c0358a503ea6394f8737df1683c7c9a102ac", - "sha256:baadc5f770917ada556afb7651a68176559f4dca5f4b2d0947cd15b9fb84fb51", - "sha256:c725d11990a9243e6ceffe0ab25a07c46c1cc2c5dc55e305717b5afe856c9608", - "sha256:d696a8c87315a83983fc59dd27efe034292b9e8ad667aeae51a68b4be14690d9", - "sha256:e1864a4e9f93ddb2dc6b62ccc2ec1f8250ff4ac0d3d7a15c8985dd4e1fbd6418", - "sha256:e1d18421a7e2ad4a655b76e65d549d4159f8874c18a417464c1d439ee7ccc7cd" + "sha256:1c362ad12dd09a43b348bb28dd2295dd9cdf77f41f0f45965e04ba97f525b864", + "sha256:2156a06bd407918df4ac0122df6497a9c137432118f585e5b17d543e593d1587", + "sha256:24e4149c38489b51fc774b1e1faa9103e82f73344d7a00ba66f6845ab4769f3f", + "sha256:340ec1697d9bb3a9c464028af7a54245298502e91178bddb4c37626d36e197b7", + "sha256:35db8d419345caa4eeaa65cd63f34a15208acd87530a30f0bc25fc84f55c8c80", + "sha256:361370e9b7f5e44c41eee29f2bb5cb3b755abb4b038bce6d6cbe08db7ff9cb74", + "sha256:36e8dcd1813ca92ce7e4299120cee6c03adad33d89b54862c1b1a100443ac399", + "sha256:378378973546ecc1dfaf9e24c160d683dd04df871ecd2dcc86ce658ca20f92c0", + "sha256:419e6faee16097124ee627ed31572c7e80a1070efa25260b78097cca240e219a", + "sha256:4287104c24e6a09b9b418761a1e7b1bbde65105f110690ca46a23600a3c606b8", + "sha256:549f3e9778b148a47f4fb4682955ed88057eb627c9fe5467f33507c536deda9d", + "sha256:5e359e9c531075220785603e5966eef20ccae9b3b6b8a06fdfb66c084361ce92", + "sha256:5ee7f3dbbdba0da75dec7e94bd7a2b10fe57a83e1b38e678200a6ad8e7b14fdc", + "sha256:62d55e96ec7b117d3d5e618c15efcf769e70a6effaee5842857b64fb4883887a", + "sha256:719b6789acb2bc86ea9b33a701d7c43dc2fc56d95107fd3c5b0a8230164d4dfb", + "sha256:7a70f2b60d48828cba94a54a8776b61a9c2657a803d47f5785f8062e3a9c7c55", + "sha256:7b9e37f194f8bcdca8e9e6af92e2cbad79e360542effc2dd6b98d63955d8d8a3", + "sha256:83b8fc18261b70f45bece2d392537c93dc81eb6c539a16c9ac994c47fc79f09a", + "sha256:9473ad28375710ab18378e72b59422399b27e957e9339c413bf00793b4b12df0", + "sha256:95b085b253080e5d09f7826f5e27dce067bae813a132023a77b739614a29de6e", + "sha256:98b86c62c08c2e5dc98a9c856d4a95329d11b1c6058cb9b5191d5ea6891acd09", + "sha256:a3bd01d6d3ed3d7c06d7f9979ba5d68281f15383fafd53b81aa44b9191047cf8", + "sha256:c81a6afc1d2531a9ada50b58f8c36197f8418ef3d0611d4c1d7af93fdcda764f", + "sha256:ce75ed495a746e3e78cfa22a77096b3bff2eda995616cb7a542047f233091268", + "sha256:dae8618c0bcbfcf6cf91350f8abcdd84158323711566a8c5892b5c7f832af76f", + "sha256:df0b02c6705c5d1c25cc35c7b5d6b6f9b3b30833f9d178843397ae55ecc2eebb", + "sha256:e3660744cda0d94b90141cdd0db9308b958a372cfeee8d7188fdf5ad9108ea82", + "sha256:f2362d0ca3e16c37782c1054d7972b8ad2729169567e3f0f4e5dd3cdf85f188e" ], "index": "pypi", - "version": "==1.14.5" + "version": "==1.15.1" }, "packaging": { "hashes": [ @@ -437,24 +474,29 @@ }, "pandas": { "hashes": [ - "sha256:211cfdb9f72f26d2ede21c751d27e08fed4434d47fb9bb82ebc8ff753888b8b6", - "sha256:28fd087514616549a0e3259cd68ac88d7eaed6bd3062017a7f312e27941266bd", - "sha256:2fb7c63138bd5ead296b18b2cb6abd3a394f7581e5ae052b02b27df8244b03ca", - "sha256:372435456c349a8d39ff001967b161f6bd29d4c3de145a4cf9b366648defbb1f", - "sha256:3790a3348ab0f416e58061d21693cb662fbb2f638001b94bf2b2199fedc1b1c2", - "sha256:437a6e906a6717a9ed2627cf6e7895b63dfaa0172567cbd75a553f55cf78cc17", - "sha256:50b52af2af2e15f4aeb2fe196da073a8c131fa02e433e105d95ce40016df5690", - "sha256:720daad75b5d35dd1b446842210c4f3fd447464c9c0884972f3f12b213a9edd1", - "sha256:b4fb71acbc2709b8f5993cb4b5445d8182864f11c39787e317aae39f21206270", - "sha256:b704fd73022342cce612996de495a16954311e0c0cf077c1b83d5cf0b9656a60", - "sha256:cbbecca0c7af6a2160b2d6ba30becc286824a98c61dcc6a41fada664f226424c", - "sha256:d2a071de755cc8ee7784e1b4c7b9b643d951d35c8adea7d64fe7c57cff9c47a7", - "sha256:d8154c5c68713a82461aba735832f0b4692be8a45a0a340a303bf90d6f80f36f", - "sha256:e1b86f7c55467ce1f6c12715f2fd1817f4a909b5c8c39bd4b5d2415ef2b04bd8", - "sha256:fcc63e8134516e93e16eb4ceac9afaa51f4adc5bf58efddae7cbc562f5b77dd0" + "sha256:11975fad9edbdb55f1a560d96f91830e83e29bed6ad5ebf506abda09818eaf60", + "sha256:12e13d127ca1b585dd6f6840d3fe3fa6e46c36a6afe2dbc5cb0b57032c902e31", + "sha256:1c87fcb201e1e06f66e23a61a5fea9eeebfe7204a66d99df24600e3f05168051", + "sha256:242e9900de758e137304ad4b5663c2eff0d798c2c3b891250bd0bd97144579da", + "sha256:26c903d0ae1542890cb9abadb4adcb18f356b14c2df46e4ff657ae640e3ac9e7", + "sha256:2e1e88f9d3e5f107b65b59cd29f141995597b035d17cc5537e58142038942e1a", + "sha256:31b7a48b344c14691a8e92765d4023f88902ba3e96e2e4d0364d3453cdfd50db", + "sha256:4fd07a932b4352f8a8973761ab4e84f965bf81cc750fb38e04f01088ab901cb8", + "sha256:5b24ca47acf69222e82530e89111dd9d14f9b970ab2cd3a1c2c78f0c4fbba4f4", + "sha256:647b3b916cc8f6aeba240c8171be3ab799c3c1b2ea179a3be0bd2712c4237553", + "sha256:66b060946046ca27c0e03e9bec9bba3e0b918bafff84c425ca2cc2e157ce121e", + "sha256:6efa9fa6e1434141df8872d0fa4226fc301b17aacf37429193f9d70b426ea28f", + "sha256:be4715c9d8367e51dbe6bc6d05e205b1ae234f0dc5465931014aa1c4af44c1ba", + "sha256:bea90da782d8e945fccfc958585210d23de374fa9294a9481ed2abcef637ebfc", + "sha256:d318d77ab96f66a59e792a481e2701fba879e1a453aefeebdb17444fe204d1ed", + "sha256:d785fc08d6f4207437e900ffead930a61e634c5e4f980ba6d3dc03c9581748c7", + "sha256:de9559287c4fe8da56e8c3878d2374abc19d1ba2b807bfa7553e912a8e5ba87c", + "sha256:f4f98b190bb918ac0bc0e3dd2ab74ff3573da9f43106f6dba6385406912ec00f", + "sha256:f71f1a7e2d03758f6e957896ed696254e2bc83110ddbc6942018f1a232dd9dad", + "sha256:fb944c8f0b0ab5c1f7846c686bc4cdf8cde7224655c12edcd59d5212cd57bec0" ], "index": "pypi", - "version": "==0.23.1" + "version": "==0.23.4" }, "pandocfilters": { "hashes": [ @@ -464,10 +506,10 @@ }, "parso": { "hashes": [ - "sha256:8105449d86d858e53ce3e0044ede9dd3a395b1c9716c696af8aa3787158ab806", - "sha256:d250235e52e8f9fc5a80cc2a5f804c9fefd886b2e67a2b1099cf085f403f8e33" + "sha256:35704a43a3c113cce4de228ddb39aab374b8004f4f2407d070b6a2ca784ce8a2", + "sha256:895c63e93b94ac1e1690f5fdd40b65f07c8171e3e53cbd7793b5b96c0e0a7f24" ], - "version": "==0.3.0" + "version": "==0.3.1" }, "partd": { "hashes": [ @@ -491,6 +533,19 @@ ], "version": "==0.7.4" }, + "pluggy": { + "hashes": [ + "sha256:6e3836e39f4d36ae72840833db137f7b7d35105079aee6ec4a62d9f80d594dd1", + "sha256:95eb8364a4708392bae89035f45341871286a333f749c3141c20573d2b3876e1" + ], + "version": "==0.7.1" + }, + "prometheus-client": { + "hashes": [ + "sha256:17bc24c09431644f7c65d7bce9f4237252308070b6395d6d8e87767afe867e24" + ], + "version": "==0.3.1" + }, "prompt-toolkit": { "hashes": [ "sha256:1df952620eccb399c53ebb359cc7d9a8d3a9538cb34c5a1344bdbeb29fbcc381", @@ -501,19 +556,17 @@ }, "psutil": { "hashes": [ - "sha256:0ff2b16e9045d01edb1dd10d7fbcc184012e37f6cd38029e959f2be9c6223f50", - "sha256:254adb6a27c888f141d2a6032ae231d8ed4fc5f7583b4c825e5f7d7c78d26d2e", - "sha256:319e12f6bae4d4d988fbff3bed792953fa3b44c791f085b0a1a230f755671ef7", - "sha256:529ae235896efb99a6f77653a7138273ab701ec9f0343a1f5030945108dee3c4", - "sha256:686e5a35fe4c0acc25f3466c32e716f2d498aaae7b7edc03e2305b682226bcf6", - "sha256:6d981b4d863b20c8ceed98b8ac3d1ca7f96d28707a80845d360fa69c8fc2c44b", - "sha256:7789885a72aa3075d28d028236eb3f2b84d908f81d38ad41769a6ddc2fd81b7c", - "sha256:7f4616bcb44a6afda930cfc40215e5e9fa7c6896e683b287c771c937712fbe2f", - "sha256:7fdb3d02bfd68f508e6745021311a4a4dbfec53fca03721474e985f310e249ba", - "sha256:a9b85b335b40a528a8e2a6b549592138de8429c6296e7361892958956e6a73cf", - "sha256:dc85fad15ef98103ecc047a0d81b55bbf5fe1b03313b96e883acc2e2fa87ed5c" + "sha256:0d8da7333549a998556c18eb2af3ce902c28d66ceb947505c008f91e9f988abd", + "sha256:1914bacbd2fc2af8f795daa44b9d2e0649a147460cfd21b1a70a124472f66d40", + "sha256:215d61a901e67b1a35e14c6aedef317f7fa7e6075a20c150fd11bd2c906d2c83", + "sha256:51057c03aea251ad6667c2bba259bc7ed3210222d3a74152c84e3ab06e1da0ba", + "sha256:5b6322b167a5ba0c5463b4d30dfd379cd4ce245a1162ebf8fc7ab5c5ffae4f3b", + "sha256:a890c3e490493f21da2817ffc92822693bc0d6bcac9999caa04ffce8dd4e7132", + "sha256:b34611280a2d0697f1c499e15e936d88109170194b390599c98bab8072a71f05", + "sha256:cea2557ee6a9faa2c100947637ded68414e12b851633c4ce26e0311b2a2ed539", + "sha256:d081707ef0081920533db30200a2d30d5c0ea9cf6afa7cf8881ae4516cc69c48" ], - "version": "==5.4.6" + "version": "==5.4.7" }, "ptyprocess": { "hashes": [ @@ -530,6 +583,36 @@ ], "version": "==0.10.7" }, + "pyclustering": { + "hashes": [ + "sha256:7bdd805cf3ef92650a4dddfad4e5e02132f4856b65c4bd3332e35908f475558e" + ], + "index": "pypi", + "version": "==0.8.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:74abc4e221d393ea5ce1f129ea6903209940c1ecd29e002e8c6933c2b21026e0", + "sha256:cbc619d09254895b0d12c2c691e237b2e91e9b2ecf5e84c26b35400f93dcfb83", + "sha256:cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a" + ], + "version": "==2.4.0" + }, + "pydocstyle": { + "hashes": [ + "sha256:08a870edc94508264ed90510db466c6357c7192e0e866561d740624a8fc7d90c", + "sha256:4d5bcde961107873bae621f3d580c3e35a426d3687ffc6f8fb356f6628da5a97", + "sha256:af9fcccb303899b83bec82dc9a1d56c60fc369973223a5e80c3dfa9bdf984405" + ], + "version": "==2.1.1" + }, + "pyflakes": { + "hashes": [ + "sha256:9a7662ec724d0120012f6e29d6248ae3727d821bba522a0e6b356eff19126a49", + "sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae" + ], + "version": "==2.0.0" + }, "pygments": { "hashes": [ "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", @@ -565,6 +648,19 @@ "index": "pypi", "version": "==0.7.1.post6" }, + "python-jsonrpc-server": { + "hashes": [ + "sha256:ebebaa68b732c9d0aa024ffba2c3baca8b5704530f81d5a894a1ab6981b492c7" + ], + "version": "==0.0.1" + }, + "python-language-server": { + "hashes": [ + "sha256:c832ae97245291e8a785eacc8ce05b755c6d04469cca987a3e19dcf98ad3e04b" + ], + "index": "pypi", + "version": "==0.21.0" + }, "pytz": { "hashes": [ "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053", @@ -574,91 +670,96 @@ }, "pyyaml": { "hashes": [ - "sha256:0c507b7f74b3d2dd4d1322ec8a94794927305ab4cebbe89cc47fe5e81541e6e8", - "sha256:16b20e970597e051997d90dc2cddc713a2876c47e3d92d59ee198700c5427736", - "sha256:3262c96a1ca437e7e4763e2843746588a965426550f3797a79fca9c6199c431f", - "sha256:326420cbb492172dec84b0f65c80942de6cedb5233c413dd824483989c000608", - "sha256:4474f8ea030b5127225b8894d626bb66c01cda098d47a2b0d3429b6700af9fd8", - "sha256:592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab", - "sha256:5ac82e411044fb129bae5cfbeb3ba626acb2af31a8d17d175004b70862a741a7", - "sha256:5f84523c076ad14ff5e6c037fe1c89a7f73a3e04cf0377cb4d017014976433f3", - "sha256:827dc04b8fa7d07c44de11fabbc888e627fa8293b695e0f99cb544fdfa1bf0d1", - "sha256:b4c423ab23291d3945ac61346feeb9a0dc4184999ede5e7c43e1ffb975130ae6", - "sha256:bc6bced57f826ca7cb5125a10b23fd0f2fff3b7c4701d64c439a300ce665fff8", - "sha256:c01b880ec30b5a6e6aa67b09a2fe3fb30473008c85cd6a67359a1b15ed6d83a4", - "sha256:ca233c64c6e40eaa6c66ef97058cdc80e8d0157a443655baa1b2966e812807ca", - "sha256:e863072cdf4c72eebf179342c94e6989c67185842d9997960b3e69290b2fa269" + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" ], - "version": "==3.12" + "version": "==3.13" }, "pyzmq": { "hashes": [ - "sha256:0145ae59139b41f65e047a3a9ed11bbc36e37d5e96c64382fcdff911c4d8c3f0", - "sha256:18de8a02768b1c0b3495ac635b24bd902fafc08befb70a6e68c4d343ccbd6cbd", - "sha256:2fb4d745ffe0a65ebf8fd29df093bb5c0ac96a506cb05b9a7b7c94b2524ae7f6", - "sha256:4193cc666591495ab7fe8d24fa8374a35f9775f16dc7c46e03615559e1fc1855", - "sha256:445fed4d71ac48da258ba38f2e29c88c5091124212a4004a0a6a42e6586a7de1", - "sha256:538dfdd9542cf9ff37cd958da03b58d56b53b90800159ea07adc51a8ec7ffcb8", - "sha256:613ac1fc4591b1c6a0a52ce3ed17dbffd6a17e985df504e8b4cdb987f97285b1", - "sha256:630fb21f7474eb9e409a1ad476bf1ec489a69eb021172d422f2485cc3a44cd79", - "sha256:6c3632d2c17cf03ce728ffaa328d45bb053623b3a0aa9747adcde81778d5a4d5", - "sha256:72a490db0e34c204764457a6853afde7c0d1aa01b6dbbbaea064636614b774c6", - "sha256:767e1d0b1f7fff1950127abc08c5a5af2754987bc6480c6d641bed6971278a7a", - "sha256:863ec1bfa52da6eaa5c4aa59143eeaeb4ef7a076862407a548ec645f25e6d6df", - "sha256:a0ecf4c3eccd92f030a4e3e334b9da6fa3ee86be00249343c74e476d70567d0f", - "sha256:ad5a8b19b6671b52d30ccfc3a0f4c600e49c4e2dcc88caf4106ed5958dec8d5e", - "sha256:b31f2b50ad2920f21b904f5edf66bee324e42bb978df1407ecf381b210d4678e", - "sha256:b328c538061757f627d32f7f8885c16f1d2f59f5374e057822f3c8e6cd94c41b", - "sha256:b89268020a843d4c3cc04180577ec061fe96d35f267b0b672cb006e4d70560da", - "sha256:ba0b43aebf856e5e249250d74c1232d6600b6859328920d12e2ba72a565ab1b1", - "sha256:bdb12b485b3440b5193cd337d27cc126cdfc54ea9f38df237e1ead6216435cbe", - "sha256:c30d27c9b35285597b8ef3019f97b9b98457b053f65dcc87a90dfdd4db09ca78", - "sha256:d51eb3902d27d691483243707bfa67972167a70269bbbc172b74eeac4f780a1d", - "sha256:e5578ae84bb94e97adadfcb00106a1cb161cb8017f89b01f6c3737f356257811", - "sha256:f35b4cdeffff79357a9d929daa2a8620fb362b2cbeebdc5dd2cf9fcd27c44821", - "sha256:fb983aec4bddee3680a0b7395f99e4595d70d81841370da736c5dc642bad4cd2" + "sha256:25a0715c8f69cf72f67cfe5a68a3f3ed391c67c063d2257bec0fe7fc2c7f08f8", + "sha256:2bab63759632c6b9e0d5bf19cc63c3b01df267d660e0abcf230cf0afaa966349", + "sha256:30ab49d99b24bf0908ebe1cdfa421720bfab6f93174e4883075b7ff38cc555ba", + "sha256:32c7ca9fc547a91e3c26fc6080b6982e46e79819e706eb414dd78f635a65d946", + "sha256:41219ae72b3cc86d97557fe5b1ef5d1adc1057292ec597b50050874a970a39cf", + "sha256:4b8c48a9a13cea8f1f16622f9bd46127108af14cd26150461e3eab71e0de3e46", + "sha256:55724997b4a929c0d01b43c95051318e26ddbae23565018e138ae2dc60187e59", + "sha256:65f0a4afae59d4fc0aad54a917ab599162613a761b760ba167d66cc646ac3786", + "sha256:6f88591a8b246f5c285ee6ce5c1bf4f6bd8464b7f090b1333a446b6240a68d40", + "sha256:75022a4c60dcd8765bb9ca32f6de75a0ec83b0d96e0309dc479f4c7b21f26cb7", + "sha256:76ea493bfab18dcb090d825f3662b5612e2def73dffc196d51a5194b0294a81d", + "sha256:7b60c045b80709e4e3c085bab9b691e71761b44c2b42dbb047b8b498e7bc16b3", + "sha256:8e6af2f736734aef8ed6f278f9f552ec7f37b1a6b98e59b887484a840757f67d", + "sha256:9ac2298e486524331e26390eac14e4627effd3f8e001d4266ed9d8f1d2d31cce", + "sha256:9ba650f493a9bc1f24feca1d90fce0e5dd41088a252ac9840131dfbdbf3815ca", + "sha256:a02a4a385e394e46012dc83d2e8fd6523f039bb52997c1c34a2e0dd49ed839c1", + "sha256:a3ceee84114d9f5711fa0f4db9c652af0e4636c89eabc9b7f03a3882569dd1ed", + "sha256:a72b82ac1910f2cf61a49139f4974f994984475f771b0faa730839607eeedddf", + "sha256:ab136ac51027e7c484c53138a0fab4a8a51e80d05162eb7b1585583bcfdbad27", + "sha256:c095b224300bcac61e6c445e27f9046981b1ac20d891b2f1714da89d34c637c8", + "sha256:c5cc52d16c06dc2521340d69adda78a8e1031705924e103c0eb8fc8af861d810", + "sha256:d612e9833a89e8177f8c1dc68d7b4ff98d3186cd331acd616b01bbdab67d3a7b", + "sha256:e828376a23c66c6fe90dcea24b4b72cd774f555a6ee94081670872918df87a19", + "sha256:e9767c7ab2eb552796440168d5c6e23a99ecaade08dda16266d43ad461730192", + "sha256:ebf8b800d42d217e4710d1582b0c8bff20cdcb4faad7c7213e52644034300924" ], - "version": "==17.0.0" + "version": "==17.1.2" }, "qtconsole": { "hashes": [ - "sha256:b3d10314cbaad76c3157cf922eb410812cde472e8e7c6bd3d5a92d30145bcde1", - "sha256:eff8c2faeda567a0bef5781f419a64e9977988db101652b312b9d74ec0a5109c" + "sha256:298431d376d71a02eb1a04fe6e72dd4beb82b83423d58b17d532e0af838e62fa", + "sha256:7870b19e6a6b0ab3acc09ee65463c0ca7568b3a01a6902d7c4e1ed2c4fc4e176" ], - "version": "==4.3.1" + "version": "==4.4.1" + }, + "rope": { + "hashes": [ + "sha256:a108c445e1cd897fe19272ab7877d172e7faf3d4148c80e7d20faba42ea8f7b2" + ], + "version": "==0.11.0" }, "scikit-learn": { "hashes": [ - "sha256:13136c6e4f6b808569f7f59299d439b2cd718f85d72ea14b5b6077d44ebc7d17", - "sha256:370919e3148253fd6552496c33a1e3d78290a336fc8d1b9349d9e9770fae6ec0", - "sha256:3775cca4ce3f94508bb7c8a6b113044b78c16b0a30a5c169ddeb6b9fe57a8a72", - "sha256:42f3c5bd893ed73bf47ccccf04dfb98fae743f397d688bb58c2238c0e6ec15d2", - "sha256:56cfa19c31edf62e6414da0a337efee37a4af488b135640e67238786b9be6ab3", - "sha256:5c9ff456d67ef9094e5ea272fff2be05d399a47fc30c6c8ed653b94bdf787bd1", - "sha256:5ca0ad32ee04abe0d4ba02c8d89d501b4e5e0304bdf4d45c2e9875a735b323a0", - "sha256:5db9e68a384ce80a17fc449d4d5d9b45025fe17cf468429599bf404eccb51049", - "sha256:6e0899953611d0c47c0d49c5950082ab016b38811fced91cd2dcc889dd94f50a", - "sha256:72c194c5092e921d6107a8de8a5adae58c35bbc54e030ba624b6f02fd823bb21", - "sha256:871669cdb5b3481650fe3adff46eb97c455e30ecdc307eaf382ef90d4e2570ab", - "sha256:873245b03361710f47c5410a050dc56ee8ae97b9f8dcc6e3a81521ca2b64ad10", - "sha256:8b17fc29554c5c98d88142f895516a5bec2b6b61daa815e1193a64c868ad53d2", - "sha256:95b155ef6bf829ddfba6026f100ba8e4218b7171ecab97b2163bc9e8d206848f", - "sha256:a21cf8217e31a9e8e32c559246e05e6909981816152406945ae2e3e244dfcc1f", - "sha256:a58746d4f389ea7df1d908dba8b52f709835f91c342f459a3ade5424330c69d1", - "sha256:b2a10e2f9b73de10d8486f7a23549093436062b69139158802910a0f154aa53b", - "sha256:ba3fd442ae1a46830789b3578867daaf2c8409dcca6bf192e30e85beeabbfc2f", - "sha256:ce78bf4d10bd7e28807c36c6d2ab25a9934aaf80906ad987622a5e45627d91a2", - "sha256:d384e6f9a055b7a43492f9d27779adb717eb5dcf78b0603b01d0f070a608d241", - "sha256:d4da369614e55540c7e830ccdd17ab4fe5412ff8e803a4906d3ece393e2e3a63", - "sha256:ddc1eb10138ae93c136cc4b5945d3977f302b5d693592a4731b2805a7d7f2a74", - "sha256:e54a3dd1fe1f8124de90b93c48d120e6da2ea8df29b6895325df01ddc1bd8e26", - "sha256:ee8c3b1898c728b6e5b5659c233f547700a1fea13ce876b6fe7d3434c70cc0e0", - "sha256:f528c4b2bba652cf116f5cccf36f4db95a7f9cbfcd1ee549c4e8d0f8628783b5", - "sha256:f9abae483f4d52acd6f660addb1b67e35dc5748655250af479de2ea6aefc6df0", - "sha256:fdc39e89bd3466befb76dfc0c258d4ccad159df974954a87de3be5759172a067" + "sha256:0a718b5ffbd5053fb3f9e1a2e20b7c4f256dd8035e246b907d3117d20bac0260", + "sha256:1725540b754a9967778e9385e1ee2c8db50d5ab70ed835c9f5e36002ffabc169", + "sha256:3e3ce307d7c5c5811658ba8686b24b571a8244eaafe707665ad601f400d5ce98", + "sha256:42ad71502237c9fe300ecf157f5a394df717789a2dde541dd7034b539c70bdcc", + "sha256:42cba716db197e0d1670e2fc13c4cc4a86d5c5358120ccfee6ec427b154e74ff", + "sha256:47b4090b7686642e41176becb7c42ef3cc665d7ee0db5e7ea5d307ec9779327e", + "sha256:51d99a08c8bf689cf60c9d8dca6e3d3e5f6d762def85ad735dcea11fb528a89b", + "sha256:5f7577fbb2399a4712e96cf0e786638168940a876c33735a1b5d5a86ba4b1370", + "sha256:66bfc2b6b15db1725d03ea657ec9184ff09dcbf1ecd834ef85f2edc2c9cbba97", + "sha256:69a34d389d9ca4687ad00af4e11d53686771f484c37366f68617ef656bab16ab", + "sha256:75297f3dd6685f01555f1bb75846995d45650af417280b69c81bf11b6987aed5", + "sha256:9ebb38ab1d0ee143982aed561811903ac6c1abb512ae2b9019b3b65bde63ffb9", + "sha256:a402c1484fe65df42d5dbc22a58e0695fe3afe2b0b229aee2a09c6d60ba8e5c2", + "sha256:aad6b9aac1617bd7efa0450643888bbd3410679a94bc8680d9863825686ef369", + "sha256:ad4db28d3dc16c01df75ed6efb72524537de3839a5d179fcf94094359fc72ec5", + "sha256:b276739a5f863ccacb61999a3067d0895ee291c95502929b2ae56ea1f882e888", + "sha256:b3dc88c4d2bcb26ffc5afe16d053ae28317d7d1de083651defcd5453a04f1563", + "sha256:b3e4681253e95da5aa5c231889a32b084fd997962bf8beda6f796bf422f734b2", + "sha256:c3d852d49d6c1710089d4513702099fa6f8e1aebfedf222319d80c47b0a195f8", + "sha256:c6612e7e43988b8b5e1957150449493a55f9c059de641083df7a964f86f2d1e7", + "sha256:c69e5c6051366a6ac9600d730276db939b1a205e42504ec0b8371f154b0058db", + "sha256:ce121baa8e85ec27c3065281657dcd78adaab7dcb046c7fe96ad4e5a9dcb6610", + "sha256:ed2a9a9bea6ec443b7effe5695c9c168b7bf9a67df6d880729760feda871b6a3", + "sha256:efd842d70b87e3ef3429c3149840b9189d4441ca951ab0cec62c94a964e219d9", + "sha256:f1428af5c381f6eef30ffbc7e047b7c713d4efa5d7bf5e57b62b3fc8d387044b", + "sha256:f6c7bf8cd4de1640b760b47f4d28deb26dbbf9acbe0194cdff54a898e190d872", + "sha256:f8329ac2160ad8bbbac6a507374685ceca3f24ca427fa9ee61a501280e1972d9", + "sha256:fefba2a43b92f8393366093b60efbe984a72a2b41cce16b4002005e4104ef938" ], "index": "pypi", - "version": "==0.19.1" + "version": "==0.19.2" }, "scipy": { "hashes": [ @@ -717,12 +818,19 @@ "sklearn-tda": { "git": "https://github.com/MathieuCarriere/sklearn_tda" }, + "snowballstemmer": { + "hashes": [ + "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", + "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89" + ], + "version": "==1.2.1" + }, "sortedcontainers": { "hashes": [ - "sha256:607294c6e291a270948420f7ffa1fb3ed47384a4c08db6d1e9c92d08a6981982", - "sha256:ef38b128302ee8f65d81e31c9d8fbf10d81df4d6d06c9c0b66f01d33747525bb" + "sha256:220bb2e3e1886297fd7cdd6d164cb5cf237be1cfae1a3a3e526d149c52816682", + "sha256:b74f2756fb5e23512572cc76f0fe0832fd86310f77dfee54335a35fb33f6b950" ], - "version": "==2.0.4" + "version": "==2.0.5" }, "tblib": { "hashes": [ @@ -753,13 +861,15 @@ }, "tornado": { "hashes": [ - "sha256:1b83d5c10550f2653380b4c77331d6f8850f287c4f67d7ce1e1c639d9222fbc7", - "sha256:408d129e9d13d3c55aa73f8084aa97d5f90ed84132e38d6932e63a67d5bec563", - "sha256:88ce0282cce70df9045e515f578c78f1ebc35dcabe1d70f800c3583ebda7f5f5", - "sha256:ba9fbb249ac5390bff8a1d6aa4b844fd400701069bda7d2e380dfe2217895101", - "sha256:c050089173c2e9272244bccfb6a8615fb9e53b79420a5551acfa76094ecc3111" + "sha256:1c0816fc32b7d31b98781bd8ebc7a9726d7dce67407dc353a2e66e697e138448", + "sha256:4f66a2172cb947387193ca4c2c3e19131f1c70fa8be470ddbbd9317fd0801582", + "sha256:5327ba1a6c694e0149e7d9126426b3704b1d9d520852a3e4aa9fc8fe989e4046", + "sha256:6a7e8657618268bb007646b9eae7661d0b57f13efc94faa33cd2588eae5912c9", + "sha256:a9b14804783a1d77c0bd6c66f7a9b1196cbddfbdf8bceb64683c5ae60bd1ec6f", + "sha256:c58757e37c4a3172949c99099d4d5106e4d7b63aa0617f9bb24bfbff712c7866", + "sha256:d8984742ce86c0855cccecd5c6f54a9f7532c983947cff06f3a0e2115b47f85c" ], - "version": "==5.0.2" + "version": "==5.1" }, "traitlets": { "hashes": [ @@ -770,11 +880,11 @@ }, "typing": { "hashes": [ - "sha256:3a887b021a77b292e151afb75323dea88a7bc1b3dfa92176cff8e44c8b68bddf", - "sha256:b2c689d54e1144bbcfd191b0832980a21c2dbcf7b5ff7a66248a60c90e951eb8", - "sha256:d400a9344254803a2368533e4533a4200d21eb7b6b729c173bc38201a74db3f2" + "sha256:4027c5f6127a6267a435201981ba156de91ad0d1d98e9ddc2aa173453453492d", + "sha256:57dcf675a99b74d64dacf6fba08fb17cf7e3d5fdff53d4a30ea2a5e7e52543d4", + "sha256:a4c8473ce11a65999c8f59cb093e70686b6c84c98df58c1dae9b3b196089858a" ], - "version": "==3.6.4" + "version": "==3.6.6" }, "wcwidth": { "hashes": [ @@ -792,10 +902,17 @@ }, "widgetsnbextension": { "hashes": [ - "sha256:40794a6a2f97c09a1e613c1c165f67d58a5995d14b283542da39134710791a36", - "sha256:5417789ee6064ff515fd10be24870660af3561c02d3d48b26f6f44285d0f70cc" + "sha256:8b3b32f522507744096609bc9a36cc0cc83fe8b61ba16f16eebb83d7d79e2686", + "sha256:bd2a92a68cb783b33abb47a23e0d1d9638c0d250a0d17633c262172d76641dd8" ], - "version": "==3.2.1" + "version": "==3.4.1" + }, + "yapf": { + "hashes": [ + "sha256:330632d2592e67571ef2c113fe6f5802e2fa5d657448755d5546eea00693dc31", + "sha256:55ead4ff1cc1cba5ad7dcfca88fe3930c2ec912c1cfe4a152aa0e7572ff1b49f" + ], + "version": "==0.23.0" }, "zict": { "hashes": [ diff --git a/clustering.ipynb b/clustering.ipynb new file mode 100644 index 0000000..3d863a2 --- /dev/null +++ b/clustering.ipynb @@ -0,0 +1,657 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "plt.style.use(\"fivethirtyeight\")\n", + "plt.rcParams[\"figure.figsize\"] = 10, 6" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": {}, + "outputs": [], + "source": [ + "import dill" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import AgglomerativeClustering\n", + "from sklearn.svm import OneClassSVM" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": {}, + "outputs": [], + "source": [ + "import dionysus as d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generative model" + ] + }, + { + "cell_type": "code", + "execution_count": 348, + "metadata": {}, + "outputs": [], + "source": [ + "zz_dgms = dill.load(open(\"generative/zz_dgms.dill\", \"rb\"))\n", + "wrcf_dgms = dill.load(open(\"generative/wrcf_dgms.dill\", \"rb\"))\n", + "zz_gram1 = dill.load(open(\"generative/zz_gram1.dill\", \"rb\"))\n", + "wrcf_gram1 = dill.load(open(\"generative/wrcf_gram1.dill\", \"rb\"))\n", + "zz_distmat = dill.load(open(\"generative/zz_distmat.dill\", \"rb\"))\n", + "wrcf_distmat = dill.load(open(\"generative/wrcf_distmat.dill\", \"rb\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 282, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "d.plot.plot_diagram(zz_dgms[0][1], labels=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 301, + "metadata": {}, + "outputs": [], + "source": [ + "births, deaths = [], []\n", + "for p in zz_dgms[0][1]:\n", + " births.append(p.birth)\n", + " deaths.append(p.death)" + ] + }, + { + "cell_type": "code", + "execution_count": 317, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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GzaoQYMGpscJOmVlZbrlllsqDifffPPNysvLU2ZmJuGowZo1a/Thhx8qMzNTnTp10p49ezRjxgwlJydrzJgxPltPyIYjPj5ekZGRKigo8FheUFCgFi1aGJoq+Dz33HNas2aN1q1bpzZt2pgeJyjs2LFDJ0+eVFpaWsUyl8ulrVu3atmyZfruu+/UsGFDgxPaW2Jiojp27OixrEOHDvr2228NTRQ8XnzxRT311FMaMWKEJKlr1646cuSIXnvtNcJRG1FRUerRo4eysrI0bNiwiuVZWVl64IEHDE4WPKZPn661a9dq3bp16tChg+lxgsaQIUN0yy23eCybNGmS2rVrpylTpigqKsrQZMEhLS1Nubm5Hstyc3OVlJRkaKLgce7cuUpHBSIjI1VWVubT9YRsOKTyv6xPPPGEevbsqV69emnZsmU6duyYxo0bZ3o028vIyNCqVav0/vvvKy4uTvn5+ZKkxo0bKyYmxvB09hYXF1fpIoJGjRqpadOm6tKli6GpgseTTz6pAQMG6JVXXtHw4cO1e/duLV26VDNnzjQ9mu0NGjRIixYtUuvWrdWpUyft3r1bixcv1kMPPeTT9YT05bhS+S8Avv7668rPz1fnzp318ssv66677jI9lu1VdfXU9OnT9dxzzwV4muA3ZMgQLse1YOPGjZo1a5Zyc3N1ww036PHHH9cTTzyhiIgI06PZWmFhoebMmaP169frxIkTSkxM1IgRIzRt2jRdc801PltPyIcDAOBbIft7HAAA/yAcAABLCAcAwBLCAQCwhHAAACwhHAAASwgHYFFcXJzmzp1b59cZMmSIbrvtNh9MBAQW4QAkrVixouI3vi/+adeunQYPHqz169d7/br79+/X3LlzdfjwYR9OC5gV0m85Alg1Y8YM3XjjjXK73SooKNDq1av1r//6r1q2bJmGDx8uqfxjTevXr91fnX/84x+aP3++evfurdatW/tzdCBgCAdwmf79+3scPho3bpw6d+6sjz76qCIctXnrhuLiYjVu3NhvcwImcagKqEZMTIwaN27ssYdx5TmOi4e5vvjiC02bNk0pKSlq1aqVVqxYobFjx0qS7r///opDYCtWrPBYx/79+3X//ferZcuW6ty5s15//fVKc2RmZurOO+/U9ddfr+TkZPXu3Vvvvvuun75qoHrscQCXOXv2rE6ePClJOnHihN59913l5+fX6t1Fp0+frri4OE2dOlVnz57VXXfdpSeeeEJLlizR1KlTK96avlevXh7r+5d/+Rf95Cc/0bBhw/Tpp5/qpZdeUpcuXSo+7vM3v/mNMjIyNHToUD3++OMqLS3V/v37tX37dt7pGUYQDuAyFz8A56KoqCgtWrRIQ4YMqfG5jRs31vr16z32Tu68804tWbJEffv21d13313pOfn5+XrzzTf18MMPS5L+7d/+Td26ddN7771XEY6NGzeqc+fOWr58eV2+NMBnCAdwmfnz51d8+tzx48f18ccfa8qUKWrSpIkefPDBap87duzYWp80vyg6OlqjR4+uuB0VFaXU1FQdOnSoYlmTJk109OhRffXVV0pNTbX0+oA/cI4DuExqaqr69u2rvn37atSoUfrwww/VpUsXTZ8+XSUlJdU+15uP1m3ZsqXq1fP8axgXFyen01lxe/LkyYqNjVW/fv3Uo0cPPfPMM9q0aZPldQG+QjiAatSrV0+9e/fW8ePHdeDAgWofGx0dbfn1r/yYz4vc7ksfk9OxY0ft3LlTy5cvV3p6ujZu3KgHHnhAGRkZltcH+ALhAGpw4cIFSeWX2JrSqFEjDR06VG+88YZ2796tUaNGKTMzU999952xmRC+CAdQjdLSUmVlZSkqKqriqigrLv4ux+WHnqw6deqUx+369etXfHb5mTNnvH5dwFucHAcu86c//Ul5eXmSpIKCAq1Zs0a5ubl65pln1KRJE8uv1717d0VGRuq1117TmTNnFB0drZ49e1o6H/Lggw8qISFBaWlpatGihQ4ePKilS5eqa9euFSfygUAiHMBl5s2bV/Hf11xzjVJSUrRw4UKvf1+iRYsWev3117Vw4UL9/Oc/l8vl0uLFiy2FY9y4cfroo4/05ptvqrCwUNddd51++tOf6tlnn610Yh0IhAin0+mu+WEAAJTjnysAAEsIBwDAEsIBALCEcAAALCEcAABLCAcAwBLCAQCwhHAAACwhHAAAS/4/CDcT82yG8SAAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.set_aspect('equal')\n", + "ax.scatter(births, deaths)\n", + "ax.plot([0, max(births)], [0, max(births)])\n", + "ax.set_xlabel(\"Births\")\n", + "ax.set_ylabel(\"Deaths\")\n", + "fig.savefig(\"fig/diagram.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 354, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(zz_gram1)\n", + "plt.savefig(\"gen_zz_gram1.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 350, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 350, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(wrcf_gram1)" + ] + }, + { + "cell_type": "code", + "execution_count": 352, + "metadata": {}, + "outputs": [], + "source": [ + "clf = AgglomerativeClustering(n_clusters=10, affinity=\"precomputed\", linkage=\"average\")" + ] + }, + { + "cell_type": "code", + "execution_count": 353, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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13l0W//MmTOux0jl5fz588rOzr7mogDTdKzvr68fDLW6DBeHw6GI+v5WlwEAgNd5dOX0xhtv1M6dO/N9f/PmzWrWrNk1FwUAAADf5FE4HThwoBYvXqzly5crJydH0qWH7p87d05//etftXnzZiUkJJRIoQAAACj/PLqtP2zYMO3Zs0fDhg1TtWrVJEmDBg2S0+lUdna2hgwZoocffrhECgUAAED55/FzTl9//XU99NBDWr16tfbv36+cnBzdcMMN6tWrl+Li4kqiRgAAAPgIj8OpJMXExCgmJsbbtQAAAMDHeTTmtFatWlqxYkW+769atUq1atW65qIAAADgmzwKp//50P285OTk5Pn8UwAAAKAoPAqnkgoMn//85z9lt/NgcAAAABRPoWNOk5KS9Le//c31ety4cZo4ceJV7U6dOqXTp0/roYce8m6FAAAA8BmFhtPg4GBFRkZKkg4cOKC6deuqbt26bm1sNpuqVq2qli1basiQISVTKQAAAMq9QsNp37591bdvX0nS/fffr2effVYdOnQo8cIAAADgezx6lNSGDRtKqg4AAADAsx9Ebd26Ve+8847btA8++EC33HKLIiIilJiY6PqzpgAAAICnPAqnL730ktLS0lyv9+3bpyeffFIVKlRQy5YtNWfOHLcfTwEAAACe8Cic7tmzR23atHG9Xrp0qfz9/fXZZ59pxYoVio+P16JFi7xeJAAAAHyDR+H0zJkzbs8x3bRpkzp27Kjq1atLkmJjY3XgwAHvVggAAACf4VE4DQ0N1XfffSdJ+uWXX/TNN9+oU6dOrvdPnz6tihU9+o0VAAAA4OJRkuzevbveeecdnT9/Xjt27JC/v7+6du3qev9f//qXwsLCvF4kAAAAfINH4XTcuHE6evSoli9frurVq+vtt99WcHCwpEtXTdevX6/HH3+8RAoFAABA+edROK1atarmzJmT53uBgYHavXu3AgICvFIYAAAAfI/XBohWqFBBNWrU8NbiAAAA4IM8CqdTp04ttI3NZtPYsWOLXRAAAAB8l0fhdMqUKfm+Z7PZlJubSzgFAABAsXkUTk+ePHnVtJycHB04cEDJyclKS0vTypUrvVYcAAAAfItHzznNcwEVKig8PFyTJk1So0aNuGoKAACAYrvmcPqf4uLi9Pe//92biwQAAIAP8Wo43blzpypU8OoiAQAA4EM8GnO6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VHp6urp06VLgvLVq1VJISEhJllcmVaxYscj9smLFCv32229KSkpSlSpV1Lx5c+3du1dvv/22RowYIZvNVsLVmuvKE/TChQtVrVo19erVq8D5atSowX4p6d5779W9994rSXrqqafc3svNzVVSUpJGjx7tOgYmJSUpIiJCK1euVEJCQp7LTEpK0u233+664tK0aVNt2bJFSUlJmjt3bglujfUK6s8aNWpozZo1btNef/11tW/fXt99951atGhR4LKDg4MVFBTk3YINV1B/Xla5cmWPvsu+eq4vrC+v7MOPPvpIjRs31m233Vbosot7nve52/oXLlzQV199pU6dOrlN79Spk7788ss859m2bdtV7e+66y7t3LlTv//+e4nVWhZlZmYqJydHdru90LaPPvqoGjdurM6dO2vt2rWlUF3Z8OOPPyoyMlLR0dEaNGiQfvzxx3zbbtu2TbGxsapSpYpr2l133aVffvlFGRkZpVBt2ZCbm6uFCxcqPj7era/ykpiYqBtvvFEdO3bUvHnzlJOTU0pVlh0ZGRk6cuSI23GxSpUqiouLy/c4Kknbt2/P81ha0Dy+6syZM5JUpGPpnXfeqaZNm6pHjx76xz/+UdKllRlbt25V48aN1aZNG40aNUrHjh0rsD3n+sJlZmZq1apVrot7hSnued7nwunx48eVnZ2t4OBgt+nBwcE6evRonvMcPXo0z/YXL17U8ePHS6zWsigxMVFRUVFq165dvm0CAwM1ceJEzZ8/XytWrNAdd9yhhIQELVu2rBQrNdMtt9yit99+WytXrtSbb76pI0eO6N5779WJEyfybJ/fvnn5PVySkpKijIwMDRgwoMB2zz//vObNm6c1a9aod+/eGj9+vF577bVSqrLsOHLkiCR5dBy9PJ+n8/iiCxcuaPz48brvvvtUv379fNuFhoZq+vTpWrhwoRYuXKiIiAj17Nmz0N9Q+IK7775bf/vb37R27VpNmjRJO3bsUI8ePXT+/Pl85+FcX7iVK1fqwoUL6tevX4HtrvU875O39VEynn/+eaWnp2vjxo0FjpMMCgpyGw/ZqlUrnThxQm+88Ybi4+NLo1Rj3XPPPW6vb7nlFrVs2VKLFy/WiBEjLKqq7FuwYIFat26tqKioAtuNHTvW9d/R0dHKycnRa6+9pmeffbakSwQkSRcvXtTQoUN16tQpLVmypMC2ERERioiIcL1u166dDhw4oDfffFNxcXElXarR+vTp4/rvFi1aqGXLloqKitInn3yiHj16WFhZ2bZgwQJ17dq10HHN13qe97krp0FBQfLz87vq8v6xY8dUp06dPOepU6dOnu0rVqzoc+N88jNu3Dh98MEHWrduncLDwz2ev02bNtq/f7/3CyvjAgMDFRkZmW/f5LdvXn4Pl/rjo48+KvJtqP/Upk0bnT59mit7V7g8hsyT4+jl+Tydx5dcvHhRgwcP1rfffqu1a9eqVq1aHi+DY2ne6tatq3r16hXYN5zrC/bNN99o586dxTqWSp7tmz4XTiuaJqn3AAANPklEQVRVqqSWLVsqJSXFbXpKSopiYmLynKddu3Z5tm/VqpWuu+66Equ1rHjuuedcwbSwxx7lZ9euXfwIJQ9ZWVlyOBz59k27du20detWZWVluaalpKSobt26CgsLK60yjbZ48WJVrlzZ7UpKUe3atUv+/v6qUaNGCVRWdoWFhSkkJMTtuJiVlaWtW7fmexyVpLZt23p07PUlv//+uxISEvTtt99q/fr1xT4ecizN2/Hjx/XLL78U2Dec6wu2YMEChYWF6c477yzW/J7smz55W3/48OEaNmyY2rRpo5iYGM2bN0+HDx92/cJ02LBhkuR6BEVCQoLeeecdJSYmKiEhQV9++aUWL16s5ORky7bBFGPGjNGyZcu0aNEi2e1211i0qlWrKjAwUJL0wgsvaMeOHVq3bp2kS2HhuuuuU3R0tCpUqKCNGzcqOTlZf/3rX63aDGNcHmd2/fXX69dff9W0adN07tw51/ieK/uyb9++mjp1qp566imNGTNG+/bt04wZMzR27Fif/qX+Zbm5uXrvvffUu3dv1/542Zw5c/TOO+9o+/btkqSPP/5YR48eVdu2bVWlShVt2bJFkydP1sCBA1W5cmUryrdUZmam6ypHTk6OfvrpJ33zzTeqWbOmGjRooCeffFLTp09XRESEGjdurFdffVVVq1ZV3759Xcvo0aOH2rRp43oKyhNPPKGuXbvq9ddfV7du3bRhwwZt2bJFGzdutGQbS1NB/Vm3bl0NHDhQO3fu1JIlS2Sz2VzH0urVq7t+xHfluentt99Ww4YN1axZM124cEHLly/Xhx9+qPfee8+CLSxdBfVnzZo1NWXKFPXo0UMhISE6cOCAXnzxRQUHB+v+++93LYNz/SWFfdelS487W7FihUaNGpXnucXb53mfDKe9e/fWiRMnNG3aNB05ckTNmjXT8uXL1bBhQ0nSTz/95NY+PDxcy5cvd/1YIjQ0VFOnTi3Xj5Yoqstf2iv74rnnntO4ceMkXXq+5A8//OD2/quvvqqDBw/Kz89PjRo10syZM31+vKkk/fzzzxoyZIiOHz+u2rVr65ZbbtGnn37q2jev7MsaNWpo9erVGjNmjDp27Ci73a7hw4czPvX/bNmyRd9//73mzJlz1XvHjx+Xw+Fwvb7uuuuUnJys//qv/1JOTo7Cw8M1btw4Pf7446VZsjF27typ7t27u15PnjxZkydPVr9+/ZSUlKSnn35av/32m5599lk5nU61adNGq1atcnvG6Q8//OD2g57LFwMmTZqkl19+WTfccIPmzZtX7p9xKhXcn4mJifroo48k6aqrUrNmzdLDDz8s6epz0++//66//OUv+vnnn+Xv7+86l11+LFB5VlB/Tp8+Xbt379bSpUt16tQphYSE6Pbbb9f8+fPd9k/O9ZcU9l2XLj028uzZs6598UrePs/bnE4nf0oGAAAARvC5MacAAAAwF+EUAAAAxiCcAgAAwBiEUwAAABiDcAoAAABjEE4BAABgDMIpAFzh/fffl91udz2gH5eeffiff2gDAEoK4RRAubBnzx4NGjRI0dHRCgkJUWRkpLp27arJkydbXZrHXnvtNW3YsMHqMgDAEoRTAGXetm3b1KFDB+3YsUP9+/fXtGnTlJCQoBo1amjGjBlWl+ex6dOn68MPP7S6DACwhE/++VIA5curr76qgIAApaSkqFatWm7vHT161KKqyoezZ8+qatWqVpcBwIdw5RRAmffDDz8oMjLyqmAqSXXq1HH9t91uz/M2f1RUlJ588smrpl/+2/E33nijrr/+ej322GNXhd1u3bqpbdu22rNnj7p37666deuqWbNmeuONN65a3vnz5zVlyhS1bt1aderUUbNmzTRu3DidO3fOrcazZ89qyZIlstvtstvt6tatm06dOqVatWrprbfecrU9e/asateurXr16un33393TZ80aZJCQkKUlZXlmpaamqquXbuqXr16atiwoeLj47V79263+i6PK929e7eGDh2q8PBwxcbGXrUdl/3yyy+KiYlR69atdfDgwXzbAYAnuHIKoMxr2LCh0tPTtWvXLkVFRXltuYmJiapatarGjh2rgwcPas6cOXI4HEpJSVGlSpVc7U6fPq2+ffvq/vvv1wMPPKC1a9dqwoQJat68ue655x5JUm5urh555BF98cUXGjBggCIjI/Xdd99p7ty52rNnj1atWiWbzabZs2dr1KhRat26tR577DFJlwJ2jRo11Lx5c6WlpWnkyJGSLg1nyM7O1rlz57Rz5061a9dOkrR161a1bt1a/v7+kqR//OMf6t27t8LCwpSYmKisrCwlJyfrvvvu0+bNm9W4cWO37R40aJDCwsI0fvx4XbhwIc++OXDggHr27KlKlSrpo48+UmhoqNf6HYBvI5wCKPNGjRqllJQUdejQQa1atVJsbKxuv/12dejQwRXQimvDhg2qXLmyJCkyMlIjR47U0qVLNWDAAFebI0eOKCkpSf369ZMkPfroo4qKitLChQtd4XTlypX67LPPtH79et12222ueVu1aqWhQ4cqJSVFnTp1Unx8vP70pz8pPDxc8fHxbrXExsZq5cqVys3Nlc1mU1pamlq0aKGsrCylpaWpXbt2unDhgnbs2KHhw4e75hs/fryqV6+uTz/91HV1uU+fPmrfvr1efPFFvffee27riYiI0MKFC/Ptk/3796tHjx6y2+1as2aNateuXZyuBYA8cVsfQJnXoUMHffzxx+rcubP+/e9/a+bMmYqPj1eTJk20aNGiYi83ISHBFUwlqV+/fqpRo4Y2btzo1q5KlSpuQbJSpUpq3bq1fvzxR9e01atXq3HjxmrWrJmOHz/u+nfrrbfKZrNpy5YthdYTFxenkydPum7Hp6WlKS4uTrGxsUpLS5Mk7dy5U1lZWa7b8YcPH9Y333yjfv36uQ17aNSokbp06aJNmzYpOzvbbT2DBw/Ot4bvvvtOXbt2VZ06dbRhwwaCKQCvI5wCKBdiYmK0ZMkSZWRkaMuWLRo/frwkacSIEfr888+LtcxGjRq5va5YsaLCwsJ04MABt+l169ZVhQruh1O73S6n0+l6/f3338vhcKhRo0Zu/1q0aKHc3FwdO3as0HouB860tDTXFdJbb71VcXFxSk9PV05OjrZu3So/Pz/FxMRIkmssaERExFXLa9Kkic6ePavjx4+7TQ8PD8+3hv79+6ty5cpas2aN7HZ7oTUDgKe4rQ+gXLnuuusUFRWlqKgotW3bVj179tTy5cvVoUOHfOfJycm5pnX6+fnlOT03N9dtHZGRkZoyZUqebYsyZjM0NFQ33nij0tLSFBUVpaysLMXFxens2bM6ffq0du3apa1bt+qmm25StWrVircxunQlOD89evTQ4sWLtWTJEg0bNqzY6wCA/BBOAZRbbdq0kXTp1rZ06WrmqVOn3NpcuHDB9f6Vvv/+e3Xq1Mn1+uLFi8rIyNCtt97qcS033HCDvvrqK3Xo0EE2m63AtgW9Hxsbq02bNik6OloREREKDg5WcHCw6tevr9TUVKWnp6t///6u9g0aNJAkORyOq5blcDhUtWpVBQUFFXk7JkyYoCpVqrh+LPbII48UeV4AKApu6wMo8z7//PM8r35++umnkv7/lvYNN9zgGpt52bvvvnvVmMvL5s+fr/Pnz7teL1myRKdOnVLnzp09rrFXr146evSo5s6de9V758+f15kzZ1yvAwIC3IYE/KfY2FgdPnxYixcvVlxcnNv0d999V6dOnXKbHhoaqptvvllLly7VyZMnXdN/+OEHffzxx7r77rvzvfKbn1dffVXx8fF6+umntXr1ao/mBYDCcOUUQJmXmJiozMxM3X///WratKlycnL09ddfa9myZapVq5brGaYDBgzQH//4Rz366KPq2LGj/vWvf2nTpk0FXjns3r27+vTpowMHDmjOnDlq3ry561f5noiPj9fatWs1ZswYffHFF2rfvr1yc3O1b98+rV69Wu+++65uv/12SZd+wf/555/rrbfeUr169VS7dm3XsITLwdPhcGjMmDGu5cfFxWnlypWSdNWzSSdOnKjevXvrnnvu0cCBA12PkvL399ef//xnj7fFZrNp1qxZOnv2rIYOHaqAgIBiBXYAyAvhFECZN3HiRK1bt06bN2/WokWLdP78eYWGhurBBx/UM888o7CwMEnSwIEDlZGRoYULF2rTpk2KjY3VmjVr1KNHjzyXO2XKFK1bt05Tp07V+fPn1aVLF73yyituzzgtqgoVKmjRokVKSkrSkiVL9NFHH8nf31/h4eEaPHiwbrrpJlfbl19+WaNHj9aUKVN09uxZ3Xrrra5weuONNyo0NFSHDx++6sqpJDVt2vSqX9DfcccdWr16tV5++WW9/PLLqlixomJjYzVhwoSrnnFaVH5+fpo7d6769++vgQMHatmyZQWO6wWAorI5nc7cwpsBAAAAJY8xpwAAADAG4RQAAADGIJwCAADAGIRTAAAAGINwCgAAAGMQTgEAAGAMwikAAACMQTgFAACAMQinAAAAMMb/Arm/Xu9zlSsbAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(zz_gram1)\n", + "fig, ax = plt.subplots()\n", + "ax.step(range(len(clf.labels_)), clf.labels_, where='post')\n", + "ax.set_xlabel(\"Subnetwork\")\n", + "ax.set_ylabel(\"Cluster\")\n", + "fig.savefig(\"gen_zz_k.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 340, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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uAAAuIEqJdLBgwfr3Xff1blz57R9+3Y1bNhQgwYNsm//4Ycf1K5du2ov8hIfHx/l5+c7rLu07OPjI0ny9fUts82l7QAAADC/Kn3xbOrUqYqKilJ6erry8/M1Z84c+9SAkydPatWqVerbt2+NFCpJ4eHh2rJli86ePWtfl5GRodatW9vDdffu3ZWRkeGwX0ZGhqxWa43VBQAAgNqlSndymzRpUu4XuJo2bardu3ercWPnv4BTWFio/fv3S5KKi4t15MgR7dy5Uy1btlTbtm314osvavv27Vq5cqWkP36YYsaMGRo/frymTJmin376SW+88YaeeuopeXh4SJLGjRunQYMG6fXXX9edd96p1atXKzMzU+vWravKqQIAAMCNVelOboUd1amjFi1aqF69ek7vs2PHDt1666269dZbdebMGSUmJurWW2/VtGnTJEk5OTk6cOCAvX2LFi20fPlyHT16VH379tWTTz6pCRMmaOLEifY2VqtVqampSktLU69evfTRRx8pNTWVZ+QCAABcRap0J3fGjBmVtvHw8NBTTz3lVH+9e/dWQUFBudvLerbtjTfeqM8++6zCfqOjoxUdHe1UDQAAADCfKoXc6dOnl7vNw8NDJSUlVQq5AAAAQE2oUsj97bffSq0rLi7WoUOHlJKSoqysLC1ZsqTaigMAAAAuxxXPya1Tp44CAgL08ssvKzAwkLu4AAAAMFy1ffFMkiIiIvTFF19UZ5cAAABAlVVryN2xY4fq1KnWLgEAAIAqq9Kc3MWLF5e5/sSJE8rKytKqVav00EMPVUthAAAAwOWqUsgdP358udu8vLz0t7/9jTm5AAAAMFyVQu73339fap2Hh4csFouaNWtWbUUBAAAAV6JKIdff37+m6gAAAACqDd8SAwAAgOlUeCc3NDRUHh4eVerQw8ND33333RUVBQAAAFyJCkNur169qhxyAQAAAKNVGHKTk5NdVQcAAABQbZiTCwAAANOpNOTm5OSoe/fuevnllyts9/LLLys8PFz/+c9/qq04AAAA4HJUGnLnzp2r3377TZMnT66w3eTJk3X8+HHNnTu32ooDAAAALkelIfeLL77QkCFDKv2xh2bNmumee+7RZ599Vm3FAQAAAJej0pB74MABderUyanOOnbsqP37919xUQAAAMCVqDTkenh4qLi42KnOiouLeeQYAAAADFdpyPX3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LnFpvt9f/vIX/ec//1FSUpJ+//13+1ytP4/TvffeqxkzZmj8+PGaMmWKfvrpJ73xxht66qmnTP1khUtKSkq0YMECDR061P5eumTevHl699139c0330iSPvvsM+Xl5al79+5q1KiRMjMzlZiYqJEjR6pBgwZGlF9jCgsL7Xd3iouLdeTIEe3cuVMtW7ZU27Zt9eijj2rmzJkKCgpS+/bt9eqrr6pJkya699577X1ERUUpLCzM/qSYcePGadCgQXr99dd15513avXq1crMzNS6desMOcfqUtFYtW7dWiNHjtSOHTu0ePFieXh42K9fzZs3t3/J8c/X+jlz5sjf318hISEqKipSenq61qxZowULFhhwhtWnorFq2bKlpk+frqioKPn6+urQoUP6xz/+IW9vb9111132Pq6Wz8XK/g5Kfzyi7pNPPtFjjz1W5vWaz8WqI+RWo6FDh+r48eNKSkpSbm6uQkJClJ6eLn9/f0nSkSNHHNoHBAQoPT3d/uUXPz8/zZgxw60fk+KMSxerP5/n008/ralTp0r64xmnBw4ccNj+6quv6vDhw/L09FRgYKBmzZpl+nlHv/76q8aOHatjx47pmmuu0c0336wvv/zS/p768zi1aNFCy5cv15QpU9S3b19ZLBZNmDDhqpm/m5mZqX//+9+aN29eqW3Hjh2TzWazL9erV08pKSn6f//v/6m4uFgBAQGaOnWqHn74YVeW7BI7duzQ4MGD7cuJiYlKTExUbGyskpOTNXnyZJ05c0ZPPvmkCgoKFBYWpmXLljk8I/fAgQMOX6669D/yL7/8sqZNm6brrrtOqampbv2MXKnisUpISNDatWslqdSdttmzZ+v++++XVPpaf/78eT333HP69ddf1bBhQ/tnw6VHSrmrisZq5syZ2r17tz766COdOHFCvr6+6t27t+bPn+/wvrpaPhcr+zso/fF4zdOnT9vfR3/G52LVeRQUFJj/p5AAAABwVWFOLgAAAEyHkAsAAADTIeQCAADAdAi5AAAAMB1CLgAAAEyHkAsAAADTIeQCgIssWrRIFovF/oMU+ON5of/9ozAAUF0IuQBQgT179mj06NEKDQ2Vr6+vOnTooEGDBikxMdHo0qrstdde0+rVq40uAwBcgpALAOXYtm2bIiMjtX37do0YMUJJSUmKi4tTixYt9MYbbxhdXpXNnDlTa9asMboMAHAJftYXAMrx6quvqnHjxsrIyFCrVq0ctuXl5RlUlTmcPn1aTZo0MboMACbGnVwAKMeBAwfUoUOHUgFXknx8fOz/bbFYypy+0LlzZz366KOl1p85c0ZPPvmkrr/+ev3lL3/RqFGjSoXmO++8U927d9eePXs0ePBgtW7dWiEhIXrzzTdL9Xfu3DlNnz5d3bp1k4+Pj0JCQjR16lT9/vvvDjWePn1aixcvlsVikcVi0Z133qkTJ06oVatWevvtt+1tT58+rWuuuUZt2rTR+fPn7etffvll+fr66uzZs/Z1mzZt0qBBg9SmTRv5+/srJiZGu3fvdqjv0rzb3bt365FHHlFAQIB69uxZ6jwuOXr0qKxWq7p166bDhw+X2w4AKsKdXAAoh7+/v7Kzs7Vr1y517ty52vpNSEhQkyZN9NRTT+nw4cOaN2+ebDabMjIyVL9+fXu7kydP6t5779Vdd92lu+++WytWrNDzzz+vjh076rbbbpMklZSU6IEHHtDmzZv10EMPqUOHDtq7d6/ee+897dmzR8uWLZOHh4fmzp2rxx57TN26ddOoUaMk/RHUW7RooY4dOyorK0uTJk2S9Mc0jYsXL+r333/Xjh07FB4eLknasmWLunXrpoYNG0qSNm7cqKFDh6pdu3ZKSEjQ2bNnlZKSottvv10bNmxQ+/btHc579OjRateunZ599lkVFRWVOTaHDh1SdHS06tevr7Vr18rPz6/axh3A1YWQCwDleOyxx5SRkaHIyEh17dpVPXv2VO/evRUZGWkPepdr9erVatCggSSpQ4cOmjRpkj766CM99NBD9ja5ublKTk5WbGysJOnBBx9U586dtXDhQnvIXbJkib766iutWrVKt9xyi33frl276pFHHlFGRob69eunmJgY/c///I8CAgIUExPjUEvPnj21ZMkSlZSUyMPDQ1lZWbrxxht19uxZZWVlKTw8XEVFRdq+fbsmTJhg3+/ZZ59V8+bN9eWXX9rvdt9zzz3q0aOH/vGPf2jBggUOxwkKCtLChQvLHZP9+/crKipKFotFn376qa655prLGVoAkMR0BQAoV2RkpD777DMNHDhQ//rXvzRr1izFxMTohhtu0IcffnjZ/cbFxdkDriTFxsaqRYsWWrdunUO7Ro0aOQTS+vXrq1u3bvr555/t65YvX6727dsrJCREx44ds7969eolDw8PZWZmVlpPRESEfvvtN/s0g6ysLEVERKhnz57KysqSJO3YsUNnz561TzPIycnRzp07FRsb6zCdIzAwUHfccYfWr1+vixcvOhxnzJgx5dawd+9eDRo0SD4+Plq9ejUBF8AVI+QCQAWsVqsWL16sgwcPKjMzU88++6wkaeLEifr6668vq8/AwECH5bp166pdu3Y6dOiQw/rWrVurTh3Hy7TFYlFBQYF9+d///rdsNpsCAwMdXjfeeKNKSkqUn59faT2XgmtWVpb9jm2vXr0UERGh7OxsFRcXa8uWLfL09JTVapUk+1zZoKCgUv3dcMMNOn36tI4dO+awPiAgoNwaRowYoQYNGujTTz+VxWKptGYAqAzTFQDACfXq1VPnzp3VuXNnde/eXdHR0UpPT1dkZGS5+xQXF1/RMT09PctcX1JS4nCMDh06aPr06WW2dWZOq5+fn66//nplZWWpc+fOOnv2rCIiInT69GmdPHlSu3bt0pYtW9SpUyc1a9bs8k5Gf9yZLk9UVJTS0tK0ePFixcfHX/YxAOASQi4AVFFYWJikP/7JXvrj7uqJEycc2hQVFdm3/9m///1v9evXz7584cIFHTx4UL169apyLdddd52+++47RUZGysPDo8K2FW3v2bOn1q9fr9DQUAUFBcnb21ve3t669tprtWnTJmVnZ2vEiBH29m3btpUk2Wy2Un3ZbDY1adJEXl5eTp/H888/r0aNGtm/lPfAAw84vS8AlIXpCgBQjq+//rrMu7FffvmlpP/7p/rrrrvOPnf1kvfff7/UnNRL5s+fr3PnztmXFy9erBMnTmjgwIFVrnHIkCHKy8vTe++9V2rbuXPndOrUKfty48aNHaY6/LeePXsqJydHaWlpioiIcFj//vvv68SJEw7r/fz8dNNNN+mjjz7Sb7/9Zl9/4MABffbZZ/rrX/9a7p3o8rz66quKiYnR5MmTtXz58irtCwB/xp1cAChHQkKCCgsLdddddyk4OFjFxcX6/vvv9fHHH6tVq1b2Z+A+9NBD+tvf/qYHH3xQffv21Q8//KD169dXeCdz8ODBuueee3To0CHNmzdPHTt2tD9FoSpiYmK0YsUKTZkyRZs3b1aPHj1UUlKin376ScuXL9f777+v3r17S/rjiQtff/213n77bbVp00bXXHONfbrFpQBrs9k0ZcoUe/8RERFasmSJJJV6tu1LL72koUOH6rbbbtPIkSPtjxBr2LCh/v73v1f5XDw8PDR79mydPn1ajzzyiBo3bnxZwR8AJEIuAJTrpZde0sqVK7VhwwZ9+OGHOnfunPz8/DRs2DA98cQTateunSRp5MiROnjwoBYuXKj169erZ8+e+vTTTxUVFVVmv9OnT9fKlSs1Y8YMnTt3TnfccYf++c9/Ojwj11l16tTRhx9+qOTkZC1evFhr165Vw4YNFRAQoDFjxqhTp072ttOmTdPjjz+u6dOn6/Tp0+rVq5c95F5//fXy8/NTTk5OqTu5khQcHFzqiQe33nqrli9frmnTpmnatGmqW7euevbsqeeff77UM3Kd5enpqffee08jRozQyJEj9fHHH1c47xkAyuNRUFBQUnkzAAAAwH0wJxcAAACmQ8gFAACA6RByAQAAYDqEXAAAAJgOIRcAAACmQ8gFAACA6RByAQAAYDqEXAAAAJgOIRcAAACm8/8BK5mgsJioHFgAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(wrcf_gram1)\n", + "fig, ax = plt.subplots()\n", + "ax.step(range(len(clf.labels_)), clf.labels_, where='post')\n", + "ax.set_xlabel(\"Subnetwork\")\n", + "ax.set_ylabel(\"Cluster\")\n", + "fig.savefig(\"gen_wrcf_k.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 341, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'Cluster')" + ] + }, + "execution_count": 341, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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lV2hV5LefPNNDR8+XCtXrtTBgwdVVFSkG264QUOGDFF4eHh11AgAAABcFbtDrySZzWaZzWZH1wIAAABUC7vm9LZq1UqffPJJmdtXrFihVq1aXXVRAAAAgCPZFXr/+49RlKaoqKjU5/cCAAAAzmRX6JVUbqj99ttvZTKZrqogAAAAwNEqnNOblJSk9957z7o8depUvfLKKyXanTp1SqdPn9bw4cMdWyEAAABwlSoMvV5eXurQoYMk6ciRI2rdurVat25t08bNzU1NmjRRly5dNHbs2OqpFAAAAKiiCkPv/fffr/vvv1+SdM899+jpp59WREREtRcGAAAAOIpdc3rXrl3r0MC7detWDR8+XMHBwTKZTFq0aFGF+/z4448aNGiQfH19FRwcrBkzZpT4gt2qVatkNpvl7e0ts9msNWvWOKxmAAAA1D52Pad327Zt+uGHH/Too49a1y1fvlwJCQk6deqU7rvvPk2bNk316lUuS589e1YdO3ZUTEyMxo0bV2H706dPW/8IxqZNm2SxWDRhwgQ1btxYkyZNkiTt2LFDo0eP1tSpUzV48GCtWbNGo0aN0ueff65bb73VnsMFql36L+f1ZGa+DhdcdnYpkqQ213hoduPz6nudh7NLcRrHnpPG0pZfqrx3u6bueivcVKfPh6twpd9Vrgugauy60/vaa68pMzPTuvzTTz/p8ccfV7169dSlSxfNmzfP5ktvFRkwYIBeeOEFRUVFVSoof/LJJzp37pySkpLUsWNHRUVFafLkyZozZ471bm9SUpJ69+6tKVOmKCgoSFOmTNFtt92mpKQkew4VqBGu8iF6xa8X6unJzHxnl+FUrnRODhdcrvPnw1VwXQC1n113evft26c777zTurxkyRJ5eHjoq6++UvPmzfX444/r448/1vjx4x1eqPTHXdyePXuqUaNG1nX9+/fXa6+9psOHD8vf31/ffPONHnvsMZv9+vfvr3nz5pXbt8ViqZaanf1adUFtHs/DBY2dXUIJhwsu1+oxvVqudk7q+vn4b84cByNeF7X7urI9H847Flepw3gqM5aBgYF29WlX6D1z5ozNc3g3btyovn37qnnz5pKknj17Vuv82dzcXLVp08ZmnZeXl3Wbv7+/cnJyrOv+u01ubm65fds7cFVlsVhq7LXqglo/nlfxT9/VqVaP6dVywXNSp8/H/+f033WDXRdOH8+r9afz4bRjcZU6DKa6rk+7Qq+vr6/2798vSTp+/Lh2796tUaNGWbefPn1a9evb1SWA/5Ife51TXtc03/U+0F3F1ZyTqr5xcz5cnzN+V7kugKtjV0IdPHiw3n//fV24cEE7d+6Uh4eHBg0aZN3+ww8/qF27dg4v8gpvb2/l5eXZrLuy7O3tLUny8fEptc2V7QAAAKh77Poi29SpUxUZGam0tDTl5eVpzpw51qkEp0+f1po1a9S3b99qKVSSwsLCtG3bNp0/f966Lj09Xa1bt7aG7e7duys9Pd1mv/T0dJnN5mqrCwAAAK7Nrju9TZo0KfMLYU2bNtXevXvVuHHlJ/sXFBTo4MGDkqSioiIdO3ZMu3fvVsuWLdW2bVu9/PLL2rlzp1avXi3pjz+UMWPGDI0fP15TpkzRTz/9pLfeekvPPPOM3NzcJEnjxo3ToEGD9Oabb+ruu+/W2rVrlZGRoQ0bNthzqAAAADAQu+70lttRvXpq0aKFGjRoUOl9du3apdtvv1233367zp07p4SEBN1+++2aNm2aJCk7O1uHDh2ytm/RooVWrlyp48ePq2/fvnr66ac1YcIETZw40drGbDYrJSVFqamp6tWrl5YsWaKUlBSe0QsAAFCH2XWnd8aMGRW2cXNz0zPPPFOp/nr37q38/LKfNVjas3VvvvlmffbZZ+X2GxUVpaioqErVAAAAAOOzK/ROnz69zG1ubm4qLi62K/QCAAAANcGu0Pvbb7+VWFdUVKQjR44oOTlZmZmZWrZsmcOKAwAAABzhquf01qtXT/7+/nr11VcVEBDAXV4AAAC4HId9kU2SwsPD9cUXXziySwAAAOCqOTT07tq1S/XqObRLAAAA4KrZNad38eLFpa4/deqUMjMztWbNGj3yyCMOKQwAAABwFLtC7/jx48vc5unpqb/+9a/M6QUAAIDLsSv0fv/99yXWubm5yWQyqVmzZg4rCgAAAHAku0Kvn59fddUBAAAAVBu+dQYAAADDK/dOb0hIiNzc3Ozq0M3NTd99991VFQUAAAA4Urmht1evXnaHXgAAAMDVlBt6k5KSaqoOAAAAoNowpxcAAACGV2Hozc7OVvfu3fXqq6+W2+7VV19VWFiY/v3vfzusOAAAAMARKgy9c+fO1W+//abJkyeX227y5Mk6efKk5s6d67DiAAAAAEeoMPR+8cUXGjJkSIV/fKJZs2a677779NlnnzmsOAAAAMARKgy9hw4dUqdOnSrVWceOHXXw4MGrLgoAAABwpApDr5ubm4qKiirVWVFREY84AwAAgMupMPT6+flp586dlers//7v//hTxQAAAHA5FYbegQMHavny5Tpw4EC57Q4cOKBly5bpzjvvdFhxAAAAgCNUGHonTZqkpk2bavDgwVq2bJkuXbpks/3SpUtatmyZIiMj1axZM02cOLHaigUAAACqoty/yCZJnp6e+uSTT/TQQw/pscce0xNPPKH27duradOmKigo0E8//aTz58+rdevWWrJkiTw9PWuibgAAAKDSKgy9ktSlSxdlZmZq/vz52rBhg/bt26czZ86oWbNmCgkJ0V133aVRo0apRYsW1V0vAAAAYLdKhV5Jat68uSZPnlzhH6kAAAAAXE2Fc3oBAACA2o7QCwAAAMMj9AIAAMDwnB56k5OTFRISIh8fH0VERCgzM7PMto8//rhMJlOJnzZt2ljbZGRklNqmoucMAwAAwLgq/UW26rBixQrFx8frjTfeUI8ePZScnKxhw4YpKytLbdu2LdF++vTpeumll2zWDRw4UOHh4SXaZmVlqWXLltbla6+91uH1AwAAoHZw6p3e2bNna8SIERo5cqSCgoKUmJgoHx8fpaSklNq+RYsW8vHxsf4cOnRIP//8s0aOHFmirZeXl01bd3f36j4cAAAAuCinhd7CwkJ999136tevn836fv36afv27ZXq46OPPlJwcLDMZnOJbX369FFQUJAiIyO1efNmh9QMAACA2slp0xtOnDihy5cvy8vLy2a9l5eXcnNzK9z/1KlT+vTTT/XCCy/YrPf19dXMmTPVrVs3FRYWaunSpYqKitK6detKnQZxhcViqdqBVEFNvlZdULvHs7HNkvOOxVXqcAWOHYuq7c/5KI1zx8EVzokrXJuuwhXOhyvVYTyVGcvAwEC7+nTqnN6rkZaWpqKiIg0fPtxmfWBgoM0ghIWF6ciRI3rnnXfKDb32DlxVWSyWGnutuqDWj+eWX2wWnXYsrlKHK3DgWFT5+uR8lOD033VXOCeucG26Clc4H65Uh8FU1/XptOkNnp6ecnd3V15ens36vLw8eXt7V7j/Rx99pMjISJsvq5UlNDRUBw8erHKtAAAAqN2cFnobNmyoLl26KD093WZ9enp6qXN0/9vOnTv1ww8/6JFH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PDy8zPdSSfrmm29KfT8tb5+66MyZM5JUqffSPn36KCgoSJGRkdq8eXN1l1ZrbNu2Te3bt1doaKieeOIJ5eXllduez/rKKSgo0IoVK6w3DitSlc96Qq+DnDhxQpcvX5aXl5fNei8vL+Xm5pa6T25ubqntL126pBMnTlRbrbVRfHy8OnfurLCwsDLbNG3aVK+88ormz5+vTz75RLfffrtiY2O1dOnSGqzUNd16662aM2eOli1bpnfeeUc5OTkaMGCATp48WWr7sq7NK9vwH+np6Tp8+LAeeeSRcts999xzSklJ0aeffqqhQ4fq+eef1xtvvFFDVdYeOTk5kmTXe+mV/ezdp64pLCzU888/rzvvvFPXXXddme18fX01c+ZMLVy4UAsXLlRgYKCioqIq/I5KXfCXv/xF7733nlatWqVXX31VO3fuVGRkpC5cuFDmPnzWV86yZctUWFiomJiYcttdzWc90xvg8p577jllZWVpw4YN5c5D9fT0tJlv2rVrV508eVJvv/22oqOja6JUl3XHHXfYLN96663q0qWLUlNTNXHiRCdVZQwfffSRunXrps6dO5fb7plnnrH+d0hIiIqKivTGG2/o6aefru4SAV26dEmPPfaYTp06pcWLF5fbNjAwUIGBgdblsLAwHTlyRO+8847Cw8Oru1SXdt9991n/++abb1aXLl3UuXNnff7554qMjHRiZbXfRx99pEGDBlU4d/xqPuu50+sgnp6ecnd3L/HPHHl5efL29i51H29v71Lb169fv87NoyrL1KlTtXz5cq1evVr+/v527x8aGqqDBw86vrBarmnTpurQoUOZY1PWtXllG/6Ql5en9evXV/qf4/5baGioTp8+zZ3IP7kyR8+e99Ir+9m7T11x6dIljRkzRj/++KNWrVqlVq1a2d0H76Wla926tdq0aVPu2PBZX7Hdu3dr165dVXovlSp/fRJ6HaRhw4bq0qWL0tPTbdanp6fLbDaXuk9YWFip7bt27aoGDRpUW621xbPPPmsNvBU9Xqsse/bs4YtDpTh//rwsFkuZYxMWFqZt27bp/Pnz1nXp6elq3bq12rVrV1NlurzU1FRdc801Nnd/KmvPnj3y8PBQixYtqqGy2qtdu3by8fGxeW88f/68tm3bVuZ7qSR1797drvffuuLixYuKjY3Vjz/+qDVr1lT5/ZD30tKdOHFCx48f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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(zz_distmat)\n", + "fig, ax = plt.subplots()\n", + "ax.step(range(len(clf.labels_)), clf.labels_, where='post')\n", + "ax.set_xlabel(\"Subnetwork\")\n", + "ax.set_ylabel(\"Cluster\")" + ] + }, + { + "cell_type": "code", + "execution_count": 342, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'Cluster')" + ] + }, + "execution_count": 342, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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LgAAAJzOppD73XfflVrn5uYmk8mkli1b2q1RAAAAQE3YFHL9/Pxqqx0AAACA3fAtMQAAABhOhU9yQ0JC5ObmZtMB3dzc9O2339aoUQAAAEBNVBhy+/XrZ3PIBQAAAJytwpCbnJzsqHYAAAAAdsOcXAAAABhOpSE3JydHvXv31ksvvVRhuZdeeklhYWH673//a7fGAQAAANVRachdsGCBfv31V02bNq3CctOmTdOpU6e0YMECuzUOAAAAqI5KQ+7nn3+uESNGVPrHHlq2bKm77rpLn376qd0aBwAAAFRHpSH38OHD6tatW5UO1rVrVx06dKjGjQIAAABqotKQ6+bmpuLi4iodrLi4mFeOAQAAwOkqDbl+fn7atWtXlQ72v//7v/zpXwAAADhdpSF36NChWrFihQ4ePFhhuYMHD2r58uW69dZb7dY4AAAAoDoqDblTp05VixYtNHz4cC1fvlyXLl2y2n7p0iUtX75cUVFRatmypR555JFaaywAAABQFRX+xTNJ8vT01Mcff6z77rtPDz30kB599FF17txZLVq0UGFhoX788UedP39e7du314cffihPT09HtBsAAAAoV6UhV5J69OihrKwsLVq0SBs3btT+/ft19uxZtWzZUiEhIbrttts0btw4tW7durbbCwAAAFSqSiFXklq1aqVp06ZV+kchAAAAAGerdE4uAAAA4GoIuQAAADAcQi4AAAAMx+khNyUlRSEhIfLx8VFkZKSysrLKLfvwww/LZDKV+unQoYOlTGZmZpllKnvPLwAAAIyjyl88qw0rV65UQkKCXn31VfXp00cpKSkaNWqUsrOz1bFjx1LlZ82apeeff95q3dChQxUREVGqbHZ2ttq0aWNZbteund3bDwAAgLrJqU9y582bpzFjxmjs2LEKCgpSUlKSfHx8lJqaWmb51q1by8fHx/Jz+PBh/fTTTxo7dmypsl5eXlZl3d3da7s7AAAAqCOcFnKLior07bffatCgQVbrBw0apB07dlTpGO+//76Cg4MVHh5eatuAAQMUFBSkqKgobdmyxS5tBgAAgGtw2nSFkydP6vLly/Ly8rJa7+Xlpby8vEr3P336tD755BM9++yzVut9fX01Z84c9erVS0VFRfroo48UHR2t9evXlzmt4Qqz2Vy9jlSDI+uSmjmpbvvU69ixcm2MVdXZPlaufR5Rr2O4Wnud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3X///erevbuWLFliCbnLly/Xl19+qbVr1+qmm26y7NuzZ0899NBDysjI0KBBgxQTE6P/+Z//kb+/v2JiYqza0rdvXy1fvlwlJSVyc3NTVlaWrr/+ep0/f15ZWVkKCwtTUVGRdu3apSlTplj2e+aZZ9SqVSt98cUXlqfdd911l/r06aN//vOfWrx4sVU9gYGBWrJkSbljcujQIUVFRclkMumTTz5Ru3btqjO0ACCJ6QoAUK7IyEh9+umnGjp0qP79739r7ty5iomJ0XXXXacPPvig2seNi4uzBFxJio2NVevWrbVx40arck2bNrUKpI0bN1avXr30008/WdatWrVKnTt3VnBwsE6ePGn56devn9zc3JSZmVlpeyIiIvTrr79aphlkZWUpIiJCffv2VVZWliRp9+7dOn/+vGWaQU5Ojvbs2aPY2Fir6RwBAQG67bbbtGnTJl2+fNmqngkTJpTbhgMHDmjYsGHy9vbWunXrCLgAaoyQCwAVCA8P17Jly3TkyBFlZmbqmWeekSQ98sgj+uqrr6p1zICAAKvlhg0bqlOnTjp69KjV+vbt26tBA+vLtMlkUkFBgWX5P//5j8xmswICAqx+rr/+epWUlCg/P7/S9lwJrllZWZYntv369VNERISys7NVXFys7du3y93dXeHh4ZJkmSsbGBhY6njXXXedzp07p5MnT1qt9/f3L7cNY8aMUZMmTfTJJ5/IZDJV2mYAqAzTFQCgCho1aqTu3bure/fu6t27t6Kjo5Wenq7IyMhy9ykuLq5Rne7u7mWuLykpsaqjS5cumjVrVpllqzKn1dfXV9dee62ysrLUvXt3nT9/XhERETp37pzOnDmjvXv3avv27erWrZtatmxZvc7ojyfT5YmKilJaWpqWLVum+Pj4atcBAFcQcgHARqGhoZL++Cd76Y+nq6dPn7YqU1RUZNn+V//5z380aNAgy/KlS5d05MgR9evXz+a2XHPNNfr2228VGRkpNze3CstWtL1v377atGmTQkJCFBgYKC8vL3l5eemqq67S1q1blZ2drTFjxljKd+zYUZJkNptLHctsNqt58+by9PSscj+ee+45NW3a1PKlvPvuu6/K+wJAWZiuAADl+Oqrr8p8GvvFF19I+r9/qr/mmmssc1eveO+990rNSb1i0aJFunDhgmV52bJlOn36tIYOHWpzG0eMGKG8vDy9++67pbZduHBBZ8+etSw3a9bMaqrDn/Xt21c5OTlKS0tTRESE1fr33ntPp0+ftlrv6+urG264QR9++KF+/fVXy/rDhw/r008/1d/+9rdyn0SX55VXXlFMTIymTZumVatW2bQvAPwVT3IBoBwJCQkqLCzUHXfcoaCgIBUXF+u7777TRx99pLZt21regfvAAw/o73//u+6//34NHDhQ33//vTZt2lThk8zhw4frrrvu0tGjR7Vw4UJ17drV8hYFW8TExGj16tWaPn26tm3bpj59+qikpEQ//vijVq1apffee0/9+/eX9McbF7766iu99dZb6tChg9q1a2eZbnElwJrNZk2fPt1y/IiICC1fvlySSr3b9sUXX9TIkSN1yy23aOzYsZZXiHl4eOgf//iHzX1xc3PTvHnzdO7cOT300ENq1qxZtYI/AEiEXAAo14svvqg1a9Zo8+bN+uCDD3ThwgX5+vpq1KhRevzxx9WpUydJ0tixY3XkyBEtWbJEmzZtUt++ffXJJ58oKiqqzOPOmjVLa9as0ezZs3XhwgXddttt+te//mX1jtyqatCggT744AMlJydr2bJl2rBhgzw8POTv768JEyaoW7dulrIzZ87UY489plmzZuncuXPq16+fJeRee+218vX1VU5OTqknuZIUFBRU6o0HN998s1atWqWZM2dq5syZatiwofr27avnnnuu1Dtyq8rd3V3vvvuuxowZo7Fjx+qjjz6qcN4zAJTHraCgoKTyYgAAAIDrYE4uAAAADIeQCwAAAMMh5AIAAMBwCLkAAAAwHEIuAAAADIeQCwAAAMMh5AIAAMBwCLkAAAAwHEIuAAAADOf/A3CD7hr1ANK6AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(wrcf_distmat)\n", + "fig, ax = plt.subplots()\n", + "ax.step(range(len(clf.labels_)), clf.labels_, where='post')\n", + "ax.set_xlabel(\"Subnetwork\")\n", + "ax.set_ylabel(\"Cluster\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## SocioPatterns" + ] + }, + { + "cell_type": "code", + "execution_count": 355, + "metadata": {}, + "outputs": [], + "source": [ + "zz_dgms = dill.load(open(\"sociopatterns/zz_dgms.dill\", \"rb\"))\n", + "wrcf_dgms = dill.load(open(\"sociopatterns/wrcf_dgms.dill\", \"rb\"))\n", + "zz_gram1 = dill.load(open(\"sociopatterns/zz_gram1.dill\", \"rb\"))\n", + "wrcf_gram1 = dill.load(open(\"sociopatterns/wrcf_gram1.dill\", \"rb\"))\n", + "zz_distmat = dill.load(open(\"sociopatterns/zz_distmat.dill\", \"rb\"))\n", + "wrcf_distmat = dill.load(open(\"sociopatterns/wrcf_distmat.dill\", \"rb\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 346, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 346, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAFuCAYAAACcMJPpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xt8VPWdP/7XmZlMEnIlJBlISIJAEEIRFBa39AdVUairglR31aX9Fi91i7Zqd3ExCtUqFRC+WLdFfi7Wy2rXSwGr0q14AxW5aLvgBaqmIPcQQsgkmZDbzJzvHzQzZzJn3u8BIslpX8/Hw4dzPp+Zcz7zmTNvJud8Pp+34ff7TRARkWO5eroBRER0ehjIiYgcjoGciMjhGMiJiByOgZyIyOEYyImIHI6BnIjI4Xo0kD/++OM455xz4PP58M1vfhObNm3qyebEWbhwIXJzc2P+GzZsWE83C++//z6uvfZajBgxArm5ufj1r38dU2+aJhYuXIjhw4ejf//+uOyyy/CnP/2p17Vz9uzZcf178cUXn9E2Llu2DBdeeCFKSkowZMgQXHPNNdi5c2fMc3pDfybTzt7QnytXrsSECRNQUlKCkpISXHLJJVi3bl2kvjf0ZTLt7A19eTJ6LJCvWbMGd911F/7t3/4N7777LsaPH49//Md/xP79+3uqSbbKy8vx+eefR/7rDf/YNDc3o6KiAosWLUJ6enpc/SOPPILly5dj8eLFePvtt1FQUIAZM2agqampV7UTAC644IKY/v3Nb35zRtu4ceNG3HjjjVi3bh1eeeUVeDweXHnllaivr488pzf0ZzLtBHq+P4uKivDTn/4U77zzDtavX49JkyZh5syZ+PTTTwH0jr5Mpp1Az/flyTB6ambn5MmTMXLkSPzHf/xHpOy8887D9OnTce+99/ZEk+IsXLgQr7zyCjZv3tzTTUmouLgYDz30EGbOnAngxC+e4cOH4/vf/z7mzJkDAGhpaUF5eTkeeOABXH/99b2incCJXz3Hjh3DCy+80CNtshMIBFBaWopf//rXuPTSS3ttf3ZtJ9A7+xMABg0ahHvvvRezZs3qlX3ZtZ3XX399r+3LRHrkF3l7ezu2b9+Oiy66KKb8oosuwtatW3uiSQnt2bMHw4cPxznnnIMbbrgBe/bs6ekmifbu3YuampqYvk1PT8eECRN6Xd8CwObNmzF06FCMHTsWt912G2pra3u0PYFAAOFwGLm5uQB6b392bWen3tSfoVAIq1evRnNzM8aPH99r+7JrOzv1pr7UeHrioHV1dQiFQigoKIgpLygowJEjR3qiSbbGjRuHRx99FOXl5Th69CiWLFmCKVOmYMuWLcjLy+vp5tmqqakBANu+ra6u7okmJXTxxRfjiiuuQFlZGfbt24cFCxZg2rRp2LBhA1JTU3ukTXfddRdGjRoV+UL31v7s2k6g9/Tnjh07MGXKFLS2tiIjIwPPPvssRo4cGQnWvaUvE7UT6D19maweCeROcckll8Rsjxs3DmPGjMF///d/44c//GEPteqvx1VXXRV5PHLkSIwZMwajRo3CunXrMG3atDPenrvvvhtbtmzBa6+9BrfbfcaPn6xE7ewt/VleXo733nsPjY2NePnllzF79mysXbv2jB0/WYnaWVFR0Wv6Mlk9cmmlX79+cLvdcX+q1NbWorCwsCealJTMzEwMHz4cu3fv7ummJOTz+QDAcX0LAAMGDEBRUVGP9G9lZSVWr16NV155BYMGDYqU97b+TNROOz3Vn16vF4MHD8aYMWNw7733YtSoUXj00Ud7XV8maqednjw3k9Ejgdzr9WLMmDFYv359TPn69etx/vnn90STktLa2oqqqqrICdkblZWVwefzxfRta2srNm/e3Kv7Fjhxya26uvqM9+/cuXMjwbHr8NLe1J9SO+30VH92FQ6H0d7e3qv60k5nO+30lr5MxH3XXXfd1xMHzsrKwsKFC9G/f3+kpaVhyZIl2LRpE375y18iJyenJ5oUZ968efB6vQiHw/jzn/+MO++8E7t378bDDz/co20MBAL47LPPUFNTg2eeeQYVFRXIzs5Ge3s7cnJyEAqF8POf/xxDhgxBKBTCPffcg5qaGvz85z8/o9f3pHa63W7cf//9yMzMRDAYxCeffIIf/ehHCIVCWLJkyRlr55w5c/D888/jqaeewsCBA9Hc3Izm5mYAJ35wGIbRK/pTa2cgEOgV/XnfffdFvjMHDx7EihUr8OKLL+K+++6L9F9P96XWTp/P1yv68mT02PBD4MSEoEceeQQ1NTUYMWIEHnzwQXzjG9/oqebEueGGG7Bp0ybU1dUhPz8f48aNwz333IPhw4f3aLvee+89XHHFFXHl1113HVasWAHTNLFo0SI89dRT8Pv9GDt2LJYuXYqKiope085ly5Zh5syZ+Pjjj9HQ0ACfz4eJEyfinnvuwcCBA89YG7uO+ug0d+5cVFZWAkCv6E+tnS0tLb2iP2fPno333nsPR44cQXZ2NkaOHInbbrsNkydPBtA7+lJrZ2/py5PRo4GciIhOH9daISJyOAZyIiKHYyAnInI4BnIiIodjICcicrhuDeS9fX1xIqK/Rt0WyJ2yvjgR0V+bbhtHfrLri1/d96bI44UfzEXl+MUAAHffvuqxOr42SH6C8s+TaRjqMVI/PxSz/cDL38P86U9HtsM+ffVDV0OzWN9SXiDWNw1MUY+R/0FsYoGfPTEd99zwcmTb6AjKOzjWoB6jo0KeBHHcp890y3nj85jtBetuxryp/xnZDpXLxwin6uu7pRyRkxMYDXJ9+9lFcWWLl0zB3Dtfj2y7G+2ncEeOEQqJ9QAQTpM/V3egTazvKMiIK+vaTu+eo+I+2gbL5573iHzuAkAwO02sD6fGLzz20EOX4N///Y3Idkp9i7gP0yt/7q76gFgPAOHc+P6K2ceug3Fl1vOz7dzB6jE8xzvE+gmP/UHdx9pHvpmw7u3/e6P42m75Re6k9cWJiP7adMsv8urqaowYMQK/+93vYqbYL168GL/5zW/whz/E/2tUVVV1uoclIvqbUF5eLtb32HrknZdSAF5aSYSXVqJ4aSWKl1ai/nYurciBvFsurTh1fXEior8G3RLInbq+OBHRX4Nuu7Ry66234l/+5V8wduxYnH/++XjiiSdw+PDhhJmxu15C6dwO1dfbPT2GESwV69v6yX/qpx/U/2w0s+L/HLOWBXP0ywneeuVP/ZB8e8KlXBUBADMt/iO0K0t4jFSv+pz2LOVSQHtY3YeRnSmWaZdOOrL09+RqSxfrPW3yZZGODPtjWMu1y3JGUO8LM0X+/WS6lXqXfRus5WYf+bJHe47cnyl1+uXHjmz5vDA99vsIZkQvuaQoX/eObPn8TAn3kXcAAKb8PTNys8VyV0j/TDsy5b4IhPR4kXL81G9Xdlsg//a3v41jx45hyZIlkfXFX3zxRZSWykGXiIhOT7fe7Lzppptw00036U8kIqJuw7VWiIgcjoGciMjhGMiJiByOgZyIyOEYyImIHI6BnIjI4XpsrZWu66V0bmuTfQDA2PyRWN/4wwlifeYOfX2GptG+uLJARb/I45a+8etIdJXtkZcnSPusWqxv7af3Rf2ILLEszS+v/ZF6TJ44AgCNg+TTxN2qT2TwnB3fny2Wsoaz5AkV4RR9gkp6tvyZZCoTbfxD7dtgLfc0K30hzzkCAHTIS38gtVHuz9Zc+/dRNyL6WfbJl/uzeYDcV8HUXLEeANpy5c8klGpf7x8SbVtbTo64j44M+RjeRn09IiinTqrfflLR8bNPfH8bS/UwaSo/id86MEzdR8FufaJiIvxFTkTkcAzkREQOx0BORORwDORERA7HQE5E5HAM5EREDsdATkTkcD02jjzun5C/bGtJIQB9nHjhLzeJ9Qd+LL8eAIreOBZXlvHnxsjjzOoj6j5axsm5/g780yD59T59fPbQxw/HFvwI6Lc5WtYxQB4PHEzXx8MXPrpVrD8wV88Clb+9Na7Meyxa1n/Hobh6q1CN3t/uAf3F+rYh8rj+Ab+ymZ/wnYkx5YZXScThSeIrFZQzhhhp8ncgXGiT13YW0P99S5YGJZlC5mo5+blx7nCxHgCMHbvkJ7hsfid+ZyIGPL49shkarSQV3vGl3Ia8JMa7n5UvH8NvnyM1teb4if/nxM/V6Crn1Y/F+lfmv6fuY/h1t6rPSYS/yImIHI6BnIjI4RjIiYgcjoGciMjhGMiJiByOgZyIyOEYyImIHK7HxpGbhmG7nX5QX5NXW09cGyfe/2F5nDkABGbEj40OlEfXTm75us1Y3i5yq+zHp3Ya8G6DWF9fka0eo358/Drf1jJvY1h8vbepQz3G4dvlceJ5n8trngNAa0G6WBYYXSa+viNzkHqMtHpl7PRBebHwQzeNVss9LfIxDL0rYCrfOnf8kPsuB7Evrjs3Oqba2yR/7g1T5M80d5f+RgJfP0+sDyeYonDo+2Mij7P3yccJnPs1sT61QX6fAOBtlp/TkWH/gbQUn1g43gjr8zkOzxoj1l+yQ57DAADl/9WUuHKW/Fr+IicicjgGciIih2MgJyJyOAZyIiKHYyAnInI4BnIiIodjICcicjgGciIih+uWCUELFy7E4sWLY8oKCwvxxRdfJHxN6ueHbLfNrAz1eE2j4yfBWNklhbCym+zTVZ+XuiRTqLwgpix7YLG6DzNdThDgP0+eJNCenWDmh0XRmi4L79/xTeSt3xNtQ0b8RJwYhn6M4qPHxfq68/LUfeRv3htXlrF9f/Txn+SEDWafNPUYqK2X63MyxeriwzZtmAkUv1kX2TQCcl+gXZ9gBSVxBFrkGUFmP/tkCvkfRs97c1d8f1tlnX2WWO+qaxTrASDrU+V9eFPiy7r2Z3OLuIvsj+TfmuYx5TMHgAHy98xotJ+EmLntAACgo7RAPUTONrm/bv7xm+o+fnLh/1Gfk0i3zewsLy/H2rVrI9tut555hoiITl+3BXKPxwOfT/6lTERE3a/brpHv2bMHw4cPxznnnIMbbrgBe/bs6a5dExGRwPD7/fqKMIo33ngDgUAA5eXlOHr0KJYsWYKqqips2bIFeXn210+rquTkr0REdEJ5uZykulsCeVeBQABjxozBHXfcgR/+8Ie2z7m2Yl7k8QMvfw/zpz8NILmbnYGKfmK9Ndu97estqxgm0vVm58IP5qJyfPSGrucM3Oxsydf/YCpasztm29qXQPfc7LS9aWWR1M3ON2NvynZtJ1J7/manXRsWPHkl5l3/28h2b73Z2bWd2s1OdMPNTu38tjtv4vpTudkJV8/c7Hzgpe9i/oxnACR3s9NTq9zs/P0b6j5+siLxzc73598gvvYrGX6YmZmJ4cOHY/fu3fqTiYjotHwlgby1tRVVVVW8+UlEdAZ0y6iVefPm4Vvf+hYGDhwYuUZ+/PhxXHfddQlfE/bl2W4Hc5Q/1wC09JWHNmZWH5Ffn0RSCLtx4tbLKcEDB9V9mF+3T1TQqS1HvqzRZj9cOPYYwfiF+a1lZoZ8ScL06qeA688HxPq2i+RLXSfaEX+JJ6bMr/wp75eTcAAAUuVzJ5zTR6x37Utw3hyJjs8Oae1w6ZeqDK98GclwK7+vOoJquasgX9yFeeiofIwkLnGaBw+L9UZGgn1Y+tMskL+L5l75e2ak6OdvuI/c3y6b7xAQvZzXniu/HgDcH8sxZ5RX7isAaMs79avc3RLIDx06hJtuugl1dXXIz8/HuHHj8MYbb6C0tLQ7dk9ERIJuCeRPPPFEd+yGiIhOAddaISJyOAZyIiKHYyAnInI4BnIiIodjICcicjgGciIih+u2ZWxPlquh2XbbW9+kvjbbo6xRMm6wWJ9b1aYew24dCWuZNtkHAIzNH4n1aSV/L9Z3ZCWxDkqhzTonljLjoDxRIYkjoGX8ELG+3069P422+DVIrGXBwUXi6zuy9UkZqUeVdTsUraPt5z1Yyz3HE0zG+QsjGFaPE/LKE9pcyj7MBOvjBPtF15LxHJUnlxz/2gCxPuMz+bwBgI7xw8X6sMe+ndb+TNsjJ4EJjhsm1qcoSU8AwH0sINabiSYV/aWf02r180pr51vHvxTrASB7l/qUhPiLnIjI4RjIiYgcjoGciMjhGMiJiByOgZyIyOEYyImIHI6BnIjI4XpsHHlLeYHtthHSF1dP+6xarD/wT4PE+gHv6kkK7PJpWsu0pBCAPk4888UtYn3KpX+nHqPmG/HjyK1lnlY5n2Z6nTwuGgDqh8k5O8PysGgAQN/M+HHiTedFyxrL5FPRTOIY6bVyO7P2y+Pdj462T0xhLfc0y+PZ3e1iNQAg2Ec+d1Ka5O9Aa7796w9PiCZy6HNYztV63Cf/hgsUyeP6Af19hBN0lbU/Uwb3F/ehfe4pAT2Xa1BJW5tZbZ9YovnsEwlT6suTSL6ipGp9+NPJ6j7Ktut5UhMe/5RfSUREvQIDORGRwzGQExE5HAM5EZHDMZATETkcAzkRkcMxkBMROVyPjSNvGphiu+3ShzWjtZ/9utGdWnzyONz6imz1GO3Z8WNkW/Kj/+615aq7UNcT18aJp/7+Q/UYtXdPiCuzjjM2leHubbny2GsAaCmU+zOYoa/B7Tkef6o1FUfL2nPk14dS9fkF4RTtd4n9OPFIGxKcFtbyYJrcoYbeTPUz6ciQnxBKMC66Iyv6uK1F7gvtOxJK1edJhLQh3Ak6oz0nWh5OUd6rcgxtjDgABDPketNlP1i9qfhEeYceLlQD8/zqc/wji095//xFTkTkcAzkREQOx0BORORwDORERA7HQE5E5HAM5EREDsdATkTkcAzkREQOl9SEoPfffx+/+MUv8NFHH6G6uhrLly/HzJkzI/WmaWLRokV4+umn4ff7MXbsWCxduhQjRoxIuM/8D+qjGz+IbptpepPqR2SJ9UMfPyy/frxPPUbRmi9jC743EUVrdkc2zaD9YvQxCuWkDnZJIazsJvt0NfDBTbEFV06MKfOcVSa+PpzdRz2Gq6lFrK+dNEDdR/6mmtiCWcCANy1l9fKi+kZGEjM/DHlySbBAntnRb1NTfOGlwJCnD0U2zUab51ibkKJPsFKlyROX0G6TxeAfJmLwyj3R7bA8ScvMUmbJ1B6T6wEYfZTPJNUms8S3gCFPWRLDtLSe/D4szGb53AQAI1M+x810m/6+Aej/bh0AIJirn3spe2vF+oWz1qj7uLbsX9XnJJLUL/Lm5mZUVFRg0aJFSE+Pf1OPPPIIli9fjsWLF+Ptt99GQUEBZsyYgaYm+aQnIqLTl1QgnzJlCn7yk59g+vTpcLliX2KaJlasWIE77rgD06dPR0VFBVasWIFAIIBVq1Z9JY0mIqKo075GvnfvXtTU1OCiiy6KlKWnp2PChAnYunXr6e6eiIgUht/vT2KZn6ji4mI89NBDkWvkW7duxdSpU/HJJ5+gpKQk8rxbb70V1dXVWLPG/tpQVVXVaTSbiOhvR3l5uVjfY6sf3nPDy5HHP3tiemS7O2529tt8+jc789bvidl+4OXvYf70pyPbZ+JmZ6Js6VZdb3Yu/GAuKscvjmz3npudR2K2Fzx7NeZ9x3LprRfc7PQcjb+n88Dz12D+tS9Etnvrzc4HXvou5s94JlrQS292du3P3nqzc8FTMzBv1ksAuulm5/tJ3Oxcmfhm59Y5ciA/7UsrPt+JoFhbG/tGamtrUVhYeLq7JyIixWkH8rKyMvh8Pqxfvz5S1trais2bN+P8888/3d0TEZEiqUsrgUAAu3efGEMdDodx4MABfPzxx+jbty9KSkowe/ZsLFu2DOXl5Rg6dCiWLl2KjIwMXH311Qn3aXQExW1Jml++rNExQM764G3UEyGYNn/KW8vMDG1VfcA4eESs97TKl1a0BASA/aUTa1nwy73y68tKxHoAaC/NF+v7HNE/O8PmUpS1LDRQ/ustlKFfsvA0yn+mm275d0t7SV+13NOg/JluJpEAI1X+2hlhZR8JjhHqH22nq0nui/ZiOZOHt0EfOhwskc+LcKp9wgZrf3p3yd+RYKHcTne9HsLM+ga5PsFlO/MvI/TcjW3qMYLF/cT6PR3ydx0AUvXcEwklFci3bduGK664IrK9cOFCLFy4ENdddx1WrFiB22+/HS0tLbjzzjsjE4LWrFmDrCz5WjYREZ2+pAL5xIkT4fcn/ufCMAxUVlaisrKy2xpGRETJ4VorREQOx0BORORwDORERA7HQE5E5HAM5EREDtdjU/RxrMF226VMyQWA1GPyGO5guv341U7eJpv1nLuym+5tKTO9etdpw8DT6+Tx1225+thpuyn21jJtnHhw7379GEPlMd6GPizfdmq7tSxUJI/9D3vlz/TEk+Rqj/+4WN9abD+FP5QS/b3jUpaQMDr0pRu09+Julc+Ljlz7899anqqMIw95ld9w/eTPAwDCKfL7CCUYR24tD/eTl00wPUo7Pfp5YRbL56/rmP2YeVdDAADQNkSfoW6E5LH/244PUvfhbTqpZa9i8Bc5EZHDMZATETkcAzkRkcMxkBMRORwDORGRwzGQExE5HAM5EZHDMZATETlcj00I6qgYaLvdnqVPgmkcJDe78NGtYv3h2/XMRcVHbSaPeKNtc/35gLqPlvFDxPr6YfJ7bSnUJwjY5dO0lmlJIbTJPgDgeeuPYv2BygnqPkqOxuf1DA+Klnl3yXlWQ7VH1WO4BvQX67WJHambP7MpvTim3PAqE9Y8+lfK1dEu1hvpco5Io8M+AYbXcs6aXvncSn1ru1gfHnW2WA8A7g92ivUet91knclI3Rh9XWi0nIvS/clusd7oZ98XVu0+OS9CSoJcr52TlVoK9UmK2Ws/Fuvvyv9I3cd/nTtJfU4i/EVORORwDORERA7HQE5E5HAM5EREDsdATkTkcAzkREQOx0BORORwPTaO/Lgv1Xbb3a5nKXC3yuOrD8yVx4nnfa4v/l93Xp5Y1nZRP3Uf/Xa2ifVhZU38YIbeF7WT4sdnW8v6HJGTFCSTFEIbJz5w4SZ1H03/9PfxZYMzI49bx8pjfdtyB6vHSPXL54X2XtvGjbYtPzA7Wu6Wh4Anl2TjNH8+pR2zP0j9qBzLQeR9NF45XqzP+0z/jjRMHqs+x86BW8ZEHvetks9P//dHifXeBn2uRdYBOZFMk7XfLI79pTyjRk9Ec/AHY8T6VYHP1X1kV536icFf5EREDsdATkTkcAzkREQOx0BORORwDORERA7HQE5E5HAM5EREDsdATkTkcElNCHr//ffxi1/8Ah999BGqq6uxfPlyzJw5M1I/e/ZsPPfcczGvGTduHN58882E+8x5wzJAfs43I9tGdmaCV1gafbZPrM/f3irWtxbIC/cDQP7mvbEFP5qE/De/jGyaGfo+jDZ5IkHfzCKx3nNc/3jyN9XEFtwC5G86Em1DUJ7YYTY2qcewSwphZTfZp6vMF7fEFsz5ZkxZ9pgK8fWm237xfyt3jV95gvy7JVSYG1/4T0DxO9E+cjXYJByx0PobAMJ90uR9tMoTyTr6209gydoTPe+9Xx6xfU6nnF1ywhF3XUCsB4Csz+SEC2a6TXKLrv3ZLL/XzCq5DcaxBvkJAMKFcvKJtE0H4wt/NAl5v/0UABA8b6h6jOLXj4n1TTfJn/npSiqQNzc3o6KiAtdddx1+8IMf2D7nggsuwGOPPRbZ9mqZVIiIqFskFcinTJmCKVOmAABuueUW2+ekpqbC55N/KRMRUffrtmvkmzdvxtChQzF27FjcdtttqK2t7a5dExGRwPD7lZWGuiguLsZDDz0Uc4189erVSE9PR1lZGfbt24cFCxYgHA5jw4YNSE1Ntd1PVZVy8YuIiAAA5eVykupuWf3wqquuijweOXIkxowZg1GjRmHdunWYNm2a7WvmTf3PyOMF626ObCdzs7NFudnpPXb6Nzsztu+P2X7g5e9h/vSnI9vdcbOz6Tz5ZmdTsf7xDHgz9mbngmevxrzvrIq2oRtudlqz3duxrmKYSNebnQs/mIvK8Ysj265eerPzweX/gLtv/Z/Idm+92bl42VTM/dd1kW3tZmew5PRvdpqpJ3+zM64/lZudmu642Ykv4292/uytW3DP5EcBJHez01PXItZPf/E9dR+P/XJ6wrp3fyYH8q9k+OGAAQNQVFSE3bt3fxW7JyIii68kkNfV1aG6upo3P4mIzoCkLq0EAoHIr+twOIwDBw7g448/Rt++fdG3b18sWrQI06ZNg8/nw759+3D//fejoKAAl19+ecJ9hsoH2m6HU/UmNZxlMz7Vov+OQ/L7GV2mHiPjTzZ/Nlr/lPQ3qvsIDpYvnTSWye+13X64cKx6m3ZYykIDC8WXh4psxk534d11WKzXkkIA9uPErZdTwtt3iq93++T3AQBmbrZY31EotzPlC5vxxABc+yyXr9qVJAN9krjkdlQec2zkyZ9JSpX9+R1TnmZ/b6qTp7perIcrid94x+TLN4bLPnOKa0/0fDKyMuRjdMiJJ5Aix4JkmENLxfKwckkOAIwD1WL91VlfqPt4uPikblfGSOoX+bZt2zBp0iRMmjQJLS0tWLhwISZNmoQHH3wQbrcbO3fuxD//8z9j3LhxmD17NoYOHYrXX38dWVn6F5yIiE5PUr/IJ06cCL8/8Y2kNWvWdFuDiIjo5HCtFSIih2MgJyJyOAZyIiKHYyAnInI4BnIiIofrlin6p6LrePHO7Y4svUnhFHm6dqhGHt/akTlIPYZpM406psyvTw3uyFamMNsPs40IperjSg2bpQKsZaEMeZxt2Ks0AkCo9qhY35Y7WN2H3RR7a5k2Tlz7TAHAky5Pfdem+YcTfKbWcleCtYMix9DGmQMwTflzNdra5dcX5OnlIWVphi/3i/U4+yy5HoB5SJ5fgLD9+4zp50H9xV24qvaJ9UaOPHcAAII58th+T6P9kh5GOAwAaMvTY1JKi7wsSJZLX9Y7lPYVjyMnIqLei4GciMjhGMiJiByOgZyIyOEYyImIHI6BnIjI4RjIiYgcjoGciMjhemxCUMqRJtttV5u+MH96tjyJxT1AnmSQVp/EwPtam4X3rWXKxBAASD0q5/FLr1Um66Qk8e+sYTPJxVKWaLJD9CD6IVxKf6Ymkb/bLp+mtUxLCqFN9gGA4B558ojXqyRrn3YCAAAf80lEQVQhKC22LXZZyo2AnLPTbJE/cwBw5dtP6InsQ8mjGs60n1xiLffsqbF9TiejQM7ZabYrCR0AuLR9pNt/R1yDokllTCWvLdzyd92s1yfmuXxyog7XEfskG53lKf2V5BcA3IUFYv1H8hwvAIDXf+q/q/mLnIjI4RjIiYgcjoGciMjhGMiJiByOgZyIyOEYyImIHI6BnIjI4XpsHLnR0GS77VEW1QeATLf870/bEDlJQebBJAZ15mSKZeGcPvo+FFn725Rn6GPVgwXx46+tZabSVx6/PC4a0PvTSGIsOuzaYSnrKMwSX64lhQD0ceKhL3aJ9cHJY23L20r7Rh57muQxxa5WPbFEMEseE+9JMP66U3uufb213N1XHpff7pP7292qjyM38+S+CKXZjwG39qerTU6A4UqzH9vfyd2kzJMAEEww7r6TJ1Gij7+UBzP05CvtZfKY+t83jlb30ecQE0sQEf3NYiAnInI4BnIiIodjICcicjgGciIih2MgJyJyOAZyIiKH67Fx5O1nF9lud2ToTfIPlccLD/jVR2L9oZv0MZ3Fh23GnqZGy1z7jqj7aB1dKtYfHa2MF5aHAgMA+m2KX7vaczRa1l7SN67eqrVYP0jq5s/E+rZxen+GCuPXhLaWpXxxUHx92K+vO51oPfFOicaJd/K89Ueb0otjyt395LXEjTR93XTs2i/vI0/+zNL32o83Tt9rWfM9JA/u926Xx9SHzxoo1gOAe9cesd7VYjfG+2KkvPtJdHP0MHkf++XvmdFHz1/gUvoiVGw/BjxSnsTwbs9Hcn/Oy/9U3cd/jZykHygB9Rf5smXLcOGFF6KkpARDhgzBNddcg507d8Y8xzRNLFy4EMOHD0f//v1x2WWX4U9/+tMpN4qIiJKnBvKNGzfixhtvxLp16/DKK6/A4/HgyiuvRH19NKvGI488guXLl2Px4sV4++23UVBQgBkzZqCpSc50QkREp0+9jrFmzZqY7cceewylpaXYsmULLr30UpimiRUrVuCOO+7A9OnTAQArVqxAeXk5Vq1aheuvv/6raTkREQE4hZudgUAA4XAYubknrm/u3bsXNTU1uOiiiyLPSU9Px4QJE7B169buaykREdky/P4kMudazJo1C7t27cKGDRvgdruxdetWTJ06FZ988glKSkoiz7v11ltRXV0d94u+U1VV1em1nIjob0R5eblYf1KjVu6++25s2bIFr732GtxKdmvN3DtfjzxevGRKZLvXjFp5sy5me8GTV2Le9b+NFhw5pu7jTIxaGfL0oZjtB56/BvOvfSG6D2XUSihF/6NMG7VyYHYS/flO7P2SB5f/A+6+9X8i2659ctb3ZEatuJRRK9ZV9+zYjVpZ+MFcVI5fHNnujlEr2ntxKaNWzMz4kRoLnv425n3P8qNJGamBI0fF6mRGrbiU0Tdhm1ErD77/Y9z9jYejBWdg1Ep7qfyZuQPxq6E+uOJy3D17LQCgudRmJdQuMt/cKdav/ewddR/DXrglYd12JZAnfWmlsrISq1evxiuvvIJBgwZFyn0+HwCgtrY25vm1tbUoLJSXPyUiotOXVCCfO3duJIgPGxb7L2hZWRl8Ph/Wr18fKWttbcXmzZtx/vnnd29riYgojnodY86cOXjhhRfw7LPPIjc3FzU1J/4EzsjIQGZmJgzDwOzZs7Fs2TKUl5dj6NChWLp0KTIyMnD11Vcn3K+7sd122zT0BAKeZrnZhldZSL5Fvy1gBOITLljLQkn8qe85Li/O72mW2xlM0/vCbIwf4mkt8zTICTBcafqlLK0/3Unk6XA1xPdnTFm7nJDBlaon2bD7zKy0pBCJLptYy0N18iU1V4Z8DACRhAUJq48ryT5SE1xa7Iieb0ab3J9mivyZupr0hCNmu/zBuzLt+yKm/Lhy8rTJyVdM5bwBAHeefGnElSA5RWe5uzWJJDIdcjsOhvT+9LTo3/eEr9We8PjjjwNAZGhhp7lz56KyshIAcPvtt6OlpQV33nkn/H4/xo4dizVr1iArS85CQkREp08N5H6/X3sKDMNAZWVlJLATEdGZw0WziIgcjoGciMjhGMiJiByOgZyIyOEYyImIHK7HEksYoZDtthFUphYjiXHLHmWceUisPsFufKq1zKWP+dTei/Y+jCRWwTFS4scUW8tMZcyy0ZFEZ2j9qX9kMILxx4kpU6ZaJzNe2GxpEetdrfI+Ek2vt5Zr48TDzc1iPQC48/uJ9aZtQgZLe1ITjAG3lrcqJ1cS569Gm19gpNmP/beWa/NGtM/dUM7NE0+Sj2F02M/36CxP6nuYLp+/zWH9N3NScSkB/iInInI4BnIiIodjICcicjgGciIih2MgJyJyOAZyIiKHYyAnInI4BnIiIofrsQlB4bQU220ziRySHdra/UE5oYOZzLu2m8xgKdMmQwBAyCvnNQ32USZDnP6cDYRT5TcbVtoIAK4OeXKJmcTPgXCf+Mk21jLjqJywQZvYBACufDk3YzBLyaeZIAdlTI5NpR3aZB8ACB2tE+vdPjlFotFin2whptytfChtSn+m6F8SLbFEos8sHIhOmjLycsR9aDk57SbExbVDmfwUzrA/Rmd5Uue3kgykn1s/f8P6W0mIv8iJiByOgZyIyOEYyImIHI6BnIjI4RjIiYgcjoGciMjhGMiJiByux8aRuwNtttumNv4VQGqjkiwhwYL2kWPJ6/afYLe4v6XMSKKdLiWxREqT/D46MpIYSK6Ndw8r455b5TH3gL5ofjKM1vixz9YyIy9Xfn2blk0EMBubxHpPunxeGHl9bctdlnJTGS+sJYUA9HHioZojYr1x7kj71+VEJ1i4a/3yPhIlp/gLLeEDABiZ8oSOROeNKzc6djycIs9jMJTEEsnML9BiiqvJPhlItDxLPYYrO1us3x/UB4m7W0994gh/kRMRORwDORGRwzGQExE5HAM5EZHDMZATETkcAzkRkcMxkBMROVyPjSPvKMiw3dbWDgaA1lz5359wof144Igkhmua/eLHNceUdejjr7WxuK35cn0omeHbduNsrWXKONuOXGWNbgBGh9yfacfk8fIA0NE/ft1pa1lK1SHx9WaBvNY4AIQz5bHR7bnyOPL0vfZ9ZWZaPohUeTywNj4bSLyeeKQ+wTjxSHu27bApvTym3KwYJu4jnC6/D3edPCYfAMx+8nmR6MwzLevQu442JHjWCeHBA8V6oyMk1gOApy4g1rcPyhfL0w/KrwcA9JXHkQ9N0dsZ9uhj4hNRf5EvW7YMF154IUpKSjBkyBBcc8012LlzZ8xzZs+ejdzc3Jj/Lr744lNuFBERJU/9Rb5x40bceOONOO+882CaJh588EFceeWV2Lp1K/r2jf6LfMEFF+Cxxx6LbHuTyKBDRESnTw3ka9asidl+7LHHUFpaii1btuDSSy+NlKempsLn83V/C4mISGT4/f6TujBz+PBhDB8+HL///e/x9a9/HcCJSyu/+93v4PV6kZOTg2984xuYP38+CgoKEu6nqqrq9FpORPQ3ory8XKw/6UA+a9Ys7Nq1Cxs2bIDbfWLBm9WrVyM9PR1lZWXYt28fFixYgHA4jA0bNiA11f4G07evXB55vHjJFMy983UAyd3srBsh36Dr/369/Ppz5QWaACD/w9hkwAuevBLzrv9ttCCJm53Bfpli/eEJ8qJDHfpaPRi8ck/M9gMvfRfzZzwT2Q71l29IJXOz03tUXiiqfpScQBcAsvbELia1eNlUzP3XdZHt3nGzM36hqQVPfxvzvmf5q1T73LvhZqd18Ss7djc7F34wF5XjF0e23WfiZmcS77WrBc9chXnfXR3ZNppbxOeH85XkzEnc7NQ+s44B8TcqrTHJ49cXQjNa5EXdnnv7WXUf45/814R1f/jhjeJrT2rUyt13340tW7bgtddeiwRxALjqqqsij0eOHIkxY8Zg1KhRWLduHaZNm3YyhyAiopOUdCCvrKzEmjVr8Oqrr2LQoEHicwcMGICioiLs3r37dNtHRESKpAL53Llz8dJLL+HVV1/FsGHyn2wAUFdXh+rqat78JCI6A9RAPmfOHLzwwgt49tlnkZubi5qaGgBARkYGMjMzEQgEsGjRIkybNg0+nw/79u3D/fffj4KCAlx++eUJ9+vdc9R22zpZIJE++coi7cokGG+TPoHF3LVXLHMV2E8isPIcldvR57A846etJYmJt2Gb92IpczXJ1/dSlXoAML1af6u7gPfL+GQJMWVKMhCEkpj4sadGrHcrkzYQSnBeWMqNNjnRAVr1BBhQEh1oSSESTfaxXhcP7fxC3IdrTIVYr32HknpOovdpvQ+m9IURkK+h4+gxuR4AiuQflN5d9ok8OsuDA/uph3A3y9+jra3KuQfA23DqiSXUQP74448DAKZPnx5TPnfuXFRWVsLtdmPnzp14/vnn0dDQAJ/Ph4kTJ+LJJ59EVlYSd+uIiOi0qIHc75d/HaSnp8eNNSciojOHi2YRETkcAzkRkcMxkBMRORwDORGRwzGQExE5XI8llmgbXGC73Z6jN6l5gFusz1wtL8jVMOV89RhZZ58VX2gpMw8dja/v4vjXBsj1Pvnf0RafPpbXzIpfl8Na1l4sr1UR8ur/lqe+tV2sb7xyvLqPnF3x4+6DJdEyT7W8Po755X71GIYytr/dJw+H9W7fZV9xJPpZmynK+iJJrBWENvlz1ZJTJFonxVqujRMPb98p1pt/N0qsBwBjpzJz22V/bpkHDkced4weIu4i5dMv5WPk62vwtBYpn3sf+/7uXKeo8aw+6jH67twj1k/po8w/ANBcmsS6MQnwFzkRkcMxkBMRORwDORGRwzGQExE5HAM5EZHDMZATETkcAzkRkcP12Dhy75Fm2+2UOn0cbjBVzrlpnDtcrM/dpY/XdNU1ymU247e7yvjMfp3jToGiIrE+lJrEmORam/WYLWXeBiX3Yj89f2l41Nlifd5nen+66wJyWYIxxxF24/q7MNvl3IzuVrk+fNZAtdzVJOcvTUqK/LUzDflzT5RPM6ZcWStcGydufviJWA8ArpHyeRH22r9Pc2hp5LFnm5KEfZD9Z9LJaGwW6wEgbZs8Ft0sLrTf91/Op74fy3McAADF8prn77fqORAy98rzYyT8RU5E5HAM5EREDsdATkTkcAzkREQOx0BORORwDORERA7HQE5E5HAM5EREDtdjE4KC2Wm22x3Z9ovmW7XlyhMmjB0JEgT8ReDr56nHyPo0Na7MTI+WmQcPx9V31TFenpgU7CO/j1CaWA0AMPqki2XW5A12win6JAT3B3ISgobJY9V9ZH0Wv3i/aU2gcEyePGUe0vvbpSSWMPPkSVzuXXvs97srmtTCbG8X92F4lcQTyewjU26n2a+vfbm1P5UJQVpSCG2yDwCEdnwu7yPLPqGD8ed9kcfmsEHiPoxdSkKRDD3pQ/DsErHe09Bqf+zQiT5sGqZPmst49Y9ifUWK/TGsWgr1RDKJ8Bc5EZHDMZATETkcAzkRkcMxkBMRORwDORGRwzGQExE5HAM5EZHDqePIV65ciSeffBL7958Yzzl8+HDMmTMHU6dOBQCYpolFixbh6aefht/vx9ixY7F06VKMGDFC3G841W27bXr0ZApqwgUlSUE4mfXbvTbj2S1lRoaeWCKsvJewNuTYSGJcaarNTixlXfu5q5BSDwAe96kveN/JTI/vT2uZ4VKOEdb7wjrO304oTT6Gq8V+rG/YUu5SxngbaXIbgBPfGXEf6fFzA2Jerx4BgFv5jaZ9RxIkhYjZRYJx4pF9NNknwLCWG27lu5yuTKZIpr9TlPeaZv9eE5XbMVLldmS79Ekh4ZSvcBx5UVERfvrTn+Kdd97B+vXrMWnSJMycOROffvopAOCRRx7B8uXLsXjxYrz99tsoKCjAjBkz0JTgQyQiou6lBvLLLrsMl1xyCQYPHoyhQ4di/vz5yMzMxIcffgjTNLFixQrccccdmD59OioqKrBixQoEAgGsWrXqTLSfiOhv3kldIw+FQli9ejWam5sxfvx47N27FzU1Nbjooosiz0lPT8eECROwdevWbm8sERHFM/x+v3phZseOHZgyZQpaW1uRkZGBlStXYurUqdi6dSumTp2KTz75BCUl0fUMbr31VlRXV2PNmjUJ91lVpSRdJSIiAEB5eblYn9TV/PLycrz33ntobGzEyy+/jNmzZ2Pt2rWn1bB///c3Io8feuiSyHYwQ7+x5h8iL6w14PHtYv2h749Rj1H8Zl3M9oInr8S8638bLThik72+i9bRpWL90dHyDZL2HP3mx5CnqmO2H3j+Gsy/9oXoPkrsF1jqlMzNztSN8qJZB25Joj/fib1n8uDyf8Ddt/5PZNu1R14UK+xvUI/hUjKut5XKfZHybnzm+Aff/zHu/sbD0WN0w83OcEDO/O7KzRHrzT7xN84WPHMV5n13tWUn8k1E84Dc39ZM94lYF7+yY3ezc+EHc1E5fnF0H+O+Ju7DtV9eTM1u0biu2kvzxHp3IH4RswdXXI67Z5+Icc2lmeoxMl//VKxf+8V76j6GvXBLwrrtSiBP6tKK1+vF4MGDMWbMGNx7770YNWoUHn30Ufh8PgBAbW1tzPNra2tRWFiYzK6JiOg0ndI48nA4jPb2dpSVlcHn82H9+vWRutbWVmzevBnnn39+tzWSiIgSUy+t3HfffZgyZQqKi4sjo1E2btyIF198EYZhYPbs2Vi2bBnKy8sxdOhQLF26FBkZGbj66qvPRPuJiP7mqYG8pqYGN998M44cOYLs7GyMHDkSq1atwuTJkwEAt99+O1paWnDnnXdGJgStWbMGWcpkgZT6FtvtlHq90W058jXE0Gj5elL2vpB6DKO5RSwzC+TrrQCQtke+jp4yuL9YH07RJ0fBbhKLpcy7S77GGO6XrR5C68++VUF1H67mNrHMyFImWA2S+woAzLYOuQ1tyuc+epheflxOCmEa+mdm5Mnnr5bsw3XU/n5BzDmrTAjqGD1ErPds0wcjqEkhEkz2sV4XN/8gX1sOnztSrHc3yPcbACDl073yMUoHJKg48b+sT+TvEACY5WVi/R/bN6j7yDh46hPt1UC+YsUKsd4wDFRWVqKysvKUG0FERKeOa60QETkcAzkRkcMxkBMRORwDORGRwzGQExE5HAM5EZHDJb9yejczuyxc37ndka1lWwA6MuSxup4dX4r1gXPl9R0AIPsjm3/jLIvxm3sPqvsIjkswLrlzH8oyJyF9LXo1sUSwUFm3w6P/W+7+ZLdY7//+KHUfmdqw5A55LLqrSl7XAwCgJMBwpRXL9QnW9Ygpb4sfD29ltstj2QF9fRBD2Ud4sP2aMuH86GdtBOLnQVilfCp/R6CsWwMAxq798hMSJIWw9qc2TtzctkOu9+lLgQTPLhHrPXX2Y9Fdx0981s0jCtRjZGyUT/ASt3zeAEBrwVeYWIKIiHo3BnIiIodjICcicjgGciIih2MgJyJyOAZyIiKHYyAnInK4HhtH7qoP2G6nhPuor/U2yjk7jbxcsT61IawewzwWvzC6tcxI0bsu5ehxuT4gDxQP6ukIYdqsm24tc9cr7fToOTuNfvLa694GffyrcSx+De2YshTlM83R10036+W8nu4mm7XbrcdIML7bWq6NEzc8+nlhKO/VNOX+NDrs11WPKT+q5JTNl/NYGo36Ot/IUL6rCfKXWvtTW09cGyceqtHXCvfky+ev0RgQy71+ObcCoOdqrQrqeT9TGpLIP5AAf5ETETkcAzkRkcMxkBMRORwDORGRwzGQExE5HAM5EZHDMZATETkcAzkRkcP12ISgcG6G/bYyGQIAoIybbzsrX6z3NusTgjDAZiKCpSzcR0+A4T5mP9GgkzbhJ5gh1wOAkRk/KcNapk2SMYv1hfnbffKEiKwDejKFcGH8pAy7skSCOfrsKJdPnggWzJQ/M1fI/rxoL41OnnHnKRM7DH1Sh+mSn2O65d9XnroE55U1OUeRT9xHa5H8maZtUxJPQE/YYKbYvw9rf6Z8uve0jqFN9gGA0I7P5Sf8/Tn2xy478d3w7juqHqPzuYl4YT+Jy8oj5wIR8Rc5EZHDMZATETkcAzkRkcMxkBMRORwDORGRwzGQExE5HAM5EZHDqePIV65ciSeffBL79+8HAAwfPhxz5szB1KlTAQCzZ8/Gc889F/OacePG4c033xT369p10HbbyNUTCKT65QXtPf42sb4jI4nF/20W1reWuYL6uFBTST6RWS3vw3TpSR/M9PgF7a1lZoY8/tp1rEk9RooyNrppVI66j7RNB+MLv4yWmUNLxdd7GuWkEADgOhKfDCRmH8ochVCx/fwDd6A9egwtOYV1LHcCYe0zaZKTLbQPsm9nx4Dod8e7S0644FXmQSQzv8DTIPdFOM3+/Lf2Z7h0gHyMOrkvEiWFiJFgnHjElo9tCi+NlB//1t+ph0jf3yjW72grVvdh6CElITWiFRUV4ac//SmGDBmCcDiM5557DjNnzsSGDRvwta99DQBwwQUX4LHHHou8xuvVJ8sQEVH3UAP5ZZddFrM9f/58/OpXv8KHH34YCeSpqanw+eSZZERE9NU4qWvkoVAIq1evRnNzM8aPHx8p37x5M4YOHYqxY8fitttuQ21tbbc3lIiI7Bl+v19d3GTHjh2YMmUKWltbkZGRgZUrV0auka9evRrp6ekoKyvDvn37sGDBAoTDYWzYsAGpqYkTklZVVXXfuyAi+itWXl4u1icVyNvb23HgwAE0Njbi5ZdfxtNPP421a9eioqIi7rnV1dUYNWoUnnjiCUybNi3hPq8ZfGfk8YJ1N2Pe1P880aAkbnYeP1u+EZNaI2evbynWV6PK3HYgZvuBl76L+TOeiWybfdLUfWgLKDWf3U+sbyrWb3b2f7cuZnvBUzMwb9ZLkW3TJf/R5WrQbxaF+8mfybEkbnbm/fbTmO2fvXUL7pn8aGRbu9lphPWFzrSbndqCbHY3Ox9ccTnunr02eoxeerNz8ZIpmHvn65Ft7WZnqL+SWb5dfx9GSO5Pu5udXfsTysfqOi4PXEjmZqe2oJXdzc6FH8xF5fjFAID2brjZedWqd9R9/OLRbyese+/+G8TXJrX6odfrxeDBgwEAY8aMwf/+7//i0UcfxS9/+cu45w4YMABFRUXYvXt3MrsmIqLTdErjyMPhMNrb223r6urqUF1dzZufRERniPqL/L777sOUKVNQXFyMQCCAVatWYePGjXjxxRcRCASwaNEiTJs2DT6fD/v27cP999+PgoICXH755eJ+284dbLudaE1oq8ZSudmpOfJay0ZYX/O8o7RALGvP1YdYptXKCwzXl8vvo0O/yoRgbvyf6dYyd6P8p2nbEH28cEuh/F4zavT1yIPnDRXLwsoa3G15+h+PKf3lS2bBDOVSVYLTork0uga5u1Wew2AksZy+qf58ks/f9IP2lxM8/uhln+BA+bJd41ny++j7sXKZCkDTMHn990Ss/Zn1iXwJqHlE/PfQyuuX+wrQ1xNPNE6885KK97UP1WMEpo8X6y/o82d1Hz9PfEtRpX47ampqcPPNN+PIkSPIzs7GyJEjsWrVKkyePBktLS3YuXMnnn/+eTQ0NMDn82HixIl48sknkZWldzAREZ0+NZCvWLEiYV16ejrWrFnTrQ0iIqKTw7VWiIgcjoGciMjhGMiJiByOgZyIyOEYyImIHI6BnIjI4ZKaov+VHPh4h+12R2aK+lptQkXOq3YLxUcdnjVGPUbOtvi1Ezy10TL3x/JEBgAIjhsm1rv0eTSqlL3xK01ay4LF8sQQbb0MAMheK/fnwR/o/Vn8+rG4Mk9ddMKUcaBafH1Ki55Ywl0oTx5pL7NPyBBpz0e74gsrL0Dmmzuj2x3yh2aky+uoAED4uLwWkCtbmQnW177eaInOtnY3y/3Vd+ce+RjF+szsjFf/KNYbdovmVV6AzNej6+6Y5WXyMTbKi+sZafosGm2tlUTrpHSWa5N9ACD95Q/E+rxf6r+ZWwuSmE2WAH+RExE5HAM5EZHDMZATETkcAzkRkcMxkBMRORwDORGRwzGQExE5XFI5O78Ky/b9n8jjK9rm49XUBwAAgZA+LvStA/L47K1j/1usv2THVeox7jjrzZjt0vqV2Nf3+5HtUd7D6j7eOi638+FPJ4v1A/P86jH+75DfxGwHj7wET+GMyPaejjzx9duOD1KPcVf+R2L9qkB/dR9Nodgcp+MDS/FB5pzI9tVZX4ivz3LpiTw+sk9aFfH7xtFi/bz8T+PKPjr4AkYXXxPZPhiSx4A3h/XfRv3c8lduf1CeSzE0JRRXtuvQbzGk6MrI9tZWeSz6lD7yePj3W/UELxUp8lj1bFd8Xtuu/fnH9vj3YlXilhOjVAUzxXoA8EI+xo624riyc5sexrasHwNILilEnpIb99qSCeo+vnh8XMK6j6/6gfha/iInInI4BnIiIodjICcicjgGciIih2MgJyJyOAZyIiKHYyAnInI4BnIiIofrsQlBF/3bryKPH/vBJPzL//8uACDluN6crN3NYv2fr8sQ68v/q0k9xqELc2K2n7p2ImY9/15kuy0viYQMNnkKrPptt1/QvpN/ZJZ6jMay2H+Ln50+Ed95OdrOVGVOkbdJfx9Hz5Wfk1118r8HfjVrIm58KtrO48XyMUJpeju9frkdfQ7J+6gfGV//m//vm/jHje9Etj0thrgPQ557AgAIK7lT3K3yMcKe+HY+N3USrlv3bmTb2yDvo7lUbmjmXrdYDwAthXJ/hlP0/sw4KH9mWrKFFOV9AoCnRa63+8ye+O5E3PDMifMziTmKajuD/fQsMsNu+kPCulX1j4uv5S9yIiKHYyAnInI4BnIiIodjICcicjgGciIih2MgJyJyuB4bfkhERN2Dv8iJiByOgZyIyOEYyImIHI6BnIjI4RjIiYgcjoGciMjhGMiJiBzu/wEWQrzf3ZRFKgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(wrcf_gram1)" + ] + }, + { + "cell_type": "code", + "execution_count": 356, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(zz_gram1)\n", + "plt.savefig(\"sp_zz_gram1.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "25\n", + "4\n" + ] + }, + { + "data": { + "text/plain": [ + "0.5006790161132812" + ] + }, + "execution_count": 202, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(len(zz_dgms[0][1]))\n", + "print(len(zz_dgms[1][1]))\n", + "d.bottleneck_distance(zz_dgms[0][1], zz_dgms[1][1])" + ] + }, + { + "cell_type": "code", + "execution_count": 157, + "metadata": {}, + "outputs": [], + "source": [ + "clf = AgglomerativeClustering(n_clusters=5, affinity=\"precomputed\", linkage=\"average\")" + ] + }, + { + "cell_type": "code", + "execution_count": 158, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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oFxVmkLQqVMnHTp0yF21AAAAABWqUoB96qmn9MYbb+j99993Vz0AAABAuar0TVwLFy5Us2bNNHz4cAUGBiooKEje3t5ObTw8PLRq1SqXFgkAAABcUKUAe+DAAXl4eOjyyy+XJB05cqREGw8PD9dUBgAAAJSiSgF279697qoDAAAAqBSeAwsAAACjVDnAFhQU6M0339QDDzyg2267TV9//bUkKScnRytWrNCPP/7o8iIBAACAC6o0heDkyZMaNGiQ9u/fLz8/P2VnZysnJ0eS1KRJEz333HM6cOCA4uPj3VIsAAAAUKU7sNOnT9fRo0e1detWpaSkqLi4+P93VKeOYmJi9MEHH7i8SAAAAOCCKgXYrVu3auzYserRo0epTxsIDg7mm7oAAADgVlUKsL/88ovjEVqlOXfunAoLCy+6KAAAAKAsVQqw7dq1065du8rcvm3bNoWGhl50UQAAAEBZqhRgR44cqeXLl2vVqlUqKiqSdP6LC3799VfNmDFD27Zt06hRo9xSKAAAACBV8SkEY8eO1YEDBzR27Fg1btxYknTfffcpJydHhYWFGj16tEaMGOGWQgEAAACpigFWkl544QXdeeedWr9+vQ4dOqSioiJdccUVGjJkiKKiotxRIwAAAOBQ5QArST169FCPHj1cXQsAAABQoSrNgW3evLlWr15d5vZ169apefPmF10UAAAAUJYqBdg/fnFBaYqKikp9PiwAAADgKlUKsJLKDaj/+7//K5vNdlEFAQAAAOWpcA5sQkKC/ud//sexPG3aND3zzDMl2p0+fVpnzpzRnXfe6doKAQAAgD+oMMD6+vqqY8eOkqQjR46oZcuWatmypVMbDw8PNWzYUF27dtXo0aPdUykAAACgSgTYoUOHaujQoZKkW2+9VY8++qh69+7t9sIAAACA0lRpDuymTZtcFl7nz5+v6OhotW7dWsHBwYqNjdX+/fsr3G/fvn0aMGCAAgICFBoaqjlz5lT44TIAAABcOqr0HNjU1FR98803euCBBxzr1q5dq1mzZun06dO64447NHPmTNWpU3Eu3r59u+6//35169ZNxcXFmjlzpm677TZ98cUXatasWan7nDlzxvGFCdu2bZPdbtf48ePl4+OjiRMnVuWlGCH5x3w9nJKj9NxCt/TftpGnFkTZFN3KyyX9ubte9/GRtv9odRFVZnvdvJpdx8wx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k7/UZ3BwsNNy3bp11bZtWx05csRpfcuWLVWnjvMl2GazKScnx7H8/fffy263Kzg42OknPDxcxcXFys7OrrCeC6E0JSXFcae1V69eioqKUlpamoqKipSamipPT0/16NFDkhxzU0NCQkr0d+WVVyovL08nTpxwWh8UFFRmDXFxcWrQoIHeffdd2Wy2CmsGgIowhQBArVevXj117txZnTt31jXXXKPBgwdr1apV6t27d5n7FBUVXdQxPT09S11fXFzsdIyOHTtq9uzZpbatzBzSgIAAtWvXTikpKercubPy8/MVFRWlvLw8nTlzRnv37lVqaqo6deqkxo0b/7UXo/N3lMsSExOj5cuXa8WKFRo7duxfPgYAXECABYA/6N69u6Tzf0aXzt8VPX36tFObgoICx/Y/+/7779WnTx/H8u+//6709HT16tWryrVcccUV2r17t3r37i0PD49y25a3PTIyUh999JG6dOmikJAQ+fr6ytfXV61atdL27duVlpamuLg4R/vWrVtLkux2e4m+7Ha7GjZsqBYtWlT6dUyfPl3e3t6OD7jdddddld4XAErDFAIAtdInn3xS6l3UDz74QNL///P5FVdc4ZgresHSpUtLzAG94PXXX9e5c+ccyytWrNDp06fVv3//Ktc4ZMgQZWVl6dVXXy2x7dy5c/rll18cyz4+Pk7TD/4oMjJSGRkZWr58uaKiopzWL126VKdPn3ZaHxAQoL/97W965513dOrUKcf6w4cPa8uWLbrxxhvLvINclnnz5ik2NlaTJk3S+vXrq7QvAPwZd2AB1EpTp05Vbm6ubr31VnXo0EFFRUX6+uuvtXLlSjVv3tzxjNd77rlHf//733X33XcrOjpa33zzjT766KNy70AOGjRId9xxh44cOaIlS5YoLCzM8bSBqoiNjdWGDRs0efJkff755+rZs6eKi4v13Xffaf369Vq6dKmuu+46SeefTPDJJ5/opZdeUmBgoC677DLHFIgL4dRut2vy5MmO/qOiorRmzRpJKvHs1meeeUa33367brrpJo0cOdLxGC0vLy899dRTVX4tHh4eevnll5WXl6cxY8bIx8fnL4V6AJAIsABqqWeeeUZJSUnatm2bli1bpnPnzikgIEDDhg3TI488orZt20qSRo4cqfT0dL311lv66KOPFBkZqXfffVcxMTGl9jt79mwlJSVpzpw5OnfunG655Rb985//dHoGbGXVqVNHy5YtU0JCglasWKH33ntPXl5eCgoK0v33369OnTo52s6cOVMPP/ywZs+erby8PPXq1csRYNu1a6eAgABlZGSUuAMrSR06dCjxZIDrr79e69ev18yZMzVz5kzVrVtXkZGRmj59eolnwFaWp6enXn31VcXFxWnkyJFauXJlufOMAaAsHjk5OcUVNwMAAABqBubAAgAAwCgEWAAAABiFAAsAAACjEGABAABgFAIsAAAAjEKABQAAgFEIsAAAADAKARYAAABGIcACAADAKP8X6A4LYv6btREAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(zz_gram1)\n", + "fig, ax = plt.subplots()\n", + "ax.step(range(len(clf.labels_)), clf.labels_, where='post')\n", + "ax.set_xlabel(\"Subnetwork\")\n", + "ax.set_ylabel(\"Cluster\")\n", + "fig.savefig(\"sp_zz_k.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AfbSpUuaN2+etm/fXpX1AAAAAGUqd4B1c3PTP/7xD50+fboq6wEAAADK5NQSgo4dO+r48eNVVQsAAADgkFMB9oUXXtC7776rbdu2VVU9AAAAQJmc+ktcixcvVvPmzTVy5Ej5+vrK399fbm5udmNcXFwUHx9fqUUCAAAAVzgVYI8ePSoXFxfdeOONkqSTJ08WG+Pi4lI5lQEAAAAlcCrAHjp0qKrqAAAAAMqF74EFAACAqTgdYPPz8/Xee+/piSee0P33369vvvlGkpSVlaXVq1frp59+qvQiAQAAgCucWkJw/vx5DRkyREeOHJGXl5cyMzOVlZUlSWratKleeeUVHT16VDExMVVSLAAAAODUE9iZM2fq1KlTSkpKUmpqqoqKiv7/herUUXh4uD755JNKLxIAAAC4wqkAm5SUpPHjx6tHjx4lfttAQEAAf6kLAAAAVcqpAPvrr7/avkKrJJcvX1ZBQUGFiwIAAABK41SAbdu2rfbv31/q8e3btysoKKjCRQEAAAClcSrAjh49WqtWrVJ8fLwKCwsl/fGHC3777TfNmjVL27dvV1RUVJUUCgAAAEhOfgvB+PHjdfToUY0fP15NmjSRJD322GPKyspSQUGBxo4dq1GjRlVJoQAAAIDkZICVpH/84x966KGHtGHDBh0/flyFhYW66aabNGzYMIWFhVVFjQAAAICN0wFWknr06KEePXpUdi0AAACAQ06tgW3RooXWrl1b6vH169erRYsWFS4KAAAAKI1TAfbPf7igJIWFhSV+PywAAABQWZwKsJLKDKj/8z//I4vFUqGCAAAAgLI4XAMbGxur//7v/7Ztz5gxQy+99FKxcRcvXlR2drYeeuihyq0QAAAA+BOHAdbT01MdOnSQJJ08eVItW7ZUy5Yt7ca4uLioUaNG6tKli8aOHVs1lQIAAAAqR4AdMWKERowYIUm677779Mwzz6h3795VXhgAAABQEqfWwG7evLnSwuvChQvVp08f+fn5KSAgQBERETpy5IjD8w4fPqxBgwbJx8dHQUFBmjdvnsMPlwEAAOD64dT3wO7atUvffvutnnjiCdu+devWac6cObp48aKGDx+u2bNnq04dx7k4JSVFjz/+uLp166aioiLNnj1b999/v7766is1b968xHOys7NtfzBh+/btslqtio6Olru7uyZPnuzMrVwXkn/K01OpWUrL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69ZNY8aMkfRHCG/WrJmCg4OVmpqqyZMnS/pj6URBQYF+++037d+/X6GhoZKkXbt2qVu3bmrYsKEk6csvv9QDDzygNm3aaPr06crLy1NcXJzuuecebd++Xe3atbO778cee0xt2rTR888/r/z8/BJ7c/LkSQ0dOlT169fXxx9/LB8fn0rrO4DahQALoFZ68sknlZycrN69e6tr167q1auX7rjjDvXu3dsW4q7V5s2b1aBBA0lShw4dNHnyZH344Yd69NFHbWPOnj2r2NhYjRw5UpL0yCOPqFOnTnr//fdtATYhIUGffvqpNm3apNtvv912bteuXTVu3DglJyerb9++ioiI0N/+9jf5+/srIiLCrpZevXopISFBRUVFcnFxUWpqqkJCQpSXl6fU1FSFhoYqPz9f+/btU3R0tO28559/Xk2bNtUnn3xie0o9fPhw9ezZUy+++KLee+89u+sEBgbq/fffL7Unx48fV3h4uCwWiz766CPdcMMN19JaAJDEEgIAtVTv3r21detWDRw4UP/617+0ePFiRURE6Oabb9bKlSuv+XWjoqJs4VWSRo4cqWbNmikpKclunJubm13YrF+/vrp166Yff/zRtm/Dhg1q166dgoKCdO7cOdvPbbfdJhcXF+3YscNhPWFhYbpw4YLtV/+pqakKCwtTr169lJqaKknav3+/8vLybL/6T09P18GDBzVy5Ei7JRYBAQG699579dlnn6mgoMDuOo8//nipNRw7dkyDBg2Sl5eXNm/eTHgFUGEEWAC1Vo8ePbR69WqlpaVpx44dev755yVJkyZN0hdffHFNrxkQEGC3XbduXbVp00YnT56029+yZUvVqWP/FmyxWJSVlWXb/uGHH2S1WhUQEGD3ExISoqKiImVmZjqs50ooTU1NtT1pve222xQWFqbdu3ersLBQu3btkqurq3r06CFJtrWpgYGBxV7v5ptvVm5urs6dO2e339/fv9QaIiMj1aBBA3300UeyWCwOawYAR1hCAKDWq1evnjp16qROnTrp1ltv1dChQxUfH6/evXuXek5hYWGFrunq6lri/qKiIrtrdOjQQXPnzi1xbHnWkPr4+Kht27ZKTU1Vp06dlJeXp7CwMOXm5io7O1uHDh3Srl271LFjRzVp0uTabkZ/PFEuTXh4uFatWqXVq1dr/Pjx13wNALiCAAsAf9K9e3dJf/waXfrjqejFixftxuTn59uOX+2HH35Q3759bdu///670tLSdNtttzldy0033aQDBw6od+/ecnFxKXNsWcd79eqlzz77TJ07d1ZgYKA8PT3l6empVq1aKSUlRbt371ZkZKRtvJ+fnyTJarUWey2r1apGjRrJw8Oj3Pcxc+ZMubm52T7g9vDDD5f7XAAoCUsIANRKX3zxRYlPUT/55BNJ///r85tuusm2VvSKd955p9ga0CtWrFihy5cv27ZXr16tixcvauDAgU7XOGzYMGVkZOjtt98uduzy5cv69ddfbdvu7u52yw/+rFevXkpPT9eqVasUFhZmt/+dd97RxYsX7fb7+PjoL3/5iz788ENduHDBtv/EiRPaunWr7r777lKfIJdmwYIFioiI0JQpU7RhwwanzgWAq/EEFkCtNH36dOXk5Oi+++5T+/btVVhYqG+++UZr1qxRixYtbN/x+uijj+qvf/2rHnnkEfXp00fffvutPvvsszKfQA4ZMkTDhw/XyZMntWzZMgUHB9u+bcAZERER2rhxo6ZOnaqdO3eqZ8+eKioq0vfff68NGzbonXfe0R133CHpj28m+OKLL/TGG2/I19dXN9xwg20JxJVwarVaNXXqVNvrh4WFKSEhQZKKfXfrSy+9pAceeED9+/fX6NGjbV+j1bBhQ73wwgtO34uLi4vefPNN5ebmaty4cXJ3d7+mUA8AEgEWQC310ksvKTExUdu3b9fKlSt1+fJl+fj46MEHH9TTTz+tNm3aSJJGjx6ttLQ0vf/++/rss8/Uq1cvffTRRwoPDy/xdefOnavExETNmzdPly9f1r333qu///3vdt8BW1516tTRypUrFRsbq9WrV+vjjz9Ww4YN5e/vr8cff1wdO3a0jZ09e7aeeuopzZ07V7m5ubrttttsAbZt27by8fFRenp6sSewktS+ffti3wxw5513asOGDZo9e7Zmz56tunXrqlevXpo5c2ax74AtL1dXV7399tuKjIzU6NGjtWbNmjLXGQNAaVyysrKKHA8DAAAAagbWwAIAAMBUCLAAAAAwFQIsAAAATIUACwAAAFMhwAIAAMBUCLAAAAAwFQIsAAAATIUACwAAAFMhwAIAAMBU/he4rm3IyGrHKgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(wrcf_gram1)\n", + "fig, ax = plt.subplots()\n", + "ax.step(range(len(clf.labels_)), clf.labels_, where='post')\n", + "ax.set_xlabel(\"Subnetwork\")\n", + "ax.set_ylabel(\"Cluster\")\n", + "fig.savefig(\"sp_wrcf_k.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 160, + "metadata": {}, + "outputs": [], + "source": [ + "svm = OneClassSVM(kernel='precomputed')" + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 161, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "svm.fit(zz_gram1)\n", + "clusters = svm.predict(zz_gram1)\n", + "plt.step(range(len(clusters)), clusters, where='post')" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 162, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "svm.fit(wrcf_gram1)\n", + "clusters = svm.predict(wrcf_gram1)\n", + "plt.step(range(len(clusters)), clusters, where='post')" + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Diagram with 3 points" + ] + }, + "execution_count": 218, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dgm1 = d.Diagram([(1,4),(1,2),(3,np.inf)])\n", + "dgm1" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Diagram with 1 points" + ] + }, + "execution_count": 219, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dgm2 = d.Diagram([(1,3)])\n", + "dgm2" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "inf" + ] + }, + "execution_count": 220, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d.bottleneck_distance(dgm1, dgm2)" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "metadata": {}, + "outputs": [], + "source": [ + "res = d.Diagram()\n", + "for p in dgm1:\n", + " if p.death != np.inf:\n", + " res.append(p)" + ] + }, + { + "cell_type": "code", + "execution_count": 225, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1,4)\n", + "(1,2)\n" + ] + } + ], + "source": [ + "for p in res:\n", + " print(p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/clustering.py b/clustering.py new file mode 100644 index 0000000..f7c0195 --- /dev/null +++ b/clustering.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 + +import numpy as np + +from sklearn.cluster import AgglomerativeClustering +from sklearn.svm import OneClassSVM + +import dill + +import matplotlib +matplotlib.use("PDF") +import matplotlib.pyplot as plt +plt.style.use("fivethirtyeight") +plt.rcParams["figure.figsize"] = (10, 6) + + +N_CLUSTERS = 10 + +GENERATIVE = True +SOCIOPATTERNS = True + +if __name__=="__main__": + if GENERATIVE: + print("==== Generative model ====") + zz_dgms = dill.load(open("generative/zz_dgms.dill", "rb")) + wrcf_dgms = dill.load(open("generative/wrcf_dgms.dill", "rb")) + zz_gram1 = dill.load(open("generative/zz_gram1.dill", "rb")) + wrcf_gram1 = dill.load(open("generative/wrcf_gram1.dill", "rb")) + zz_distmat = dill.load(open("generative/zz_distmat.dill", "rb")) + wrcf_distmat = dill.load(open("generative/wrcf_distmat.dill", "rb")) + + print("Zigzag + kernel") + clf = AgglomerativeClustering( + n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(zz_gram1) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/gen_zz_k.pdf", transparent=True, + pad_inches=0.3, bbox_inches="tight") + + print("WRCF + kernel") + clf = AgglomerativeClustering( + n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(wrcf_gram1) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/gen_wrcf_k.pdf", transparent=True, + pad_inches=0.3, bbox_inches="tight") + + print("Zigzag + bottleneck") + clf = AgglomerativeClustering( + n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(zz_distmat) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/gen_zz_b.pdf", transparent=True, + pad_inches=0.3, bbox_inches="tight") + + print("WRCF + bottleneck") + clf = AgglomerativeClustering( + n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(wrcf_distmat) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/gen_wrcf_b.pdf", transparent=True, + pad_inches=0.3, bbox_inches="tight") + + if SOCIOPATTERNS: + print("==== SocioPatterns dataset ====") + zz_dgms = dill.load(open("sociopatterns/zz_dgms.dill", "rb")) + wrcf_dgms = dill.load(open("sociopatterns/wrcf_dgms.dill", "rb")) + zz_gram1 = dill.load(open("sociopatterns/zz_gram1.dill", "rb")) + wrcf_gram1 = dill.load(open("sociopatterns/wrcf_gram1.dill", "rb")) + zz_distmat = dill.load(open("sociopatterns/zz_distmat.dill", "rb")) + wrcf_distmat = dill.load(open("sociopatterns/wrcf_distmat.dill", "rb")) + + print("Zigzag + kernel") + clf = AgglomerativeClustering(n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(zz_gram1) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/sp_zz_k.pdf", transparent=True, pad_inches=0.3, bbox_inches="tight") + + print("WRCF + kernel") + clf = AgglomerativeClustering(n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(wrcf_gram1) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/sp_wrcf_k.pdf", transparent=True, pad_inches=0.3, bbox_inches="tight") + + print("Zigzag + bottleneck") + clf = AgglomerativeClustering(n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(zz_distmat) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/sp_zz_b.pdf", transparent=True, pad_inches=0.3, bbox_inches="tight") + + print("WRCF + bottleneck") + clf = AgglomerativeClustering(n_clusters=N_CLUSTERS, affinity='precomputed', linkage='average') + clf.fit(wrcf_distmat) + fig, ax = plt.subplots() + ax.step(range(len(clf.labels_)), clf.labels_, where='post') + ax.set_xlabel("Subnetwork") + ax.set_ylabel("Cluster") + fig.savefig("fig/sp_wrcf_b.pdf", transparent=True, pad_inches=0.3, bbox_inches="tight") diff --git a/dills/wrcf_dgms.dill b/dills/wrcf_dgms.dill new file mode 100644 index 0000000..616b0e1 Binary files /dev/null and b/dills/wrcf_dgms.dill differ diff --git a/dills/wrcf_distmat.dill b/dills/wrcf_distmat.dill new file mode 100644 index 0000000..dee66f0 Binary files /dev/null and b/dills/wrcf_distmat.dill differ diff --git a/dills/wrcf_gram1.dill b/dills/wrcf_gram1.dill new file mode 100644 index 0000000..949f69a Binary files /dev/null and b/dills/wrcf_gram1.dill differ diff --git a/dills/zz_dgms.dill b/dills/zz_dgms.dill new file mode 100644 index 0000000..1346e3a Binary files /dev/null and b/dills/zz_dgms.dill differ diff --git a/dills/zz_distmat.dill b/dills/zz_distmat.dill new file mode 100644 index 0000000..26b4c0c Binary files /dev/null and b/dills/zz_distmat.dill differ diff --git a/dills/zz_gram1.dill b/dills/zz_gram1.dill new file mode 100644 index 0000000..8da223e Binary files /dev/null and b/dills/zz_gram1.dill differ diff --git a/fig/diagram.pdf b/fig/diagram.pdf new file mode 100644 index 0000000..126fc68 Binary files /dev/null and b/fig/diagram.pdf differ diff --git a/fig/gen_wrcf_b.pdf b/fig/gen_wrcf_b.pdf new file mode 100644 index 0000000..9b26424 Binary files /dev/null and b/fig/gen_wrcf_b.pdf differ diff --git a/fig/gen_wrcf_k.pdf b/fig/gen_wrcf_k.pdf new file mode 100644 index 0000000..a4ef70c Binary files /dev/null and b/fig/gen_wrcf_k.pdf differ diff --git a/fig/gen_zz_b.pdf b/fig/gen_zz_b.pdf new file mode 100644 index 0000000..4dccb4c Binary files /dev/null and b/fig/gen_zz_b.pdf differ diff --git a/fig/gen_zz_k.pdf b/fig/gen_zz_k.pdf new file mode 100644 index 0000000..6dcda29 Binary files /dev/null and b/fig/gen_zz_k.pdf differ diff --git a/fig/sp_wrcf_b.pdf b/fig/sp_wrcf_b.pdf new file mode 100644 index 0000000..4420552 Binary files /dev/null and b/fig/sp_wrcf_b.pdf differ diff --git a/fig/sp_wrcf_k.pdf b/fig/sp_wrcf_k.pdf new file mode 100644 index 0000000..067007f Binary files /dev/null and b/fig/sp_wrcf_k.pdf differ diff --git a/fig/sp_zz_b.pdf b/fig/sp_zz_b.pdf new file mode 100644 index 0000000..8598f94 Binary files /dev/null and b/fig/sp_zz_b.pdf differ diff --git a/fig/sp_zz_k.pdf b/fig/sp_zz_k.pdf new file mode 100644 index 0000000..2b2fc90 Binary files /dev/null and b/fig/sp_zz_k.pdf differ diff --git a/generative.ipynb b/generative.ipynb new file mode 100644 index 0000000..8003189 --- /dev/null +++ b/generative.ipynb @@ -0,0 +1,686 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Generative model" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "import igraph as ig\n", + "import dionysus as d" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "plt.style.use(\"fivethirtyeight\")\n", + "plt.rcParams[\"figure.figsize\"] = 10, 6" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2.0.7.dev0'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d.__version__" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import dill" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import multiprocessing\n", + "from dask.distributed import Client" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from zigzag import *" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from sliced_wasserstein import diagram_array, SW_approx" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [], + "source": [ + "from network2tikz import plot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Random network generation" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [], + "source": [ + "def edge_presences(T, f):\n", + " density = np.sin(f * np.arange(T)) + 1\n", + " density /= np.sum(density)\n", + " samplesize = np.random.randint(T//2)\n", + " times = np.random.choice(np.arange(T), size=samplesize, replace=False, p=density)\n", + " times = np.sort(times)\n", + " return times" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": {}, + "outputs": [], + "source": [ + "basegraph = ig.Graph.Erdos_Renyi(7, 0.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": {}, + "outputs": [], + "source": [ + "T = 5\n", + "g = ig.Graph()\n", + "g.add_vertices(len(basegraph.vs))\n", + "for e in basegraph.es:\n", + " times = np.random.randint(0, T, T//2)\n", + " for t in times:\n", + " g.add_edge(e.source, e.target, time=t)" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": {}, + "outputs": [], + "source": [ + "subgs = []\n", + "for t in np.unique(g.es[\"time\"]):\n", + " subgs.append(g.subgraph_edges(g.es.select(time_eq=t), delete_vertices=False))" + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": {}, + "outputs": [], + "source": [ + "visual_style = {}\n", + "visual_style[\"vertex_size\"] = 0.3\n", + "visual_style[\"vertex_color\"] = \"blue\"\n", + "visual_style[\"vertex_opacity\"] = .7\n", + "#visual_style[\"edge_curved\"] = 0.1\n", + "layout = basegraph.layout()\n", + "layout_dict = {}\n", + "for i, l in enumerate(layout):\n", + " layout_dict[i] = l\n", + "visual_style[\"layout\"] = layout_dict\n", + "visual_style[\"canvas\"] = (4,4)\n", + "visual_style[\"margin\"] = 1\n", + "for i, subg in enumerate(subgs):\n", + " plot(subg, \"network{0}.tex\".format(i), **visual_style)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [], + "source": [ + "T = 200\n", + "f = 15/T\n", + "times = edge_presences(T, f)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def density(t):\n", + " return np.sin(f*t) + 1\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.plot(density(np.arange(T))/np.sum(density(np.arange(T))))\n", + "ax.set_xlabel(\"Time\")\n", + "ax.set_ylabel(\"Density\")\n", + "ax.scatter(times, np.repeat(0, len(times)), color=\"red\")\n", + "for x in range(10, 200, 10):\n", + " ax.axvline(x=x, linestyle='--', linewidth=2, color=\"grey\")\n", + "fig.savefig(\"density.pdf\", transparent=True, pad_inches=0.3, bbox_inches=\"tight\")" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5,0,'Time')" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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dPLkSfp9id1xxx0qKCjQzp07nY9Bgwbp7rvv1s6dO9W3b1/62YYMHjxYX375pcu0L7/8Uj179pTE87Ot+f777xv8dM1isaiurk4S/WzrfNW/5ORkffTRRzp16pRzmfz8fF122WXq1auXT8ZqycrKetwnldBAly5dtGTJEkVFRSksLEzZ2dkqKCjQihUrFB4e3trDw/+ZNWuWXnnlFa1fv17R0dE6efKkTp48KenHb2SCgoJUW1ur559/Xn369FFtba3mz5+vsrIyPf/882rfvr169OihTz75RK+//rquvvpqHT58WDNmzNC1117LR/NcYmFhYbLZbC6P1157TTExMRo/fjz9bGOio6O1dOlStWvXTlFRUdq+fbsWL16sGTNmKCkpiX62MSUlJXr11VfVt29fhYSEaOfOnXryySc1evRopaWl0c824MSJE/r8889VVlamDRs2aMCAAeratauqq6sVHh7uk/716dNH69at0969exUXF6ePPvpIjz32mB5++GGffZPDx6C1sJycHL3wwgsqKytT//799W//9m+68cYbW3tYOMfZT3s436OPPqq5c+dK+vHHM0899ZTWr1+vyspKJSUladmyZRowYIBz+crKSs2ZM0fvvPOOJGnEiBF6+umnG62PS+eOO+5wfgyaRD/bmvfee0+LFi3Sl19+qejoaE2ePFmZmZnOX6Khn21HVVWVfvOb3+iPf/yjvv32W9ntdt19992aM2eOwsLCJNFPf7dz5079/Oc/bzB93LhxWrVqlc/6t2/fPs2aNUt79uxRRESEMjIy9Oijj/rkI9AkAjAAAAAMwz3AAAAAMAoBGAAAAEYhAAMAAMAoBGAAAAAYhQAMAAAAoxCAAQAAYBQCMAAEoIiICC1ZsqS1hwEAfim4tQcAAGiatx/wv3LlSo0fP76FRwMAbRsBGADagDVr1rh8vX79en3yySdasWKFy/Szfyb0yJEjCg7mEg8A7vCX4ACgDZo6daq2bNmisrKy1h4KALQ53AMMAAHo/HuAN27cqIiICO3cuVNz5sxRnz59FBMTowcffFCnT5/WsWPHNHXqVPXq1Uu9evXS/PnzVVdX51Kzvr5ea9as0Q033CC73a6+fftq+vTpcjgcl3r3AOCi8PMxADDI3LlzFRkZqaysLH3yySfasGGDwsPD9emnnyoqKkqPPfaY/vM//1MrV65Uv379NGHCBOe6jzzyiDZs2KBx48Zp8uTJOnz4sF566SXt2bNH77//vsLCwlpxzwDAewRgADBIjx49tHnzZgUFBWny5Mn66quvtHLlSk2YMEHLly+XJN1///1KSEjQxo0bnQG4sLBQ69at06pVqzRu3DhnvbS0NI0YMUKvvPKK7r///tbYJQBoNm6BAACD/PKXv1RQUJDz66SkJNXX17u802uxWJSYmKgDBw44p73xxhvq3LmzbrnlFjkcDufjqquuUmRkpHbu3HkpdwMALgrvAAOAQaKjo12+7tq1qyTpiiuuaDC9srLS+fX//u//6sSJE4qLi3Nbt6KiwscjBYCWQwAGAINYLBavp9fX/+NDgurq6tS9e3fl5ua6Xd/bzykGAH9AAAYANOnKK69Ufn6+fvrTn6pz586tPRwAuCjcAwwAaNJdd92luro6Pf300w3m1dbWutwuAQD+jneAAQBNuvHGGzV58mQtX75c+/btU2pqqtq3b6/9+/fr7bff1ty5c/kTzADaDAIwAMAr2dnZSkhI0Lp167R48WIFBwcrOjpad955p4YOHdrawwMAr/GnkAEAAGAU7gEGAACAUQjAAAAAMAoBGAAAAEYhAAMAAMAoBGAAAAAYhQAMAAAAoxCAAQAAYBQCMAAAAIxCAAYAAIBR/j9ZpTJRDnRZMAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.scatter(times, np.repeat(0, len(times)))\n", + "ax.set_xlabel(\"Time\")" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(8, 16)" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(basegraph.es), len(g.es)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'IGRAPH U--- 5 16 -- \\n+ attr: time (e)'" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Temporal partitioning" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wins = sliding_windows(g, 0.05)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(wins)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zigzag persistence" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(f, t) = presence_times(wins[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "zz, dgms, cells = d.zigzag_homology_persistence(f, t)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client = Client()\n", + "dgms = client.map(zigzag_network, wins)\n", + "dgms = client.gather(dgms)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())\n", + "dgms = pool.map(zigzag_network, wins)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pool.terminate()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dgms" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sliced Wasserstein kernel" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "zzdgms1 = [dgm[1] for dgm in zzdgms if len(dgm) > 1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "zzgram1 = np.array([[SW_approx(zzdgms1[i], zzdgms1[j], 10)\n", + " for i in range(len(zzdgms1))] for j in range(len(zzdgms1))])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wrcfdgms1 = [dgm[1] for dgm in wrcfdgms if len(dgm) > 1]\n", + "wrcfgram1 = np.array([[SW_approx(wrcfdgms1[i], wrcfdgms1[j], 10)\n", + " for i in range(len(wrcfdgms1))] for j in range(len(wrcfdgms1))])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bottleneck distance" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client = Client()\n", + "distmat = []\n", + "for dgm in dgms1:\n", + " distmat.append(client.map(lambda x: d.bottleneck_distance(x, dgm), dgms1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "distmat = np.array(client.gather(distmat))\n", + "distmat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clustering" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import AgglomerativeClustering" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "clf = AgglomerativeClustering(n_clusters=10, affinity=\"precomputed\", linkage=\"average\")" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(zz_gram1)\n", + "plt.plot(clf.labels_)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(wrcf_gram1)\n", + "plt.plot(clf.labels_)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.svm import OneClassSVM" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "clf = OneClassSVM(kernel='precomputed')" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(zz_gram1)\n", + "plt.plot(clf.predict(zz_gram1))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf.fit(wrcf_gram1)\n", + "plt.plot(clf.predict(wrcf_gram1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load saved diagrams" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "zz_dgms = dill.load(open(\"dills/zz_dgms.dill\", \"rb\"))\n", + "wrcf_dgms = dill.load(open(\"dills/wrcf_dgms.dill\", \"rb\"))\n", + "zz_gram1 = dill.load(open(\"dills/zz_gram1.dill\", \"rb\"))\n", + "wrcf_gram1 = dill.load(open(\"dills/wrcf_gram1.dill\", \"rb\"))\n", + "zz_distmat = dill.load(open(\"dills/zz_distmat.dill\", \"rb\"))\n", + "wrcf_distmat = dill.load(open(\"dills/wrcf_distmat.dill\", \"rb\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/generative.py b/generative.py new file mode 100644 index 0000000..a916f68 --- /dev/null +++ b/generative.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 + +import numpy as np +import igraph as ig +import dionysus as d + +import multiprocessing +# from dask.distributed import Client + +from zigzag import sliding_windows, zigzag_network +from wrcf import wrcf_diagram +from sliced_wasserstein import diagram_array, SW_approx + +import dill + + +def random_edge_presences(T, f): + """Generate random times sampled over a periodic distribution. + + :param T: time range + :param f: frequency + + :return: an array of times. + """ + density = np.sin(f * np.arange(T)) + 1 + density /= np.sum(density) + samplesize = np.random.randint(T//2) + times = np.random.choice(np.arange(T), size=samplesize, replace=False, p=density) + times = np.sort(times) + return times + + +def remove_inf(dgm): + """Remove infinite points in a persistence diagram. + + :param dgm: Diagram + + :return: the same diagram without the infinite points. + """ + res = d.Diagram() + for p in dgm: + if p.death != np.inf: + res.append(p) + return res + + +## Global parameters +NODES = 40 +EDGE_PROB = 0.9 +TIME_RANGE = 200 +FREQ = 15/TIME_RANGE +N_WINDOWS = 20 + +## Computations +ZIGZAG_PERS = True +WRCF_PERS = True +SW_KERNEL = True +BOTTLENECK_DIST = True + + +if __name__=="__main__": + print("Generating random temporal network...", end="", flush=True) + basegraph = ig.Graph.Erdos_Renyi(NODES, EDGE_PROB) + g = ig.Graph() + g.add_vertices(len(basegraph.vs)) + for e in basegraph.es: + times = random_edge_presences(TIME_RANGE, FREQ) + for t in times: + g.add_edge(e.source, e.target, time=t) + print("done.") + + print("Temporal partitioning...", end="", flush=True) + wins = sliding_windows(g, 1/N_WINDOWS) + print("done.") + + pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) + + if ZIGZAG_PERS: + print("Zigzag persistence...", end="", flush=True) + zz_dgms = pool.map(zigzag_network, wins) + dill.dump(zz_dgms, open("generative/zz_dgms.dill", "wb")) + print("done, saved.") + + if WRCF_PERS: + print("WRCF...", end="", flush=True) + ## Collapse each subnetwork into a static graph: the weight is the + ## number of appearances of each edge + for w in wins: + w.es["time"] = np.repeat(1, len(w.es["time"])) + w.simplify(combine_edges="sum") + w.es["weight"] = w.es["time"] + del w.es["time"] + wrcf_dgms = pool.map(wrcf_diagram, wins) + dill.dump(wrcf_dgms, open("generative/wrcf_dgms.dill", "wb")) + print("done.") + + pool.terminate() + + if ZIGZAG_PERS and SW_KERNEL: + print("Sliced Wasserstein Kernel (zigzag)...", end="", flush=True) + zz_dgms1 = [dgm[1] for dgm in zz_dgms if len(dgm) > 1] + zz_gram1 = np.array([[SW_approx(zz_dgms1[i], zz_dgms1[j], 10) + for i in range(len(zz_dgms1))] for j in range(len(zz_dgms1))]) + dill.dump(zz_gram1, open("generative/zz_gram1.dill", "wb")) + print("done, saved.") + if WRCF_PERS and SW_KERNEL: + print("Sliced Wasserstein Kernel (WRCF)...", end="", flush=True) + wrcf_dgms1 = [dgm[1] for dgm in wrcf_dgms if len(dgm) > 1] + wrcf_gram1 = np.array([[SW_approx(wrcf_dgms1[i], wrcf_dgms1[j], 10) + for i in range(len(wrcf_dgms1))] for j in range(len(wrcf_dgms1))]) + dill.dump(wrcf_gram1, open("generative/wrcf_gram1.dill", "wb")) + print("done, saved.") + + if ZIGZAG_PERS and BOTTLENECK_DIST: + print("Bottleneck distance (zigzag)...", end="", flush=True) + zz_dgms1 = list(map(remove_inf, zz_dgms1)) + zz_distmat = np.array([[d.bottleneck_distance(zz_dgms1[i], zz_dgms1[j]) + for i in range(len(zz_dgms1))] for j in range(len(zz_dgms1))]) + dill.dump(zz_distmat, open("generative/zz_distmat.dill", "wb")) + print("done, saved.") + if WRCF_PERS and BOTTLENECK_DIST: + print("Bottleneck distance (WRCF)...", end="", flush=True) + wrcf_dgms1 = list(map(remove_inf, wrcf_dgms1)) + wrcf_distmat = np.array([[d.bottleneck_distance(wrcf_dgms1[i], wrcf_dgms1[j]) + for i in range(len(wrcf_dgms1))] for j in range(len(wrcf_dgms1))]) + dill.dump(wrcf_distmat, open("generative/wrcf_distmat.dill", "wb")) + print("done, saved.") + diff --git a/generative/wrcf_dgms.dill b/generative/wrcf_dgms.dill new file mode 100644 index 0000000..9f39e45 Binary files /dev/null and b/generative/wrcf_dgms.dill differ diff --git a/generative/wrcf_distmat.dill b/generative/wrcf_distmat.dill new file mode 100644 index 0000000..197b226 Binary files /dev/null and b/generative/wrcf_distmat.dill differ diff --git a/generative/wrcf_gram1.dill b/generative/wrcf_gram1.dill new file mode 100644 index 0000000..9832246 Binary files /dev/null and b/generative/wrcf_gram1.dill differ diff --git a/generative/zz_dgms.dill b/generative/zz_dgms.dill new file mode 100644 index 0000000..1293fa2 Binary files /dev/null and b/generative/zz_dgms.dill differ diff --git a/generative/zz_distmat.dill b/generative/zz_distmat.dill new file mode 100644 index 0000000..5d8f889 Binary files /dev/null and b/generative/zz_distmat.dill differ diff --git a/generative/zz_gram1.dill b/generative/zz_gram1.dill new file mode 100644 index 0000000..107b087 Binary files /dev/null and b/generative/zz_gram1.dill differ diff --git a/sliced_wasserstein.py b/sliced_wasserstein.py index 53cbd26..6e8c92d 100644 --- a/sliced_wasserstein.py +++ b/sliced_wasserstein.py @@ -3,6 +3,13 @@ import dionysus as d def diagram_array(dgm): + """Convert a Dionysus diagram to a Numpy array. + + :param dgm: Dionysus Diagram + + :return: a Numpy array of tuples representing the points in the + diagram. + """ res = [] for p in dgm: if p.death != np.inf: @@ -11,8 +18,19 @@ def diagram_array(dgm): def SW_approx(dgm1, dgm2, M): + """Approximate computation of the Sliced Wasserstein kernel. + + :param dgm1: first Diagram + :param dgm2: second Diagram + :param M int: number of directions + + :return: The approximate value of the Sliced Wasserstein kernel of + dgm1 and dgm2, sampled over M dimensions. + """ dgm1 = diagram_array(dgm1) dgm2 = diagram_array(dgm2) + if dgm1.size == 0 or dgm2.size == 0: + return 0 # Add \pi_\delta(dgm1) to dgm2 and vice-versa proj1 = dgm1.dot([1, 1])/np.sqrt(2) proj2 = dgm2.dot([1, 1])/np.sqrt(2) diff --git a/socialevolution.ipynb b/socialevolution.ipynb new file mode 100644 index 0000000..9782ba4 --- /dev/null +++ b/socialevolution.ipynb @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SocialEvolution" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n", + "/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "import igraph as ig\n", + "import dionysus as d" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "plt.style.use(\"fivethirtyeight\")\n", + "plt.rcParams[\"figure.figsize\"] = 10, 6" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import pickle" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2.0.7.dev0'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d.__version__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data import" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "g = ig.read(\"data/realitycommons/SocialEvolution/Proximity.graphml\")" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "g.es[\"time\"] = pd.to_datetime(g.es[\"time\"]).astype(np.int64) // 10**9" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "g.to_undirected(mode=\"each\")" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'IGRAPH U--- 81 2124564 -- \\n+ attr: id (v), id (e), prob2 (e), time (e)'" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1189000931, 1247769643)" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "times = np.unique(g.es[\"time\"])\n", + "(times.min(), times.max())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Temporal partitioning" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "from zigzag import *" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "wins = sliding_windows(g, 0.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zigzag persistence" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp4AAAF9CAYAAACtTmgiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xt002Wi9v0rTQ+UNjRQ0lKgrRwKSDcuBrQwICgHYRAF3OhGt2veLSOgzOx3lDWgdGQeHe2zy8GFOCNWBdRZ6jyOFLaKIn3Gl4Kcq1aHGXGYbtEg2DO2pCWloc37B0MkkDRp06ZN8/2s1bXs73cnuXOblqv30VBTU+MUAAAA0MEiOrsCAAAACA8ETwAAAAQFwRMAAABBQfAEAABAUBA8AQAAEBQETwAAAAQFwRMAAABBQfAMYSUlJZ1dhZBG+wWONgwM7Rc42jAwtF/gaMPWIXgCAAAgKAieAAAACAqCJwAAAIKC4AkAAICgIHgCAAAgKAieAAAACIpWB8/169fLbDZrxYoVrmtOp1O5ubkaMWKE+vXrp9mzZ+vLL790e1xNTY2WLFmitLQ0paWlacmSJaqpqQn8HQAAACAktCp4fvzxx3r11VeVmZnpdv3ZZ5/Vxo0btWbNGu3evVsWi0V33HGHbDabq8yiRYt09OhR5efnKz8/X0ePHtUDDzzQPu8CAAAAXZ7fwbO2tlaLFy/Wc889J7PZ7LrudDqVl5enhx9+WHPnztXIkSOVl5enuro65efnS5KOHz+uDz/8UBs2bFBWVpaysrL0zDPPqKCggI1XAQAAwkSkvwUvBcvJkydrzZo1rutWq1Xl5eWaOnWq61psbKwmTJigI0eOaOHChSoqKlJ8fLzGjRvnKjN+/HjFxcXpyJEjysjI8PiahFLfaKPA0H6Bow0DQ/sFjjYMDO0XONrQnbdcJ/kZPP/whz/oxIkTeumll666V15eLkmyWCxu1y0Wi0pLSyVJFRUVSkxMlMFgcN03GAzq27evKioq2lRxXPyg00ZtR/sFjjYMDO0XONowMLRf4GjD1vEZPEtKSvTkk09q165dioqKCkadAABAK1ltDuUU23S8xqH/Odskg9OphJgIDYw16ERdsySnspJilDsuQekm/j1H5/AZPIuKilRdXa3x48e7rjU1NengwYN6+eWXdfjwYUlSZWWlUlNTXWUqKyuVlJQkSUpKSlJ1dbWcTqer19PpdKqqqspVBgAAtI3V5tC8gmp9bWtyu15/rlnfnfvh+53fntfRM1V6f1Zfwic6hc/FRbNnz9bBgwe1b98+19ePfvQjzZ8/X/v27dPQoUOVnJyswsJC12MaGhp06NAh15zOrKws1dXVqaioyFWmqKhI9fX1bvM+AQBA6+UU264Knd6cqm9WTrHNd0GgA/js8TSbzW6r2CWpZ8+e6t27t0aOHClJWrp0qdavX6+MjAwNHTpUTz/9tOLi4nTnnXdKkoYPH67p06dr2bJl2rBhgyRp2bJlmjlzJvMiAAAIUOk5/0LnJWWtLA+0F79XtbfkoYcekt1u14oVK1RTU6OxY8dq+/btMplMrjKbN2/WI488ovnz50uSZs2apbVr17bHywMAENZSehpbVb5fK8sD7aVNwfP99993+95gMCg7O1vZ2dleH2M2mz2uigcAAIFZNcakTyob/RpuHxgXoVVjTD7LAR2Bs9oBAAhx6aYoPTCih89yKbERLCxCpyJ4AgAQ4rZ9ZdPKj+tbLBNpkHbNJnSicxE8AQAIYQdK7br/o7M+y704qRehE52O4AkAQIg6UGrXnF1nfJZbMaqH5g9hXic6X7usagcAAB3LanNo5eFafVLlkOTUDZZofVbVKF/LibZM7kXoRJdB8AQAoIuz2hyavbNSp845Xdd2fnve5+MInehqGGoHAKCLyym2uYVOXwwidKJroscTAIAurjUnE0UapHdm9tHElNgOrBHQNvR4AgDQxfl7MlFavJHQiS6N4AkAQBf3k4FRMvgokxZv1NG7+hE60aURPAEA6MIOlNq15KOzammGZ6RByrsxIWh1AtqKOZ4AAHRhD+6r8bplUnyk1KeHUXk3JtDTiZBA8AQAoItyOp0qszd7vBcfKZ366YAg1wgIDEPtAAB0QU6nU8sP18rhOXeqTw//FhwBXQnBEwCALuZS6Nzy93qP95nTiVDFUDsAAF2It9AZYZB6GpnTidBG8AQAoIvwFjotPSK0Y1ZfjTBHdVLNgPbBUDsAAF0AoRPhgB5PAAA6idXmUE6xTd/VX1CZvVlfnXXfOInQie6G4AkAQCew2hya/UGVTtV7XrZO6ER3xFA7AACdIPtILaETYYfgCQBAJyiqOO/xukEidKLbIngCABBkTqdTdRc83zNHGwid6LYIngAABNGl1esNXg5gH58UHdwKAUFE8AQAIEh8nUg0sKdBq8dzIhG6L1a1AwAQBN5CZ4xRyuwdpSG9IrVqjEnpJobZ0X0RPAEA6GBsDg9cxFA7AAAdiNAJ/IDgCQBAByF0Au58Bs9NmzZpwoQJSk1NVWpqqm655RYVFBS47i9dulRms9nta/r06W7Pcf78ea1YsUKDBw9W//79dffdd+v06dPt/24AAOgiCJ3A1XwGz/79++u3v/2t9u7dq8LCQk2ePFn33nuv/va3v7nK3HzzzTp+/Ljra+vWrW7PkZ2drR07dmjLli3auXOnbDabFixYoKYmL3tJAAAQwgidgGc+FxfNnj3b7fvf/OY32rJliz7++GP9y7/8iyQpJiZGycnJHh9fW1ur1157TRs3btSUKVMkSS+++KJGjRqlPXv2aNq0aYG+BwAAugxCJ+Bdq+Z4NjU1adu2baqvr1dWVpbr+qFDhzR06FCNHTtWv/zlL1VZWem69/nnn8vhcGjq1KmuawMHDtTw4cN15MiRdngLAAB0DYROoGWGmpoap69CX3zxhWbMmKGGhgbFxcVp06ZNmjlzpiRp27Ztio2NVXp6uk6ePKmcnBw1Nzdrz549iomJ0datW/Xggw+qqqpKBoPB9Zy33367hgwZog0bNnh93ZKSknZ4iwAAdDynU1rzVZS2lbmHyz5RTuWNatDgnj7/uQW6hYyMDK/3/NrHMyMjQ/v27dPZs2f1zjvvaOnSpXrvvfc0cuRIzZ8/31UuMzNTo0eP1qhRo1RQUKA5c+Z0WMVxMZjTRm1H+wWONgwM7Re4rtCGVptDT316VvvLGlVmb3a719V7OrtC+4U62rB1/Bpqj46O1uDBgzV69Gg9/vjjGjVqlJ5//nmPZVNSUtS/f3+dOHFCkpSUlKSmpiZVV1e7lausrFRSUlKA1QcAoPNYbQ7N3VWl/K8bQi50Ap2hTft4Njc3q7Gx0eO96upqlZaWuhYbjR49WlFRUSosLHSVOX36tI4fP65x48a15eUBAOgSnvr0rL6pa77qeoxRhE7AA59D7U888YRmzJihAQMGqK6uTvn5+dq/f7/eeust1dXVafXq1ZozZ46Sk5N18uRJPfnkk7JYLLrtttskSQkJCfrpT3+qxx9/XBaLRb1799Zjjz2mzMxM3XzzzR39/gAAaHeXhtffsTZ4vJ/ZO4rQCXjgM3iWl5dryZIlqqioUK9evZSZman8/HxNmzZNdrtdx44d05tvvqna2lolJydr0qRJeuWVV2QymVzPkZubK6PRqIULF6qhoUGTJ0/WCy+8IKPR2KFvDgCAQFltDuUU21R6rkkpPY26b1isfrG/xmNP5yVDevm1hAIIOz5/MvLy8rzei42N1fbt232+SExMjNatW6d169a1rnYAAHQiq82heQXV+tr2w4En71vtOtfC+SeDTEatGmPyXgAIY5zVDgCAFznFNrfQKclr6IyPlO4aHKu3ZyYq3cQwO+AJYwEAAHhR2lLX5hVmpcVq0019OrA2QOijxxMAAC9Sevq3FoHhdcA/BE8AALxYNcaka+I9/1MZY5TG9I1ieB1oBYbaAQDwIi0+UllJMfqmzu52nc3hgbahxxMAAA+cTqeWH67VWycInUB7IXgCAHCFS6Fzy9/r3a4TOoHAMNQOAIB+2Cj+u/oLKrM366uz7ivaCZ1A4AieAICwZ7U5NPuDKp2q93waEaETaB8MtQMAwl72kVpCJxAE9HgCAMKGp3PXX/2HXQXfnvdY3iAROoF2RPAEAIQFT+eu//fXdl1wen+MOdpA6ATaEUPtAICw4Onc9ZZCpySNT4ruwBoB4YfgCQAIC605d12SBvY0aPX4hA6qDRCeGGoHAIQFf89d7x0tTR8Yq1VjTByDCbQzgicAICysGmPSJ5WNVw23Xy46QtozJ4nACXQQhtoBAN2G1ebQ4r1ndNsHlVq894ysNofrXropSv89o4/iIw1eHz+tfwyhE+hA9HgCALoFT6vWP6ls1NszE5VuipLT6dTvvzinOi8rigbGRTCnE+hg9HgCALoFT6vWv7Y1KafY5vXsdYMuzum8NTVG78/qS28n0MHo8QQAdAveVq2X1l/wGDo5kQgIPoInAKBb8LZqvdTerP3lhE6gK2CoHQDQLawaY9Igk3v4NEUZ9NVZ955QQifQeQieAIBuId0UpbdnJuquwbG6MTlKQ3oZZXO4LyQidAKdi+AJAOg20k1Remlybw3vHU1PJ9AFETwBAN2Gt9XrhE6ga2BxEQAgpFltDuUU2/Rd/QWV2Zvp6QS6MIInACBknbYbtOyKTeMvR+gEuhaG2gEAIWv911GETiCEEDwBACHJanPo0BnPe3dGRYjQCXRBPoPnpk2bNGHCBKWmpio1NVW33HKLCgoKXPedTqdyc3M1YsQI9evXT7Nnz9aXX37p9hw1NTVasmSJ0tLSlJaWpiVLlqimpqb93w0AoNuy2hxavPeMbvugUov3ntHKwzVyyOCx7NT+MYROoAvyGTz79++v3/72t9q7d68KCws1efJk3Xvvvfrb3/4mSXr22We1ceNGrVmzRrt375bFYtEdd9whm83meo5Fixbp6NGjys/PV35+vo4ePaoHHnig494VAKBbsdocmldQra0n7Npf1qitJ+wqONXosWx0hLR2fEKQawjAHz6D5+zZs3XLLbdo8ODBGjp0qH7zm98oPj5eH3/8sZxOp/Ly8vTwww9r7ty5GjlypPLy8lRXV6f8/HxJ0vHjx/Xhhx9qw4YNysrKUlZWlp555hkVFBSopKSkw98gACD05RTbrprL2eyl7LT+MUo30dsJdEWtmuPZ1NSkbdu2qb6+XllZWbJarSovL9fUqVNdZWJjYzVhwgQdOXJEklRUVKT4+HiNGzfOVWb8+PGKi4tzlQEAoCWl5zwvILrSIJNRq+ntBLosv7ZT+uKLLzRjxgw1NDQoLi5Or7/+ujIzM13B0WKxuJW3WCwqLS2VJFVUVCgxMVEGww/zcAwGg/r27auKiooWX5ceUd9oo8DQfoGjDQND+/knvilKkudezGiDU0PjmpUW26wH0+xqLLOppCy49QtlfAYDRxu6y8jI8HrPr+CZkZGhffv26ezZs3rnnXe0dOlSvffee+1WwZZeF96VlJTQRgGg/QJHGwaG9vOP1eaQvq6R0dCoJvej15UQ6VTB7cksJGojPoOBow1bx6/gGR0drcGDB0uSRo8ereLiYj3//PNavny5JKmyslKpqamu8pWVlUpKSpIkJSUlqbq6Wk6n09Xr6XQ6VVVV5SoDAMAll04iKj3XJFOkQUfPNOr0OedV5frEGJSXaSd0AiGkTft4Njc3q7GxUenp6UpOTlZhYaHrXkNDgw4dOuSa05mVlaW6ujoVFRW5yhQVFam+vt5t3icAAFeuXv/g1HmPoTPGKO281aLBPa++B6Dr8tnj+cQTT2jGjBkaMGCAa7X6/v379dZbb8lgMGjp0qVav369MjIyNHToUD399NOKi4vTnXfeKUkaPny4pk+frmXLlmnDhg2SpGXLlmnmzJl0TQMA3Hhave5JZu8ojTBHqaQyCJUC0G58Bs/y8nItWbJEFRUV6tWrlzIzM5Wfn69p06ZJkh566CHZ7XatWLFCNTU1Gjt2rLZv3y6TyeR6js2bN+uRRx7R/PnzJUmzZs3S2rVrO+gtAQBClb+r14f08mumGIAuxudPbl5eXov3DQaDsrOzlZ2d7bWM2WzWSy+91PraAQDCSkpPz0dgXm6QyahVY0w+ywHoejirHQDQZTz2o3iZoq4+BjM6QhrTN0p3DY7V2zMT2SAeCFGMVQAAugSn06nff3FONof7gqE+MQbtvNXC6nWgGyB4AgA6zaWtk76rv6Aye7O+Ous+x9PSI0I7ZvUldALdBMETANApLm2d5G0VO6ET6H6Y4wkA6BQtbZ1E6AS6J4InAKBTfFd/weP1qAgROoFuiuAJAAg6p9OpMnuzx3tT+8cQOoFuiuAJAAgqp9Op5Ydrr1pIJEkDekZo7fiETqgVgGAgeAIAguZS6Nzy93q361ER0syBMdp5a1/26AS6MVa1AwCCwlvoZCERED7o8QQAdDhCJwCJ4AkA6GCETgCXEDwBAB2G0AngcszxBAC0O6vNoac+Pav9ZY1XbZtE6ATCF8ETANCurDaH5u6q0jd1V+/TSegEwhtD7QCAdvXUp2c9hs4YIycSAeGO4AkAaDdOp1P7yxo93svsHUXoBMIcwRMA0C4uLSTydhTmkF7M7gLCHcETABAwb6vXLxlkMmrVGFOQawWgq+HPTwBAQLyFzhjjxeH1Ib0itWqMiaMwARA8AQBtxz6dAFqDoXYAQJsQOgG0FsETANBqhE4AbUHwBAC0CqETQFsxxxMA4BeOwQQQKIInAMAnjsEE0B4IngCAFlltDt32QZW+recYTACBYY4nAMCrSz2dnkKnxDGYAFqHHk8ghFhtDuUU21R6rkkpPY1syo0Oc+mzVni6QVXnnV7LcQwmgNbw2eO5fv16TZkyRampqRoyZIgWLFigY8eOuZVZunSpzGaz29f06dPdypw/f14rVqzQ4MGD1b9/f9199906ffp0+74boBuz2hyaV1CtrSfs2l/WqK0n7JpXUC2rzdHZVUM3c/lnraXQyTGYAFrLZ/Dcv3+/7r//fhUUFOjdd99VZGSk5s2bp++//96t3M0336zjx4+7vrZu3ep2Pzs7Wzt27NCWLVu0c+dO2Ww2LViwQE1NTe37joBuKqfYpq9t7j8vX9ualFNs66Qaobvy9Fm7Ulq8UW/PTKTHHUCr+Bwj2b59u9v3L774otLS0nT48GHNmjXLdT0mJkbJycken6O2tlavvfaaNm7cqClTprieZ9SoUdqzZ4+mTZsWyHsAwkLpOc9BoMzLdaCtvqu/0OL9QSZCJ4C2afXiorq6OjU3N8tsNrtdP3TokIYOHaqxY8fql7/8pSorK133Pv/8czkcDk2dOtV1beDAgRo+fLiOHDkSQPWB8JHS0+jxej8v14HWsNocWrz3jGbvrNBfqj0Hz97R0l2DYwmdANrMUFNT430Cjwf33XefvvrqK+3Zs0dG48V/8LZt26bY2Filp6fr5MmTysnJUXNzs/bs2aOYmBht3bpVDz74oKqqqmQwGFzPdfvtt2vIkCHasGGDx9cqKSkJ4K0B3ctpu0H/+UWMTjX88PfiwB7Nei7zvAbEturHGHDj6bN1peToZr04is8aAN8yMjK83mvVcsRf//rXOnz4sHbt2uUKnZI0f/58139nZmZq9OjRGjVqlAoKCjRnzpw2VPmiliqOi8GcNmq7UGu/DEnvD7q40rjsXJP6dYFV7aHWhl1NV2m/tXvP6FSD3eO9qAhpav8YrR2f0CV7ObtKG4Yq2i9wtGHr+B08s7OztX37du3YsUPXXHNNi2VTUlLUv39/nThxQpKUlJSkpqYmVVdXq2/fvq5ylZWV+vGPf9y2mgNhKN0UpU039ensaqAbuHxrrr9/3+ixTFSEtG9uEvt0Amg3fs3xfPTRR7Vt2za9++67GjZsmM/y1dXVKi0tdS02Gj16tKKiolRYWOgqc/r0aR0/flzjxo1rY9UBAG1x5dZcVec9l5vaP4bQCaBd+ezxXL58uf70pz/p9ddfl9lsVnl5uSQpLi5O8fHxqqur0+rVqzVnzhwlJyfr5MmTevLJJ2WxWHTbbbdJkhISEvTTn/5Ujz/+uCwWi3r37q3HHntMmZmZuvnmmzv0DQIA3PmzXdKAnhFaOz4hSDUCEC58Bs/NmzdLkubOnet2/dFHH1V2draMRqOOHTumN998U7W1tUpOTtakSZP0yiuvyGT6YWPh3NxcGY1GLVy4UA0NDZo8ebJeeOEFt7miAICO521rLqnrz+kEENp8Bs+ampoW78fGxl6116cnMTExWrdundatW+d/7QAA7cJqc2jl4Vp9UuVQ7XnP567HGKW9c5jTCaDjcMguAHRzVptDs3dW6tQ571shRRik/zOtD6ETQIdq9QbyAIDQklNsazF0xhil/Fv6aOqA2CDWCkA4oscTALo5X3M6GV4HECwETwDohi7fp9Nq8372OlsmAQgmgicAdDOX9un0tWVScqyBLZMABBVzPAGgm/G1T6dB0qR+Ufq/sy1smQQgqOjxBIBupqU5nREG6eA85nQC6BwETwAIQZfP4UzpadSqMSZX72W/WO+DWT2NInQC6DQETwAIMZ7mcH5S2ai3ZyYqLT5SEQaD18f26cFpcQA6D8ETAEKMpzmcX9uadNsHVXI0S2V2zycTRRqkvBtZTASg8xA8ASDEeJvD+W391YEzwnBxeL1PD6PybkzQxBQ2iQfQeQieABBiUnr6N1zO2esAuhq2UwKAELNqjEmDTL7DZ2bvKEIngC6F4AkAISbdFKW3ZybqzkE9FN3Cb/EhvRjUAtC1EDwBIASlxUcqIcaoRs/riBQXebFnFAC6Ev4cBoAQYrU59NSnZ7W/rNHr6vW4SIPemt6bU4kAdDkETwAIEVabQ3N3VembuqsDZ4zx4pzOIb0i3TaTB4CuhOAJAO2gpZOE2stTn571GjpZvQ4gFBA8ASBALZ0k1B7h80CpXQ/uq9EpD/t0SqxeBxA6WFwEAAHydpJQTrEt4Oc+UGrXnF1n9G19s5xeyrB6HUCoIHgCQIC8nSRU5uV6azy4r0YtPcsgk5HV6wBCBsETAALk7SShfn6eMOSN0+n0unI9QtJdg2PbbTgfAIKB4AkAAfJ0klCgPZFOp1PLD9fK4WWfzoHxRm26qQ+hE0BIYWIQAATo0klCOcU2lZ1rUr8AV7VfCp1b/l7v8X6kQcq7MSGQKgNApyB4AkA7SDdFadNNfQJ+Hm+hM8Ig9TRKfXoYlXdjgiamxAb8WgAQbARPAOhkB0rtWrq/Vt83NMkpg+ouuK9ft/SI0I5ZfdkyCUDII3gCQCc6UGrXnIIzanJlTUIngO6LxUUA0IkWf1RzWeh0R+gE0N0QPAGgExwotWvOxzH67pyXZesSoRNAt8NQOwAE2bavbLr/o7OSvO/zGWUQoRNAt+Ozx3P9+vWaMmWKUlNTNWTIEC1YsEDHjh1zK+N0OpWbm6sRI0aoX79+mj17tr788ku3MjU1NVqyZInS0tKUlpamJUuWqKampn3fDQB0cVabQ4s/Ouuz3IQkQieA7sdn8Ny/f7/uv/9+FRQU6N1331VkZKTmzZun77//3lXm2Wef1caNG7VmzRrt3r1bFotFd9xxh2y2H84pXrRokY4ePar8/Hzl5+fr6NGjeuCBBzrmXQFAF7XkozPyPrh+UXKM9LtJvYNSHwAIJp9D7du3b3f7/sUXX1RaWpoOHz6sWbNmyel0Ki8vTw8//LDmzp0rScrLy1NGRoby8/O1cOFCHT9+XB9++KF27dqlrKwsSdIzzzyjWbNmqaSkRBkZGR3w1gCgazlQateRigstlrlrcGxAm88DQFfW6jmedXV1am5ultlsliRZrVaVl5dr6tSprjKxsbGaMGGCjhw5ooULF6qoqEjx8fEaN26cq8z48eMVFxenI0eOeA2eJSUlra1e2KGNAkP7BY429M+n30fo51/ESDJ4LXNDL4ce6X9OjWXVKikLXt1CHZ/BwNB+gaMN3bXUodjq4Lly5UqNGjXK1XNZXl4uSbJYLG7lLBaLSktLJUkVFRVKTEyUwfDDL1yDwaC+ffuqoqKiTRWH6C0OEO0XONrQP1abQ8sOVfgcYt88YwA9na3EZzAwtF/gaMPWaVXw/PWvf63Dhw9r165dMhq9r8YEAFwMnCsP12r3d+d13kfqXH1DHKETQLfnd/DMzs7W9u3btWPHDl1zzTWu68nJyZKkyspKpaamuq5XVlYqKSlJkpSUlKTq6mo5nU5Xr6fT6VRVVZWrDAB0J1abQ/MKqvW1ranFcgZJmyf30vwhpuBUDAA6kV8byD/66KPatm2b3n33XQ0bNsztXnp6upKTk1VYWOi61tDQoEOHDrnmdGZlZamurk5FRUWuMkVFRaqvr3eb9wkA3UVOsc1n6DTKqfd+0ofQCSBs+OzxXL58uf70pz/p9ddfl9lsds3pjIuLU3x8vAwGg5YuXar169crIyNDQ4cO1dNPP624uDjdeeedkqThw4dr+vTpWrZsmTZs2CBJWrZsmWbOnMm8CADdjtXmUOFpe4tlekYatH54gyamxAapVgDQ+XwGz82bN0uSa6ukSx599FFlZ2dLkh566CHZ7XatWLFCNTU1Gjt2rLZv3y6TyeT2PI888ojmz58vSZo1a5bWrl3bbm8EALoCq82hubuqVHXee5lBJqPenpmoxrJvglYvAOgKfAZPf04XMhgMys7OdgVRT8xms1566aXW1Q4AQsxTn57VN3WeVxJFG6TpA2OUOy5B6aYotkwCEHY4qx0A2onT6dT+skaP93pHG7RnjoWV6wDCGsETANrIanMop9im0nNN6hcboQiDQWV2z72d0wf2IHQCCHsETwBoA3+3S5IuzulcNYaV6wBA8ASANvC1XVKMUcrsHaUhvSI5ex0A/ongCQBt8LXtgtd7lh4R2jGrr0aYCZsAcDm/NpAHAPzgQKldxZUOj/ciDCJ0AoAXBE8AaIUDpXbN2XVG3o5evzbBSOgEAC8IngDQCg/uq1FLy4lG9okOWl0AINQQPAHAD1abQ4v2VOtUvbe+TlavA4AvLC4CAB8uHYPp7UQi6eLZ62/PTGT1OgC0gB5PAPCKuHXeAAAgAElEQVShpWMwJSnSIG2d3pvQCQA+0OMJhJjLT8tJ6Wlkj8h2dmX7PvajeK/HYEZIGhhvVN6NCZqYEhvcigJACCJ4AiHE02k5n1Q2MsTbTjy1765vG2RzOD2Wnz84Vptu6hOs6gFAyGOoHQghnk7L+drWpJxiWyfVqHvx1L7eQicLiQCg9ejxBEJI6TnPG/mUebmO1vHWvpdwDCYABIbgCYSQlJ5Gj9f7ebmO1vHWvtLF0Ll3ThKbwwNAABhqB0LIqjEmDTK5h6NwHPK12hxavPeMbvugUov3npHV5vn4ytZ67EfxMho838vsHUXoBIAA0eMJhJB0U5TenpmonGKbys41qV8YrmpvaYGVpKtW/EvSL/d9r8OVDjU5paTYCG2abHatQt/2lU0P7jsrL1M5XYb04tclAASK36RAiEk3RYX1SmpvC6yyj9Tqy5oLbvcOlZ+XvbFZ1Zd1iH53rlm37zojoyR/+0nDsVcZADoCwRNASPnadsHj9cMVjTpz3r3b0tvxls3//PJlTF8WEgFAeyJ4AggpFXbPkbHe11h5G+y+PandnxMAwhmLiwCEFEsPz6t/erbzn9HeFhkBANqO4AkgpAzu5XnIe3xSzFUr/gfGRSihjYH0f18f17YHAgC8YqgdQEhZNcakTyob3RYRDTIZtXp8giS5rfi/b1is/p/dZ1r9GguuidSD/2JutzoDAC4ieAIIKb62lLp8xf/ivWdU3ej/c0dHSHk39tL8IaxgB4COQPAEEHL83VLK1xGYl9symcAJAB2NOZ4Auq1eUf6vECJ0AkDHo8cTQEiz2hxaebhWn1Q5JDl1gyVav8iM09rPbNpb7t8W8StG9ejYSgIAJBE8AYQwq82h2TsrdercD3t47vz2vHZ+e97v51gxqoceuz6xI6oHALiCX0PtBw4c0N13361rr71WZrNZb7zxhtv9pUuXymw2u31Nnz7drcz58+e1YsUKDR48WP3799fdd9+t06dPt987ARB2coptbqGzNXpHSTULBxA6ASCI/Aqe9fX1GjlypFavXq3Y2FiPZW6++WYdP37c9bV161a3+9nZ2dqxY4e2bNminTt3ymazacGCBWpq8n/yPwBcrjWLh670+rTwPe8eADqLX0PtM2bM0IwZMyRJP//5zz2WiYmJUXJyssd7tbW1eu2117Rx40ZNmTJFkvTiiy9q1KhR2rNnj6ZNm9aWugMIcyk9jb4LebBlci9NTPH8RzQAoOO026r2Q4cOaejQoRo7dqx++ctfqrKy0nXv888/l8Ph0NSpU13XBg4cqOHDh+vIkSPtVQUAYWbVGJNiWnG0ZQ+j9P5P+rCCHQA6SbssLpo+fbpuv/12paen6+TJk8rJydGcOXO0Z88excTEqKKiQkajUYmJ7nOpLBaLKioqvD5vSUlJe1SvW6ONAkP7Ba4z2/C03aAmZw9JvtKnUzckNOmxoQ4l1Z1SV/rfzmcwcLRhYGi/wNGG7jIyMrzea5fgOX/+fNd/Z2ZmavTo0Ro1apQKCgo0Z86cNj9vSxXHxQ86bdR2tF/ggt2GVptDOcU2lZ5rUkpPoyrtTbog30cTxUQY9Od/TQ9CDVuHz2DgaMPA0H6Bow1bp0O2U0pJSVH//v114sQJSVJSUpKamppUXV2tvn37uspVVlbqxz/+cUdUAUA3Y7U5NK+g2u2Mdn89f2OvDqgRAKC1OuTkourqapWWlroWG40ePVpRUVEqLCx0lTl9+rSOHz+ucePGdUQVAHQz2Udq2xQ6Fw+LZk4nAHQRfvV41tXVuXovm5ubderUKR09elS9e/dW7969tXr1as2ZM0fJyck6efKknnzySVksFt12222SpISEBP30pz/V448/LovFot69e+uxxx5TZmambr755g57cwC6B6vNof/vtP+bwhskxUYa9PsJJkInAHQhfgXPzz77TLfffrvr+9zcXOXm5uqee+7R+vXrdezYMb355puqra1VcnKyJk2apFdeeUUmk8ntMUajUQsXLlRDQ4MmT56sF154QUZj27ZDARC6rpyruWqMSemmKK9lb99VrfPN/j33jclReu/WpHasLQCgvfgVPCdNmqSamhqv97dv3+7zOWJiYrRu3TqtW7fO/9oB6HY8zdXcedKut6b3uWpvzUtlT9b5N8Q+oGeENk7q3a71BQC0nw6Z4wkA3uQU266aq1l/Qfq3D7+X1ebwWdaTqAhp5sAY7by1r9eeUwBA5yN4Aggqb8dc1l9wKqfY5lfZK+2bm6Q/3ULoBICujuAJIKhaOuay7IqgGenHqUQ9jNIIM4ETAEIBwRNAUK0aY1Kcl9nl/S4LpQdK7dpb6ntz+I0T2aMTAEIFwRNAUKWbovTW9D6Ku6I7c5Dp4up26eKiojv/fEZOH8+1+oY4tksCgBDSIScXAUBLJqbE6uC8SOUU21R2rkmmKIOcTunfP6zS13VONTY5daGF1JnSM0K7WEgEACGH4AmgU6SborTppj6tPgrTIBE6ASBEMdQOoFP5u2XSJZOTowidABCiCJ4AOpW/WyZJUnIP6XdsEA8AIYvgCaBTtbS90iW9o6VbU2P0f29LorcTAEIYczwBdBqrzSFrbctbJl2fGKkP5yQHqUYAgI5E8ATQKfxZVJQYJW2Z0ieItQIAdCSG2gF0iocO1LQYOiMl7Z7L0DoAdCcETwBBd6DUrj0+TiXqH28kdAJAN8NQO4Cgsdocyj5Sqw++Pd9iuUiDlHdjQpBqBQAIFoIngKCw2hya+X6VyuzNLZbr3zNCmyabNTElNkg1AwAEC8ETQJudthu0du8ZlZ5rUkpPo34yMEq/La5XRX2THJJ6GKXEHkbl3ZigdX+p8xk6U2INOrYgJTiVBwAEHcETQJtYbQ795xcxOtVgd13besLuVqb+glRf16Tbd51Ry5Hz4vD65pvYHB4AujMWFwFok5xim041+PcrxFfo7Blp0Dsz+zC8DgDdHD2eANqkNUddtqRHhHRonoUV7AAQBujxBNAm/hx16YtB0rYZfQidABAmCJ4A2mTVGJMG9vA1iO5dXKRB7/2E4XUACCcMtQNok3RTlJ7LPK83vu+jsnNN6vfPVe33f3S2xcf1jpamD4zVqjEmejoBIMwQPAG02YBYp1YNMimn2KbSc03aderiL5UL3sr3jNDOW/sSOAEgTBE8AbTZabtBywqqWzxz/ZIeRhE6ASDMMccTQJu9cDLSr9BplLTtFhYRAUC4o8cTQKtYbQ7X0Pqx71te2W6Q1K9nhDZzBCYAQARPAK1gtTk0z21o3fugSVSEtG9ukkaY6eUEAFxE8ATglxf+VqPsj+vl9LP81P4xhE4AgBu/5ngeOHBAd999t6699lqZzWa98cYbbvedTqdyc3M1YsQI9evXT7Nnz9aXX37pVqampkZLlixRWlqa0tLStGTJEtXU1LTfOwHQYV74W41WtiJ0RkdIa8cndGidAAChx6/gWV9fr5EjR2r16tWKjb16ntazzz6rjRs3as2aNdq9e7csFovuuOMO2Ww2V5lFixbp6NGjys/PV35+vo4ePaoHHnig/d4JgA7z2Cf1rSo/rX8MC4kAAFfxa6h9xowZmjFjhiTp5z//uds9p9OpvLw8Pfzww5o7d64kKS8vTxkZGcrPz9fChQt1/Phxffjhh9q1a5eysrIkSc8884xmzZqlkpISZWRktOd7AtDOmvzt6pQ0yGTUano7AQAeBLydktVqVXl5uaZOneq6FhsbqwkTJujIkSOSpKKiIsXHx2vcuHGuMuPHj1dcXJyrDIDOYbU5tHjvGd32QaUW7z0jq83R5ufqYZTenplIbycAwKOAFxeVl5dLkiwWi9t1i8Wi0tJSSVJFRYUSExNlMBhc9w0Gg/r27auKigqvz11SUhJo9bo92igw4d5+p+0G/ecXMTrV8MPfoIe+q9dzmec1IPbybs5YXdwcqSVObRhxXo1l36ikrCNq2z2F+2ewPdCGgaH9AkcbumtpJLtLr2pnCL5lTFMIDO0nrd17Rqca7G7XTjVE6I3v+2jTdX1+uLj/dIvPEx0h/feMRPbqbCU+g4GjDQND+wWONmydgINncnKyJKmyslKpqamu65WVlUpKSpIkJSUlqbq6Wk6n09Xr6XQ6VVVV5SoDoO0u39TdFGmQwSCddTiV0tOoVWNMXoe+S895PnWo7LLrTmfLEzwHmYwMrwMA/BLwHM/09HQlJyersLDQda2hoUGHDh1yzenMyspSXV2dioqKXGWKiopUX1/vNu8TQOtd2tR96wm79pc16oNT57Xz2/PaX9aorSfsmldQfdW8zUvzOo9973k+pynqhz8Qlx+ubeHVmwmdAAC/+dXjWVdXpxMnTkiSmpubderUKR09elS9e/dWamqqli5dqvXr1ysjI0NDhw7V008/rbi4ON15552SpOHDh2v69OlatmyZNmzYIElatmyZZs6cSfc0EKCcYluL56V/bWtSTrFNm266OHR+9elDV3M6fwidW/7ufSuluyyNhE4AgN/8Cp6fffaZbr/9dtf3ubm5ys3N1T333KO8vDw99NBDstvtWrFihWpqajR27Fht375dJpPJ9ZjNmzfrkUce0fz58yVJs2bN0tq1a9v57QDhx9tw+eUuHzr3FVQl6YNT59X71e9aLLN4WLSWJJ3zr5IAAMjP4Dlp0qQWTxkyGAzKzs5Wdna21zJms1kvvfRS62sIoEUpPY0+y/S7rIw/QdUTS48I7ZjV1+0YzJISTh8DAPgv4DmeADrXqjEmDTJ5D5+DTBcXGF3iT1C9UoxRV4VOAABaq0tvpwTAt3RTlN6emaicYpvKzjUp/p+r2m0Op/p5WNW+aoxJn1Q2+hxuv1xm7yhCJwAgYARPoBtIN0W5Fg/5U/byoGqta9LJupZD6JBe/KoAAASOoXYgDKWbonTfsFj9T63DZ+g0R8ltqB4AgLaiGwMIQwdK7Zq964xfZffOTWLLJABAu6DHEwhDCz70L3SuviGO0AkAaDcETyDMbPvKproLLZcxGi6Gzgf/xRycSgEAwgJD7UCIO1Bq19L9tao53yxzTITybkzQxJRYj2WtNocWf3S2xee7a3Cs3wuVAABoDXo8gRB2oNSuuQVndLKuSWcdTp2sa9LcgjM6UGq/qqzV5tDcXVVq9vGcLCQCAHQUejyBELZ0f60uON2vXXBevJ53o9x6QgfFR+ibupZjJ3M6AQAdieAJhLCa856DZHXDxZ7PS6H0rMP3Xp2Lh0UzpxMA0KEInkAIM8dE6Kzj6kDZ0CQ1OT08wAOjQXppUi/NH8IQOwCgYzHHEwhheTcmKNLgfi3SIPk7WD7IZFTx/CRCJwAgKAieQAibmBKrd2b2UVq8UQlRBqXFG/XOzD7qE+v9RzvGKI3pG6W7Bsfq7ZmJzOkEAAQNQ+1AiJuYEqujd/2wfZLV5tCFC57nfpqjDdo126IRZsImACD46PEEupmnPj2risarr0dFiNAJAOhUBE+gG3E6ndpf5iF1ShrVJ4rQCQDoVARPoJtwOp1afrhWZXbPw+xDejGzBgDQuQieQDdwKXRu+Xu9x/uDTEZOJAIAdDq6QIAQ5y10xhilzN5RGtIrUqvGmFi9DgDodARPIERZbQ499elZ7S9rvGp43dIjQjtm9WVOJwCgSyF4AiHIanNo7q4qj2evEzoBAF0VczyBEPTUp2c9hs4YowidAIAui+AJhJiWtkzK7M2WSQCArouhdsCLA6V2Ld1fq5rzzTLHRCjvxgRNTIn1/cAOsO0rm/7fgzY1XHAqwiBdcHoux5ZJAICujB5PwIMDpXbNLTijk3VNOutw6mRdk+YWnNGBUnvQ67LtK5vu/+iszl1wqlneQydbJgEAujq6RwAPlu6vvSrgXXBevH75uejtyWpzaOXhWn1S5ZDk1A2WaP0iM05L9p31+hi2TAIAhBKCJ+BBzXnPp//UerkeKKvNodk7K3Xq3A9pd+e351Vw6ryavPRwStLeOUnM6QQAhAyG2gEPzDGefzQSvFwPVE6xzS10XtJS6OxhFKETABBS2uVf0dzcXJnNZrevYcOGue47nU7l5uZqxIgR6tevn2bPnq0vv/yyPV4a6BB5NyYo0uB+LdJw8XpHKD3X1OrHbJzYqwNqAgBAx2m37puMjAwdP37c9XXw4EHXvWeffVYbN27UmjVrtHv3blksFt1xxx2y2Wzt9fJAu5qYEqt3ZvZRWrxRCVEGpcUb9c7MPh22qj2lp9HvshGStkzupflDWEgEAAgt7TbHMzIyUsnJyVdddzqdysvL08MPP6y5c+dKkvLy8pSRkaH8/HwtXLiwvaoAtKuJKbEdtpDoSqvGmHSorMHjcPvlBvSM0M5b+7KICAAQktqtx/Obb77RiBEjdN111+lnP/uZvvnmG0mS1WpVeXm5pk6d6iobGxurCRMm6MiRI+318kBISzdF6bfXt9yD2TvaQOgEAIQ0Q01NTctdLH7485//rLq6OmVkZKiqqkrr1q1TSUmJDh8+rJKSEs2cOVN//etflZqa6nrML37xC5WWlmr79u1en7ekpCTQqgFd3mm7Qf+7JFIfn42UZPBa7icWh54a7ghexQAAaIOMjAyv99plqP2WW25x+/7666/X6NGj9cc//lE33HBDm5+3pYrjYjCnjdquK7TfgVK77j18RvUXWi43MC5Ca24a0OV6O7tCG4Yy2i9wtGFgaL/A0Yat0yF7w8THx2vEiBE6ceKEa95nZWWlW5nKykolJSV1xMsDIcFqc+jOP/sOnbemxuj9WQyxAwBCX4cEz4aGBpWUlCg5OVnp6elKTk5WYWGh2/1Dhw5p3LhxHfHyQEh46ECN7D52UUqLN+qP0wmdAIDuoV2G2letWqWf/OQnGjhwoGuO57lz53TPPffIYDBo6dKlWr9+vTIyMjR06FA9/fTTiouL05133tkeLw90iAOldi3dX6ua880yx0Qo78YEj9spWW0O5RTbVHquSSk9jbpvWKxe/Yfd9f2qMSb91ydn9KdvfHRtXqEj9w0FAKAztEvw/O6777Ro0SJVV1erb9++uv766/XnP/9ZaWlpkqSHHnpIdrtdK1asUE1NjcaOHavt27fLZGIfQnRNB0rtmltwxnVe+1lHk+YWnLlqL0+rzaF5BdX62vZD1+V/f213O+f93RN2nW/l6/fvGaFNk80dtm8oAACdoV2C58svv9zifYPBoOzsbGVnZ7fHywEdbun+WrfwKEkXnBevX763Z06xzS10Xip3udaGzpuSo/TOrcx/BgB0P5zVDnhQc77Z4/XaK6635ajLlvSIkH43qXe7PicAAF0FwRPwwBzj+Ucj4YrrrTnq0pe4SIO2zejDQiIAQLdF8AQ8yLsxQZFX7OXuabHPqjEmDTIZryrXWgZJB+dZmNMJAOjWCJ6ABxNTYvXOzD5KizcqIcqgtHjjVQuLpItHXT43McGt3IuTeunW1Bj1aMVP1+bJvejpBAB0e+2yuAjojiamxLotJPLEanPoPw/U6mTdxbmetY4m5XxWr2vNkWrwPE3UTc9Ig34/waT5Q9jhAQDQ/RE8gQB4WtX+ta1JVQ2+Fx3dNThWm27q01FVAwCgy2GoHQiAt1XtNkfLjxvY06BVY+jlBACEF4InEIC2rGqPiZDev9XCnE4AQNgheAJeWG0OLd57Rrd9UKnFe8/I6qEb875hsa36IYo0SNvZMgkAEKaY4wl44OkozE8qG/X2zES30LjuL3XyYw2RpItbJnlaGQ8AQLigxxPwwNuioenvVbn1fh4qb/T7OTdP7kXoBACENYIn4IG3RUOVDc3aesKueQXVstocanJ6LOYmwiBtmdyLLZMAAGGPoXbAA1+Lhr62NSmn2Ka+MVJZg/dyA3saWEgEAMA/0eMJeODpKMwrldZf0BhLjMd7g+IjdNfgWEInAACXoccT8CDdFKW3ZyYqp9imPd81qLLh6jH1Unuz9pe7r3SPMEgbJybonoz4YFUVAICQQfAEvEg3RWnTTX1ktTk08/0qldl/WL8ea5S+Ous+D9TSI0I7ZvXVCDM9nAAAeMJQO+DDqboLqrC7b5pkv2LtEaETAADfCJ6AD0v317a4VyehEwAA/xA8gRYcKLXr2zrPWytJhE4AAFqD4Al4caDUrrkFZ+Rtq84IgwidAAC0AsET8GLp/lpdaGGD+I0TEwidAAC0AsET8OL7Bu9D7Hk3smUSAACtxXZKCDtWm0M5xTadqIrR4O/OaNUYk2uTd6vNoX/bVaHjdd4fn9IzgtAJAEAbEDwRVqw2h+YVVOtrW5Mkoz49a9cnlY16e2aiJGnitgrVtTC8bpS0ebI5KHUFAKC7IXgirOQU2/4ZOn9w6dx1SS2GzpSeEdo82ayJKbEdWUUAALotgifCSuk5z/M2y841qdnZQuqU9OWClI6oEgAAYYPgibCS0tPo8fqBskZFtrDUztBB9QEAIJywqh1h5b5hsYr0kCKbJTW2cDzR8lE9OqxOAACEC3o8EVZe/Ye9xb05r2TQxdD52PWJHVYnAADCBcETYeVr2wW/yo3pG6Xdtyd1cG0AAAgvQR9q37x5s6677jolJyfrpptu0sGDB4NdBYSxCnsL4+mXGdKLv8kAAGhvQQ2e27dv18qVK/WrX/1KH330kbKysnTXXXfp22+/DWY1EMZs572fRnTJIJNRq8aYglAbAADCS1CD58aNG/Xv//7v+o//+A8NHz5c69atU3Jysl5++eVgVgNh7HuH7zJvz0x0nWQEAADaj6GmpqYVSy3arrGxUSkpKdqyZYvmzZvnur58+XIdO3ZMO3fuvOoxJSUlwagawsgN+2PlfXMkpwZGnNd/T/BvOB4AAFwtIyPD672gTWSrrq5WU1OTLBaL23WLxaKKigqPj2mp4rgYzGmjVtp/2uutIT0M+vSeIUGsTOjjMxgY2i9wtGFgaL/A0Yatwz6eCCsLrvH8t9aCayL16T0DglwbAADCS9CCZ2JiooxGoyorK92uV1ZWKimJbWsQHC9OSb4sfF6cZbLgmki9OCW58yoFAECYCFrwjI6O1ujRo1VYWOh2vbCwUOPGjQtWNQC9OCVZNQsH6OMb7apZOIDQCQBAkAR1s8Jf/OIXeuCBBzR27FiNGzdOL7/8ssrKyrRw4cJgVgMAAACdIKjB81//9V915swZrVu3TuXl5br22mv11ltvKS0tLZjVAAAAQCcI+vEsixYt0qJFi4L9sgAAAOhkrGoHAABAUBA8AQAAEBQETwAAAAQFwRMAAABBQfAEAABAUBA8AQAAEBQETwAAAASFoaamxtnZlQAAAED3R48nAAAAgoLgCQAAgKAgeAIAACAoCJ4AAAAICoInAAAAgoLgCQAAgKAgeHZxr776qm677TalpaXJbDbLarVeVaampkZLlixRWlqa0tLStGTJEtXU1LiV+eKLL3TrrbeqX79+uvbaa7VmzRo5neG7k9bmzZt13XXXKTk5WTfddJMOHjzY2VXqEg4cOKC7775b1157rcxms9544w23+06nU7m5uRoxYoT69eun2bNn68svv3Qr48/nsbtav369pkyZotTUVA0ZMkQLFizQsWPH3MrQhi3btGmTJkyYoNTUVKWmpuqWW25RQUGB6z7t1zrr16+X2WzWihUrXNdow5bl5ubKbDa7fQ0bNsx1n/YLDMGzizt37pymTp2qlStXei2zaNEiHT16VPn5+crPz9fRo0f1wAMPuO6fPXtWd9xxh5KSkrR7926tXr1av//97/Xcc88F4y10Odu3b9fKlSv1q1/9Sh999JGysrJ011136dtvv+3sqnW6+vp6jRw5UqtXr1ZsbOxV95999llt3LhRa9as0e7du2WxWHTHHXfIZrO5yvj6PHZn+/fv1/3336+CggK9++67ioyM1Lx58/T999+7ytCGLevfv79++9vfau/evSosLNTkyZN177336m9/+5sk2q81Pv74Y7366qvKzMx0u04b+paRkaHjx4+7vi7vnKD9AsMG8iHis88+05QpU/SXv/xF6enpruvHjx/XuHHjtGvXLo0fP16SdOjQIc2aNUsff/yxMjIytGXLFj3xxBP6xz/+4QoT69at08svv6xjx47JYDB0ynvqLNOmTVNmZqZ+97vfua6NGTNGc+fO1eOPP96JNetaBgwYoLVr1+ree++VdPGv/BEjRmjx4sVavny5JMlutysjI0NPPfWUFi5c6NfnMZzU1dUpLS1Nb7zxhmbNmkUbttE111yjxx9/XPfddx/t56fa2lrddNNN+t3vfqc1a9Zo5MiRWrduHZ9BP+Tm5urdd9/VoUOHrrpH+wWOHs8QV1RUpPj4eI0bN851bfz48YqLi9ORI0dcZX784x+79WBNmzZNpaWlHofuu7PGxkZ9/vnnmjp1qtv1qVOnutoLnlmtVpWXl7u1XWxsrCZMmOD2WfP1eQwndXV1am5ultlslkQbtlZTU5O2bdum+vp6ZWVl0X6t8PDDD2vu3LmaPHmy23Xa0D/ffPONRowYoeuuu04/+9nP9M0330ii/dpDZGdXAIGpqKhQYmKiW6+lwWBQ3759VVFR4SrTv39/t8dZLBbXvWuuuSZo9e1s1dXVampqcr3/SywWi6u94Fl5ebkkeWy70tJSSf59HsPJypUrNWrUKGVlZUmiDf31xRdfaMaMGWpoaFBcXJxef/11ZWZmuv7Rpv1a9oc//EEnTpzQSy+9dNU9PoO+XX/99Xr++eeVkZGhqqoqrVu3TjNmzNDhw4dpv3ZA8OwEOTk5evrpp1sss2PHDk2aNClINQLQ3n7961/r8OHD2rVrl4xGY2dXJ6RkZGRo3759Onv2rN555x0tXbpU7733XmdXKySUlJToySef1K5duxQVFdXZ1QlJt9xyi9v3119/vUaPHq0//vGPuuGGGzqpVt0HwbMTLF26VP/2b//WYpmBAwf69VxJSUmqrq6W0+l0/XXldDpVVVWlpKQkVzbZlrEAAAOtSURBVJnKykq3x136/lKZcJGYmCij0eixPcKtLVorOTlZ0sW2Sk1NdV2/vO38+TyGg+zsbG3fvl07duxwG1GgDf0THR2twYMHS5JGjx6t4uJiPf/88645dbSfd0VFRaqurnbNLZQuTlk4ePCgXn75ZR0+fFgSbdga8fHxGjFihE6cOKHbbrtNEu0XCOZ4doLExEQNGzasxa+ePXv69VxZWVmqq6tTUVGR61pRUZHq6+td80uysrJ06NAhNTQ0uMoUFhYqJSXFbaFSOIiOjtbo0aNVWFjodr2wsNBtPg6ulp6eruTkZLe2a2ho0KFDh9w+a74+j93do48+qm3btundd99124JFog3bqrm5WY2NjbSfH2bPnq2DBw9q3759rq8f/ehHmj9/vvbt26ehQ4fShq3U0NCgkpISJScn8xlsB8aVK1c+0dmVgHfl5eU6ceKESkpKtGPHDk2dOlX19fWKjo5WbGys+vbtq08++UT5+fkaNWqUTp8+rWXLlmnMmDGurRuGDBmiV155RX/961+VkZGhQ4cO6X/9r/+lhx9+OCx/CEwmk3Jzc9WvXz/16NFD69at08GDB/Xcc88pISGhs6vXqerq6vT3v/9d5eXleu211zRy5Ej16tVLjY2NSkhIUFNTkzZs2KAhQ4aoqalJjz32mMrLy7VhwwbFxMT49XnszpYvX64333xTr776qgYOHKj6+nrV19dLuvhHj8FgoA19eOKJJxQdHa3m5madPn1aeXl5euutt/TEE0+42oz2865Hjx6yWCxuX1u3blVaWpruvfdePoN+WLVqlesz+D//8z9asWKFTpw4oWeeeUZms5n2CxDbKXVxubm5WrNmzVXXN27c6NrmpqamRo888og++OADSdKsWbO0du1a10pa6eJk/eXLl6u4uFhms1kLFy7Uo48+GnZbKV2yefNmPfvssyovL9e1116r//qv/9LEiRM7u1qdbt//384doygMhGEY/k5glUMELeMNLMUD2NqlsQ3BC1ikT+tdAjlMQPAGbmeziMsuTLE8TzlMMz9TvMUw05TD4fBt/Xg8ZhzHPJ/PXK/X3G63PB6PNE2TYRiyXq9fe39yH/+rd2fsui593yeJGX7Qtm2macqyLFmtVtlsNjmfz9ntdknM7zf2+/3rO6XEDD85nU6Z5zn3+z1VVWW73eZyuaSu6yTm91fCEwCAIrzxBACgCOEJAEARwhMAgCKEJwAARQhPAACKEJ4AABQhPAEAKEJ4AgBQxBdY0K0OTFXACgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for w in wins[0:1]:\n", + " (f, t) = presence_times(w)\n", + " zz, dgms, cells = d.zigzag_homology_persistence(f, t)\n", + " d.plot.plot_diagram(dgms[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "import multiprocessing" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())\n", + "dgms = pool.map(zigzag_network, wins)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "pool.terminate()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "dgms0 = [dgm[0] for dgm in dgms if dgm != []]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sociopatterns.ipynb b/sociopatterns.ipynb index 01b1148..8bf940f 100644 --- a/sociopatterns.ipynb +++ b/sociopatterns.ipynb @@ -55,14 +55,43 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 53, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2.0.7.dev0'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d.__version__" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -101,22 +130,97 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "76944" + "80.0" ] }, - "execution_count": 7, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "len(np.unique(g.es[\"time\"]))" + "(max(g.es[\"time\"]) - min(g.es[\"time\"])) // (3600 * 24)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Temporal partitioning" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "from zigzag import *" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "wins = sliding_windows(g, 0.05)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "20" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(wins)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zigzag persistence" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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qqqqKq1Zs0YTJ07Uu+++q/Lyckm66OdfVlYmydx3AwKLtz53fiYEhwkTJuiOO+5Q37599b//+79asWKFvv/97+uNN95QeHi4KioqZLVaFRcX5/a8b/6cqKio+FZ/iouLk9Vq5XvCg6ALpytWrNDatWtbrNmxY4duuukm/eu//qvrsaFDh6pfv34aP368Dh48qBEjRvi4pQDay2233eb25+uuu04jRozQH//4R11//fXt1CoA/mLatGmu/z106FCNGDFCw4YN0549e/T973+/HVsWGoIunM6bN8+1/uNSvjnE/k3XXnutrFarjh07phEjRighIUHV1dVyOp2u35SdTqeqqqqUkJAgSUpISHAb6pfk+vOFGgSWC7/ZXuxz5TMNTl27dtWgQYN07Ngxfe9735PU/Hn36dPHVfPNz9/MdwMCS2JioqQr/9z5mRCckpOT1bNnTx07dkxS82fZ1NSk6upq9ejRw1VXWVmpG264wVXzj8t8LszM0RdaFnRrTuPi4nTNNde0+F+XLl0u+tzDhw+rqanJ9SWVlpam2tpaFRUVuWqKiopUV1fnWnOUlpam/fv3q6GhwVWTn5+v5ORk9e3b14fvFL7SqVMnjRgxQvn5+W6P5+fnu601Q/BoaGhQSUmJEhMT1bdvXyUmJrp9/g0NDdq/f7/bv3tP3w0ILN763PmZEJyqq6tVVlbmygcjRoxQx44d3fpLaWmpa9Oc1NwXjh496na8VH5+vsLDw5md9cC6ZMmSf2/vRrSH48eP68knn1RkZKQaGxtVVFSkBQsWqFevXlq+fLk6dOigHj166P3331deXp6GDRum0tJSLVy4UCNHjnQdHdK/f38988wzOnTokFJTU7V//3794he/0IIFC/ghFcCioqKUk5OjpKQkde7cWWvWrNG+ffv02GOPKSYmpr2bhyu0fPlyderUSefPn9dnn32m7OxsHTt2TOvXr1dsbKyampq0YcMG9e/fX01NTVq2bJnKy8u1YcMGhYeHm/pugP+pra3VJ598ovLycj377LMaMmSIoqOj1djYqJiYGK987vxMCAwt9QWr1apf/epX6tq1q86dO6dDhw7p3/7t39TU1KQ1a9YoPDxcnTt31qlTp7R582YNHTpUNTU1WrhwoaKjo/XLX/5SHTp0UL9+/bRjxw7t3btXQ4cO1SeffKJFixZpxowZuuOOO9r7/wK/FrJHSZ08eVJZWVk6cuSI6urq1KtXL02cOFFLlixRt27dXHV2u12LFy/Wq6++KknKyMjQ6tWrFRsb66o5fPiwFi1apAMHDig2NlazZs3SI488wpEhAW7z5s3auHGjysvLNXjwYP3Hf/yHxowZ097Nghf86Ec/0r59+1xTctddd52WLVumQYMGSWqeql25cqX+8Ic/yG63a9SoUVq7dq2GDBnieg0z3w3wL2+//fZFQ8E999yj3Nxcr33u/Ezwfy31hXXr1unee+9VcXGxampqlJiYqJtuuknLli1zWxZ49uxZLV++XHl5eWpoaNDYsWP1n//5n241J06c0KJFi/TWW2+pc+fOmjFjhn79618rPDy8Td5noArZcAoAAAD/E3RrTgEAABC4CKcAAADwG4RTAAAA+A3CKQAAAPwG4RQAAAB+g3AKAAAAv0E4BQAAgN8gnAIAAMBv/H+j1QWgdnJ9+QAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for w in wins[0:1]:\n", + " (f, t) = presence_times(w)\n", + " zz, dgms, cells = d.zigzag_homology_persistence(f, t)\n", + " d.plot.plot_diagram(dgms[0])" ] }, { @@ -125,45 +229,12 @@ "metadata": {}, "outputs": [], "source": [ - "cliques = []\n", - "for t in np.unique(g.es[\"time\"]):\n", - " edges = g.es.select(time_eq=t)\n", - " cliques.append(g.subgraph_edges(edges).maximal_cliques())" + "d.plot.plot_diagram(dgms[1])" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "maxcliques = g.maximal_cliques()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def filt_subgraph(t):\n", - " edges = g.es.select(time_eq=t)\n", - " cliques = g.subgraph_edges(edges).maximal_cliques()\n", - " return d.Filtration(cliques)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "times = np.sort(np.unique(g.es[\"time\"]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -177,7 +248,7 @@ "outputs": [], "source": [ "pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())\n", - "cliques = pool.map(clique_subgraph, times)" + "dgms = pool.map(zigzag_network, wins)" ] }, { @@ -189,209 +260,362 @@ "pool.terminate()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "maxcliques = g.subgraph_edges(g.es.select(time_lt=times[30])).maximal_cliques()\n", - "filts = [filt_subgraph(t) for t in times[1:30]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "maxfilt = d.Filtration(maxcliques)\n", - "for s in maxfilt:\n", - " print(s)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "presences = [[s in filt for filt in filts] for s in maxfilt]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "presences[-1]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[np.argwhere(np.array(p)[1:] ^ np.array(p)[:-1]).flatten().tolist() for p in presences]" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Cut into sliding windows" + "## Sliced Wasserstein kernel" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ - "duration = 0.1 * (times.max() - times.min())\n", - "duration * np.arange(10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### TODO overlap" + "dgms0 = [dgm[0] for dgm in dgms if dgm != []]" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "def sliding_windows(g, res=0.1, overlap=0):\n", - " times = np.array(g.es[\"time\"])\n", - " duration = res * (times.max() - times.min())\n", - " windows = []\n", - " for i in range(int(1/res)-1):\n", - " edges = g.es.select(time_gt=times.min() + duration*i, time_lt=times.min() + duration*(i+1))\n", - " windows.append(g.subgraph_edges(edges))\n", - " return windows" + "dgms1 = [dgm[1] for dgm in dgms if len(dgm) > 1]" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "wins = sliding_windows(g, 0.1)" + "from sliced_wasserstein import diagram_array, SW_approx" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 16, "metadata": {}, "outputs": [ { - "name": "stdout", + "data": { + "text/plain": [ + "array([[ 0. , 168498.26575157, 142213.96446884, ...,\n", + " 181004.87138341, 980779.00902599, 604002.56924413],\n", + " [ 168498.26575157, 0. , 108974.83210031, ...,\n", + " 292878.72367602, 864985.91166401, 466984.82235283],\n", + " [ 142213.96446884, 108974.83210031, 0. , ...,\n", + " 223518.93608983, 951003.34397253, 553228.56514372],\n", + " ...,\n", + " [ 181004.87138341, 292878.72367602, 223518.93608983, ...,\n", + " 0. , 1153158.29742231, 755045.92126984],\n", + " [ 980779.00902599, 864985.91166401, 951003.34397253, ...,\n", + " 1153158.29742231, 0. , 607164.48834291],\n", + " [ 604002.56924413, 466984.82235283, 553228.56514372, ...,\n", + " 755045.92126984, 607164.48834291, 0. ]])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gram0 = np.array([[SW_approx(dgms0[i], dgms0[j], 10) for i in range(len(dgms0))] for j in range(len(dgms0))])\n", + "gram0" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0. , 1782.59876486, 1976.144841 , ..., 1674.27089231,\n", + " 4008.08473571, 3074.53612959],\n", + " [1782.59876486, 0. , 814.44479983, ..., 1389.37805531,\n", + " 3609.13022428, 1694.74694713],\n", + " [1976.144841 , 814.44479983, 0. , ..., 1665.50397679,\n", + " 4034.59792213, 2097.51910373],\n", + " ...,\n", + " [1674.27089231, 1389.37805531, 1665.50397679, ..., 0. ,\n", + " 2953.12379337, 1952.36875879],\n", + " [4008.08473571, 3609.13022428, 4034.59792213, ..., 2953.12379337,\n", + " 0. , 3326.13065883],\n", + " [3074.53612959, 1694.74694713, 2097.51910373, ..., 1952.36875879,\n", + " 3326.13065883, 0. ]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gram1 = np.array([[SW_approx(dgms1[i], dgms1[j], 10) for i in range(len(dgms1))] for j in range(len(dgms1))])\n", + "gram1" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "def dgm2array(dgm):\n", + " return np.array([[p.birth, p.death] for p in dgm])" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn_tda import SlicedWasserstein" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bottleneck distance" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "from dask.distributed import Client" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client = Client()\n", + "distmat = []\n", + "for dgm in dgms0:\n", + " distmat.append(client.map(lambda x: d.bottleneck_distance(x, dgm), dgms0))" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0. , 37.67822266, 71.04492188, ..., inf,\n", + " inf, 19.10028076],\n", + " [37.69311523, 0. , 70.44287109, ..., inf,\n", + " inf, 37.14916992],\n", + " [70.62719727, 70.30273438, 0. , ..., inf,\n", + " inf, 69.04138184],\n", + " ...,\n", + " [ inf, inf, inf, ..., 0. ,\n", + " inf, inf],\n", + " [ inf, inf, inf, ..., inf,\n", + " 0. , inf],\n", + " [19.10028076, 37.14916992, 69.04138184, ..., inf,\n", + " inf, 0. ]])" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "distmat = np.array(client.gather(distmat))\n", + "distmat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clustering" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stderr", "output_type": "stream", "text": [ - "1241607579.0\n", - "1242302279.0\n", - "1242996839.0\n", - "1243691539.0\n", - "1244386179.0\n", - "1244995999.0\n", - "1245775339.0\n", - "1246468459.0\n", - "1247162039.0\n" + "/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n", + "/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n", + "/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n", + "/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n" ] } ], "source": [ - "for i in wins:\n", - " print(max(i.es[\"time\"]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Zigzag persistence" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute the maximal simplicial complex" + "from sklearn.svm import OneClassSVM" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ - "def max_simplicial_complex(g):\n", - " return d.Filtration(g.maximal_cliques())" + "clf = OneClassSVM(kernel='precomputed')" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "def presence_times(g):\n", - " max_simplicial_complex = d.Filtration(g.cliques())\n", - " filts = []\n", - " for t in np.sort(np.unique(g.es[\"time\"])):\n", - " edges = g.es.select(time_eq=t)\n", - " cliques = g.subgraph_edges(edges).cliques()\n", - " filts.append(d.Filtration(cliques))\n", - " presences = [[s in filt for filt in filts] for s in max_simplicial_complex]\n", - " presences = [np.argwhere(np.array(p)[1:] ^ np.array(p)[:-1]).flatten().tolist() for p in presences]\n", - " return (max_simplicial_complex, presences)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "(f, t) = presence_times(wins[2])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "zz, dgms, cells = d.zigzag_homology_persistence(f, t)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, + "execution_count": 22, "metadata": {}, "outputs": [ { - "ename": "NameError", - "evalue": "name 'd' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0ms\u001b[0m \u001b[0;32min\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFiltration\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSimplex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'd' is not defined" + "data": { + "text/plain": [ + "array([1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0,\n", + " 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,\n", + " 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(clf.predict(gram)+1)//2" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import AgglomerativeClustering" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in true_divide\n", + " \"\"\"Entry point for launching an IPython kernel.\n" ] } ], "source": [ - "for s in d.Filtration([d.Simplex((0,1,2))]):\n", - " print(s)" + "gram1 = 1/gram1\n", + "gram1[gram1 == np.inf] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "clf = AgglomerativeClustering(n_clusters=2, affinity=\"precomputed\", linkage=\"complete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AgglomerativeClustering(affinity='precomputed', compute_full_tree='auto',\n", + " connectivity=None, linkage='complete', memory=None,\n", + " n_clusters=2, pooling_func=)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf.fit(gram1)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,\n", + " 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf.fit(gram1)\n", + "clf.labels_" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [], + "source": [ + "distmat[distmat==np.inf] = 1e100" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1,\n", + " 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,\n", + " 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0,\n", + " 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1])" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf.fit(distmat)\n", + "clf.labels_" ] }, { diff --git a/sociopatterns.py b/sociopatterns.py new file mode 100644 index 0000000..6c9c53d --- /dev/null +++ b/sociopatterns.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 + +import numpy as np +import igraph as ig +import dionysus as d + +import multiprocessing +# from dask.distributed import Client + +from zigzag import sliding_windows, zigzag_network +from wrcf import wrcf_diagram +from sliced_wasserstein import diagram_array, SW_approx + +import dill + + +def remove_inf(dgm): + """Remove infinite points in a persistence diagram. + + :param dgm: Diagram + + :return: the same diagram without the infinite points. + """ + res = d.Diagram() + for p in dgm: + if p.death != np.inf: + res.append(p) + return res + + +## Global parameters +N_WINDOWS = 40 + +## Computations +ZIGZAG_PERS = True +WRCF_PERS = True +SW_KERNEL = True +BOTTLENECK_DIST = True + + +if __name__=="__main__": + print("Loading SocioPatterns dataset...", end="", flush=True) + g = ig.read("data/sociopatterns/infectious/infectious.graphml") + del g.es["id"] + # print(g.summary()) + print("done.") + + print("Temporal partitioning...", end="", flush=True) + wins = sliding_windows(g, 1/N_WINDOWS) + print("done.") + + pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) + + if ZIGZAG_PERS: + print("Zigzag persistence...", end="", flush=True) + zz_dgms = pool.map(zigzag_network, wins) + dill.dump(zz_dgms, open("sociopatterns/zz_dgms.dill", "wb")) + print("done, saved.") + + if WRCF_PERS: + print("WRCF...", end="", flush=True) + ## Collapse each subnetwork into a static graph: the weight is the + ## number of appearances of each edge + for w in wins: + w.es["time"] = np.repeat(1, len(w.es["time"])) + w.simplify(combine_edges="sum") + w.es["weight"] = w.es["time"] + del w.es["time"] + wrcf_dgms = pool.map(wrcf_diagram, wins) + dill.dump(wrcf_dgms, open("sociopatterns/wrcf_dgms.dill", "wb")) + print("done.") + + pool.terminate() + + if ZIGZAG_PERS and SW_KERNEL: + print("Sliced Wasserstein Kernel (zigzag)...", end="", flush=True) + zz_dgms1 = [dgm[1] for dgm in zz_dgms if len(dgm) > 1] + zz_gram1 = np.array([[SW_approx(zz_dgms1[i], zz_dgms1[j], 10) + for i in range(len(zz_dgms1))] for j in range(len(zz_dgms1))]) + dill.dump(zz_gram1, open("sociopatterns/zz_gram1.dill", "wb")) + print("done, saved.") + if WRCF_PERS and SW_KERNEL: + print("Sliced Wasserstein Kernel (WRCF)...", end="", flush=True) + wrcf_dgms1 = [dgm[1] for dgm in wrcf_dgms if len(dgm) > 1] + wrcf_gram1 = np.array([[SW_approx(wrcf_dgms1[i], wrcf_dgms1[j], 10) + for i in range(len(wrcf_dgms1))] for j in range(len(wrcf_dgms1))]) + dill.dump(wrcf_gram1, open("sociopatterns/wrcf_gram1.dill", "wb")) + print("done, saved.") + + if ZIGZAG_PERS and BOTTLENECK_DIST: + print("Bottleneck distance (zigzag)...", end="", flush=True) + zz_dgms1 = list(map(remove_inf, zz_dgms1)) + zz_distmat = np.array([[d.bottleneck_distance(zz_dgms1[i], zz_dgms1[j]) + for i in range(len(zz_dgms1))] for j in range(len(zz_dgms1))]) + dill.dump(zz_distmat, open("sociopatterns/zz_distmat.dill", "wb")) + print("done, saved.") + if WRCF_PERS and BOTTLENECK_DIST: + print("Bottleneck distance (WRCF)...", end="", flush=True) + wrcf_dgms1 = list(map(remove_inf, wrcf_dgms1)) + wrcf_distmat = np.array([[d.bottleneck_distance(wrcf_dgms1[i], wrcf_dgms1[j]) + for i in range(len(wrcf_dgms1))] for j in range(len(wrcf_dgms1))]) + dill.dump(wrcf_distmat, open("sociopatterns/wrcf_distmat.dill", "wb")) + print("done, saved.") + + + diff --git a/sociopatterns/wrcf_dgms.dill b/sociopatterns/wrcf_dgms.dill new file mode 100644 index 0000000..699d3b9 Binary files /dev/null and b/sociopatterns/wrcf_dgms.dill differ diff --git a/sociopatterns/wrcf_distmat.dill b/sociopatterns/wrcf_distmat.dill new file mode 100644 index 0000000..2f5cf5e Binary files /dev/null and b/sociopatterns/wrcf_distmat.dill differ diff --git a/sociopatterns/wrcf_gram1.dill b/sociopatterns/wrcf_gram1.dill new file mode 100644 index 0000000..f612418 Binary files /dev/null and b/sociopatterns/wrcf_gram1.dill differ diff --git a/sociopatterns/zz_dgms.dill b/sociopatterns/zz_dgms.dill new file mode 100644 index 0000000..3cdbca7 Binary files /dev/null and b/sociopatterns/zz_dgms.dill differ diff --git a/sociopatterns/zz_distmat.dill b/sociopatterns/zz_distmat.dill new file mode 100644 index 0000000..12b82cf Binary files /dev/null and b/sociopatterns/zz_distmat.dill differ diff --git a/sociopatterns/zz_gram1.dill b/sociopatterns/zz_gram1.dill new file mode 100644 index 0000000..3a8b277 Binary files /dev/null and b/sociopatterns/zz_gram1.dill differ diff --git a/sp_wrcf_k.pdf b/sp_wrcf_k.pdf new file mode 100644 index 0000000..bc19173 Binary files /dev/null and b/sp_wrcf_k.pdf differ diff --git a/spplot.py b/spplot.py new file mode 100644 index 0000000..a520a7c --- /dev/null +++ b/spplot.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +import numpy as np +import igraph as ig + +import matplotlib +matplotlib.use("PDF") +import matplotlib.pyplot as plt +plt.style.use("fivethirtyeight") +plt.rcParams["figure.figsize"] = (10, 6) + +if __name__=="__main__": + g = ig.read("data/sociopatterns/infectious/infectious.graphml") + g.simplify() + layout = g.layout_grid_fruchterman_reingold() + # layout = g.lgl() + ig.plot(g, layout=layout) + diff --git a/wrcf.py b/wrcf.py new file mode 100644 index 0000000..77d2b25 --- /dev/null +++ b/wrcf.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +import numpy as np +import igraph as ig +import dionysus as d + + +def wrcf(G, weight="weight"): + """Compute the weight-rank clique filtration (WRCF) of a graph. + + :param G: igraph Graph + :param weight: name of the weight attribute + + :return: a Dionysus filtration. + """ + # Define filtration step 0 as the set of all nodes + filt = d.Filtration() + for v in G.vs: + filt.append(d.Simplex([v.index], 0)) + # Rank all edge weights + distinct_weights = np.unique(G.es[weight])[::-1] + for t, w in enumerate(distinct_weights): + # At filtration step t, threshold the graph at weight[t] + subg = G.subgraph_edges(G.es(lambda e: e[weight] >= w)) + # Find all maximal cliques and define them to be simplices + for clique in subg.maximal_cliques(): + for s in d.closure([d.Simplex(clique)], len(clique)): + filt.append(d.Simplex(s, t+1)) + filt.sort() + return(filt) + + +def wrcf_diagram(graph, weight="weight"): + """Compute persistence diagrams of a graph using WRCF. + + :param graph: igraph Graph + :param weight: name of the weight attribute + + :return: a list of persistence diagrams. + """ + filt = wrcf(graph, weight=weight) + pers = d.homology_persistence(filt) + dgms = d.init_diagrams(pers, filt) + return dgms diff --git a/zigzag.py b/zigzag.py index ed6c6b5..4692028 100644 --- a/zigzag.py +++ b/zigzag.py @@ -1,19 +1,24 @@ +#!/usr/bin/env python3 + import numpy as np import igraph as ig import dionysus as d -import pickle -import matplotlib.pyplot as plt - -plt.style.use("fivethirtyeight") -plt.rcParams["figure.figsize"] = 10, 6 - def sliding_windows(g, res=0.1, overlap=0): + """Compute subnetworks of a temporal network based on temporal + partitioning of the time range. + + :param g: igraph Graph + :param res: resolution + :param overlap: overlap + + :return: a list of temporal networks. + """ times = np.array(g.es["time"]) duration = res * (times.max() - times.min()) windows = [] - for i in range(int(1/res)-1): + for i in range(int(1/res)): edges = g.es.select(time_gt=times.min() + duration*i, time_lt=times.min() + duration*(i+1)) windows.append(g.subgraph_edges(edges)) @@ -21,10 +26,14 @@ def sliding_windows(g, res=0.1, overlap=0): def max_simplicial_complex(g): + """Return the maximal simplicial complex of a network g. + """ return d.Filtration(g.maximal_cliques()) def find_transitions(a): + """Find the transition times in an array of presence times. + """ res = [] prev = False for i, cur in enumerate(a): @@ -35,6 +44,14 @@ def find_transitions(a): def presence_times(g): + """Compute the data required to compute zigzag persistence: + simplicial complex and transition times. + + :param g: igraph Graph + + :return: a tuple with the maximum simplicial complex and the + transition times of each simplex. + """ max_simplicial_complex = d.Filtration(g.cliques()) filts = [] for t in np.sort(np.unique(g.es["time"])): @@ -46,27 +63,13 @@ def presence_times(g): return (max_simplicial_complex, presences) -if __name__ == "__main__": - # Import the data - g = ig.read("data/sociopatterns/infectious/infectious.graphml") - print(g.summary()) - # Segment the network into sliding windows (resolution = 5%) - wins = sliding_windows(g, 0.05) - # Compute the presence times of maximal simplices for an example window - print(wins[0].summary()) - (f, t) = presence_times(wins[0]) - for s in f: - print(s) - print(t) - # Compute the zigzag homology on the window - print("Computing zigzag persistence...") - zz, dgms, cells = d.zigzag_homology_persistence(f, t) - for i, dgm in enumerate(dgms): - print("Dimension: {}".format(i)) - for p in dgm: - print(p) - # pickle.dump(dgms, open("diagrams.p", "wb")) - # Plot the persistence diagrams - # for i, dgm in enumerate(dgms): - # d.plot.plot_diagram(dgm, show=False) - # plt.savefig("dgm_{}.png".format(i)) +def zigzag_network(g): + """Compute zigzag persistence on a temporal network. + + :param g: igraph Graph + + :return: a list of persistence diagrams. + """ + (f, t) = presence_times(g) + _, dgms, _ = d.zigzag_homology_persistence(f, t) + return dgms