Skip to content

Commit

Permalink
Merge pull request #85 from HIIT/dev
Browse files Browse the repository at this point in the history
The "Review release" 0.2
  • Loading branch information
vuolleko committed Nov 23, 2016
2 parents 55e2a02 + e701945 commit 66258c9
Show file tree
Hide file tree
Showing 59 changed files with 6,356 additions and 933 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ __pycache__/
*.py[cod]
*$py.class

# C extensions
# C/C++ extensions
*.so
*.bin

# Distribution / packaging
.Python
Expand Down
9 changes: 5 additions & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
language: python
python:
- "3.5"
cache: pip
# command to install dependencies
install:
- pip install numpy
- pip install -e .[dev]
- pip install git+https://github.com/dask/dask.git
- pip install git+https://github.com/dask/distributed.git
- pip install cython
- pip install -r requirements-dev.txt
- pip install -e .
# command to run tests
script:
- py.test tests/unit
- make test
131 changes: 131 additions & 0 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
.. highlight:: shell

============
Contributing
============

Contributions are welcome, and they are greatly appreciated! Every
little bit helps, and credit will always be given.

You can contribute in many ways:

Types of Contributions
----------------------

Report Bugs
~~~~~~~~~~~

Report bugs at https://github.com/HIIT/elfi/issues.

If you are reporting a bug, please include:

* Your operating system name and version.
* Any details about your local setup that might be helpful in troubleshooting.
* Detailed steps to reproduce the bug.

Fix Bugs
~~~~~~~~

Look through the GitHub issues for bugs. Anything tagged with "bug"
and "help wanted" is open to whoever wants to implement it.

Implement Features
~~~~~~~~~~~~~~~~~~

Look through the GitHub issues for features. Anything tagged with "enhancement"
and "help wanted" is open to whoever wants to implement it.

Write Documentation
~~~~~~~~~~~~~~~~~~~

ELFI could always use more documentation, whether as part of the
official ELFI docs, in docstrings, or even on the web in blog posts,
articles, and such.

Submit Feedback
~~~~~~~~~~~~~~~

The best way to send feedback is to file an issue at https://github.com/HIIT/elfi/issues.

If you are proposing a feature:

* Explain in detail how it would work.
* Keep the scope as narrow as possible, to make it easier to implement.
* Remember that this is a volunteer-driven project, and that contributions
are welcome :)

Get Started!
------------

Ready to contribute? Here's how to set up `ELFI` for local development.

1. Fork the `elfi` repo on GitHub.
2. Clone your fork locally::

$ git clone git@github.com:your_name_here/elfi.git

3. Install your local copy and the development requirements into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development. Due to a bug in the pip installation of GPy numpy needs to be installed manually.::

$ mkvirtualenv elfi
$ cd elfi/
$ pip install numpy
$ make dev

4. Create a branch for local development::

$ git checkout -b name-of-your-bugfix-or-feature

Now you can make your changes locally.
5. Follow the `Style Guidelines`_

6. When you're done making changes, check that your changes pass flake8 and the tests::

$ make lint
$ make test

Also make sure that the docstrings of your code are formatted properly::

$ make docs

7. Commit your changes and push your branch to GitHub::

$ git add .
$ git commit -m "Your detailed description of your changes."
$ git push origin name-of-your-bugfix-or-feature

8. Submit a pull request through the GitHub website.

Style Guidelines
----------------

The projects follows the `Khan Academy Style Guide <https://github.com/Khan/style-guides/blob/master/style/python.md>`_. Except that we use numpy style docstrings instead of Google style docstrings.

See `this example <http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_numpy.html>`_ for how to format the docstrings.

Additional Style Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Use the ``.format()`` string method instead of the old percent operator. For more information see `PyFormat <https://pyformat.info/>`_.
- Use the type hinting syntax suggested `here <https://www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html>`_ in the docstrings.

Pull Request Guidelines
-----------------------

Before you submit a pull request, check that it meets these guidelines:

1. The pull request should include tests.
2. If the pull request adds functionality, the docs should be updated. Put
your new functionality into a function with a docstring, and add the
feature to the list in README.rst.
3. The pull request should work for Python 2.7, 3.5 and later. Check
https://travis-ci.org/HIIT/elfi/pull_requests
and make sure that the tests pass for all supported Python versions.

Tips
----

To run a subset of tests::

$ py.test tests.test_elfi

96 changes: 96 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
.PHONY: clean clean-test clean-pyc clean-build docs help
.DEFAULT_GOAL := help
define BROWSER_PYSCRIPT
import os, webbrowser, sys
try:
from urllib import pathname2url
except:
from urllib.request import pathname2url

webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1])))
endef
export BROWSER_PYSCRIPT

define PRINT_HELP_PYSCRIPT
import re, sys

for line in sys.stdin:
match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line)
if match:
target, help = match.groups()
print("%-20s %s" % (target, help))
endef
export PRINT_HELP_PYSCRIPT
BROWSER := python -c "$$BROWSER_PYSCRIPT"

help:
@python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)

clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts


clean-build: ## remove build artifacts
rm -fr build/
rm -fr dist/
rm -fr .eggs/
rm -fr docs/_build
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -fr {} +

clean-pyc: ## remove Python file artifacts
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +

clean-test: ## remove test and coverage artifacts
rm -fr .tox/
rm -f .coverage
rm -fr htmlcov/

lint: ## check style with flake8
flake8 elfi tests

test: ## run tests quickly with the default Python
py.test

test-all: ## run tests on every Python version with tox
tox

coverage: ## check code coverage quickly with the default Python
py.test --cov=elfi
coverage report -m
coverage html
$(BROWSER) htmlcov/index.html

docs: ## generate Sphinx HTML documentation, including API docs
rm -f docs/elfi.rst
rm -f docs/elfi.bo.rst
rm -f docs/modules.rst
sphinx-apidoc -o docs/ elfi
$(MAKE) -C docs clean
$(MAKE) -C docs html
$(BROWSER) docs/_build/html/index.html

servedocs: docs ## compile the docs watching for changes
watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D .

# release: clean ## package and upload a release
# python setup.py sdist upload
# python setup.py bdist_wheel upload

dist: clean ## builds source and wheel package
python setup.py sdist
python setup.py bdist_wheel
ls -l dist

install: clean ## install the package to the active Python's site-packages
# python setup.py install
pip install numpy
pip install -e .

dev: install ## install the development requirements to the active Python's site-packages
pip install -Ur requirements-dev.txt

clean-notebooks:
python notebooks/clean_notebooks.py
60 changes: 60 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
ELFI - Engine for Likelihood-Free Inference
===========================================

<!-- .. image:: https://img.shields.io/pypi/v/elfi.svg
:target: https://pypi.python.org/pypi/elfi
.. image:: https://img.shields.io/travis/HIIT/elfi.svg
:target: https://travis-ci.com/HIIT/elfi
.. image:: https://readthedocs.org/projects/elfi/badge/?version=latest
:target: https://elfi.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
https://github.com/dwyl/repo-badges
-->

[![Build Status](https://travis-ci.com/HIIT/elfi.svg?token=xAu1DN2J4WjCapVWLinn&branch=dev)](https://travis-ci.com/HIIT/elfi)

<img src="https://cloud.githubusercontent.com/assets/1233418/20178983/6e22ee44-a75c-11e6-8345-5934b55b9dc6.png" width="15%" align="right"></img>

ELFI is a statistical software package written in Python for Approximative Bayesian Computation ([ABC](https://en.wikipedia.org/wiki/Approximate_Bayesian_computation)), also known e.g. as likelihood-free inference, simulator-based inference, approximative Bayesian inference etc. This is useful, when the likelihood function is unknown or difficult to evaluate, but a generative simulator model exists.

The probabilistic inference model is defined as a directed acyclic graph, which allows for an intuitive means to describe inherent dependencies in the model. The inference pipeline is automatically parallelized with [Dask](https://dask.pydata.org), which scales well from a desktop up to a cluster environment. The package includes functionality for input/output operations and visualization.

Currently implemented ABC methods:
- rejection sampler
- Sequential Monte Carlo sampler
- [Bayesian Optimization for Likelihood-Free Inference (BOLFI) framework](https://arxiv.org/abs/1501.03291)

See examples under [notebooks](notebooks) to get started.

<!-- ..
Installation
-------------
::
pip install elfi
-->

Developer installation
----------------------
```
git clone https://github.com/HIIT/elfi.git
cd elfi
pip install numpy
pip install -r requirements-dev.txt
pip install -e .
```

It is recommended to create a virtual environment for development before installing.

Virtual environment using Anaconda
----------------------------------
Below an example how to create a virtual environment named ``elfi`` using Anaconda:

conda create -n elfi python=3* scipy

Then activate it:

source activate elfi
26 changes: 0 additions & 26 deletions README.rst

This file was deleted.

0 comments on commit 66258c9

Please sign in to comment.