{ "info": { "author": "Ethan Brooks", "author_email": "ethanbrooks@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": ".. image:: https://travis-ci.org/lobachevzky/lab-notebook.svg?branch=master\n :target: https://travis-ci.org/lobachevzky/lab-notebook\n \nLab Notebook\n============\nResearchers in computer science often need to compare results between different versions of a process.\n``Lab Notebook`` helps document, track, and organize process these kinds of runs.\nThis is essential for reproducibility and helps researchers figure out what changes in code led to different outcomes.\nThe goals of ``Lab Notebook`` are reproducibility, modularity, and organization.\nSpecifically, ``Lab Notebook`` provides the following functionality:\n\n* Maintain metadata about each run, including a description, a timestamp, and a git commit.\n* Automatically set up runs, building flags and directories with unique name corresponding to each run and launching runs in tmux.\n* Organize runs into hierarchical categories.\n* Synchronize runs with directories, so that directories are moved and deleted when runs are moved and deleted.\n\nInstallation\n------------\nThe only external dependencies of this tool are ``tmux`` and ``git``. After that, ``pip install lab-notebook``.\n\nConfiguration\n-------------\nThe program will default to any arguments specified in ``.runsrc``.\nThe user can always override the ``.runsrc`` file with command-line arguments.\nFor descriptions of arguments, use ``runs -h`` or ``runs [command] -h``\nThe program searches for the ``.runsrc`` file in ancestors (inclusive) of the current working directory.\nIf the program does not find a ``.runsrc`` file, it will create one with default values in the current working directory.\nThe user can use two keyword in the ``.runsrc``:\n\n* ```` will be replaced by the *path* to the run. Paths look just like ordinary file paths (``/``-delimited).\n* ```` will be replaced by the head of *path*.\n\nAlso users can interpolate strings from other sections of ``.runsrc`` using the syntax ``${section:value}``.\nFor more details see\n`configparser ExtendedInterpolation `_.\n\nHere is an example ``.runsrc`` file:\n\n.. code-block:: ini\n\n [main]\n root = /Users/ethan/demo-lab-notebook/.runs\n db_path = /Users/ethan/demo-lab-notebook/runs.pkl\n dir_names = tensorboard\n prefix = Source ~/virtualenvs/demo-lab-notebook/bin/activate;\n nice\n\n [flags]\n --log-dir=${main:root}/tensorboard/\n\n [new]\n description = demo lab-notebook\n\nThis will pass the flag ``--logdir=/Users/ethan/baselines/.runs/tensorboard/``\nto any program launched with ``run``, where ```` will be replaced by the ``path`` argument given by the user.\n\n``runs-git``\n------------\nThis is a simple wrapper around ``git`` that substitutes ``+your-path`` with ``runs lookup commit your-path``.\nFor example, to see changes since when you launched ``your-run``:\n\n.. code-block:: console\n\n runs-git diff +your-run\n\nIf you want to live on the wild side, use `direnv `_ to alias ``git`` to ``runs-git`` when you\nare in your project directory.\n\nExample Usage\n-------------\nSetup environment:\n\n.. code-block:: console\n\n mkdir ~/lab-notebook-demo/ && cd ~/lab-notebook-demo\n wget https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py\n pip install tensorflow lab-notebook\n git init\n echo 'runs.pkl .runs .runsrc' > .gitignore\n git add -A\n git commit -am init\n\nCreate a new run. The run will be launched in ``tmux``:\n\n.. code-block:: console\n\n runs new train 'python mnist_with_summaries.py' --description='demo new command'\n\nCheck out your run:\n\n.. code-block:: console\n\n tmux attach -t train\n\nReproduce your run:\n\n.. code-block:: console\n\n runs reproduce train\n runs reproduce --no-overwrite train\n\nTry modifying the ``.runsrc`` file to look like the example in the\n`Configuration`_ section with appropriate changes for your system.\nThen create a new run:\n\n.. code-block:: console\n\n runs new subdir/train 'python mnist_with_summaries.py' --description='demo categorization'\n\nGet an overview of what runs are in the database:\n\n.. code-block:: console\n\n runs ls\n runs ls 'tra*'\n runs ls --show-attrs\n\nQuery information about current runs:\n\n.. code-block:: console\n\n runs lookup description train\n runs lookup commit train\n\n``runs-git``: avoid typing ``runs lookup commit `` all the time:\n\n.. code-block:: console\n\n echo '# Hello' >> mnist_with_summaries.py\n runs-git diff +train\n\nOrganize runs\n\n.. code-block:: console\n\n runs mv train subdir/train2\n runs ls\n tree .runs # note that directories are synchronized with database entries\n runs mv subdir archive\n runs ls\n\nDelete runs\n\n.. code-block:: console\n\n runs rm archive/train\n runs killall\n\n\nSubcommands\n-----------\nFor an overview of subcommands, run\n\n.. code-block:: console\n\n runs -h\n\nFor detailed descriptions of each subcommand and its arguments, run\n\n.. code-block:: console\n\n runs -h\n\nTab autocompletion\n------------------\nIf you are using Zsh, simpy copy the ``_runs`` to some place on your ``fpath``.\nThen pressing tab will prompt you with the names of runs currently in your\ndatabase\n\nWhy not just use git?\n---------------------\n* If processes are long-running, it is hard to know which commit a given run corresponds to.\n* Commit statements are really meant to describe *changes* to software, not *runs*. A description of a change may not actually tell you very much about the motivation for a software run.\n* Not all commits will correspond to runs, so you will need to fish through a large number of commits to find those that correspond to runs.\n* Often processes depend on specific file-structures (e.g. a logging directory). Setting up and removing these directories by hand is time-consuming and error-prone.\n* Commits cannot be organized hierarchically or categorized after their creation.\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lobachevzky/lab-notebook", "keywords": "tensorflow utilities development", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "lab-notebook", "package_url": "https://pypi.org/project/lab-notebook/", "platform": "", "project_url": "https://pypi.org/project/lab-notebook/", "project_urls": { "Homepage": "https://github.com/lobachevzky/lab-notebook" }, "release_url": "https://pypi.org/project/lab-notebook/3.3.3/", "requires_dist": null, "requires_python": "", "summary": "A utility for tracking, documenting, and reproducing software runs.", "version": "3.3.3" }, "last_serial": 4608954, "releases": { "2.1.6": [ { "comment_text": "", "digests": { "md5": "432d0ff8dc523f7f9df61122841871d7", "sha256": "b869e0252f9ebfa2dc22ffd093cbd98331c3232433c642a32687c8d3a59b3a95" }, "downloads": -1, "filename": "lab_notebook-2.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "432d0ff8dc523f7f9df61122841871d7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22140, "upload_time": "2018-03-07T22:05:06", "url": "https://files.pythonhosted.org/packages/4b/83/e1db2b3a339f22d8d9184a94dfb5edfbcb684cc76f0f106aa71ecaff6155/lab_notebook-2.1.6-py2.py3-none-any.whl" } ], "3.1.7": [ { "comment_text": "", "digests": { "md5": "a4ab6476dba40e0398aa976d377539b4", "sha256": "4dca940541b1878f16c4af79c6951fea53d32f9268d71577d2ca849c01c5daaa" }, "downloads": -1, "filename": "lab_notebook-3.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a4ab6476dba40e0398aa976d377539b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22415, "upload_time": "2018-03-07T23:15:33", "url": "https://files.pythonhosted.org/packages/b1/9f/7491b813aaac791e9cbb277fcb0ae78c4701657d4a2d1da01601a8ab97f0/lab_notebook-3.1.7-py2.py3-none-any.whl" } ], "3.1.8": [ { "comment_text": "", "digests": { "md5": "79c44686464478d4fcf4ba7256ada93c", "sha256": "a0caf13f5067629d722240b8f3626cc461fa8e85f75dba4e6999a8139d36e8cd" }, "downloads": -1, "filename": "lab_notebook-3.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "79c44686464478d4fcf4ba7256ada93c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22424, "upload_time": "2018-03-07T23:20:42", "url": "https://files.pythonhosted.org/packages/e7/40/6a0a8c017585fc82212b8f08a6019a9c5f72aa8a4c9e3139e753249a6370/lab_notebook-3.1.8-py2.py3-none-any.whl" } ], "3.1.9": [ { "comment_text": "", "digests": { "md5": "fc169346c61305d29ccd51d13646d7e2", "sha256": "7bc0a1502a7a6bc8630a694dee6aaf967abc5f30b7213511127d4bc339e325bb" }, "downloads": -1, "filename": "lab_notebook-3.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fc169346c61305d29ccd51d13646d7e2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22343, "upload_time": "2018-03-08T03:59:48", "url": "https://files.pythonhosted.org/packages/06/3a/de7a64fdd0a4ca6654575fb2db94c5aa3be63ca5ea3c9dabb8179280c4d2/lab_notebook-3.1.9-py2.py3-none-any.whl" } ], "3.2": [ { "comment_text": "", "digests": { "md5": "d618b0c0555c4257b5fdf655b21719e3", "sha256": "e1555125bc9ad9100fc15ff20698f91acd5ac8f9f67f6680efac0e06c9c7b177" }, "downloads": -1, "filename": "lab_notebook-3.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d618b0c0555c4257b5fdf655b21719e3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23092, "upload_time": "2018-04-30T02:39:51", "url": "https://files.pythonhosted.org/packages/05/56/5420490a94d64e4030594ecfd0336bea0fc3b292af53c9a9668fd94778f9/lab_notebook-3.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a079535f92cd6c275e803a6f4ada5815", "sha256": "708e3de53a2aae650864c4fe5c8e9465743e637848daafa6d9861c418091c510" }, "downloads": -1, "filename": "lab_notebook-3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a079535f92cd6c275e803a6f4ada5815", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23061, "upload_time": "2018-04-30T02:38:22", "url": "https://files.pythonhosted.org/packages/44/f5/1a44b87cf84043d542a1ba22f831707a2ca7aa3dc5150b0713e4caf53438/lab_notebook-3.2-py2.py3-none-any.whl" } ], "3.2.1": [ { "comment_text": "", "digests": { "md5": "06fddaa0d04da90c6df69ed304f296ff", "sha256": "cbd5065d42e38ea98077c8592a1177bbb4d2d024df8a0eb136e4c06be0fe2511" }, "downloads": -1, "filename": "lab_notebook-3.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "06fddaa0d04da90c6df69ed304f296ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23206, "upload_time": "2018-04-30T02:53:07", "url": "https://files.pythonhosted.org/packages/3d/60/398e849617c62f7b8e0758a625f28f65f50299d2c67e57e4cf6b8509ba65/lab_notebook-3.2.1-py2.py3-none-any.whl" } ], "3.3.1": [ { "comment_text": "", "digests": { "md5": "38160bf85b6fa440f94aa24a0001bd85", "sha256": "758f3109ed6e6663acf1803087aba551706756ac18503f51b1dc95b2408e91c3" }, "downloads": -1, "filename": "lab_notebook-3.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "38160bf85b6fa440f94aa24a0001bd85", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18790, "upload_time": "2018-12-17T15:02:36", "url": "https://files.pythonhosted.org/packages/e0/cb/236b692b931d384e2e2fd84fdc29537c97e954a93a6392e86e133387090e/lab_notebook-3.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8dcb91e3961f81513875613220acc01b", "sha256": "e5bcc366e91ed03bf522a1a1728550562e8f729a2bdfdc19943da274f73f23bd" }, "downloads": -1, "filename": "lab-notebook-3.3.1.tar.gz", "has_sig": false, "md5_digest": "8dcb91e3961f81513875613220acc01b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14356, "upload_time": "2018-12-17T15:02:37", "url": "https://files.pythonhosted.org/packages/64/0b/efd083bdd9ff98e64a8ff557ee5c760b6b853f8fdafec8f1b2011bc96237/lab-notebook-3.3.1.tar.gz" } ], "3.3.3": [ { "comment_text": "", "digests": { "md5": "ce312d6f53bb4819eb8c4c31fec2cdbe", "sha256": "2f0fd8ea155c4e884ebb8c9ca369c32bc483eb63dc0b82d516757b81299ac968" }, "downloads": -1, "filename": "lab_notebook-3.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ce312d6f53bb4819eb8c4c31fec2cdbe", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 35595, "upload_time": "2018-12-17T17:38:40", "url": "https://files.pythonhosted.org/packages/05/86/588cd759fc149376c46642ec3d48393a249d241581a34b4742ae8fe378fd/lab_notebook-3.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0320802bde024d41a1752d217ed11fe", "sha256": "4072d3a1f575e151d35ccb81c0cddfb9e88517b8f2083c230637d5da8d8fb6b1" }, "downloads": -1, "filename": "lab-notebook-3.3.3.tar.gz", "has_sig": false, "md5_digest": "d0320802bde024d41a1752d217ed11fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22748, "upload_time": "2018-12-17T17:38:37", "url": "https://files.pythonhosted.org/packages/d8/6e/ad0c1a19cbd40a69510df2c6fb81d2f213e8b98e3a5f91e858ec72aa4230/lab-notebook-3.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ce312d6f53bb4819eb8c4c31fec2cdbe", "sha256": "2f0fd8ea155c4e884ebb8c9ca369c32bc483eb63dc0b82d516757b81299ac968" }, "downloads": -1, "filename": "lab_notebook-3.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ce312d6f53bb4819eb8c4c31fec2cdbe", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 35595, "upload_time": "2018-12-17T17:38:40", "url": "https://files.pythonhosted.org/packages/05/86/588cd759fc149376c46642ec3d48393a249d241581a34b4742ae8fe378fd/lab_notebook-3.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0320802bde024d41a1752d217ed11fe", "sha256": "4072d3a1f575e151d35ccb81c0cddfb9e88517b8f2083c230637d5da8d8fb6b1" }, "downloads": -1, "filename": "lab-notebook-3.3.3.tar.gz", "has_sig": false, "md5_digest": "d0320802bde024d41a1752d217ed11fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22748, "upload_time": "2018-12-17T17:38:37", "url": "https://files.pythonhosted.org/packages/d8/6e/ad0c1a19cbd40a69510df2c6fb81d2f213e8b98e3a5f91e858ec72aa4230/lab-notebook-3.3.3.tar.gz" } ] }