Thank you for contributing to Herb.jl. Below are some guidelines on how you can do so.
The Herb.jl framework for program synthesis comprises multiple sub-packages with the following functionality:
- HerbCore.jl: Core functionality of the program synthesis library, including the representation and manipulation of expression trees, and abstract types for constraints and grammars.
- HerbGrammar.jl: Declaring grammars.
- HerbSpecification.jl: Specifying the program synthesis problems. Currently, only the input-output examples are supported, but we are working on other specification types (formal specifications, traces, rewards...).
- HerbSearch.jl: Search procedures for finding solution programs to a program synthesis problem.
- HerbInterpret.jl: Handling the interpretation of (candidate) programs, supporting arbitrary Julia expressions or other interpretors with provided evaluation functions.
- HerbConstraints.jl: Formulating, representing and using contraints.
- HerbBenchmarks.jl: a collection of problems for testing program synthesisers. We are collecting commonly used problems, standardising them, as finding new ones.
- Garden.jl: complete implementations of known synthesisers. This repository intends to set the standard baselines to use in research, as well as support users that only wish to apply program synthesisers to their problems.
If you find a bug, open a new issue in the appropriate repo. Please provide some details about the bug, including
- a description of the problem.
- a minimal example to reproduce the problem (by copy + paste).
- relevant error messages and logs.
We encourage and welcome suggestions for new features. Please open a new issue and describe the desired feature in as much detail as you can, including an example of how you would like to use it.
To contribute code, please follow these steps:
- Fork the repository.
- Clone your fork to your local machine.
- Create a new branch (with a descriptive name) for your bug fix or feature.
- Make changes in the new branch.
- Test and document your code.
- Push your changes to your fork of the repo.
- Open a PR from the appropriate branch of your fork to the
dev
branch of the original repo.
- Testing: Make sure your code is well-tested, i.e., that you add new tests for your code changes and that all existing tests still pass.
- Documentation: Please update or add documentation as necessary. Follow the Julia guidelines for writing documentation.
- Please follow the Julia style guide.
If the code you're developing requires changes to more than one Herb.jl sub-package, see this description on how to locally change to a specific version (branch) of a package.
Check the open issues in the individual repositories. We maintain a list of bugs and desired developments for each of our repositories.
Have a program synthesiser you wish to be included? Implement it in Garden, following the workflow above! If you are uncertain about the structure, please contact us.
We are currently focusing on the following functionality:
- Machine learning-guided program synthesis
- Refactoring approach a la DreamCoder and KNORF
- Divide & conquer approaches a la EUSolver
- New benchmarks.
Do contact us if you want to help!