{ "info": { "author": "David Hall", "author_email": "dhcrawley@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "===============================\nnrtest\n===============================\n\n|pypi| |travis-ci| |coveralls| |readthedocs|\n\n``nrtest`` is an end-to-end regression testing framework, designed for scientific software that perform numerical calculations.\n\n\nFeatures\n--------\n\n``nrtest`` aims to simplify your workflow:\n\n- JSON files describe the software under test and the tests themselves\n- result files are stored in a portable benchmark directory\n- benchmarks are compared by iterating through tests and their results\n- custom comparisons can easily be added through extensions\n\n\n.. _basic_usage:\n\nBasic Usage\n-----------\n\nAs an example usage, we consider testing TOPAS_. This is a Monte Carlo tool for particle simulation, designed for medical physics research. Of course, such a tool must be rigorously validated against experimental data. But it is also useful to frequently run shorter tests, checking for regressions by comparing results to a previous version.\n\nFirst, we describe the software under test in a configuration file called ``apps/topas-2.0.3.json``. Note that ``setup_script`` defines the environment needed to run the software.\n\n.. code-block:: json\n\n {\n \"name\": \"topas\",\n \"version\" : \"2.0.3\",\n \"setup_script\" : \"/path/to/topas-2.0.3/setup.sh\",\n \"exe\" : \"topas\"\n }\n\nWe then describe the test in second configuration file called ``tests/Scoring_01.json``. In doing so, we define the command-line arguments presented to the executable and the input files needed for the test to run. Finally, we also specify the expected output files, and declare how they should be compared to a benchmark. Here we use ``topas binned``, which is a custom comparison routine, though some comparison routines are bundled with nrtest. It is also easy to add your own.\n\n.. code-block:: json\n\n {\n \"name\": \"Scoring_01\",\n \"version\": \"1.0\",\n \"description\": \"Basic test shooting a 6cm diameter proton beam into a water phantom.\",\n \"args\": [\n \"Scoring_01.txt\"\n ],\n \"input_files\": [\n \"Scoring_01.txt\",\n \"GlobalParameters.txt\"\n ],\n \"output_files\": {\n \"Dose.csv\": \"topas binned\"\n }\n }\n\nTo execute the test, we tell ``nrtest`` where to find the configuration files and where to output the benchmark. Note that ``nrtest`` will search ``tests/`` for tests, though we could have specified ``tests/Scoring_01.json``.\n\n.. code-block:: bash\n\n $ nrtest execute apps/topas-2.0.3.json tests/ -o benchmarks/2.0.3\n INFO: Found 1 tests\n Scoring_01: pass\n INFO: Finished\n\nTo compare to a previous benchmark:\n\n.. code-block:: bash\n\n $ nrtest compare benchmarks/2.0.3 benchmarks/2.0.2\n Scoring_01: pass\n INFO: Finished\n\n\nMore advanced usage is detailed in the documentation_.\n\n\n\n\n.. _TOPAS: http://www.topasmc.org\n.. _documentation: https://nrtest.readthedocs.org/en/latest\n\n\n.. |pypi| image:: https://img.shields.io/pypi/v/nrtest.svg\n :target: https://pypi.python.org/pypi/nrtest\n :alt: PyPI Package\n\n.. |travis-ci| image:: https://img.shields.io/travis/davidchall/nrtest.svg\n :target: https://travis-ci.org/davidchall/nrtest\n :alt: Build Status\n\n.. |coveralls| image:: https://coveralls.io/repos/github/davidchall/nrtest/badge.svg?branch=master\n :target: https://coveralls.io/github/davidchall/nrtest?branch=master\n :alt: Code Coverage\n\n.. |readthedocs| image:: https://readthedocs.org/projects/nrtest/badge/?version=latest\n :target: https://nrtest.readthedocs.org/en/latest/?badge=latest\n :alt: Documentation Status\n\n\n=======\nHistory\n=======\n\n0.2.4 (2019-09-11)\n------------------\n\n* Fix sporadic failures on Windows when deleting temporary files\n\n\n0.2.3 (2018-02-09)\n------------------\n\n* Add ability to write comparison results to JSON file\n\n\n0.2.0 (2016-02-21)\n------------------\n\n* Add extensions for compare functions\n\n\n0.1.0 (2016-02-21)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/davidchall/nrtest", "keywords": "nrtest", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "nrtest", "package_url": "https://pypi.org/project/nrtest/", "platform": "", "project_url": "https://pypi.org/project/nrtest/", "project_urls": { "Homepage": "https://github.com/davidchall/nrtest" }, "release_url": "https://pypi.org/project/nrtest/0.2.4/", "requires_dist": [ "six", "psutil (>=2.0)" ], "requires_python": "", "summary": "Numerical regression testing", "version": "0.2.4" }, "last_serial": 5816017, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ecb2a66c6f2fd2eb25b198a6f58a025a", "sha256": "b319e7a5fae7752ec9df713b8d5a3a30616ad9adca6da7eb7b132c6f785f6ad7" }, "downloads": -1, "filename": "nrtest-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ecb2a66c6f2fd2eb25b198a6f58a025a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16958, "upload_time": "2016-02-21T21:29:38", "url": "https://files.pythonhosted.org/packages/c5/51/8bda9f9e429e8844eef413811ae5eb8245ad7d4d07663b6a4dff502aec1f/nrtest-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5cba0c9933e15a52825daaa4078ca0d", "sha256": "bf11067654d1051ff49d3ed1fe3ac8d6223055e991039f56e37e9a062c5f10dc" }, "downloads": -1, "filename": "nrtest-0.1.0.tar.gz", "has_sig": false, "md5_digest": "d5cba0c9933e15a52825daaa4078ca0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20716, "upload_time": "2016-02-21T21:29:23", "url": "https://files.pythonhosted.org/packages/89/93/35ed46336fa7d01131a8c93bfeb6a4b3526f7639af15861ddfeff5b3412d/nrtest-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0ff9efba9620767e3f68da7ac9cab2a4", "sha256": "45c3f5a2cb33eb7543312311639ee559598f4fb6147c3c97afa1bd758caa94b7" }, "downloads": -1, "filename": "nrtest-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0ff9efba9620767e3f68da7ac9cab2a4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16951, "upload_time": "2016-02-21T21:51:42", "url": "https://files.pythonhosted.org/packages/6f/bc/2225df02bb88b0d9c56046d0297d282f2afb59a7fc68cfe469beeaf42ba3/nrtest-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2afc8d53b5b97791fb18e861dfa717ab", "sha256": "2cf3bee8ec694476e9f93447281dda9566f23e79d293e37fd52df7d5b2886676" }, "downloads": -1, "filename": "nrtest-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2afc8d53b5b97791fb18e861dfa717ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20830, "upload_time": "2016-02-21T21:51:49", "url": "https://files.pythonhosted.org/packages/6a/7a/a74f786ec298ed6db59b3fffa1f90766174d19df952f3abcc66f1f92864c/nrtest-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "0fb48625bad76b24af2f560f3c39c981", "sha256": "c30cde2767cddbb2bbb4de2bfbe7f2448c7db6a77dbad8c39806a9c8902a9fc8" }, "downloads": -1, "filename": "nrtest-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0fb48625bad76b24af2f560f3c39c981", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16907, "upload_time": "2016-02-21T22:00:14", "url": "https://files.pythonhosted.org/packages/50/40/71e2d97dadfaac43bb70ee906621de2b42a62bf6a8547bd0280ca0c15ee9/nrtest-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09733103edf33141bd0812de6be7d5ca", "sha256": "9bb7fd4bd14e52e75afd081e82869ee11451965fa7c0cbf30ca88c61484b9d5b" }, "downloads": -1, "filename": "nrtest-0.1.2.tar.gz", "has_sig": false, "md5_digest": "09733103edf33141bd0812de6be7d5ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20806, "upload_time": "2016-02-21T22:00:33", "url": "https://files.pythonhosted.org/packages/3b/64/40b87deb5a3d89508b60954d0444182c37515567ba3fc93d32e38b723759/nrtest-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "563a1215f6419f6c12c1507661914957", "sha256": "3f293f4368ad50687295954304b22a5e1e648c06ae2eea9e224ca0c912912c03" }, "downloads": -1, "filename": "nrtest-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "563a1215f6419f6c12c1507661914957", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15843, "upload_time": "2016-02-22T04:42:27", "url": "https://files.pythonhosted.org/packages/6e/e5/1ecf12b20b703dcabf9881f957ee2f0d134295bdeb8f8a03039d621a560b/nrtest-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6def129fba3a62ae8d9dc799840a2162", "sha256": "8fa0229b68ecb094b9f094583fb10ccc6d9ee527a231634807571286607aa9d6" }, "downloads": -1, "filename": "nrtest-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6def129fba3a62ae8d9dc799840a2162", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21145, "upload_time": "2016-02-22T04:42:31", "url": "https://files.pythonhosted.org/packages/0f/f5/586a5d91636b7f2d4918810219ace6be6c458deab73bbd65fe4935b5c8b1/nrtest-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "662249859aa52378beefe4b6337a0673", "sha256": "6274018653616f277b8eb8c84c842e66517a42149061114eebcf0968dbc45ef9" }, "downloads": -1, "filename": "nrtest-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "662249859aa52378beefe4b6337a0673", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15841, "upload_time": "2016-07-15T01:19:08", "url": "https://files.pythonhosted.org/packages/ba/f2/8a9633f669a99ea04d6346de6b03d3d3dc8855c9e7b3b2654a4cd3a92a81/nrtest-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f2e73e6ff4006d0e33b744e26c6105e1", "sha256": "86091b1b14a9dbe57648ecda8ba786f38c8005ec217acfd241f6601b82f978d9" }, "downloads": -1, "filename": "nrtest-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f2e73e6ff4006d0e33b744e26c6105e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21159, "upload_time": "2016-07-15T01:19:10", "url": "https://files.pythonhosted.org/packages/0e/ba/b058e4f3d74fb02202f4873c6bdb938447f04832f110ae3ef9b21794930b/nrtest-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "0ae1c6a44c21425685b2c772942b0a1c", "sha256": "39656b2d2db0de0eb591949952dfaa36fe6a4ba0c87ff917222bc9a57eb30700" }, "downloads": -1, "filename": "nrtest-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0ae1c6a44c21425685b2c772942b0a1c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15882, "upload_time": "2016-07-15T14:43:10", "url": "https://files.pythonhosted.org/packages/82/7a/7ffdea1befe86a75e23dc0c624b873bce583fb6a53e84d6f157856ead171/nrtest-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "721c9f8f4509a9f6c99666f8fd1501c8", "sha256": "16bda9b580cac11844276e2cd1befa129ed5e6232ba34ba5b343b62a427b00ad" }, "downloads": -1, "filename": "nrtest-0.2.2.tar.gz", "has_sig": false, "md5_digest": "721c9f8f4509a9f6c99666f8fd1501c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21200, "upload_time": "2016-07-15T14:43:12", "url": "https://files.pythonhosted.org/packages/fc/c8/29a24f270aee47a1d33e8c53019bbb47e9242200f1533f03eb52bc36a701/nrtest-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "6a92e32ab6104af7465469f3eff40ec2", "sha256": "3fa2e38c77006d13fde6c3fdd1fa9be692712d3a27b9a950d333640a6d6cdd30" }, "downloads": -1, "filename": "nrtest-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6a92e32ab6104af7465469f3eff40ec2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16331, "upload_time": "2018-02-09T21:34:58", "url": "https://files.pythonhosted.org/packages/7e/d2/511e72e790c727d7fbe1b2333966c2f0656b613aa13a8e335e8ce45edf88/nrtest-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "85de1250ea6da860692bf5ee25cdc1ab", "sha256": "f70cc44e5c1be9aa4e8d7ceaa2d9cc7cfdc1acfecd9927a6ee3cc91e7c7c2781" }, "downloads": -1, "filename": "nrtest-0.2.3.tar.gz", "has_sig": false, "md5_digest": "85de1250ea6da860692bf5ee25cdc1ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21566, "upload_time": "2018-02-09T21:35:00", "url": "https://files.pythonhosted.org/packages/27/26/76fe149d3e12b7db13662781e929dbd5bbb2ae6df0a85826a456dd79b71e/nrtest-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "d923fe18de68404234753785b35dd5dc", "sha256": "78c09e9613b910ddcab476eedabaa00fbb27fab2368ccff611f97234b5bf3b32" }, "downloads": -1, "filename": "nrtest-0.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d923fe18de68404234753785b35dd5dc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15090, "upload_time": "2019-09-11T16:58:50", "url": "https://files.pythonhosted.org/packages/e1/57/abb3b87932fc28aee5cad45ad65b4ac6095197060673bd56cf7fda005f2e/nrtest-0.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a4ca268f9cdb4a4955e90e080c4bd6f", "sha256": "f6a0eda1166594bceb3efc065f4226ce1c83af4face28ff03fbffe0b00e3117b" }, "downloads": -1, "filename": "nrtest-0.2.4.tar.gz", "has_sig": false, "md5_digest": "7a4ca268f9cdb4a4955e90e080c4bd6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21666, "upload_time": "2019-09-11T16:58:51", "url": "https://files.pythonhosted.org/packages/fa/5e/eb44bb01498f5720bb84b3374b43c903a852816961c5a65392e133787fee/nrtest-0.2.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d923fe18de68404234753785b35dd5dc", "sha256": "78c09e9613b910ddcab476eedabaa00fbb27fab2368ccff611f97234b5bf3b32" }, "downloads": -1, "filename": "nrtest-0.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d923fe18de68404234753785b35dd5dc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15090, "upload_time": "2019-09-11T16:58:50", "url": "https://files.pythonhosted.org/packages/e1/57/abb3b87932fc28aee5cad45ad65b4ac6095197060673bd56cf7fda005f2e/nrtest-0.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a4ca268f9cdb4a4955e90e080c4bd6f", "sha256": "f6a0eda1166594bceb3efc065f4226ce1c83af4face28ff03fbffe0b00e3117b" }, "downloads": -1, "filename": "nrtest-0.2.4.tar.gz", "has_sig": false, "md5_digest": "7a4ca268f9cdb4a4955e90e080c4bd6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21666, "upload_time": "2019-09-11T16:58:51", "url": "https://files.pythonhosted.org/packages/fa/5e/eb44bb01498f5720bb84b3374b43c903a852816961c5a65392e133787fee/nrtest-0.2.4.tar.gz" } ] }