powergrasp


Namepowergrasp JSON
Version 0.8.18 PyPI version JSON
download
home_pagehttps://github.com/aluriak/powergrasp
Summarycompress graphs with answer-set-programming
upload_time2018-12-18 10:23:12
maintainer
docs_urlNone
authorLucas Bourneuf
requires_python
licenseGPL
keywords graph answer set programming
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PowerGrASP
Graph compression.

Note that this is a full reimplementation of PowerGrASP,
taking advantage of ASP and Python lifting and simplifications.
For the version published in 2017, see [this repository](https://github.com/aluriak/PowerGrASP-1).


## CLI

    python -m powergrasp mygraph.gml -o compressed.bbl

### help !

    python -m powergrasp --help

## API

```python
import powergrasp
with open('compressed.bbl', 'w') as fd:
    for line in powergrasp.compress_by_cc('mygraph.gml'):
        fd.write(line + '\n')
```

### help !
Sorry, no technical doc for the moment.


## Bubble files usage
The bubble file is the main output of PowerGrASP, and describes a power graph.
The bubble is a format handled by the [CyOog plugin](http://www.biotec.tu-dresden.de/research/schroeder/powergraphs/download-cytoscape-plugin.html) for [Cytoscape 2](http://cytoscape.org/), allowing one to load a bubble formatted file and to visualize the corresponding graph.
As a consequence, you have to [install Cytoscape 2](http://chianti.ucsd.edu/Cyto-2%5F8%5F3/), and put the `CyOog.jar` file into `path/to/cytoscape/install/dir/plugins/`.

Another way to go is to convert the bubble to other formats handling hierarchical graphs, like [gexf](https://gephi.org/gexf/format/),
[dot](https://www.graphviz.org/doc/info/lang.html) or the API of [cytoscape.js](http://js.cytoscape.org/).
This is a task implemented by [bubbletools](https://github.com/Aluriak/bubble-tools/).


## Configuration
PowerGrASP has some [configuration values](powergrasp/constants.py),
that can be overwritten by a `powergrasp.cfg` file placed in the working directory.

The configuration may be printed in stdout using:

    python -m powergrasp --config

The config file may be either in ini or json format, as shown in [`test/powergrasp.oneshot.cfg`](test/powergrasp.oneshot.cfg) and [`test/powergrasp.manyoptions.cfg`](test/powergrasp.manyoptions.cfg).

Configuration allow user to define how much text will be outputed by powergrasp,
and to tune the core compression and related optimizations.

See complete list in the [options section](#Options).


## installation

    pip install powergrasp

On random error, try adding `--no-cache-dir` at the end of the command,
and check that you are using python 3.

You must have [`clingo`](https://potassco.org/doc/start/) in your path. Depending on your OS, it might be done with a system installation,
or through [downloading](https://github.com/potassco/clingo/releases) and (compilation and) manual installation.


## Changelog

- 8.17
    - support for [recipes options](#recipes), like `breakable` or `last`
- 8.11
    - slight bounds improvements for non-star-biclique motif
    - statistics/timers now provides time needed to search for each motif
    - support for [recipes](#recipes), that small file that allows to define the compressions to do
- 8.10
    - option [parallel cc compression](#parallel-cc-compression) to enable parallel compression of connected components
    - option [bubble embeds cc](#bubble-embeds-cc), to put each cc in a dedicated powernode
    - option [bubble with simple edges](#bubble-with-simple-edges), to keep or discard the simple edges from output
    - statistics on time and compression metrics are computed by cc and for all graph. See new options.
    - option [cc statistic file](#cc-statistic-file), to retrieve stats and metrics for connected components.
    - option [global statistics](#global-statistics), to compute statistics/metrics over all connected components.
    - option [bubble with statistics](#bubble-with-statistics), to include stats and metrics in output bubble file
    - [motif type order](#motif-type-order) option, allowing user to tune the order in which motifs are searched.
    - [parallel motif search](#parallel-motif-search) option, making motifs search in different threads, and the overhaul compression much slower.
    - CLI: --config flag to print the full configuration in stdout
    - handling spaces instead of _ in fields names for INI format
    - do not filter out nodes alone in their connected component (cf [keep-single-nodes option](#keep-single-nodes))
    - perf gain: the first motif to reach the best score is compressed, instead of the last
    - improve handling of statistic files, that now contains cc idx and motif bounds
    - expose `__version__` attribute in the package
    - add a list of available options in the README
    - graph filtering: optimization leading to general performance gain when enabled
    - improvements on {low,upp}erbounds computations
- 8.9
    - many bugfixes
    - CLINGO_OPTIONS can be a dict, mapping motif name to arbitrary parameters
- 8.8
    - bugfix: lowerbound can't go under 2 (3 for cliques)
    - clique search: lowerbound is initially computed as the maximal degree of node of clustering coefficient equals to 1
    - use new versions of clyngor and bubbletools
- 8.7
    - raise error when an invalid key is found in config file
    - StarSearch is dedicated to find stars, simplifying BicliqueSearch's job (enabled by default, user may use Biclique instead of both Star and NonStarBiclique)
    - specify a prefix for all (power) nodes with OUTPUT_NODE_PREFIX config field
    - arbitrary options for clingo using CLINGO_OPTIONS config field
    - bugfix on string options given in ini file, when unecessary quotes are kept
- 8.6
    - bugfixes for INI format
- 8.5
    - config may now be given in INI format
    - improve logging
    - config allow optimization target between memory or CPU (currently define a constraint implementation in ASP)
    - bugfix about edges yielded by ASP and multithreading parameter
    - no statistics file to write by default
    - timer for output writing
    - config allow user to define the number of CPU for clingo to use
    - simplify ASP code by removing useless arg in block/4 atoms
- 8.4
    - replace ASP code constraint to achieve much more efficient grounding
    - configuration allow for improved lowerbound computation of bicliques
    - generated bubble allow client to give heading comments
    - handle keyboard interruption during search with grace
    - implement timers and statistics recording
    - enable multishot motif search by default
    - various bugfixes


## Recipes
A recipe is a description of the motifs to compress.
For instance, the [data/recipe-test.txt](data/recipe-test.txt):

    biclique	c	g h i
    biclique	a b	d e
    biclique	a b	f
    biclique	c	d e

Using the `--recipe` option in CLI, user can provide a recipe for its own graph,
allowing to specify prior motifs to search.
The order of second and third columns does not have any influence.

The first column usually contains the motif types separated by comma
(altough it is not necessary), and allows to provide some options (separated by comma):

- `primer`: allows the program to extend the given motif if possible
- `breakable`: allows the program to compress the line with multiple motifs
- `optional`: if not found, ignore instead of stopping
- `last`: stop compression here (useful to avoid the compression process to take over)


The recipe file will be read line by line.
Once all lines have been applied, the normal compression compression takes over
(unless `last` option is used).

For a living example, see [data/recipe-option-test.txt](data/recipe-option-test.txt).


## Options
Description of all powergrasp options.
All values example are given for INI format.

### test integrity
Run some integrity tests during runtime to ensure that compression is working well.
May slow the compression a lot, and is mainly a debugging tool.

Default value:

    test_integrity = true

### show story
Print in stdout the main steps of compression.
Default value:

    show_story = true

### show motif handling
Print in stdout the motif transformation.
Default value:

    show_motif_handling = false

### timers
Maintain and print in stdout some timers.
Default value:

    timers = true

### statistics file
A file in which some statistics will be written in CSV format, giving among others size of compressed motifs, and their compression times (if *timers* option is enabled).
Default value:

    statistics_file = None

Example value:

    statistics_file = statistics.csv

### cc statistic file
Filename in which the statistics about each connected component will be written.
Data will contain one row for each connected component, with the following data:

- connected component index
- the convertion rate
- the edge reduction
- the compression rate
- time needed to compress the connected component (if TIMERS is enabled)

Default value stands for *no file*:

    cc_statistic_file = None

Example value:

    cc_statistic_file = statistics-cc.csv

### global statistics
When enabled, statistics and metrics computation on the overall graph will be performed at the end of compression.
Default value:

    global_statistics = True

### bubble with statistics
When enabled, output bubble will contain statistics about each connected component
and the overall graph (if global_statistics is enabled).
Default value:

    bubble_with_statistics = True

### bubble for each step
Generate and save a bubble representation of the graph at each step.
Mainly used for debugging.
Default value:

    bubble_for_each_step = false

### output node prefix
Prefix to add to all (power)nodes names in output.
Default value:

    output_node_prefix = ''

### show debug
Show full trace of the compression. Useful for debugging.
Default value:

    show_debug = False

### covered edges from ASP
Recover covered edges from ASP. If falsy, will ask motif searcher to compute the edges, which may be quicker.
Default value:

    covered_edges_from_asp = False

### bubble with nodes
Nodes and sets are optional in the output bubble.
Default value:

    bubble_with_nodes = True
    bubble_with_sets = True

### bubble poweredge factor
Edges in bubble are associated to a factor.
Default value:

    bubble_poweredge_factor = '1.0'
    bubble_edge_factor = '1.0'

### bubble embeds cc
If enabled, put each connected component in a dedicated powernode.
Default value:

    bubble_embeds_cc = no


### bubble simplify quotes
When possible, delete the quotes around identifiers in the bubble. May lead to node name collision.
Default value:

    bubble_simplify_quotes = True

### bubble with simple edges
If disabled, will discard simple (i.e. non-power) edges of output.
Default value:

    bubble_with_simple_edges = True

### config file
Load options found in given config file, if it exists.
Default value:

    config_file = 'powergrasp.cfg'

### multishot motif search
Search for multiple motif in a single search.
Accelerate the solving for graph with lots of equivalent motifs. It is generally a good option to enable.
Default value:

    multishot_motif_search = True

### biclique lowerbound maxnei
Optimization on biclique lowerbound computation. Can be costly. Deactivate with 2. With value at n, up to n neighbors are considered.
Default value:

    biclique_lowerbound_maxnei = 2

### clingo options
Arbitrary parameters to give to clingo (note that some, like multithreading or optmode, may already be set by other options).
Default value:

    clingo_options = {}

Give a particular configuration for bicliques search:

    clingo_options = {'no-star-biclique': '--configuration=handy'}

### clingo multithreading
Number of CPU available to clingo, or 0 for autodetect number of CPU.
Default value:

    clingo_multithreading = 1

Use as many thread there are available CPU:

    clingo_multithreading = 0

Specify a competing search between 4 threads:

    clingo_multithreading = '4,compete'

### parallel cc compression
To use to compress connected components in different processes.
Default value (optimized in memory):

    parallel_cc_compression = 1

Compress with 4 processes :

    parallel_cc_compression = 4

Compress with one process for each connected component :

    parallel_cc_compression = 0

### use star motif
Two different motifs for stars and bicliques, so the search space for bicliques is smaller. Yields good performance improvements on big graphs.
Default value:

    use_star_motif = True

### optimize for memory
When possible, prefer memory over CPU.
Default value:

    optimize_for_memory = False

### graph filtering
Ignore edges dynamically determined as impossible to compress.
Default value:

    graph_filtering = True

### keep single nodes
If a node is found to be alone in its connected component, it will be kept nonetheless.
Default value:

    keep_single_nodes = True

### parallel motif search
Use multithreading to search for all motifs in the same time, instead of sequentially.
Interestingly, this yields very poor results, and it's even worse with multiprocessing.

    parallel_motif_search = False

### motif type order
Define in which order the motifs are searched, e.g. cliques, then bicliques then stars.

    motif_type_order = star,clique,non-star-biclique,biclique

Instead of expliciting the exact motif names and order, it is also possible to specify a bound-based order:

    motif_type_order = greatest-upperbound-first

Or any variation with `worst`, `lowerbound` and `last`.



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/aluriak/powergrasp",
    "name": "powergrasp",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "graph,Answer Set Programming",
    "author": "Lucas Bourneuf",
    "author_email": "lucas.bourneuf@inria.fr",
    "download_url": "https://files.pythonhosted.org/packages/ea/86/ddcbbdfe099a5fb03e65926e08e42a6d0a38701777d2635b4cd8d666eb5a/powergrasp-0.8.18.tar.gz",
    "platform": "",
    "description": "# PowerGrASP\nGraph compression.\n\nNote that this is a full reimplementation of PowerGrASP,\ntaking advantage of ASP and Python lifting and simplifications.\nFor the version published in 2017, see [this repository](https://github.com/aluriak/PowerGrASP-1).\n\n\n## CLI\n\n    python -m powergrasp mygraph.gml -o compressed.bbl\n\n### help !\n\n    python -m powergrasp --help\n\n## API\n\n```python\nimport powergrasp\nwith open('compressed.bbl', 'w') as fd:\n    for line in powergrasp.compress_by_cc('mygraph.gml'):\n        fd.write(line + '\\n')\n```\n\n### help !\nSorry, no technical doc for the moment.\n\n\n## Bubble files usage\nThe bubble file is the main output of PowerGrASP, and describes a power graph.\nThe bubble is a format handled by the [CyOog plugin](http://www.biotec.tu-dresden.de/research/schroeder/powergraphs/download-cytoscape-plugin.html) for [Cytoscape 2](http://cytoscape.org/), allowing one to load a bubble formatted file and to visualize the corresponding graph.\nAs a consequence, you have to [install Cytoscape 2](http://chianti.ucsd.edu/Cyto-2%5F8%5F3/), and put the `CyOog.jar` file into `path/to/cytoscape/install/dir/plugins/`.\n\nAnother way to go is to convert the bubble to other formats handling hierarchical graphs, like [gexf](https://gephi.org/gexf/format/),\n[dot](https://www.graphviz.org/doc/info/lang.html) or the API of [cytoscape.js](http://js.cytoscape.org/).\nThis is a task implemented by [bubbletools](https://github.com/Aluriak/bubble-tools/).\n\n\n## Configuration\nPowerGrASP has some [configuration values](powergrasp/constants.py),\nthat can be overwritten by a `powergrasp.cfg` file placed in the working directory.\n\nThe configuration may be printed in stdout using:\n\n    python -m powergrasp --config\n\nThe config file may be either in ini or json format, as shown in [`test/powergrasp.oneshot.cfg`](test/powergrasp.oneshot.cfg) and [`test/powergrasp.manyoptions.cfg`](test/powergrasp.manyoptions.cfg).\n\nConfiguration allow user to define how much text will be outputed by powergrasp,\nand to tune the core compression and related optimizations.\n\nSee complete list in the [options section](#Options).\n\n\n## installation\n\n    pip install powergrasp\n\nOn random error, try adding `--no-cache-dir` at the end of the command,\nand check that you are using python 3.\n\nYou must have [`clingo`](https://potassco.org/doc/start/) in your path. Depending on your OS, it might be done with a system installation,\nor through [downloading](https://github.com/potassco/clingo/releases) and (compilation and) manual installation.\n\n\n## Changelog\n\n- 8.17\n    - support for [recipes options](#recipes), like `breakable` or `last`\n- 8.11\n    - slight bounds improvements for non-star-biclique motif\n    - statistics/timers now provides time needed to search for each motif\n    - support for [recipes](#recipes), that small file that allows to define the compressions to do\n- 8.10\n    - option [parallel cc compression](#parallel-cc-compression) to enable parallel compression of connected components\n    - option [bubble embeds cc](#bubble-embeds-cc), to put each cc in a dedicated powernode\n    - option [bubble with simple edges](#bubble-with-simple-edges), to keep or discard the simple edges from output\n    - statistics on time and compression metrics are computed by cc and for all graph. See new options.\n    - option [cc statistic file](#cc-statistic-file), to retrieve stats and metrics for connected components.\n    - option [global statistics](#global-statistics), to compute statistics/metrics over all connected components.\n    - option [bubble with statistics](#bubble-with-statistics), to include stats and metrics in output bubble file\n    - [motif type order](#motif-type-order) option, allowing user to tune the order in which motifs are searched.\n    - [parallel motif search](#parallel-motif-search) option, making motifs search in different threads, and the overhaul compression much slower.\n    - CLI: --config flag to print the full configuration in stdout\n    - handling spaces instead of _ in fields names for INI format\n    - do not filter out nodes alone in their connected component (cf [keep-single-nodes option](#keep-single-nodes))\n    - perf gain: the first motif to reach the best score is compressed, instead of the last\n    - improve handling of statistic files, that now contains cc idx and motif bounds\n    - expose `__version__` attribute in the package\n    - add a list of available options in the README\n    - graph filtering: optimization leading to general performance gain when enabled\n    - improvements on {low,upp}erbounds computations\n- 8.9\n    - many bugfixes\n    - CLINGO_OPTIONS can be a dict, mapping motif name to arbitrary parameters\n- 8.8\n    - bugfix: lowerbound can't go under 2 (3 for cliques)\n    - clique search: lowerbound is initially computed as the maximal degree of node of clustering coefficient equals to 1\n    - use new versions of clyngor and bubbletools\n- 8.7\n    - raise error when an invalid key is found in config file\n    - StarSearch is dedicated to find stars, simplifying BicliqueSearch's job (enabled by default, user may use Biclique instead of both Star and NonStarBiclique)\n    - specify a prefix for all (power) nodes with OUTPUT_NODE_PREFIX config field\n    - arbitrary options for clingo using CLINGO_OPTIONS config field\n    - bugfix on string options given in ini file, when unecessary quotes are kept\n- 8.6\n    - bugfixes for INI format\n- 8.5\n    - config may now be given in INI format\n    - improve logging\n    - config allow optimization target between memory or CPU (currently define a constraint implementation in ASP)\n    - bugfix about edges yielded by ASP and multithreading parameter\n    - no statistics file to write by default\n    - timer for output writing\n    - config allow user to define the number of CPU for clingo to use\n    - simplify ASP code by removing useless arg in block/4 atoms\n- 8.4\n    - replace ASP code constraint to achieve much more efficient grounding\n    - configuration allow for improved lowerbound computation of bicliques\n    - generated bubble allow client to give heading comments\n    - handle keyboard interruption during search with grace\n    - implement timers and statistics recording\n    - enable multishot motif search by default\n    - various bugfixes\n\n\n## Recipes\nA recipe is a description of the motifs to compress.\nFor instance, the [data/recipe-test.txt](data/recipe-test.txt):\n\n    biclique\tc\tg h i\n    biclique\ta b\td e\n    biclique\ta b\tf\n    biclique\tc\td e\n\nUsing the `--recipe` option in CLI, user can provide a recipe for its own graph,\nallowing to specify prior motifs to search.\nThe order of second and third columns does not have any influence.\n\nThe first column usually contains the motif types separated by comma\n(altough it is not necessary), and allows to provide some options (separated by comma):\n\n- `primer`: allows the program to extend the given motif if possible\n- `breakable`: allows the program to compress the line with multiple motifs\n- `optional`: if not found, ignore instead of stopping\n- `last`: stop compression here (useful to avoid the compression process to take over)\n\n\nThe recipe file will be read line by line.\nOnce all lines have been applied, the normal compression compression takes over\n(unless `last` option is used).\n\nFor a living example, see [data/recipe-option-test.txt](data/recipe-option-test.txt).\n\n\n## Options\nDescription of all powergrasp options.\nAll values example are given for INI format.\n\n### test integrity\nRun some integrity tests during runtime to ensure that compression is working well.\nMay slow the compression a lot, and is mainly a debugging tool.\n\nDefault value:\n\n    test_integrity = true\n\n### show story\nPrint in stdout the main steps of compression.\nDefault value:\n\n    show_story = true\n\n### show motif handling\nPrint in stdout the motif transformation.\nDefault value:\n\n    show_motif_handling = false\n\n### timers\nMaintain and print in stdout some timers.\nDefault value:\n\n    timers = true\n\n### statistics file\nA file in which some statistics will be written in CSV format, giving among others size of compressed motifs, and their compression times (if *timers* option is enabled).\nDefault value:\n\n    statistics_file = None\n\nExample value:\n\n    statistics_file = statistics.csv\n\n### cc statistic file\nFilename in which the statistics about each connected component will be written.\nData will contain one row for each connected component, with the following data:\n\n- connected component index\n- the convertion rate\n- the edge reduction\n- the compression rate\n- time needed to compress the connected component (if TIMERS is enabled)\n\nDefault value stands for *no file*:\n\n    cc_statistic_file = None\n\nExample value:\n\n    cc_statistic_file = statistics-cc.csv\n\n### global statistics\nWhen enabled, statistics and metrics computation on the overall graph will be performed at the end of compression.\nDefault value:\n\n    global_statistics = True\n\n### bubble with statistics\nWhen enabled, output bubble will contain statistics about each connected component\nand the overall graph (if global_statistics is enabled).\nDefault value:\n\n    bubble_with_statistics = True\n\n### bubble for each step\nGenerate and save a bubble representation of the graph at each step.\nMainly used for debugging.\nDefault value:\n\n    bubble_for_each_step = false\n\n### output node prefix\nPrefix to add to all (power)nodes names in output.\nDefault value:\n\n    output_node_prefix = ''\n\n### show debug\nShow full trace of the compression. Useful for debugging.\nDefault value:\n\n    show_debug = False\n\n### covered edges from ASP\nRecover covered edges from ASP. If falsy, will ask motif searcher to compute the edges, which may be quicker.\nDefault value:\n\n    covered_edges_from_asp = False\n\n### bubble with nodes\nNodes and sets are optional in the output bubble.\nDefault value:\n\n    bubble_with_nodes = True\n    bubble_with_sets = True\n\n### bubble poweredge factor\nEdges in bubble are associated to a factor.\nDefault value:\n\n    bubble_poweredge_factor = '1.0'\n    bubble_edge_factor = '1.0'\n\n### bubble embeds cc\nIf enabled, put each connected component in a dedicated powernode.\nDefault value:\n\n    bubble_embeds_cc = no\n\n\n### bubble simplify quotes\nWhen possible, delete the quotes around identifiers in the bubble. May lead to node name collision.\nDefault value:\n\n    bubble_simplify_quotes = True\n\n### bubble with simple edges\nIf disabled, will discard simple (i.e. non-power) edges of output.\nDefault value:\n\n    bubble_with_simple_edges = True\n\n### config file\nLoad options found in given config file, if it exists.\nDefault value:\n\n    config_file = 'powergrasp.cfg'\n\n### multishot motif search\nSearch for multiple motif in a single search.\nAccelerate the solving for graph with lots of equivalent motifs. It is generally a good option to enable.\nDefault value:\n\n    multishot_motif_search = True\n\n### biclique lowerbound maxnei\nOptimization on biclique lowerbound computation. Can be costly. Deactivate with 2. With value at n, up to n neighbors are considered.\nDefault value:\n\n    biclique_lowerbound_maxnei = 2\n\n### clingo options\nArbitrary parameters to give to clingo (note that some, like multithreading or optmode, may already be set by other options).\nDefault value:\n\n    clingo_options = {}\n\nGive a particular configuration for bicliques search:\n\n    clingo_options = {'no-star-biclique': '--configuration=handy'}\n\n### clingo multithreading\nNumber of CPU available to clingo, or 0 for autodetect number of CPU.\nDefault value:\n\n    clingo_multithreading = 1\n\nUse as many thread there are available CPU:\n\n    clingo_multithreading = 0\n\nSpecify a competing search between 4 threads:\n\n    clingo_multithreading = '4,compete'\n\n### parallel cc compression\nTo use to compress connected components in different processes.\nDefault value (optimized in memory):\n\n    parallel_cc_compression = 1\n\nCompress with 4 processes :\n\n    parallel_cc_compression = 4\n\nCompress with one process for each connected component :\n\n    parallel_cc_compression = 0\n\n### use star motif\nTwo different motifs for stars and bicliques, so the search space for bicliques is smaller. Yields good performance improvements on big graphs.\nDefault value:\n\n    use_star_motif = True\n\n### optimize for memory\nWhen possible, prefer memory over CPU.\nDefault value:\n\n    optimize_for_memory = False\n\n### graph filtering\nIgnore edges dynamically determined as impossible to compress.\nDefault value:\n\n    graph_filtering = True\n\n### keep single nodes\nIf a node is found to be alone in its connected component, it will be kept nonetheless.\nDefault value:\n\n    keep_single_nodes = True\n\n### parallel motif search\nUse multithreading to search for all motifs in the same time, instead of sequentially.\nInterestingly, this yields very poor results, and it's even worse with multiprocessing.\n\n    parallel_motif_search = False\n\n### motif type order\nDefine in which order the motifs are searched, e.g. cliques, then bicliques then stars.\n\n    motif_type_order = star,clique,non-star-biclique,biclique\n\nInstead of expliciting the exact motif names and order, it is also possible to specify a bound-based order:\n\n    motif_type_order = greatest-upperbound-first\n\nOr any variation with `worst`, `lowerbound` and `last`.\n\n\n",
    "bugtrack_url": null,
    "license": "GPL",
    "summary": "compress graphs with answer-set-programming",
    "version": "0.8.18",
    "project_urls": {
        "Homepage": "https://github.com/aluriak/powergrasp"
    },
    "split_keywords": [
        "graph",
        "answer set programming"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2d6b742421567b90d4223f35a8804d7b69dd92ce7a53d641e6549119e94f33fb",
                "md5": "506b05fe64f694e76b6bc50682bd9a30",
                "sha256": "1ccb6c648162a9e52221a45cb7bec4e980b645caa81b4edc8e84be2b5768718b"
            },
            "downloads": -1,
            "filename": "powergrasp-0.8.18-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "506b05fe64f694e76b6bc50682bd9a30",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 41402,
            "upload_time": "2018-12-18T10:23:10",
            "upload_time_iso_8601": "2018-12-18T10:23:10.026816Z",
            "url": "https://files.pythonhosted.org/packages/2d/6b/742421567b90d4223f35a8804d7b69dd92ce7a53d641e6549119e94f33fb/powergrasp-0.8.18-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ea86ddcbbdfe099a5fb03e65926e08e42a6d0a38701777d2635b4cd8d666eb5a",
                "md5": "6534c64ba470abfab724b57d6535d950",
                "sha256": "5b8b359ec03407633a8d35939c71f17d36111e3c767c13258f52831e3a77bcf5"
            },
            "downloads": -1,
            "filename": "powergrasp-0.8.18.tar.gz",
            "has_sig": false,
            "md5_digest": "6534c64ba470abfab724b57d6535d950",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 34274,
            "upload_time": "2018-12-18T10:23:12",
            "upload_time_iso_8601": "2018-12-18T10:23:12.286960Z",
            "url": "https://files.pythonhosted.org/packages/ea/86/ddcbbdfe099a5fb03e65926e08e42a6d0a38701777d2635b4cd8d666eb5a/powergrasp-0.8.18.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2018-12-18 10:23:12",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "aluriak",
    "github_project": "powergrasp",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "powergrasp"
}
        
Elapsed time: 3.29511s