{ "info": { "author": "PG Drange", "author_email": "pgdr@equinor.com", "bugtrack_url": null, "classifiers": [], "description": "# Samplitude [![Build Status](https://travis-ci.org/pgdr/samplitude.svg?branch=master)](https://travis-ci.org/pgdr/samplitude)\n\nCLI generation and plotting of random variables:\n\n```bash\n$ samplitude \"sin(0.31415) | sample(6) | round | cli\"\n0.0\n0.309\n0.588\n0.809\n0.951\n1.0\n```\n\nThe word _samplitude_ is a portmanteau of _sample_ and _amplitude_. This\nproject also started as an \u00e9tude, hence should be pronounced _sampl-\u00e9tude_.\n\n`samplitude` is a chain starting with a _generator_, followed by zero or more\n_filters_, followed by a consumer. Most generators are infinite (with the\nexception of `range` and `lists` and possibly `stdin`). Some of the filters can\nturn infinite generators into finite generators (like `sample` and `gobble`),\nand some filters can turn finite generators into infinite generators, such as\n`choice`.\n\n_Consumers_ are filters that necessarily flush the input; `list`, `cli`,\n`tojson`, `unique`, and the plotting tools, `hist`, `scatter` and `line` are\nexamples of consumers. The `list` consumer is a Jinja2 built-in, and other\nJinja2 consumers are `sum`, `min`, and `max`:\n\n```bash\nsamplitude \"sin(0.31415) | sample(5) | round | max | cli\"\n0.951\n```\n\nFor simplicity, **s8e** is an alias for samplitude.\n\n\n## Generators\n\nIn addition to the standard `range` function, we support infinite generators\n\n* `exponential(lambd)`: `lambd` is 1.0 divided by the desired mean.\n* `uniform(a, b)`: Get a random number in the range `[a, b)` or `[a, b]`\n depending on rounding.\n* `gauss(mu, sigma)`: `mu` is the mean, and `sigma` is the standard deviation.\n* `normal(mu, sigma)`: as above\n* `lognormal(mu, sigma)`: as above\n* `triangular(low, high)`: Continuous distribution bounded by given lower and\n upper limits, and having a given mode value in-between.\n* `beta(alpha, beta)`: Conditions on the parameters are `alpha > 0` and `beta >\n 0`. Returned values range between 0 and 1.\n* `gamma(alpha, beta)`: as above\n* `weibull(alpha, beta)`: `alpha` is the scale parameter and `beta` is the shape\n parameter.\n* `pareto(alpha)`: Pareto distribution. `alpha` is the shape parameter.\n* `vonmises(mu, kappa)`: `mu` is the mean angle, expressed in radians between 0\n and `2*pi`, and `kappa` is the concentration parameter, which must be greater\n than or equal to zero. If kappa is equal to zero, this distribution reduces\n to a uniform random angle over the range 0 to `2*pi`.\n\nProvided that you have installed the `scipy.stats` package, the\n* `pert(low, peak, high)`\ndistribution is supported.\n\nWe have a special infinite generator (filter) that works on finite generators:\n\n* `choice`,\n\nwhose behaviour is explained below.\n\nFor input from files, either use `words` with a specified environment variable\n`DICTIONARY`, or pipe through\n\n* `stdin()`\n\nwhich reads from `stdin`.\n\nIf the file is a csv file, there is a `csv` generator that reads a csv file with\nPandas and outputs the first column (if nothing else is specified). Specify the\ncolumn with either an integer index or a column name:\n\n```bash\n>>> samplitude \"csv('iris.csv', 'virginica') | counter | cli\"\n0 50\n1 50\n2 50\n```\n\nFor other files, we have the `file` generator:\n```bash\n>>> s8e \"file('iris.csv') | sample(1) | cli\"\n150,4,setosa,versicolor,virginica\n```\n\n\nFinally, we have `combinations` and `permutations` that are inherited from\nitertools and behave exactly like those.\n\n```bash\n>>> s8e \"'ABC' | permutations | cli\"\n```\n\nHowever, the output of this is rather non-UNIXy, with the abstractions leaking through:\n```bash\n>>> s8e \"'HT' | permutations | cli\"\n('H', 'T')\n('T', 'H')\n```\n\nSo to get a better output, we can use an _elementwise join_ `elt_join`:\n```bash\n>>> s8e \"'HT' | permutations | elt_join | cli\"\nH T\nT H\n```\n\nwhich also takes a seperator as argument:\n```bash\n>>> s8e \"'HT' | permutations | elt_join(';') | cli\"\nH;T\nT;H\n```\n\nThis is already supported by Jinja's `map` function (notice the strings around `join`):\n```bash\n>>> s8e \"'HT' | permutations | map('join', ';') | cli\"\nH;T\nT;H\n```\n\nWe can thus count the number of permutations of a set of size 10:\n```bash\n>>> s8e \"range(10) | permutations | len\"\n3628800\n```\n\n\nThe `product` generator takes two generators and computes a cross-product of\nthese. In addition,\n\n## A warning about infinity\n\nAll generators are (potentially) infinite generators, and must be sampled with\n`sample(n)` before consuming!\n\n## Usage and installation\n\nInstall with\n```bash\npip install samplitude\n```\nor to get bleeding release,\n```bash\npip install git+https://github.com/pgdr/samplitude\n```\n\n\n### Examples\n\nThis is pure Jinja2:\n```bash\n>>> samplitude \"range(5) | list\"\n[0, 1, 2, 3, 4]\n```\n\nHowever, to get a more UNIXy output, we use `cli` instead of `list`:\n\n```bash\n>>> s8e \"range(5) | cli\"\n0\n1\n2\n3\n4\n```\n\nTo limit the output, we use `sample(n)`:\n\n\n```bash\n>>> s8e \"range(1000) | sample(5) | cli\"\n0\n1\n2\n3\n4\n```\n\nThat isn't very helpful on the `range` generator, which is already finite, but\nis much more helpful on an infinite generator. The above example is probably\nbetter written as\n\n```bash\n>>> s8e \"count() | sample(5) | cli\"\n0\n1\n2\n3\n4\n```\n\nHowever, much more interesting are the infinite random generators, such as the\n`uniform` generator:\n\n```bash\n>>> s8e \"uniform(0, 5) | sample(5) | cli\"\n3.3900198868059235\n1.2002767137709318\n0.40999391897569126\n1.9394585953696264\n4.37327472704115\n```\n\nWe can round the output in case we don't need as many digits (note that `round`\nis a generator as well and can be placed on either side of `sample`):\n```bash\n>>> s8e \"uniform(0, 5) | round(2) | sample(5) | cli\"\n4.98\n4.42\n2.05\n2.29\n3.34\n```\n\n\n\n### Selection and modifications\n\nThe `sample` behavior is equivalent to the `head` program, or from languages\nsuch as Haskell. The `head` alias is supported:\n```bash\n>>> samplitude \"uniform(0, 5) | round(2) | head(5) | cli\"\n4.58\n4.33\n1.87\n2.09\n4.8\n```\n\n`drop` is also available:\n```bash\n>>> s8e \"uniform(0, 5) | round(2) | drop(2) | head(3) | cli\"\n1.87\n2.09\n4.8\n```\n\nTo **shift** and **scale** distributions, we can use the `shift(s)` and\n`scale(s)` filters. To get a Poisson point process starting at 15, we can run\n\n```bash\n>>> s8e \"poisson(0.3) | round | shift(15) | sample(5) |cli\"\n33.731\n22.204\n16.763\n17.04\n18.668\n```\n\nBoth `shift` and `scale` work on generators, so to add `sin(0.1)` and\n`sin(0.2)`, we can run\n```bash\n>>> s8e \"sin(0.1) | shift(sin(0.2)) | sample(10) | cli\"\n```\n\n![sin(0.1)+sin(0.2) line](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/line_sin01sin02.png)\n\n\n\n### Choices and other operations\n\nUsing `choice` with a finite generator gives an infinite generator that chooses\nfrom the provided generator:\n\n```bash\n>>> samplitude \"range(0, 11, 2) | choice | sample(6) | cli\"\n8\n0\n8\n10\n4\n6\n```\n\nJinja2 supports more generic lists, e.g., lists of strings. Hence, we can write\n\n```bash\n>>> s8e \"['win', 'draw', 'loss'] | choice | sample(6) | sort | cli\"\ndraw\ndraw\nloss\nloss\nloss\nwin\n```\n\n... and as in Python, strings are also iterable:\n\n```bash\n>>> s8e \"'HT' | cli\"\nH\nT\n```\n... so we can flip six coins with\n```bash\n>>> s8e \"'HT' | choice | sample(6) | cli\"\nH\nT\nT\nH\nH\nH\n```\n\nWe can flip 100 coins and count the output with `counter` (which is\n`collections.Counter`)\n```bash\n>>> s8e \"'HT' | choice | sample(100) | counter | cli\"\nH 47\nT 53\n```\n\nThe `sort` functionality works as expected on a `Counter` object (a\n`dict` type), so if we want the output sorted by key, we can run\n\n```bash\n>>> s8e \"range(1,7) | choice | sample(100) | counter | sort | elt_join | cli\" 42 # seed=42\n1 17\n2 21\n3 12\n4 21\n5 13\n6 16\n```\n\nThere is a minor hack to sort by value, namely by `swap`-ing the Counter twice:\n```bash\n>>> s8e \"range(1,7) | choice | sample(100) |\n counter | swap | sort | swap | elt_join | cli\" 42 # seed=42\n3 12\n5 13\n6 16\n1 17\n2 21\n4 21\n```\n\nThe `swap` filter does an element-wise reverse, with element-wise reverse\ndefined on a dictionary as a list of `(value, key)` for each key-value pair in\nthe dictionary.\n\nSo, to get the three most common anagram strings, we can run\n```bash\n>>> s8e \"words() | map('sort') | counter | swap | sort(reverse=True) |\n swap | sample(3) | map('first') | elt_join('') | cli\"\naeprs\nacerst\nopst\n```\n\n\nUsing `stdin()` as a generator, we can pipe into `samplitude`. Beware that\n`stdin()` flushes the input, hence `stdin` (currently) does not work with\ninfinite input streams.\n\n```bash\n>>> ls | samplitude \"stdin() | choice | sample(1) | cli\"\nsome_file\n```\n\n\nThen, if we ever wanted to shuffle `ls` we can run\n\n```bash\n>>> ls | samplitude \"stdin() | shuffle | cli\"\nsome_file\n```\n\n```bash\n>>> cat FILE | samplitude \"stdin() | cli\"\n# NOOP; cats FILE\n```\n\n\n\n### The fun powder plot\n\nFor fun, if you have installed `matplotlib`, we support plotting, `hist` being\nthe most useful.\n\n```bash\n>>> samplitude \"normal(100, 5) | sample(1000) | hist\"\n```\n\n![normal distribution](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/hist_normal.png)\n\nAn exponential distribution can be plotted with `exponential(lamba)`. Note that\nthe `cli` output must be the last filter in the chain, as that is a command-line\nutility only:\n\n```bash\n>>> s8e \"normal(100, 5) | sample(1000) | hist | cli\"\n```\n\n![exponential distribution](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/hist_exponential.png)\n\n\nTo **repress output after plotting**, you can use the `gobble` filter to empty\nthe pipe:\n\n```bash\n>>> s8e \"normal(100, 5) | sample(1000) | hist | gobble\"\n```\n\n\nThe\n[`pert` distribution](https://en.wikipedia.org/wiki/PERT_distribution)\ntakes inputs `low`, `peak`, and `high`:\n\n```bash\n>>> s8e \"pert(10, 50, 90) | sample(100000) | hist(100) | gobble\"\n```\n\n![PERT distribution](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/hist_pert.png)\n\n\n\nAlthough `hist` is the most useful, one could imaging running `s8e` on\ntimeseries, where a `line` plot makes most sense:\n\n```bash\n>>> s8e \"sin(22/700) | sample(200) | line\"\n```\n\n![sine and line](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/line_sine.png)\n\n\nThe scatter function can also be used, but requires that the input stream is a\nstream of pairs, which can be obtained either by the `product` generator, or via\nthe `pair` or `counter` filter:\n\n```bash\ns8e \"normal(100, 10) | sample(10**5) | round(0) | counter | scatter\"\n```\n\n![scatter normal](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/scatter_normal_counter.png)\n\n\n\n### Fourier\n\nA fourier transform is offered as a filter `fft`:\n\n\n```bash\n>>> samplitude \"sin(0.1) | shift(sin(0.2)) | sample(1000) | fft | line | gobble\"\n```\n\n![fft line](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/line_fft.png)\n\n\n## Your own filter\n\nIf you use Samplitude programmatically, you can register your own filter by\nsending a dictionary\n\n```python\n{'name1' : filter1,\n 'name2' : filter2,\n #...,\n 'namen' : filtern,\n}\n```\nto the `samplitude` function.\n\n### Example: secretary problem\nSuppose you want to emulate the secretary problem ...\n\n#### Intermezzo: The problem\nFor those not familiar, you are a boss, Alice, who wants to hire a new secretary\nBob. Suppose you want to hire the tallest Bob of all your candidates, but the\ncandidates arrive in a stream, and you know only the number of candidates. For\neach candidate, you have to accept (hire) or reject the candidate. Once you\nhave rejected a candidate, you cannot undo the decision.\n\nThe solution to this problem is to look at the first `n/e` (`e~2.71828` being\nthe Euler constant) candidates, and thereafter accept the first candidate taller\nthan all of the `n/e` first candidates.\n\n#### A Samplitude solution\n\nLet `normal(170, 10)` be the candidate generator, and let `n=100`. We create a\nfilter `secretary` that takes a stream and an integer (`n`) and picks according\nto the solution. In order to be able to assess the quality of the solution\nlater, the filter must forward the entire list of candidates; hence we annotate\nthe one we choose with `(c, False)` for a candidate we rejected, and `(c, True)`\ndenotes the candidate we accepted.\n\n```python\ndef secretary(gen, n):\n import math\n explore = int(n / math.e)\n target = -float('inf')\n i = 0\n\n # explore the first n/e candidates\n for c in gen:\n target = max(c, target)\n yield (c, False)\n i += 1\n if i == explore:\n break\n\n _ok = lambda c, i, found: ((i == n-1 and not found)\n or (c > target and not found))\n\n have_hired = False\n for c in gen:\n status = _ok(c, i, have_hired)\n have_hired = have_hired or status\n yield c, status\n i += 1\n if i == n:\n return\n```\n\nNow, to emulate the secretary problem with Samplitude:\n\n```python\nfrom samplitude import samplitude as s8e\n\n# insert above secretary function\n\nn = 100\nfilters = {'secretary': secretary}\n\nsolution = s8e('normal(170, 10) | secretary(%d) | list' % n, filters=filters)\nsolution = eval(solution) # Samplitude returns an eval-able string\ncands = map(lambda x: x[0], solution)\nopt = [s[0] for s in solution if s[1]][0]\n# the next line prints in which position the candidate is\nprint(1+sorted(cands, reverse=True).index(opt), '/', n)\n```\n\nIn about 67% of the cases we can expect to get one of the top candidates,\nwhereas the remaining 33% of the cases will be uniformly distributed. Running\n100k runs with a population of size 1000 reveals the structure.\n\n![Secretary selection](https://raw.githubusercontent.com/pgdr/samplitude/master/assets/hist_secretary.png)\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/pgdr/samplitude", "keywords": "jinja2 jinja random statistics sample distribution plot", "license": "GNU GPL v3 or later", "maintainer": "PG Drange ", "maintainer_email": "", "name": "samplitude", "package_url": "https://pypi.org/project/samplitude/", "platform": "", "project_url": "https://pypi.org/project/samplitude/", "project_urls": { "Bug Tracker": "https://github.com/pgdr/samplitude/issues", "Documentation": "https://github.com/pgdr/samplitude/blob/master/README.md", "Homepage": "https://github.com/pgdr/samplitude", "Source Code": "https://github.com/pgdr/samplitude" }, "release_url": "https://pypi.org/project/samplitude/0.0.17/", "requires_dist": [ "numpy (>=1.11)", "Jinja2" ], "requires_python": "", "summary": "Samplitude (s8e) is a statistical distributions command line tool", "version": "0.0.17" }, "last_serial": 4222482, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "addaf85a7a7f3593384aacd7179b4d49", "sha256": "c2abbe487c38d0c79a588b87811e2ef81538548767d8d8fe5fc7293031f81de6" }, "downloads": -1, "filename": "samplitude-0.0.10.tar.gz", "has_sig": false, "md5_digest": "addaf85a7a7f3593384aacd7179b4d49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7681, "upload_time": "2018-07-19T10:08:00", "url": "https://files.pythonhosted.org/packages/70/75/2ae8b911b8c23eeb977903d7fa10f33d7a664612c86f9ceac68ed54cec6d/samplitude-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "515d40388d605c8a0e57965af70d77ea", "sha256": "f88d70bad9406d1d995cebe46a13b2807bf969762eeff8358aadf18a047621eb" }, "downloads": -1, "filename": "samplitude-0.0.11-py2-none-any.whl", "has_sig": false, "md5_digest": "515d40388d605c8a0e57965af70d77ea", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8360, "upload_time": "2018-07-24T16:08:51", "url": "https://files.pythonhosted.org/packages/ba/3c/79bb2d32d35b06420b0c86d550d40e872544730a7a6ee0719e7417f9a5e0/samplitude-0.0.11-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ac788d7c89fe436d160167620b93daa", "sha256": "025ed53cf7677b01105edabdaeee4d782f883ac22d9defdd8c1b5a12dc99f819" }, "downloads": -1, "filename": "samplitude-0.0.11.tar.gz", "has_sig": false, "md5_digest": "0ac788d7c89fe436d160167620b93daa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8746, "upload_time": "2018-07-24T16:08:53", "url": "https://files.pythonhosted.org/packages/65/12/02d1b08f12e4c3a0fcebad4cbbda3e4031dc2cc77697fb4e7e93e9ea193a/samplitude-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "e7af0e2ad200d31fe3b538dbf2fe887d", "sha256": "c0d979a2832f1993f27e9e39fa7bace04bb9209be2367c72942a18e9767194ed" }, "downloads": -1, "filename": "samplitude-0.0.12-py2-none-any.whl", "has_sig": false, "md5_digest": "e7af0e2ad200d31fe3b538dbf2fe887d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8634, "upload_time": "2018-07-24T16:40:59", "url": "https://files.pythonhosted.org/packages/ce/d4/3449baef37e43c12c2d87eb90d573298522f7b0d4ae76a2308fe7c2618cf/samplitude-0.0.12-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c9e69754332c2545ad84e3f7851b630", "sha256": "63bad7065a33f09342535423684bc425863a267557c4ca49a7fcac5832e0640b" }, "downloads": -1, "filename": "samplitude-0.0.12.tar.gz", "has_sig": false, "md5_digest": "6c9e69754332c2545ad84e3f7851b630", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9098, "upload_time": "2018-07-24T16:41:01", "url": "https://files.pythonhosted.org/packages/2a/d4/802dd69464b83ca33275ffc44516781aed55b7c3d2ee71e8f481b75b8b93/samplitude-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "e67c98765643990ddcd0a9b4f507470f", "sha256": "63d762901a1c67306305b9362f578a4657895769d0a7abf8f0de98b06097dfe1" }, "downloads": -1, "filename": "samplitude-0.0.13.tar.gz", "has_sig": false, "md5_digest": "e67c98765643990ddcd0a9b4f507470f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9214, "upload_time": "2018-07-29T15:43:44", "url": "https://files.pythonhosted.org/packages/b4/43/019e18f5e89e8d26c7a708e240716057fc9fb79dcd25134e7dfc97d7c2a3/samplitude-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "2e2e43830726ce008d445f488b3fae3f", "sha256": "74d92ce84f015c9dbc9cdd4058d9de69c8c719f982961e2eb065408da1cba369" }, "downloads": -1, "filename": "samplitude-0.0.14.tar.gz", "has_sig": false, "md5_digest": "2e2e43830726ce008d445f488b3fae3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10541, "upload_time": "2018-07-29T21:45:42", "url": "https://files.pythonhosted.org/packages/12/1e/e5a75fe29cc77401239702d5cb10fe199b6e6e8f523e8f444e9f846e93a0/samplitude-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "6d2d9cb3247c539dd88048d0d31564d7", "sha256": "314231176ca01a2b3c66d7a6dde944206321a855db553186d2f4f4657e81ea06" }, "downloads": -1, "filename": "samplitude-0.0.15.tar.gz", "has_sig": false, "md5_digest": "6d2d9cb3247c539dd88048d0d31564d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10810, "upload_time": "2018-07-30T10:42:42", "url": "https://files.pythonhosted.org/packages/79/d2/323025d51959870efe702cc27c628d53c0c767977852675e4cb73bcd4a25/samplitude-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "714abd8176b67234eaa0a6dc9d789718", "sha256": "e5bc102cd8510332f9acd913896c660300b5217fdce3a34def88db1ab65c775e" }, "downloads": -1, "filename": "samplitude-0.0.16.tar.gz", "has_sig": false, "md5_digest": "714abd8176b67234eaa0a6dc9d789718", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10944, "upload_time": "2018-07-31T10:38:15", "url": "https://files.pythonhosted.org/packages/ae/0f/2a9566845fe6da9c89c97b0f7ea233a7d81cc97ac871934b30f1a92022e3/samplitude-0.0.16.tar.gz" } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "791a1fe91c729f8e9303e30db135116d", "sha256": "c91415c524bc953d0af114a6b72efc8c3d0176e42ec3505dc800e33a0f5693e6" }, "downloads": -1, "filename": "samplitude-0.0.17-py2-none-any.whl", "has_sig": false, "md5_digest": "791a1fe91c729f8e9303e30db135116d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11485, "upload_time": "2018-08-30T12:46:56", "url": "https://files.pythonhosted.org/packages/e7/3e/e67d8ff9ea99c41eb076b299be7b47d6e70498cb639eff1e32c0a1fdcf1d/samplitude-0.0.17-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9dbc71d838063ed705a3fa60970a921a", "sha256": "6f8cdc7b9161fc0eb80793b78040956ef0f8dabb5358b626d8505f2fcc1b5573" }, "downloads": -1, "filename": "samplitude-0.0.17.tar.gz", "has_sig": false, "md5_digest": "9dbc71d838063ed705a3fa60970a921a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13482, "upload_time": "2018-08-30T12:46:58", "url": "https://files.pythonhosted.org/packages/e8/8f/1c3d9bae70a44da2a540bb6fc283ad56ff4d56218199cfabfc813aff74d7/samplitude-0.0.17.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9d038be424990204cf61508950c60b01", "sha256": "9562a964a155cff5806fed02b5c4d6bed97419f468f6bf051a5cb5332a6aae48" }, "downloads": -1, "filename": "samplitude-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9d038be424990204cf61508950c60b01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5398, "upload_time": "2018-07-18T07:40:25", "url": "https://files.pythonhosted.org/packages/8f/3f/d9cf687d5c59741be5814585efd007006a1b460f98912d9cdfbbe6567c80/samplitude-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "25dd28f0fe0947c7fa19d67f45b64c8f", "sha256": "3f3f6b178f12e16b78580688b2412e2d67e9e76fe5a22e235febf2a7ec222137" }, "downloads": -1, "filename": "samplitude-0.0.3.tar.gz", "has_sig": false, "md5_digest": "25dd28f0fe0947c7fa19d67f45b64c8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5895, "upload_time": "2018-07-18T08:11:44", "url": "https://files.pythonhosted.org/packages/da/fb/f0098f3fffcffb561668e35f7374663f13420ca9d8c11e3c45af48b30938/samplitude-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "0fdf80b4a1d5db3efa19e7094a41cd8f", "sha256": "c866b95a43510e089f51c89c71d5f0fe39c9cd052eba0eef5d7a9b19a330ccfc" }, "downloads": -1, "filename": "samplitude-0.0.4.tar.gz", "has_sig": false, "md5_digest": "0fdf80b4a1d5db3efa19e7094a41cd8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6084, "upload_time": "2018-07-18T11:15:40", "url": "https://files.pythonhosted.org/packages/84/04/f214633858f2e62b7d7fe0e8d58494c0d482813ac802e663712dd9f6e5f6/samplitude-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "3efa3d0dcc24fab8202b0f37bec369c2", "sha256": "7357e8917d35190a5b9a0aca1994fa1d3ace0623f04fedc1e90a2a88784e0a93" }, "downloads": -1, "filename": "samplitude-0.0.5.tar.gz", "has_sig": false, "md5_digest": "3efa3d0dcc24fab8202b0f37bec369c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6879, "upload_time": "2018-07-18T11:20:05", "url": "https://files.pythonhosted.org/packages/ca/32/e30820b819ecac643680d7e16acabe53e386efab21f738330ef19950772f/samplitude-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "796bf1bc82162d4404f125861d894620", "sha256": "c5b3e2b788cbf5cb5102f99943d796e699dc0193d8e1780708e1e01c159ad310" }, "downloads": -1, "filename": "samplitude-0.0.6.tar.gz", "has_sig": false, "md5_digest": "796bf1bc82162d4404f125861d894620", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6825, "upload_time": "2018-07-18T11:29:30", "url": "https://files.pythonhosted.org/packages/df/71/f7756ced0fc3883a06a35e3d82325870f918efd2a0d4b9db943fc2055a46/samplitude-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "553b63504b0abd5639ac4e8e691587e7", "sha256": "f40d7fb010a9dac328d82f5be254e83df3648dedca53711eb76869493888babc" }, "downloads": -1, "filename": "samplitude-0.0.7.tar.gz", "has_sig": false, "md5_digest": "553b63504b0abd5639ac4e8e691587e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6875, "upload_time": "2018-07-18T11:38:00", "url": "https://files.pythonhosted.org/packages/28/fc/818024d21d8babaeeb7b8f8bd7f07937d72b1ec54613164bb7ac853cd318/samplitude-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "a9f19ee6cbc945aa4813fd0a96f4879b", "sha256": "7445dce655639f8e9280b643b496fb22237165b088681ca4b3c42beecbe4a588" }, "downloads": -1, "filename": "samplitude-0.0.8.tar.gz", "has_sig": false, "md5_digest": "a9f19ee6cbc945aa4813fd0a96f4879b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7201, "upload_time": "2018-07-18T16:00:43", "url": "https://files.pythonhosted.org/packages/22/e3/14fef7f01b47c2d0265fe7dbbc989cbd52b1ce0c782d2161df76d3f0bf80/samplitude-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "a964361359adac1b5e637de69d0b0ce0", "sha256": "4bf5197f057281c79e717b54c229ce79f848e01ca2f226877b74c1dc0a3e6add" }, "downloads": -1, "filename": "samplitude-0.0.9.tar.gz", "has_sig": false, "md5_digest": "a964361359adac1b5e637de69d0b0ce0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7320, "upload_time": "2018-07-18T19:28:51", "url": "https://files.pythonhosted.org/packages/e0/9a/9cdfcc582f7f5589b44d4402825b6429d411bf0d9f3886e922fb595accd9/samplitude-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "791a1fe91c729f8e9303e30db135116d", "sha256": "c91415c524bc953d0af114a6b72efc8c3d0176e42ec3505dc800e33a0f5693e6" }, "downloads": -1, "filename": "samplitude-0.0.17-py2-none-any.whl", "has_sig": false, "md5_digest": "791a1fe91c729f8e9303e30db135116d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11485, "upload_time": "2018-08-30T12:46:56", "url": "https://files.pythonhosted.org/packages/e7/3e/e67d8ff9ea99c41eb076b299be7b47d6e70498cb639eff1e32c0a1fdcf1d/samplitude-0.0.17-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9dbc71d838063ed705a3fa60970a921a", "sha256": "6f8cdc7b9161fc0eb80793b78040956ef0f8dabb5358b626d8505f2fcc1b5573" }, "downloads": -1, "filename": "samplitude-0.0.17.tar.gz", "has_sig": false, "md5_digest": "9dbc71d838063ed705a3fa60970a921a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13482, "upload_time": "2018-08-30T12:46:58", "url": "https://files.pythonhosted.org/packages/e8/8f/1c3d9bae70a44da2a540bb6fc283ad56ff4d56218199cfabfc813aff74d7/samplitude-0.0.17.tar.gz" } ] }