this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

graphexp

+220
+208
GraphExperiments/Untitled.ipynb
··· 1 + { 2 + "cells": [ 3 + { 4 + "cell_type": "code", 5 + "execution_count": 3, 6 + "metadata": {}, 7 + "outputs": [], 8 + "source": [ 9 + ":set -XNoImplicitPrelude\n", 10 + ":set -XTupleSections\n", 11 + "import Papa\n", 12 + "import qualified Numeric.LinearAlgebra as HM\n", 13 + "import qualified Numeric.LinearAlgebra.Data as HM\n", 14 + "-- import Algebra.Graph.AdjacencyMap\n", 15 + "import qualified Algebra.Graph.Labelled.AdjacencyMap as GL\n", 16 + "import qualified Algebra.Graph.AdjacencyMap as G\n", 17 + "import Algebra.Graph.Label\n", 18 + "import qualified Data.Map as M (fromList, Map(..))\n", 19 + "import Data.Tuple (swap)\n", 20 + "import Data.Tuple.Extra ((***))\n", 21 + "import Foreign.Storable (Storable(..))\n", 22 + "import Prelude (undefined, enumFromTo)" 23 + ] 24 + }, 25 + { 26 + "cell_type": "code", 27 + "execution_count": 50, 28 + "metadata": {}, 29 + "outputs": [], 30 + "source": [ 31 + "prob :: Num t => [[t]]\n", 32 + "prob = [[-1, 1, -1, 1, -1],\n", 33 + " [-1, -1, -1, 2, -1],\n", 34 + " [2, -1, -1, -1, -1],\n", 35 + " [-1, 3, -1, -1, 2],\n", 36 + " [-1, 1, -1, -1, -1]]\n", 37 + " \n", 38 + "m :: HM.Matrix Double\n", 39 + "m = HM.fromLists prob\n", 40 + "\n", 41 + "data Vert a = Row a | Col a deriving (Ord, Show, Eq)\n", 42 + "\n", 43 + "withIndex :: [a] -> [(Int, a)]\n", 44 + "withIndex xs = zip [0 .. length xs] xs\n", 45 + "\n", 46 + "onlyVals :: (Num a, Ord a) => [(Int, a)] -> [(Int, a)]\n", 47 + "onlyVals = Papa.filter ( (> 0) . snd)\n", 48 + "\n", 49 + "row :: (a -> b) -> (Int, a) -> (Vert Int, b)\n", 50 + "row f = Row *** f\n", 51 + "\n", 52 + "col :: (a -> b) -> (Int, a) -> (Vert Int, b)\n", 53 + "col f = Col *** f\n", 54 + "\n", 55 + "rowColGraph :: [HM.Vector Double] -> GL.AdjacencyMap (Distance (Sum Double)) (Vert Int)\n", 56 + "rowColGraph = GL.fromAdjacencyMaps . \n", 57 + " ((row (M.fromList . (col (distance . return . return) <$>) . onlyVals . withIndex . HM.toList)) <$>) .\n", 58 + " withIndex\n", 59 + "\n", 60 + "rowGraph :: [HM.Vector Double] -> GL.AdjacencyMap (Distance (Sum Double)) (Vert Int)\n", 61 + "rowGraph xs = GL.edges $ \n", 62 + " ((distance 0,,) <$> fst <*> snd) <$>\n", 63 + " G.edgeList (G.path $ (Row <$> [0 .. length xs - 1]))\n", 64 + "\n", 65 + "adjGraph :: HM.Matrix Double -> GL.AdjacencyMap (Distance (Sum Double)) (Vert Int)\n", 66 + "adjGraph mat = let rs = HM.toRows mat \n", 67 + " a = rowColGraph rs\n", 68 + " b = rowGraph rs\n", 69 + " in\n", 70 + " GL.overlay b a" 71 + ] 72 + }, 73 + { 74 + "cell_type": "code", 75 + "execution_count": 58, 76 + "metadata": {}, 77 + "outputs": [ 78 + { 79 + "data": { 80 + "text/plain": [ 81 + "digraph \n", 82 + "{\n", 83 + " \"Row 0\"\n", 84 + " \"Row 1\"\n", 85 + " \"Row 2\"\n", 86 + " \"Row 3\"\n", 87 + " \"Row 4\"\n", 88 + " \"Col 0\"\n", 89 + " \"Col 1\"\n", 90 + " \"Col 3\"\n", 91 + " \"Col 4\"\n", 92 + " \"Row 0\" -> \"Row 1\"\n", 93 + " \"Row 0\" -> \"Col 1\"\n", 94 + " \"Row 0\" -> \"Col 3\"\n", 95 + " \"Row 1\" -> \"Row 2\"\n", 96 + " \"Row 1\" -> \"Col 3\"\n", 97 + " \"Row 2\" -> \"Row 3\"\n", 98 + " \"Row 2\" -> \"Col 0\"\n", 99 + " \"Row 3\" -> \"Row 4\"\n", 100 + " \"Row 3\" -> \"Col 1\"\n", 101 + " \"Row 3\" -> \"Col 4\"\n", 102 + " \"Row 4\" -> \"Col 1\"\n", 103 + "}" 104 + ] 105 + }, 106 + "metadata": {}, 107 + "output_type": "display_data" 108 + }, 109 + { 110 + "data": { 111 + "text/plain": [ 112 + "digraph \n", 113 + "{\n", 114 + " \"Row 0\"\n", 115 + " \"Row 1\"\n", 116 + " \"Row 2\"\n", 117 + " \"Row 3\"\n", 118 + " \"Row 4\"\n", 119 + " \"Col 0\"\n", 120 + " \"Col 1\"\n", 121 + " \"Col 3\"\n", 122 + " \"Col 4\"\n", 123 + " \"Row 0\" -> \"Row 1\"\n", 124 + " \"Row 0\" -> \"Row 2\"\n", 125 + " \"Row 0\" -> \"Row 3\"\n", 126 + " \"Row 0\" -> \"Row 4\"\n", 127 + " \"Row 0\" -> \"Col 0\"\n", 128 + " \"Row 0\" -> \"Col 1\"\n", 129 + " \"Row 0\" -> \"Col 3\"\n", 130 + " \"Row 0\" -> \"Col 4\"\n", 131 + " \"Row 1\" -> \"Row 2\"\n", 132 + " \"Row 1\" -> \"Row 3\"\n", 133 + " \"Row 1\" -> \"Row 4\"\n", 134 + " \"Row 1\" -> \"Col 0\"\n", 135 + " \"Row 1\" -> \"Col 1\"\n", 136 + " \"Row 1\" -> \"Col 3\"\n", 137 + " \"Row 1\" -> \"Col 4\"\n", 138 + " \"Row 2\" -> \"Row 3\"\n", 139 + " \"Row 2\" -> \"Row 4\"\n", 140 + " \"Row 2\" -> \"Col 0\"\n", 141 + " \"Row 2\" -> \"Col 1\"\n", 142 + " \"Row 2\" -> \"Col 4\"\n", 143 + " \"Row 3\" -> \"Row 4\"\n", 144 + " \"Row 3\" -> \"Col 1\"\n", 145 + " \"Row 3\" -> \"Col 4\"\n", 146 + " \"Row 4\" -> \"Col 1\"\n", 147 + "}" 148 + ] 149 + }, 150 + "metadata": {}, 151 + "output_type": "display_data" 152 + } 153 + ], 154 + "source": [ 155 + "import Algebra.Graph.AdjacencyMap.Algorithm\n", 156 + "\n", 157 + "import Algebra.Graph.ToGraph\n", 158 + "import Algebra.Graph.Export.Dot\n", 159 + "\n", 160 + "a = adjGraph m\n", 161 + "tra = GL.transitiveClosure a\n", 162 + "putStrLn $ exportViaShow a\n", 163 + "putStrLn $ exportViaShow tra\n", 164 + "-- GL.adjacencyMap a\n", 165 + "-- putStrLn $ exportViaShow $ GL.transitiveClosure a\n", 166 + "-- GL.adjacencyMap tra\n" 167 + ] 168 + }, 169 + { 170 + "cell_type": "code", 171 + "execution_count": 65, 172 + "metadata": {}, 173 + "outputs": [ 174 + { 175 + "data": { 176 + "text/plain": [ 177 + "edges [(vertex 1,vertex 2),(vertex 1,vertex 3),(vertex 3,vertex 4),(vertex 3,vertex 5)]" 178 + ] 179 + }, 180 + "metadata": {}, 181 + "output_type": "display_data" 182 + } 183 + ], 184 + "source": [ 185 + "import Algebra.Graph\n", 186 + "import Data.Tree\n", 187 + "\n", 188 + "scc $ toAdjacencyMap $ tree (Node 1 [Node 2 [], Node 3 [Node 4 [], Node 5 []]]) " 189 + ] 190 + } 191 + ], 192 + "metadata": { 193 + "kernelspec": { 194 + "display_name": "Haskell", 195 + "language": "haskell", 196 + "name": "haskell" 197 + }, 198 + "language_info": { 199 + "codemirror_mode": "ihaskell", 200 + "file_extension": ".hs", 201 + "name": "haskell", 202 + "pygments_lexer": "Haskell", 203 + "version": "8.6.4" 204 + } 205 + }, 206 + "nbformat": 4, 207 + "nbformat_minor": 2 208 + }
+12
GraphExperiments/default.nix
··· 1 + let pkgs = import ../pkgs.nix; 2 + in 3 + import "${pkgs.ihaskell}/release.nix" { 4 + compiler = "ghc864"; 5 + nixpkgs = import pkgs.nixpkgs {}; 6 + packages = self: with self; [ 7 + papa 8 + containers 9 + algebraic-graphs 10 + hmatrix 11 + ]; 12 + }