{ "info": { "author": "Piotr Rarus", "author_email": "piotr.rarus@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Austen\n\nNested telemetry logger.\nPerfect for printing algorithms. Dumps into `json` file.\n\n## Features\n\nCore idea behind `Austen` is to have algorithm call stack logged with exact arguments.These are stored in a dictionary and dumped into `json`.\nAdditionally `Austen` handles dumps of some additional file types. These include:\n\n- objects (using `joblib`)\n- plots\n- sheets\n- dictionaries\n- images\n- GIFs\n\nAll files will be dumped in a folder structure, that corresponds to your algorithm (folder per branch).\n\n## Getting started\n\n```shell\npip install austen\n```\n\n## How to use\n\n### Manual entries\n\nWe'll start by importing `Logger` class from the library.\n\n```py\nfrom austen import Logger\n```\n\nNow we can instantiate `Logger` object.\n\n```py\nlogger = Logger(output='logs')\n```\n\nBy `output` argument you can specify base directory for subsequent dumps.\nIt will dump to your current working directory (relative path). If you want to dump it somewhere else, just put absolute path in there. Now it'll dump to `./logs/`.\n\nNow let's add some entry to our logger.\n\n```py\nlogger.add_entry('foo', 'bar')\n```\n\nYou can also add multiple entries at once.\n\n```py\nentries = [\n ('a', 1),\n ('b', 2),\n ('c', 5)\n]\n\nlogger.add_entries(entries)\n```\n\nEntries are stored in a dictionary. This means that key has to be hashable.\nIf you think something is appropriate for `json` format, just push it to logger.\n\n### Wrapping function calls\n\nLet's log some functions.\n\n```py\ndef add(x, y):\n return x + y\n\ndef foo(logger:Logger, x, y):\n return logger.log_func(\n func=add,\n kwargs={'x': x, 'y': y}\n )\n```\n\n### Other file types\n\nNow let's see how we can dump files.\n\n#### Objects\n\n```py\nlogger.save_obj(logger, name='logger')\n```\n\n- `name` denotes name of your file. File extensions are handled automatically.\n\nObjects are serialized using `joblib`.\n\n#### Plots, figures\n\n```py\nlogger.save_fig(figure, name='foo')\n```\n\nYour figure should implement `savefig` interfaces from `matplotlib`.\nIt's de facto standard for plots in Python.\n\n```shell\nlogs/foo.png\n```\n\n#### Sheets\n\n```py\nwith open('foo.csv') as csv:\n frame = pd.read_csv(csv)\n logger.save_csv(frame, name='foo')\n```\n\nYour frame should implement `to_csv` interface from `pandas`.\nI guess everyone's just using `pandas` nowadays to handle sheets.\n\n```shell\nlogs/foo.csv\n```\n\n#### Dictionaries\n\nDictionaries are saved in `json` format.\n\n```py\nlogger.save_json(dictionary, name='dictionary')\n```\n\n#### Images\n\n```py\nlogger.save_image(image, name='astronaut')\nlogger.save_image(image, name='coffee')\n```\n\nWe use `skimage.io.imsave` to handle images. Images are saved as `png`.\n\n```shell\nlogs/astronaut.png\nlogs/coffee.png\n```\n\n```py\nlogger.save_image(image, name='astronaut', prefix_step=True)\nlogger.save_image(image, name='coffee', prefix_step=True)\n```\n\nYou can also use `prefix_step` parameter to append some ordering prefix.\nGuess now it's time to talk about `steps`. It's a private counter inside your logger, that's incremented each time you use `log_func`. So later, when you're viewing your files, you can order them by name (which is default for most OS). It'll result in following structure:\n\n```shell\nlogs/01_astronaut.png\nlogs/02_coffee.png\n```\n\n#### GIFs\n\n```py\nlogger.save_gif(images, 'your-sequence')\n```\n\nGIFs are dumped using `PIL`.\n\n### Time to get a bit crazy (nesting)\n\n```py\nwith Logger(logs_dir) as logger:\n logger.add_entry('x', 0)\n\n with logger.get_child('bar') as child_logger:\n child_logger.add_entry('y', 1)\n```\n\nYou can nest your loggers using `get_child` method. We recommend you wrap your loggers with scopes, so they're easier to manage.\n\n- once logger is disposed, it'll merge to the parent logger.\n- once root logger is disposed, it'll dump all your telemetry in `json` file\n\nAnother tip would be to write code in 'scope per branch' fashion - you do single method, where you use only single logger. You can pass parent logger with an argument.\n\n## Author\n\n- Piotr Rarus piotr.rarus@gmail.com\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/piotr-rarus/austen", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "austen", "package_url": "https://pypi.org/project/austen/", "platform": "", "project_url": "https://pypi.org/project/austen/", "project_urls": { "Homepage": "https://github.com/piotr-rarus/austen" }, "release_url": "https://pypi.org/project/austen/0.2.7/", "requires_dist": [ "numpy", "scipy", "pandas", "matplotlib", "seaborn", "scikit-image", "joblib" ], "requires_python": "", "summary": "Nested telemetry logger.", "version": "0.2.7" }, "last_serial": 5866063, "releases": { "0.1.6": [ { "comment_text": "", "digests": { "md5": "682dd52156227148199ba245d151fb18", "sha256": "912b89c7e2e8f7361e76030352559ece49beb3daa09691b145a08a8758e74f06" }, "downloads": -1, "filename": "austen-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "682dd52156227148199ba245d151fb18", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6852, "upload_time": "2019-06-26T15:36:56", "url": "https://files.pythonhosted.org/packages/0e/0a/73e18fe2f0b583689375474df103c8a7b47dce6b179d7af7c51f1846beb3/austen-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4da3527832d0b031b22f528c4d25448", "sha256": "71863103a52db5950955e868a47dc90627548d4e925f28dbf3f198ec550f85cb" }, "downloads": -1, "filename": "austen-0.1.6.tar.gz", "has_sig": false, "md5_digest": "a4da3527832d0b031b22f528c4d25448", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5541, "upload_time": "2019-06-26T15:36:58", "url": "https://files.pythonhosted.org/packages/1b/e4/2a5376f9ba8d9ee0576375320bfb430e491dc279f7f7affe69e13770b6fa/austen-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "6ebd5d02bdab1a7d8f5200c75fc27898", "sha256": "30d8b7dcdb5325d8955c66239839e93a34dc4cac858d4cce8ed0e3b91de4e508" }, "downloads": -1, "filename": "austen-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "6ebd5d02bdab1a7d8f5200c75fc27898", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6851, "upload_time": "2019-06-28T12:29:43", "url": "https://files.pythonhosted.org/packages/03/f7/d3c4d4def99adcf69b1d1e42207e881a3ecb28b1fc0bda2af5915940de99/austen-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "852ecb37adc4cd6a22f003bf0a24e7f1", "sha256": "7e9b7d792f04ab4c336e1188d4151be7d987e8de29b02a67f61a3d5169f5accf" }, "downloads": -1, "filename": "austen-0.1.7.tar.gz", "has_sig": false, "md5_digest": "852ecb37adc4cd6a22f003bf0a24e7f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5539, "upload_time": "2019-06-28T12:29:44", "url": "https://files.pythonhosted.org/packages/85/ce/6f923ffbf16280e4a17db0e7714a210e9581a0fb17fac82cc72d1319eac2/austen-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "c9be8fd58a0004badf52859359c5727d", "sha256": "bba771ccf121f4a40c7bbdd65b2be0b4ea457a9c4bf363c5a4076f9a8ae68768" }, "downloads": -1, "filename": "austen-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "c9be8fd58a0004badf52859359c5727d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6856, "upload_time": "2019-07-02T09:18:04", "url": "https://files.pythonhosted.org/packages/68/ac/7dff618a2aa150c3406d9db86757dda3146b9178bacd6a82b166bffe9a81/austen-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98221ed92bc473af464df35630633a43", "sha256": "e1d0424fda08a03735e2b347b620262892b0483108c3593a99507406bc8e1cc1" }, "downloads": -1, "filename": "austen-0.1.8.tar.gz", "has_sig": false, "md5_digest": "98221ed92bc473af464df35630633a43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5548, "upload_time": "2019-07-02T09:18:05", "url": "https://files.pythonhosted.org/packages/8b/51/3d5c1ade7518325150c6b44b580c79222bf0435961ff4cf43efd5b3129ec/austen-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "87afd03471f1d1948de7e6a82979e036", "sha256": "d18823419b11d37e0fa74741f8fc93b0451daea40b60b816b6f232869f7e81fe" }, "downloads": -1, "filename": "austen-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "87afd03471f1d1948de7e6a82979e036", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6859, "upload_time": "2019-07-13T15:21:33", "url": "https://files.pythonhosted.org/packages/df/46/3b1e0c24fb570be39e8bb53f382a2469561d6aeaef9cd6c2932413f0ea4b/austen-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c59dba895ecdfea02ad0d4341cf63f71", "sha256": "3ceb14f61d766c2f77b9ef3811ec2f02da919a65e3565cc0b03d74bec18d7a0b" }, "downloads": -1, "filename": "austen-0.1.9.tar.gz", "has_sig": false, "md5_digest": "c59dba895ecdfea02ad0d4341cf63f71", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5549, "upload_time": "2019-07-13T15:21:34", "url": "https://files.pythonhosted.org/packages/a3/f0/cb1c1a168bab8abb25c82f0cae5065ef184124d933769e06ecc825a0e065/austen-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2baf9150c567c77748120d3907d0220d", "sha256": "bf8373625977477899c560a31157cde8869b340497d9320faf06f4718c548af8" }, "downloads": -1, "filename": "austen-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2baf9150c567c77748120d3907d0220d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6940, "upload_time": "2019-07-29T10:56:01", "url": "https://files.pythonhosted.org/packages/9a/12/39b71924f2d99b4691fecaf2d0826ff3f95fe0534fe14420a465cecf4f27/austen-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb65dfbee15ddd7c9989ae14fa07c2a7", "sha256": "42ee4c2ebfe56d04ad43d0867c660e16f761bc353e694262404c561cac91d47c" }, "downloads": -1, "filename": "austen-0.2.0.tar.gz", "has_sig": false, "md5_digest": "fb65dfbee15ddd7c9989ae14fa07c2a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5630, "upload_time": "2019-07-29T10:56:03", "url": "https://files.pythonhosted.org/packages/e2/b7/6cbf01b9f4cd358202a747299392e39baac86f83c313c7fc2240b796a6b8/austen-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "54f93f62a0dd9f17536d6bfe95eea1ca", "sha256": "fe26fcec8998dd43926248d60873e13261de1ede7ea3c407c20363d220932e75" }, "downloads": -1, "filename": "austen-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "54f93f62a0dd9f17536d6bfe95eea1ca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6951, "upload_time": "2019-08-13T00:21:18", "url": "https://files.pythonhosted.org/packages/42/29/62ff559562e35c85f7464adc5d7415a8b09065ec62c4058feb67df195517/austen-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a9cb617aa431dee465dcb6ab147e6b3b", "sha256": "5ae9ca53f87d5f383dd0e207e89827654c54dda452eb0249eefbca813db14955" }, "downloads": -1, "filename": "austen-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a9cb617aa431dee465dcb6ab147e6b3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5641, "upload_time": "2019-08-13T00:21:19", "url": "https://files.pythonhosted.org/packages/79/a9/34c3b46f0d6fbc620af4445eef18b0feceb12afe6bee6de712d9f6c77570/austen-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "bfafa82d99ad4e30cad5d571151f9e4f", "sha256": "813cc36be85efd3b18ed8d84990a3c7594cd2db9af83f3943dbd2f796dd8602b" }, "downloads": -1, "filename": "austen-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "bfafa82d99ad4e30cad5d571151f9e4f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6986, "upload_time": "2019-08-13T07:03:20", "url": "https://files.pythonhosted.org/packages/1d/72/9bf6a580611a332de6c11950c96aa410658d8d294d44f70c13dc5170a0bd/austen-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c09458bf15b42223ebc877dd42e840c9", "sha256": "281a5e178f7214113ff06ee99c77eda014743bd48f8a6b8ea7c418c103742c5e" }, "downloads": -1, "filename": "austen-0.2.2.tar.gz", "has_sig": false, "md5_digest": "c09458bf15b42223ebc877dd42e840c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5675, "upload_time": "2019-08-13T07:03:21", "url": "https://files.pythonhosted.org/packages/62/60/34a3ffa80f1bbf33b19a1c2c2e5a5b58d6a51cf153cca4ec75cadbcd5aa8/austen-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "0cb810a122821d498278d7b425dd9cf4", "sha256": "863dd337d07342371dbf3c294a80514aa7e6bd582db31c3d367e2e0522794920" }, "downloads": -1, "filename": "austen-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "0cb810a122821d498278d7b425dd9cf4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8732, "upload_time": "2019-08-25T14:15:56", "url": "https://files.pythonhosted.org/packages/2c/c7/ec01099bae038fe43b0506ebf5489c75cb02f997b4785b189b48555e64c0/austen-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4e15e90ed9d6ad4c673d7a8f0383a38", "sha256": "0b2cdabe3a0e9da90152b9769792c44add21f33353f0d9fa35ce4799d34da044" }, "downloads": -1, "filename": "austen-0.2.3.tar.gz", "has_sig": false, "md5_digest": "e4e15e90ed9d6ad4c673d7a8f0383a38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6662, "upload_time": "2019-08-25T14:15:57", "url": "https://files.pythonhosted.org/packages/e7/b5/a75f3701a50acbafe48fee62a41d76abd6c8dd6ff3a8a6cbe37dd90fce70/austen-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "192ba72ce43d1692f7dd7428fc709fa1", "sha256": "bc0a7cffae41c3b09f1eae91fb2b33cc7f72b51b14969d509acf37dd579fd9ff" }, "downloads": -1, "filename": "austen-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "192ba72ce43d1692f7dd7428fc709fa1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8696, "upload_time": "2019-08-26T06:01:22", "url": "https://files.pythonhosted.org/packages/cd/ba/168f5fafba8d4fa013b2e78c2a3ad12a11a4a945604e6f81937db5a25547/austen-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d64eb4928d43faa4884b35cc1a8444d6", "sha256": "34299e89c2396684501340908acb9f6b501ce3740d959731ba425518f27caa55" }, "downloads": -1, "filename": "austen-0.2.4.tar.gz", "has_sig": false, "md5_digest": "d64eb4928d43faa4884b35cc1a8444d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6641, "upload_time": "2019-08-26T06:01:24", "url": "https://files.pythonhosted.org/packages/d9/51/b1aa1c5b8fea2805682591ec1b290a3ae914b8ed87075d7bd13285447043/austen-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "291b3294161959d49f7dbb704fb328bc", "sha256": "c64bc27e3a76e3536017ef8c7c4f2d42c983ec59075d7a57327fd22e2da086f4" }, "downloads": -1, "filename": "austen-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "291b3294161959d49f7dbb704fb328bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9333, "upload_time": "2019-09-17T12:41:22", "url": "https://files.pythonhosted.org/packages/c0/b7/71931d025887429e1251caa4e0ac0997bdce43d8042a7ebb80d6ba3ec9d4/austen-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "30c5cb9aedce33e53b02eb7ea4ff6e32", "sha256": "32a93bc5453475b62a128c115320f81c078f50a8d1d221f614433207d104ea83" }, "downloads": -1, "filename": "austen-0.2.5.tar.gz", "has_sig": false, "md5_digest": "30c5cb9aedce33e53b02eb7ea4ff6e32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7925, "upload_time": "2019-09-17T12:41:24", "url": "https://files.pythonhosted.org/packages/cd/6f/5d6f7f3e6ea3d3267194364fcc98777cfc7fdc4396bfa1adbfd7b4b66280/austen-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "a4c0f52d0863b6a5a1c1c5e97e62579c", "sha256": "4ae343b90e4c6ef7705c5f56a85d7de777f156a8addf115fbb08fbbb8ca88dbf" }, "downloads": -1, "filename": "austen-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "a4c0f52d0863b6a5a1c1c5e97e62579c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9360, "upload_time": "2019-09-18T10:52:04", "url": "https://files.pythonhosted.org/packages/53/27/07745a615ebb8e66cd03c1d9420508ad41f122a46a6b41674ff652060e68/austen-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b26af81c9eca17279e4402da111d799c", "sha256": "f7f90d4cc6d6b1b19fd26d7feaa571cbbfb9448a5aa36986535125006e2720ba" }, "downloads": -1, "filename": "austen-0.2.6.tar.gz", "has_sig": false, "md5_digest": "b26af81c9eca17279e4402da111d799c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7951, "upload_time": "2019-09-18T10:52:06", "url": "https://files.pythonhosted.org/packages/02/50/e5a0f6df231d0e928a5a955444adf611408848ab38988dd34e60b2d740b8/austen-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "8d0534abaecf147c73a49f0f532d4ef2", "sha256": "c1ffecba7fed02f877459fcdaf67f14b3cd4a51391ccc6ea4001184ccc43b3c4" }, "downloads": -1, "filename": "austen-0.2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "8d0534abaecf147c73a49f0f532d4ef2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9403, "upload_time": "2019-09-21T13:51:32", "url": "https://files.pythonhosted.org/packages/b8/bc/541cecd956d4f72d1465759f41ee60cc00472e34df5ac1dde5b195b5bfff/austen-0.2.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10b849c0fc36758a9854ca15ee4fcbfa", "sha256": "06d344dea2c5578fd638fb0429d8b040b3d1c63810b11ac54be299157c7f3498" }, "downloads": -1, "filename": "austen-0.2.7.tar.gz", "has_sig": false, "md5_digest": "10b849c0fc36758a9854ca15ee4fcbfa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7996, "upload_time": "2019-09-21T13:51:34", "url": "https://files.pythonhosted.org/packages/50/4e/0e6595541d28e986f0146264bbac266c987a29c4340a3a6e57cb562a21fd/austen-0.2.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8d0534abaecf147c73a49f0f532d4ef2", "sha256": "c1ffecba7fed02f877459fcdaf67f14b3cd4a51391ccc6ea4001184ccc43b3c4" }, "downloads": -1, "filename": "austen-0.2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "8d0534abaecf147c73a49f0f532d4ef2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9403, "upload_time": "2019-09-21T13:51:32", "url": "https://files.pythonhosted.org/packages/b8/bc/541cecd956d4f72d1465759f41ee60cc00472e34df5ac1dde5b195b5bfff/austen-0.2.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10b849c0fc36758a9854ca15ee4fcbfa", "sha256": "06d344dea2c5578fd638fb0429d8b040b3d1c63810b11ac54be299157c7f3498" }, "downloads": -1, "filename": "austen-0.2.7.tar.gz", "has_sig": false, "md5_digest": "10b849c0fc36758a9854ca15ee4fcbfa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7996, "upload_time": "2019-09-21T13:51:34", "url": "https://files.pythonhosted.org/packages/50/4e/0e6595541d28e986f0146264bbac266c987a29c4340a3a6e57cb562a21fd/austen-0.2.7.tar.gz" } ] }