NOTE: This crate is still highly experimental and API changes should be expected! Performance is currently also not a concern. I highly discourage any use except for experiments.
For the API documentation refer to TODO
. This project contains a library that can be
used to define and use graph grammars as well as some helper functions for generating
random graphs given a graph grammar. It also has some predefined ones to aid
the creation of custom ones and to play around with. It comes with an extensive
test suite[^1] and a good documentation with many examples[^1].
The project also has an application that utilises the library to display generated graphs and graphically create custom ones[^1].
The intermediate format to define and read graph grammars is a simple JSON file.
The following list contains all crucial things and the
- [ ] Add an (interactive) visualization that can display square lattices sensible
- [ ] Better documentation & examples
- [ ] Show SERDE support with an actual minimal example binary
- [ ] Create the whole application thing
- [ ] Write a useful README.md
- [ ] Eventually use the graph_builder
-crate
This list denotes 'good-to-have' things that improve the project, but are not necessary: - [ ] Implement a better partial isomorphism algorithm - maybe VL2? Should be a major speedup - [ ] Make it more generic s.t. it is actually usable by other projects - [ ] Reevaluate the public API - [X] Upload to crates.io s.t. it can be easily used/installed - [ ] Improve performance to the point where it is useful and not only a neat library to try things.
TODO: DPO-approach - This should be enough s.t. everybody could understand and work with the basic building blocks.
TODO: The documentation also has many examples ( that are actually there instead of just more todos ).
```rust let grammar = graphlang::predefined::stringgrammar(); let mut g = grammar.startgraph.clone();
for _ in 0..10 { grammar.productions["extend"].applyinplace(&mut g)?; } grammar.productions["finalize"].applyinplace(&mut g)?;
assert!(grammar.is_valid(&g)); ```
To install the application simply run
bash
cargo install graphlang
The application should then be in the binary folder of cargo, which
can be added to the PATH
variable for convenience.