Simple Directed Acyclic Graph whith Cicle Detector and TopoloGical sorter utilities.
Project description
# Py_SDAG2 - Python Simple Directed Acyclic Graph
The Python Simple Directed Graph whith Cicle Detector and TopoloGical sorter utilities.
## Authors
- [Moises P. Sena](http://moisespsena.com)
## Install
```bash
sudo pip install py_sdag2
```
## Scripts
### tsort.py
Sources from Standard Input:
```bash
echo -e 'C A\nA B\nB D\nC D' | tsort.py
```
Sources from another file:
```bash
echo -e 'C A\nA B\nB D\nC D' > verticies.txt
```
```bash
tsort.py verticies.txt
```
More Options:
```bash
tsort.py --help
Usage: tsort.py [options] [FILE [OUT_FILE]]
Options:
-h, --help show this help message and exit
-f FILE, --file=FILE With no FILE, or when FILE is -, read standard input.
-o OUT_FILE, --out-file=OUT_FILE
Write result to OUT_FILE, default is standard output.
-s SEP, --separator=SEP
Items separator, default is \s regex.
-q QUIT_SEQ, --quit-sequence=QUIT_SEQ
Stop read FILE where line equals QUIT_SEQ, default is
:quit.
```
## Tests
```python
import unittest
from sdag2 import DAG, CycleDetectedException
class DAGTest(unittest.TestCase):
def test_simple(self):
'''
Tests the verticles order in:
C --> A --> B --> D
'''
dag = DAG()
a = dag.add("A")
b = dag.add("B")
c = dag.add("C")
d = dag.add("D")
dag.add_edge(c, a)
dag.add_edge(a, b)
dag.add_edge(b, d)
dag.add_edge(c, d)
rs = dag.topologicaly()
self.assertTrue(rs.index("C") < rs.index("A"))
self.assertTrue(rs.index("A") < rs.index("B"))
self.assertTrue(rs.index("B") < rs.index("D"))
self.assertTrue(rs.index("C") < rs.index("D"))
def test_cicle_detect(self):
'''
Tests the verticles order in:
C --> A --> B --> D -> C
'''
dag = DAG()
a = dag.add("A")
b = dag.add("B")
c = dag.add("C")
d = dag.add("D")
dag.add_edge(c, a)
dag.add_edge(a, b)
dag.add_edge(b, d)
dag.add_edge(c, d)
try:
# add cicle at A --> C --> A
dag.add_edge(a, c)
raise Exception("Cycle not detected")
except CycleDetectedException: pass
def main():
unittest.main()
if __name__ == "__main__":
main()
```
The Python Simple Directed Graph whith Cicle Detector and TopoloGical sorter utilities.
## Authors
- [Moises P. Sena](http://moisespsena.com)
## Install
```bash
sudo pip install py_sdag2
```
## Scripts
### tsort.py
Sources from Standard Input:
```bash
echo -e 'C A\nA B\nB D\nC D' | tsort.py
```
Sources from another file:
```bash
echo -e 'C A\nA B\nB D\nC D' > verticies.txt
```
```bash
tsort.py verticies.txt
```
More Options:
```bash
tsort.py --help
Usage: tsort.py [options] [FILE [OUT_FILE]]
Options:
-h, --help show this help message and exit
-f FILE, --file=FILE With no FILE, or when FILE is -, read standard input.
-o OUT_FILE, --out-file=OUT_FILE
Write result to OUT_FILE, default is standard output.
-s SEP, --separator=SEP
Items separator, default is \s regex.
-q QUIT_SEQ, --quit-sequence=QUIT_SEQ
Stop read FILE where line equals QUIT_SEQ, default is
:quit.
```
## Tests
```python
import unittest
from sdag2 import DAG, CycleDetectedException
class DAGTest(unittest.TestCase):
def test_simple(self):
'''
Tests the verticles order in:
C --> A --> B --> D
'''
dag = DAG()
a = dag.add("A")
b = dag.add("B")
c = dag.add("C")
d = dag.add("D")
dag.add_edge(c, a)
dag.add_edge(a, b)
dag.add_edge(b, d)
dag.add_edge(c, d)
rs = dag.topologicaly()
self.assertTrue(rs.index("C") < rs.index("A"))
self.assertTrue(rs.index("A") < rs.index("B"))
self.assertTrue(rs.index("B") < rs.index("D"))
self.assertTrue(rs.index("C") < rs.index("D"))
def test_cicle_detect(self):
'''
Tests the verticles order in:
C --> A --> B --> D -> C
'''
dag = DAG()
a = dag.add("A")
b = dag.add("B")
c = dag.add("C")
d = dag.add("D")
dag.add_edge(c, a)
dag.add_edge(a, b)
dag.add_edge(b, d)
dag.add_edge(c, d)
try:
# add cicle at A --> C --> A
dag.add_edge(a, c)
raise Exception("Cycle not detected")
except CycleDetectedException: pass
def main():
unittest.main()
if __name__ == "__main__":
main()
```
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
py_sdag2-1.0.1.tar.gz
(5.6 kB
view details)
Built Distributions
py_sdag2-1.0.1-py3.4.egg
(10.0 kB
view details)
py_sdag2-1.0.1-py2.7.egg
(9.6 kB
view details)
File details
Details for the file py_sdag2-1.0.1.tar.gz
.
File metadata
- Download URL: py_sdag2-1.0.1.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | efb000f8038bc58d10b30c3a985e787b5876150b72f41dd4e71e268981c5a83e |
|
MD5 | a3acb6200a9d15e3d098b396c938f52a |
|
BLAKE2b-256 | 500930950184a190d35adf002ec0f48a973ff6fd294af658a9fdccd611408cc3 |
File details
Details for the file py_sdag2-1.0.1-py3.4.egg
.
File metadata
- Download URL: py_sdag2-1.0.1-py3.4.egg
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2360a7b2683f6e0b8e9a8c1bdb5323f75849d03657ae35a14b68988cab6105a9 |
|
MD5 | 88f25d85b741d1da27e7e1a08a1caa6f |
|
BLAKE2b-256 | ccb9eb68971d1a36f0d6674430a73e90c57d35ad2a4ac1da04875a4a864338e7 |
File details
Details for the file py_sdag2-1.0.1-py2.7.egg
.
File metadata
- Download URL: py_sdag2-1.0.1-py2.7.egg
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa87e5eb7c28cbdc07819361cad95e9bc917a4ecabb8f430e633b0963cb5e7cd |
|
MD5 | 596e14a80998be35a31e2a36862eddc1 |
|
BLAKE2b-256 | 1af6cc33ef4700fdb6e8aeb6663463f8b5995641e84a0f08320557be1436df43 |