Coder Social home page Coder Social logo

asciigraf's Introduction

asciigraf

image

image

image

image

image

Asciigraf is a python library that turns ascii diagrams of networks into network objects. It returns a networkx graph of nodes for each alpha-numeric element in the input text; nodes are connected in the graph to match the edges represented in the diagram by -, /, \ and |.

Installation

Asciigraf can be installed from pypi using pip:

~/$ pip install asciigraf

Usage

Asciigraf expects a string containg a 2-d ascii diagram. Nodes can be an alphanumeric string composed of characters in A-Z, a-z, 0-9, and _, {, }. Edges can be composed of -, /, \ and | (with some restrictions on how corners work --- see the tests).

import asciigraf

network = asciigraf.graph_from_ascii("""
          NodeA-----
                   |
                   |---NodeB
                                     """)

print(network)
>>> <networkx.classes.graph.Graph at 0x7f24c3a8b470>

print(network.edges())
>>> [('NodeA', 'NodeB')]

print(network.nodes())
>>> ['NodeA', 'NodeB']

Networkx provides tools to attach data to nodes and edges, and asciigraf leverages these in a number of ways; in the example below you can see that asciigraf uses this to attach a Point object to each node indicating where on the (x, y) plane each node starts ( 0,0 is at the top-left). It also attaches a length attribute to each edge which matches the number of characters in that edge.

print(network.nodes(data=True))
>>> [('NodeA', {'position': Point(1, 10)}), ('NodeB', {'position': Point(3, 23)})]

print(network.edges(data=True))
>>> [('NodeA', 'NodeB', OrderedDict([('length', 10)]))]

Asciigraf also lets you annotate the edges of graphs using in-line labels ---denoted by parentheses. The contents of the label will be attached to the edge on which it is drawn with the attribute name label.

network = asciigraf.graph_from_ascii("""

    A---(nuts)----B----(string)---C
                  |
                  |
                  |
                  D---(string)----E

""")

print(network.get_edge_data("A", "B")["label"])
>>> nuts

print(network.get_edge_data("B", "C")["label"])
>>> string

print(network.get_edge_data("D", "E")["label"])
>>> string

print(hasattr(network.get_edge_data("B", "D"), "label"))
>>> False

Have fun!

import asciigraf


network = asciigraf.graph_from_ascii("""
          s---p----1---nx
         /    |        |
        /     |        0---f
       6l-a   c--
      /   |      \--k
     /   ua         |  9e
    q      \        | /
            \-r7z   jud
                \    |
                 m   y
                  \  |
                   v-ow
                             """)

asciigraf's People

Contributors

anjoman avatar greatestape avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.