diff --git a/.gitignore b/.gitignore index c1eaea0..bbeb2b4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,319 @@ -/results -/test -/models/results -__pycache* \ No newline at end of file +# Created by https://www.toptal.com/developers/gitignore/api/macos,linux,pycharm,python,windows +# Edit at https://www.toptal.com/developers/gitignore?templates=macos,linux,pycharm,python,windows + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### PyCharm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### PyCharm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +pytestdebug.log + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ +doc/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ +pythonenv* + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# profiling data +.prof + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/macos,linux,pycharm,python,windows + +scratch/ diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..864b334 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta:__legacy__" diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..36b7070 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,20 @@ +[metadata] +name = proppa +version = 1.0.0 + +[options] +install_requires = + numpy + scipy + matplotlib + # be careful about recent release of PyParsing + pyparsing<3.0 + docopt + +# Where is my code +packages = find: +package_dir = + = src + +[options.packages.find] +where = src diff --git a/__init__.py b/src/proppa/__init__.py similarity index 100% rename from __init__.py rename to src/proppa/__init__.py diff --git a/abc_sampler.py b/src/proppa/abc_sampler.py similarity index 100% rename from abc_sampler.py rename to src/proppa/abc_sampler.py diff --git a/enhanced_abc_sampler.py b/src/proppa/enhanced_abc_sampler.py similarity index 100% rename from enhanced_abc_sampler.py rename to src/proppa/enhanced_abc_sampler.py diff --git a/finite_metropolis_sampler.py b/src/proppa/finite_metropolis_sampler.py similarity index 100% rename from finite_metropolis_sampler.py rename to src/proppa/finite_metropolis_sampler.py diff --git a/finite_state_gibbs.py b/src/proppa/finite_state_gibbs.py similarity index 100% rename from finite_state_gibbs.py rename to src/proppa/finite_state_gibbs.py diff --git a/finite_state_solution.py b/src/proppa/finite_state_solution.py similarity index 100% rename from finite_state_solution.py rename to src/proppa/finite_state_solution.py diff --git a/fluid_sampler.py b/src/proppa/fluid_sampler.py similarity index 100% rename from fluid_sampler.py rename to src/proppa/fluid_sampler.py diff --git a/lna_sampler.py b/src/proppa/lna_sampler.py similarity index 100% rename from lna_sampler.py rename to src/proppa/lna_sampler.py diff --git a/mh.py b/src/proppa/mh.py similarity index 100% rename from mh.py rename to src/proppa/mh.py diff --git a/model_utilities.py b/src/proppa/model_utilities.py similarity index 100% rename from model_utilities.py rename to src/proppa/model_utilities.py diff --git a/models/SIR.proppa b/src/proppa/models/SIR.proppa similarity index 100% rename from models/SIR.proppa rename to src/proppa/models/SIR.proppa diff --git a/models/__init__.py b/src/proppa/models/__init__.py similarity index 100% rename from models/__init__.py rename to src/proppa/models/__init__.py diff --git a/models/config_SIR b/src/proppa/models/config_SIR similarity index 100% rename from models/config_SIR rename to src/proppa/models/config_SIR diff --git a/models/config_predPrey b/src/proppa/models/config_predPrey similarity index 100% rename from models/config_predPrey rename to src/proppa/models/config_predPrey diff --git a/models/config_rumour b/src/proppa/models/config_rumour similarity index 100% rename from models/config_rumour rename to src/proppa/models/config_rumour diff --git a/models/obs_SIR b/src/proppa/models/obs_SIR similarity index 100% rename from models/obs_SIR rename to src/proppa/models/obs_SIR diff --git a/models/obs_predPrey b/src/proppa/models/obs_predPrey similarity index 100% rename from models/obs_predPrey rename to src/proppa/models/obs_predPrey diff --git a/models/obs_rumour b/src/proppa/models/obs_rumour similarity index 100% rename from models/obs_rumour rename to src/proppa/models/obs_rumour diff --git a/models/predPrey.proppa b/src/proppa/models/predPrey.proppa similarity index 100% rename from models/predPrey.proppa rename to src/proppa/models/predPrey.proppa diff --git a/models/rumour.proppa b/src/proppa/models/rumour.proppa similarity index 100% rename from models/rumour.proppa rename to src/proppa/models/rumour.proppa diff --git a/models/testExperiments.py b/src/proppa/models/testExperiments.py similarity index 100% rename from models/testExperiments.py rename to src/proppa/models/testExperiments.py diff --git a/ode_simulator.py b/src/proppa/ode_simulator.py similarity index 100% rename from ode_simulator.py rename to src/proppa/ode_simulator.py diff --git a/proppa.py b/src/proppa/proppa.py similarity index 100% rename from proppa.py rename to src/proppa/proppa.py diff --git a/roulette.py b/src/proppa/roulette.py similarity index 100% rename from roulette.py rename to src/proppa/roulette.py diff --git a/roulette_gibbs_sampler.py b/src/proppa/roulette_gibbs_sampler.py similarity index 100% rename from roulette_gibbs_sampler.py rename to src/proppa/roulette_gibbs_sampler.py diff --git a/roulette_metropolis_sampler.py b/src/proppa/roulette_metropolis_sampler.py similarity index 100% rename from roulette_metropolis_sampler.py rename to src/proppa/roulette_metropolis_sampler.py diff --git a/samplers.py b/src/proppa/samplers.py similarity index 100% rename from samplers.py rename to src/proppa/samplers.py diff --git a/simulate_from_dist.py b/src/proppa/simulate_from_dist.py similarity index 100% rename from simulate_from_dist.py rename to src/proppa/simulate_from_dist.py diff --git a/simulate_ode_from_dist.py b/src/proppa/simulate_ode_from_dist.py similarity index 100% rename from simulate_ode_from_dist.py rename to src/proppa/simulate_ode_from_dist.py diff --git a/transient.py b/src/proppa/transient.py similarity index 100% rename from transient.py rename to src/proppa/transient.py diff --git a/utilities.py b/src/proppa/utilities.py similarity index 100% rename from utilities.py rename to src/proppa/utilities.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_import.py b/tests/test_import.py new file mode 100644 index 0000000..2060a06 --- /dev/null +++ b/tests/test_import.py @@ -0,0 +1,13 @@ +"""Tests for importing ProPPA.""" + +import unittest + + +class TestTrivial(unittest.TestCase): + """A trivial test case.""" + + def test_import(self): + """Test that proppa can be imported.""" + import proppa + + self.assertIsNotNone(proppa) diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..fc4bc3c --- /dev/null +++ b/tox.ini @@ -0,0 +1,25 @@ +[tox] +# To use PEP-517 build-backend, you are required to configure +# tox to use an isolated build. See: https://tox.readthedocs.io/en/latest/example/package.html +isolated_build = true + +# These environments are run in order if you run `tox` +envlist = + py + +[testenv] +commands = + pytest tests/ +deps = + pytest +description = Run unit tests. + +[testenv:lint] +deps = + black + isort +skip_install = true +commands = + black src/ tests/ + isort src/ tests/ +description = Run linters.