diff options
Diffstat (limited to 'extra')
-rw-r--r-- | extra/dot/example_inbound.dot | 195 | ||||
-rw-r--r-- | extra/dot/example_inbound.png | bin | 0 -> 699674 bytes | |||
-rw-r--r-- | extra/dot/levels_inbound.py | 73 |
3 files changed, 268 insertions, 0 deletions
diff --git a/extra/dot/example_inbound.dot b/extra/dot/example_inbound.dot new file mode 100644 index 0000000..9beb263 --- /dev/null +++ b/extra/dot/example_inbound.dot @@ -0,0 +1,195 @@ +digraph G { + node [ style="solid" shape="box" fontname="Arial" fontsize="12" fontcolor="black" ]; + "fzxizmxeybazhoswj5kvxl7fky" [label="Relating Data\nRefinement\nand Failures-Divergences\nRefinement\n(2018)"]; + "idt3qiwgffh2rid46v4vh7qh4m" [label="Generality\nin design and\ncompositional\nverification\nusingTav (1995)"]; + "5hxst5pboja3dntwcx5xmfb6vu" [label="Proving Opacity\nvia Linearizability:\nA Sound and\nComplete Method\n(2017)"]; + "ki6z42ugjreqzmdfc7hv72ddny" [label="CPL: a core\nlanguage for\ncloud computing\n(2016)"]; + "vztpo3kn6rgbvgvnyvkpa7r2cu" [label="Reward Testing\nEquivalences\nfor Processes\n(2019)"]; + "dtdp4dlhmvf2fbw2rsmfdhg7jq" [label="Checking Consistency\nin UML Diagrams:\nClasses and\nState Machines\n(2003)"]; + "iodn5pvvk5fg3d63nwbs3iqp3i" [label="BSP-Why: A\nTool for Deductive\nVerification\nof BSP Algorithms\nwith Subgroup\nSynchronisation\n(2015)"]; + "z53wdeubi5egnns7h55wv2vpt4" [label="A proof technique\nfor communicating\nsequential\nprocesses (1981)"]; + "uddghbfzbbfrtdc6sqirck7pqm" [label="Unified Modelling\nFunctional\nand Non-Functional\nAspects of\nWeb Services\nComposition\nUsing PTCCS\n(2011)"]; + "kmhwb6yju5gwvoqlirfpzpipka" [label="A FRAMEWORK\nFOR THE EVALUATION\nOF REAL-TIME\nSPECIFICATION\nTECHNIQUES\n(2006)"]; + "2rqolf6o6jgsdkishicri2wirm" [label="An improved\nfailures model\nfor communicating\nprocesses (1985)"]; + "lb6746dmrbg75gnbcrv3qavere" [label="TESTOR: A Modular\nTool for On-the-Fly\nConformance\nTest Case Generation\n(2018)"]; + "ixrau56runetxbqy7olqvods2y" [label="Graphics Related\nActivities\nat NCSDCT,\nBombay (1983)"]; + "hdwrpnaabzeqvoh6yugn3ti6lm" [label="Vulnerability\nAnalysis of\nCSP Based on\nStochastic\nGame Theory\n(2016)"]; + "cpq5tedh2jb7zbekcqgdpeigyi" [label="More Automated\nFormal Methods?!\nIf so, why,\nwhere & how?"]; + "26axhnld75dp3k6ruj7qm6lvbi" [label="Asynchronous\nTesting of\nSynchronous\nComponents\nin GALS Systems\n(2019)"]; + "erfn3kiztvcvhj2ksskgrzttyy" [label="Calculating\nParallel Programs\nin Coq Using\nList Homomorphisms\n(2016)"]; + "wwxzdcpcvrcefmw7o25wvwgjau" [label="AXIOMATIC FRAMEWORKS\nFOR DEVELOPING\nBSP-STYLE PROGRAMS∗\n(2000)"]; + "w6nyuz43fffktacvoq2vnkqwdq" [label="Encoding CSP\ninto CCS (2015)"]; + "xmc5nch3wfgvjdgfhlu3gfr7ga" [label="Resource-Aware\nVirtually Timed\nAmbients (2018)"]; + "nazgn3i735e5fabigbyugjm6lu" [label="Correct and\nEfficient Antichain\nAlgorithms\nfor Refinement\nChecking (2019)"]; + "n2j6o5sjnnc3pgtw23f7pg4uym" [label="Refinement\nand Consistency\nin Component\nModels with\nMultiple Views\n(2006)"]; + "nqniiaq2cjezfjxs5ezlqfajl4" [label="Taming Concurrency\nfor Verification\nUsing Multiparty\nSession Types\n(2019)"]; + "atgnqdcm65b33c5uf77el6fvni" [label="A Correctness\nChecking Approach\nfor Collaborative\nBusiness Processes\nin the Cloud\n(2020)"]; + "mxk2kan4kngqtj5s7zbmpokpua" [label="A Relational\nView of Refinement\n(2018)"]; + "jqptucpeebfetm77ov32zjtjhy" [label="Reflections\non Bernhard\nSteffen's Physics\nof Software\nTools (2019)"]; + "hhtadeldyfeudh7zv7li4zarbm" [label="Stronger Validity\nCriteria for\nEncoding Synchrony\n(2019)"]; + "7w6cjfy7ljfx7i3v2z3hazii3a" [label="Reversibility\nin session-based\nconcurrency:\nA fresh look\n(2017)"]; + "xup26exlhjbtjnlzs3ya6r5opi" [label="30 Years of\nModal Transition\nSystems: Survey\nof Extensions\nand Analysis\n(2017)"]; + "2mhbxewq3rczdjjtbpqsl4if4q" [label="Characteristic\nbisimulation\nfor higher-order\nsession processes\n(2016)"]; + "jq2l5dpeknbqlnyt5gbozszkzy" [label="Communicating\nsequential\nprocesses (1978)" style="filled" fillcolor="orange"]; + "pgcis54ngfa53o5hawkdeqfria" [label="Hybrid CSP\n(2016)"]; + "xysudaucabb3flreoy2iztxj6a" [label="FastLane Is\nOpaque – a\nCase Study\nin Mechanized\nProofs of Opacity\n(2018)"]; + "tyjh5qifcje47pczionoa2dz6y" [label="A state-based\napproach to\ncommunicating\nprocesses (1988)"]; + "ij7mnzknkjbbxkhy3k2cscxfqy" [label="Coupled similarity:\nthe first 32\nyears (2019)"]; + "zy2tq4erqrfrborv5d24opidly" [label="Defining and\nVerifying Durable\nOpacity: Correctness\nfor Persistent\nSoftware Transactional\nMemory (2020)"]; + "cyv5n3dl55hehpef2pizxuqwm4" [label="Validating\nHigh-Level\nSynthesis"]; + "rbbqg7nhsfdfnaphwfuwqmujvy" [label="Deriving failures\nmodels for\nnonuniform\nconcurrency\nfrom structured\noperational\nsemantics (1996)"]; + "ipohy4pmfjakfosou7hruin7x4" [label="JDAS: a software\ndevelopment\nframework for\nmultidatabases\n(2017)"]; + "dm2kmtw5t5aldcbjgwbc6o3pmi" [label="Failure Trace\nSemantics for\na Process Algebra\nwith Time-outs\n(preliminary\nreport) (2020)"]; + "yctmdvbdxrgglagwiehlhvac3e" [label="Relational\nConcurrent\nRefinement\n(2018)"]; + "vrcagvkzrzdxnbslhvaignf6si" [label="Component-aware\nInput-Output\nConformance\n(2019)"]; + "ee4enzkzhvbrha46bzlmerxcsq" [label="Parameterizing\nhigher-order\nprocesses on\nnames and processes\n(2020)"]; + "7xtcdmozsjh6lppwflvell7qnm" [label="SDN Protocol\nAnalysis with\nProcess Algebra\nMethod (2017)"]; + "xa33ovyyy5aolab4iuj5oneokq" [label="Specification-oriented\nsemantics for\nCommunicating\nProcesses (1986)"]; + "yoyygplnt5bxphait6dzdlg534" [label="Checking Modal\nContracts for\nVirtually Timed\nAmbients (2018)"]; + "gpw35r4invcfln46vulj65f7xm" [label="Modelling Divergence\nin Relational\nConcurrent\nRefinement\n(2009)"]; + "pdegi4sig5fp5mavy4hqmcugre" [label="On the Expressiveness\nof Symmetric\nCommunication\n(2016)"]; + "hjtusiibtbho7cxqf56zuuqtg4" [label="A Note on the\nExpressiveness\nof BIP (2016)"]; + "42c3kolvbvhtdjznoqarjl4574" [label="A Branching\nTime Model\nof CSP (2016)"]; + "hidk5ja4rfbddp6tgaodiqxcmi" [label="Adopting Formal\nMethods in\nan Industrial\nSetting: The\nRailways Case\n(2019)"]; + "l2cvg6kg7jabtbtno6gecug6ky" [label="A Branching\nTime Model\nof CSP (2017)"]; + "mjzpcsji65f2rlmlujanu3nila" [label="Hiding in stream\nsemantics of\nuniform concurrency\n(1990)"]; + "mfz7bqc5pjgnrojlmsfepz37qe" [label="Musings on\nEncodings and\nExpressiveness\n(2012)"]; + "2bbo7hkoe5cbblknsd3nwczapa" [label="Expressiveness\nof component-based\nframeworks:\na study of\nthe expressiveness\nof BIP (2019)"]; + "l6qrrsnysrf2hfmyop4bqhtwma" [label="A Theory of\nEncodings and\nExpressiveness\n(Extended Abstract)\n(2018)"]; + "e7p4e4juw5fs3fqxyfvwfkc2mq" [label="Step failures\nsemantics and\na complete\nproof system\n(1989)"]; + "luxpiyqihjbdzevahl6i5lgfi4" [label="Towards safe\nmodular composition\nof network\nfunctions (2018)"]; + "wf7hn3gqqfdx3epkvh3hzczisy" [label="Evidential\nand Continuous\nIntegration\nof Software\nVerification\nTools (2018)"]; + "rcm72e4pyvgvnkaixi4t7kypvy" [label="Causally consistent\nreversible\nchoreographies\n(2017)"]; + "u2tggttxbbbzfdyggh24vuusti" [label="An Approach\nBased on Hierarchical\nPetri Nets\nfor the Verification\nof Interconnected\nBPEL Processes\n(2018)"]; + "mn2j7unnnfclfdc2w5ajnqxram" [label="Multi-ML: Programming\nMulti-BSP Algorithms\nin ML (2016)"]; + "y6mx3k2dejdephkuwksc64n2ai" [label="The Challenge\nof Typed Expressiveness\nin Concurrency\n(2016)"]; + "sydba4xpuff7hdkegjftx3ff5e" [label="Comparing Process\nCalculi Using\nEncodings (2019)"]; + "k6h2vy5q2nf4tmzgkf2trkppf4" [label="A Calculus\nof Virtually\nTimed Ambients\n(2017)"]; + "nprtqlxnhrbq3esjlysvismvhy" [label="Transaction\nProtocol Verification\nwith Labeled\nSynchronization\nLogic (2019)"]; + "b6zqaz2xzvc55bao72xwawsg5u" [label="On Modal Refinement\nand Consistency"]; + "6px4hrvt65h43n7enhvidbolza" [label="External and\ninternal choice\nwith event\ngroups in Event-B\n(2012)"]; + "d3qimowb2vdaphditthyex3d3m" [label="Combining Model\nRefinement\nand Test Generation\nfor Conformance\nTesting of\nthe IEEE PHD\nProtocol Using\nAbstract State\nMachines (2019)"]; + "24n7gsewsngrdkolvalzrs2nhe" [label="Modeling and\nverification\nof Web services\ncomposition\nbased on model\ntransformation\n(2016)"]; + "qtqir242zva73h363kajbkvsyi" [label="Analysing and\nComparing Encodability\nCriteria (2015)"]; + "jcx6brqljbcebkizk4cdjeatyu" [label="On the Relative\nExpressiveness\nof Higher-Order\nSession Processes\n(2016)"]; + "v5htlznfpnex7d2js5zwy47eeu" [label="A Logical Interface\nDescription\nLanguage for\nComponents\n(2000)"]; + "dpjpdyjd35dmbg774v2kgqb3ge" [label="Formal modeling\nand verification\nof cloud‐based\nweb service\ncomposition\n(2019)"]; + "x7s3reyu25bixgdgx4y3kwf2ci" [label="Modelling and\nanalysing neural\nnetworks using\na hybrid process\nalgebra (2016)"]; + "4677h7puyjc2picqlgwdelmybi" [label="On the Expressiveness\nof Joining\n(2015)"]; + "f6d5clvuifgxhg7fpwrngctccq" [label="Strategy Synthesis\nfor Autonomous\nDriving in\na Moving Block\nRailway System\nwith Uppaal\nStratego (2020)"]; + "bumvudnas5cqtjs3in7pb4bnua" [label="Computing Coupled\nSimilarity\n(2019)"]; + "lpqosqmr6bhcbazkvnbythddwy" [label="On Characterising\nDistributability\n(2013)"]; + "vsmvxmfujndmfbuoz27ygabzf4" [label="Total correctness\nof CSP programs\n(1986)"]; + "5ouybxooxvf55ibckfuyflm55y" [label="Turing und\ndie Verifikation\n(2012)"]; + "vzxfucuz45fozhicmxzkxdpdjm" [label="Fifty years\nof Hoare's\nlogic (2019)"]; + "ir4f556pvvddpbchro7vhffjtq" [label="Applications\nof compactness\nin the Smyth\npowerdomain\nof streams\n(1987)"]; + "yjywveqbw5g3nhzqrx7ryvmjty" [label="Inductive Proof\nOutlines for\nMonitors in\nJava (2003)"]; + "tvxk2b6z2jamzn6rsnkq6mjwb4" [label="Simulating\nTruly Concurrent\nCSP (2011)"]; + "nfgui7zbfbe3tdbso2zmffbwpy" [label="Higher-order\nProcesses with\nParameterization\nover Names\nand Processes\n(2016)"]; + "hwu7b64kh5brrlm7spzyucxibe" [label="Some recent\nadvances in\nautomated analysis\n(2015)"]; + "x5amfr7c2zes3cspw32m5my4de" [label="Reversible\nSession-Based\nConcurrency\nin Haskell\n(2019)"]; + "wxqp6cbl3rbz5jycbasfnski5u" [label="Alan Turing\n– Aus Leben\nund Werk eines\naußergewöhnlichen\nMenschen (2013)"]; + "ca7g736vorcobkam2244hj2yry" [label="On the Meaning\nof Transition\nSystem Specifications\n(2019)"]; + "lb4gnwjzqra4tc6on6tz5qsgjy" [label="SAMENVATTING\nIN HET NEDERLANDS"]; + "lpqosqmr6bhcbazkvnbythddwy" -> "e7p4e4juw5fs3fqxyfvwfkc2mq"; + "vzxfucuz45fozhicmxzkxdpdjm" -> "5ouybxooxvf55ibckfuyflm55y"; + "mfz7bqc5pjgnrojlmsfepz37qe" -> "xa33ovyyy5aolab4iuj5oneokq"; + "pgcis54ngfa53o5hawkdeqfria" -> "xa33ovyyy5aolab4iuj5oneokq"; + "fzxizmxeybazhoswj5kvxl7fky" -> "tyjh5qifcje47pczionoa2dz6y"; + "l2cvg6kg7jabtbtno6gecug6ky" -> "xa33ovyyy5aolab4iuj5oneokq"; + "atgnqdcm65b33c5uf77el6fvni" -> "24n7gsewsngrdkolvalzrs2nhe"; + "x7s3reyu25bixgdgx4y3kwf2ci" -> "2rqolf6o6jgsdkishicri2wirm"; + "cyv5n3dl55hehpef2pizxuqwm4" -> "tyjh5qifcje47pczionoa2dz6y"; + "b6zqaz2xzvc55bao72xwawsg5u" -> "idt3qiwgffh2rid46v4vh7qh4m"; + "vrcagvkzrzdxnbslhvaignf6si" -> "lb6746dmrbg75gnbcrv3qavere"; + "zy2tq4erqrfrborv5d24opidly" -> "5hxst5pboja3dntwcx5xmfb6vu"; + "wxqp6cbl3rbz5jycbasfnski5u" -> "5ouybxooxvf55ibckfuyflm55y"; + "x5amfr7c2zes3cspw32m5my4de" -> "jcx6brqljbcebkizk4cdjeatyu"; + "uddghbfzbbfrtdc6sqirck7pqm" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "jcx6brqljbcebkizk4cdjeatyu" -> "qtqir242zva73h363kajbkvsyi"; + "iodn5pvvk5fg3d63nwbs3iqp3i" -> "wwxzdcpcvrcefmw7o25wvwgjau"; + "42c3kolvbvhtdjznoqarjl4574" -> "2rqolf6o6jgsdkishicri2wirm"; + "2bbo7hkoe5cbblknsd3nwczapa" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "d3qimowb2vdaphditthyex3d3m" -> "lb6746dmrbg75gnbcrv3qavere"; + "rcm72e4pyvgvnkaixi4t7kypvy" -> "jcx6brqljbcebkizk4cdjeatyu"; + "luxpiyqihjbdzevahl6i5lgfi4" -> "ki6z42ugjreqzmdfc7hv72ddny"; + "hhtadeldyfeudh7zv7li4zarbm" -> "qtqir242zva73h363kajbkvsyi"; + "k6h2vy5q2nf4tmzgkf2trkppf4" -> "ki6z42ugjreqzmdfc7hv72ddny"; + "hwu7b64kh5brrlm7spzyucxibe" -> "z53wdeubi5egnns7h55wv2vpt4"; + "mxk2kan4kngqtj5s7zbmpokpua" -> "tyjh5qifcje47pczionoa2dz6y"; + "wwxzdcpcvrcefmw7o25wvwgjau" -> "z53wdeubi5egnns7h55wv2vpt4"; + "v5htlznfpnex7d2js5zwy47eeu" -> "xa33ovyyy5aolab4iuj5oneokq"; + "nprtqlxnhrbq3esjlysvismvhy" -> "5hxst5pboja3dntwcx5xmfb6vu"; + "pdegi4sig5fp5mavy4hqmcugre" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "nazgn3i735e5fabigbyugjm6lu" -> "42c3kolvbvhtdjznoqarjl4574"; + "e7p4e4juw5fs3fqxyfvwfkc2mq" -> "xa33ovyyy5aolab4iuj5oneokq"; + "ipohy4pmfjakfosou7hruin7x4" -> "24n7gsewsngrdkolvalzrs2nhe"; + "yjywveqbw5g3nhzqrx7ryvmjty" -> "z53wdeubi5egnns7h55wv2vpt4"; + "ij7mnzknkjbbxkhy3k2cscxfqy" -> "qtqir242zva73h363kajbkvsyi"; + "vzxfucuz45fozhicmxzkxdpdjm" -> "z53wdeubi5egnns7h55wv2vpt4"; + "24n7gsewsngrdkolvalzrs2nhe" -> "uddghbfzbbfrtdc6sqirck7pqm"; + "bumvudnas5cqtjs3in7pb4bnua" -> "42c3kolvbvhtdjznoqarjl4574"; + "xmc5nch3wfgvjdgfhlu3gfr7ga" -> "k6h2vy5q2nf4tmzgkf2trkppf4"; + "z53wdeubi5egnns7h55wv2vpt4" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "y6mx3k2dejdephkuwksc64n2ai" -> "jcx6brqljbcebkizk4cdjeatyu"; + "yctmdvbdxrgglagwiehlhvac3e" -> "tyjh5qifcje47pczionoa2dz6y"; + "hhtadeldyfeudh7zv7li4zarbm" -> "l6qrrsnysrf2hfmyop4bqhtwma"; + "42c3kolvbvhtdjznoqarjl4574" -> "xa33ovyyy5aolab4iuj5oneokq"; + "sydba4xpuff7hdkegjftx3ff5e" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "mjzpcsji65f2rlmlujanu3nila" -> "xa33ovyyy5aolab4iuj5oneokq"; + "ixrau56runetxbqy7olqvods2y" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "hjtusiibtbho7cxqf56zuuqtg4" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "lb4gnwjzqra4tc6on6tz5qsgjy" -> "e7p4e4juw5fs3fqxyfvwfkc2mq"; + "qtqir242zva73h363kajbkvsyi" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "lb6746dmrbg75gnbcrv3qavere" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "2rqolf6o6jgsdkishicri2wirm" -> "z53wdeubi5egnns7h55wv2vpt4"; + "hdwrpnaabzeqvoh6yugn3ti6lm" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "cpq5tedh2jb7zbekcqgdpeigyi" -> "hwu7b64kh5brrlm7spzyucxibe"; + "mn2j7unnnfclfdc2w5ajnqxram" -> "iodn5pvvk5fg3d63nwbs3iqp3i"; + "f6d5clvuifgxhg7fpwrngctccq" -> "hidk5ja4rfbddp6tgaodiqxcmi"; + "gpw35r4invcfln46vulj65f7xm" -> "tyjh5qifcje47pczionoa2dz6y"; + "tvxk2b6z2jamzn6rsnkq6mjwb4" -> "e7p4e4juw5fs3fqxyfvwfkc2mq"; + "jqptucpeebfetm77ov32zjtjhy" -> "lb6746dmrbg75gnbcrv3qavere"; + "dtdp4dlhmvf2fbw2rsmfdhg7jq" -> "tyjh5qifcje47pczionoa2dz6y"; + "5hxst5pboja3dntwcx5xmfb6vu" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "mfz7bqc5pjgnrojlmsfepz37qe" -> "2rqolf6o6jgsdkishicri2wirm"; + "6px4hrvt65h43n7enhvidbolza" -> "tyjh5qifcje47pczionoa2dz6y"; + "wf7hn3gqqfdx3epkvh3hzczisy" -> "hwu7b64kh5brrlm7spzyucxibe"; + "dm2kmtw5t5aldcbjgwbc6o3pmi" -> "l6qrrsnysrf2hfmyop4bqhtwma"; + "yoyygplnt5bxphait6dzdlg534" -> "k6h2vy5q2nf4tmzgkf2trkppf4"; + "tyjh5qifcje47pczionoa2dz6y" -> "2rqolf6o6jgsdkishicri2wirm"; + "ir4f556pvvddpbchro7vhffjtq" -> "mjzpcsji65f2rlmlujanu3nila"; + "hidk5ja4rfbddp6tgaodiqxcmi" -> "jqptucpeebfetm77ov32zjtjhy"; + "vsmvxmfujndmfbuoz27ygabzf4" -> "z53wdeubi5egnns7h55wv2vpt4"; + "kmhwb6yju5gwvoqlirfpzpipka" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "n2j6o5sjnnc3pgtw23f7pg4uym" -> "tyjh5qifcje47pczionoa2dz6y"; + "4677h7puyjc2picqlgwdelmybi" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "jcx6brqljbcebkizk4cdjeatyu" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "dpjpdyjd35dmbg774v2kgqb3ge" -> "24n7gsewsngrdkolvalzrs2nhe"; + "w6nyuz43fffktacvoq2vnkqwdq" -> "qtqir242zva73h363kajbkvsyi"; + "ij7mnzknkjbbxkhy3k2cscxfqy" -> "42c3kolvbvhtdjznoqarjl4574"; + "nqniiaq2cjezfjxs5ezlqfajl4" -> "qtqir242zva73h363kajbkvsyi"; + "hhtadeldyfeudh7zv7li4zarbm" -> "mfz7bqc5pjgnrojlmsfepz37qe"; + "7w6cjfy7ljfx7i3v2z3hazii3a" -> "jcx6brqljbcebkizk4cdjeatyu"; + "ee4enzkzhvbrha46bzlmerxcsq" -> "jcx6brqljbcebkizk4cdjeatyu"; + "ca7g736vorcobkam2244hj2yry" -> "l6qrrsnysrf2hfmyop4bqhtwma"; + "bumvudnas5cqtjs3in7pb4bnua" -> "qtqir242zva73h363kajbkvsyi"; + "xup26exlhjbtjnlzs3ya6r5opi" -> "idt3qiwgffh2rid46v4vh7qh4m"; + "sydba4xpuff7hdkegjftx3ff5e" -> "qtqir242zva73h363kajbkvsyi"; + "rbbqg7nhsfdfnaphwfuwqmujvy" -> "2rqolf6o6jgsdkishicri2wirm"; + "5ouybxooxvf55ibckfuyflm55y" -> "z53wdeubi5egnns7h55wv2vpt4"; + "26axhnld75dp3k6ruj7qm6lvbi" -> "lb6746dmrbg75gnbcrv3qavere"; + "nazgn3i735e5fabigbyugjm6lu" -> "2rqolf6o6jgsdkishicri2wirm"; + "ki6z42ugjreqzmdfc7hv72ddny" -> "jq2l5dpeknbqlnyt5gbozszkzy"; + "xysudaucabb3flreoy2iztxj6a" -> "5hxst5pboja3dntwcx5xmfb6vu"; + "l6qrrsnysrf2hfmyop4bqhtwma" -> "qtqir242zva73h363kajbkvsyi"; + "nfgui7zbfbe3tdbso2zmffbwpy" -> "jcx6brqljbcebkizk4cdjeatyu"; + "2mhbxewq3rczdjjtbpqsl4if4q" -> "jcx6brqljbcebkizk4cdjeatyu"; + "erfn3kiztvcvhj2ksskgrzttyy" -> "iodn5pvvk5fg3d63nwbs3iqp3i"; + "xa33ovyyy5aolab4iuj5oneokq" -> "2rqolf6o6jgsdkishicri2wirm"; + "7xtcdmozsjh6lppwflvell7qnm" -> "x7s3reyu25bixgdgx4y3kwf2ci"; + "vztpo3kn6rgbvgvnyvkpa7r2cu" -> "xa33ovyyy5aolab4iuj5oneokq"; + "u2tggttxbbbzfdyggh24vuusti" -> "24n7gsewsngrdkolvalzrs2nhe"; + "sydba4xpuff7hdkegjftx3ff5e" -> "l6qrrsnysrf2hfmyop4bqhtwma"; + "idt3qiwgffh2rid46v4vh7qh4m" -> "2rqolf6o6jgsdkishicri2wirm"; +} diff --git a/extra/dot/example_inbound.png b/extra/dot/example_inbound.png Binary files differnew file mode 100644 index 0000000..98a848d --- /dev/null +++ b/extra/dot/example_inbound.png diff --git a/extra/dot/levels_inbound.py b/extra/dot/levels_inbound.py new file mode 100644 index 0000000..290ab6f --- /dev/null +++ b/extra/dot/levels_inbound.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +""" +Take a document fatcat id and emit the citation structure up to X levels as graphviz dot file. +""" + +from elasticsearch import Elasticsearch +from elasticsearch_dsl import Search +import sys +import requests + +seed = sys.argv[1] if len(sys.argv) > 1 else "rgzyfbx7t5d53m5amvbllewzqi" +max_nodes = 50 + +client = Elasticsearch("http://localhost:9200") +S = Search(using=client, index="fatcat_ref_v01") + +def pretty_label(s, k=10): + parts = s.split() + cur, result =[], [] + for p in parts: + if len(" ".join(cur)) < k: + cur.append(p) + else: + result.append(" ".join(cur)) + cur = [] + result.append(" ".join(cur)) + return "\\n".join(result) + +def get_dot_label(ident): + title = requests.get("https://api.fatcat.wiki/v0/release/{}".format(ident)).json().get("title") + return pretty_label(title, k=10) + + +def unique_sources(ident): + """ + Unique inbound references. + """ + s = S.query("match", target_release_ident=ident) + unique_source_idents = set() + for hit in s.scan(): + unique_source_idents.add(hit["source_release_ident"]) + return list(unique_source_idents) + +queue = set([seed]) +i = 0 +edges = set() +while queue: + node = queue.pop() + i += 1 + if i == max_nodes: + break + for n in unique_sources(node)[:5]: + if n == node: + print("skipping self ref: {}".format(n), file=sys.stderr) + continue + edges.add((node, n)) + queue.add(n) + +nodes = set() +for a, b in edges: + nodes.add(a) + nodes.add(b) + +print("digraph G {") +# add sensible labels +for n in nodes: + print(""" "{}" [label="{}"]; """.format(n, get_dot_label(n))) + +for a, b in edges: + print(""" "{}" -> "{}"; """.format(a, b)) +print("}") + |