Metadata-Version: 2.1
Name: tdvisu
Version: 0.5.0.dev3
Summary: Visualizing Dynamic Programming on Tree Decompositions.
Home-page: https://github.com/VaeterchenFrost/tdvisu
Author: Martin Röbke
Author-email: martin.roebke@mailbox.tu-dresden.de
License: GPLv3
Keywords: graph visualization dynamic-programming msol-solver
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: Scientific/Engineering :: Visualization
Classifier: Topic :: Multimedia :: Graphics :: Presentation
Description-Content-Type: text/markdown
Requires-Dist: graphviz
Requires-Dist: psycopg2
Requires-Dist: python-benedict
Provides-Extra: test
Requires-Dist: unittest-expander ; extra == 'test'

# TdVisu
![Tests](https://github.com/VaeterchenFrost/tdvisu/workflows/Tests/badge.svg)
![Upload Python Package TEST](https://github.com/VaeterchenFrost/tdvisu/workflows/Upload%20Python%20Package%20TEST/badge.svg)

Visualization for [dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming) on [tree decompositions](https://en.wikipedia.org/wiki/Tree_decomposition).
Create a graph object for each desired graph that is of interest for the dynamic programming.
Then the visualization generates highlights and adds additional solutions for user-defined time steps.
These snapshots of graphs get written in a supported file-format to a any folder.
For the portable and light weight '.svg' format, all graphs for a timestep can be joined together to provide a thoroughly view on the process of dynamic programming.

With the '.svg' the images are highly customizable, and even combining several timesteps together using svg [animate](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate) would be an option.


# Using
[Alubbock:Graphviz](https://anaconda.org/alubbock/graphviz) (or [Graphviz (>=2.38)](https://graphviz.gitlab.io/download/))

[python-benedict](https://pypi.org/project/python-benedict/)

[for dpdb: psycopg2 (2.8.5)](https://www.psycopg.org/docs/index.html)

# How to install

After downloading the latest verion, go to the source-directory. 

With [Conda](https://docs.conda.io/en/latest/) on the system installed, the dependencies for this project can be automatically installed in a new environment - or in a place of your choosing:

Open a *conda-command-prompt* with admin privileges and run the commands from the *gpusat-VISU\tdvisualization_repo* folder:
```shell
conda env create -f .\environment.yml
```
to create a new environment with basic dependencies
```shell
conda activate tdvisu
```
to activate the environment
```shell
dot.exe -c
```
to register the plugins
```shell
pip install --pre .
```
to install the project in the environment (currently in pre-release, to get *pip* see: https://anaconda.org/anaconda/pip)
```shell
python .\tdvisu\visualization.py -h
```
to confirm that the visualization finds all dependencies.
```shell
pip install .[test] 
python -m unittest
```
to run all tests.


# How to use

The visualization needs input in the form of the [Json API](https://github.com/VaeterchenFrost/gpusat-VISU/blob/master/JsonAPI_v1.3.md).
The creation of this file is exemplary implemented in *construct_dpdb_visu.py* or the fork [GPUSAT](https://github.com/VaeterchenFrost/GPUSAT) and *--visufile filename* (optionally disabling preprocessing with *-p*).

Run the python file with the above dependencies installed:
[visualization.py](https://github.com/VaeterchenFrost/gpusat-VISU/blob/master/satvisualization_repo/satvisu/visualization.py)

**visualization.py** takes two parameters, the json-**infile** to read from, and optionally one **outputfolder**.
With both arguments a call from IPython might look like this:

```python
runfile('visualization.py', 
args='visugpusat.json examplefolder')
```

For #SAT it produces for example three different graphs suffixed with a running integer to represent timesteps:

+ *TDStep* the tree decomposition with solved nodes
+ *PrimalGraphStep* the primal graph with currently active variables
+ *IncidenceGraphStep* the bipartite incidence graph with active clauses/variables

Currently the graphs are images encoded in resolution independent **.svg files** (see https://www.lifewire.com/svg-file-4120603)

<img src="Bachelor/images/combined6DA4.svg" alt="Example SharpSat" width="50%"/>

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

- Removed individual versioning 
- Added version.py
- Added module-name to imports
- Added README to tdvisu directly

## [0.5.0] - 2020-06-01

### Added

- Current development version


[#78]: https://github.com/theskumar/python-dotenv/issues/78

[@VaeterchenFrost]: https://github.com/VaeterchenFrost

[Unreleased]: https://github.com/VaeterchenFrost/tdvisu/compare/v0.5.0...HEAD

[0.5.0]: https://github.com/VaeterchenFrost/tdvisu/releases/tag/v0.5.0


