{ "info": { "author": "Laurent P. Ren\u00e9 de Cotret", "author_email": "laurent.renedecotret@mail.mcgill.ca", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering" ], "description": "npstreams\n=========\n\n.. image:: https://img.shields.io/appveyor/ci/LaurentRDC/npstreams/master.svg\n :target: https://ci.appveyor.com/project/LaurentRDC/npstreams\n :alt: Windows Build Status\n.. image:: https://readthedocs.org/projects/npstreams/badge/?version=master\n :target: http://npstreams.readthedocs.io\n :alt: Documentation Build Status\n.. image:: https://img.shields.io/pypi/v/npstreams.svg\n :target: https://pypi.python.org/pypi/npstreams\n :alt: PyPI Version\n.. image:: https://img.shields.io/conda/vn/conda-forge/npstreams.svg\n :target: https://anaconda.org/conda-forge/npstreams\n :alt: Conda-forge Version\n.. image:: https://img.shields.io/pypi/pyversions/npstreams.svg\n :alt: Supported Python Versions\n\nnpstreams is an open-source Python package for streaming NumPy array operations. \nThe goal is to provide tested routines that operate on streams (or generators) of arrays instead of dense arrays.\n\nStreaming reduction operations (sums, averages, etc.) can be implemented in constant memory, which in turns\nallows for easy parallelization.\n\nThis approach has been a huge boon when working with lots of images; the images are read\none-by-one from disk and combined/processed in a streaming fashion.\n\nThis package is developed in conjunction with other software projects in the \n`Siwick research group `_.\n\nMotivating Example\n------------------\n\nConsider the following snippet to combine 50 images \nfrom an iterable :code:`source`::\n\n\timport numpy as np\n\n\timages = np.empty( shape = (2048, 2048, 50) )\n\tfor index, im in enumerate(source):\n\t images[:,:,index] = im\n\t\n\tavg = np.average(images, axis = 2)\n\nIf the :code:`source` iterable provided 1000 images, the above routine would\nnot work on most machines. Moreover, what if we want to transform the images \none by one before averaging them? What about looking at the average while it \nis being computed? Let's look at an example::\n\n\timport numpy as np\n\tfrom npstreams import iaverage\n\tfrom scipy.misc import imread\n\n\tstream = map(imread, list_of_filenames)\n\taveraged = iaverage(stream)\n\nAt this point, the generators :code:`map` and :code:`iaverage` are 'wired'\nbut will not compute anything until it is requested. We can look at the average evolve::\n\n import matplotlib.pyplot as plt\n for avg in average:\n plt.imshow(avg); plt.show()\n\nWe can also use :code:`last` to get at the final average::\n\n\tfrom npstreams import last\n\n\ttotal = last(averaged) # average of the entire stream\n\nStreaming Functions\n-------------------\n\nnpstreams comes with some streaming functions built-in. Some examples:\n\n* Numerics : :code:`isum`, :code:`iprod`, :code:`isub`, etc.\n* Statistics : :code:`iaverage` (weighted mean), :code:`ivar` (single-pass variance), etc.\n\nMore importantly, npstreams gives you all the tools required to build your own streaming function.\nAll routines are documented in the `API Reference on readthedocs.io `_.\n\nBenchmarking\n------------\n\nnpstreams provides a function for benchmarking common use cases.\n\nTo run the benchmark with default parameters, from the interpreter::\n\n from npstreams import benchmark\n benchmark()\n\nFrom a command-line terminal::\n\n python -c 'import npstreams; npstreams.benchmark()'\n\nThe results will be printed to the screen.\n\nFuture Work\n-----------\nSome of the features I want to implement in this package in the near future:\n\n* Optimize the CUDA-enabled routines\n* More functions : more streaming functions borrowed from NumPy and SciPy.\n\nAPI Reference\n-------------\n\nThe `API Reference on readthedocs.io `_ provides API-level documentation, as \nwell as tutorials.\n\nInstallation\n------------\n\nThe only requirement is NumPy. To have access to CUDA-enabled routines, PyCUDA must also be\ninstalled. npstreams is available on PyPI; it can be installed with `pip `_.::\n\n python -m pip install npstreams\n\nnpstreams can also be installed with the conda package manager, from the conda-forge channel::\n\n conda config --add channels conda-forge\n conda install npstreams\n\nTo install the latest development version from `Github `_::\n\n python -m pip install git+git://github.com/LaurentRDC/npstreams.git\n\nEach version is tested against Python 3.6+. If you are using a different version, tests can be run\nusing the standard library's `unittest` module.\n\nCitations\n---------\n\nIf you find this software useful, please consider citing the following publication:\n\n.. [#] L. P. Ren\u00c3\u00a9 de Cotret, M. R. Otto, M. J. Stern. and B. J. Siwick, *An open-source software ecosystem for the interactive \n exploration of ultrafast electron scattering data*, Advanced Structural and Chemical Imaging 4:11 (2018) DOI: 10.1186/s40679-018-0060-y\n\nSupport / Report Issues\n-----------------------\n\nAll support requests and issue reports should be\n`filed on Github as an issue `_.\n\nLicense\n-------\n\nnpstreams is made available under the BSD License, same as NumPy. For more details, see `LICENSE.txt `_.", "description_content_type": "", "docs_url": null, "download_url": "http://github.com/LaurentRDC/npstreams", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "streaming,numpy,math", "license": "BSD", "maintainer": "Laurent P. Ren\u00e9 de Cotret", "maintainer_email": "laurent.renedecotret@mail.mcgill.ca", "name": "npstreams", "package_url": "https://pypi.org/project/npstreams/", "platform": "", "project_url": "https://pypi.org/project/npstreams/", "project_urls": { "Download": "http://github.com/LaurentRDC/npstreams" }, "release_url": "https://pypi.org/project/npstreams/1.6.1/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Streaming operations on NumPy arrays", "version": "1.6.1" }, "last_serial": 5756073, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f39d810106577405e77d11b3d2fa4ea4", "sha256": "186f7ad72be0670625c4365b90882abe70930bcf46788415c8e63a9b7c034a24" }, "downloads": -1, "filename": "npstreams-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f39d810106577405e77d11b3d2fa4ea4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1600919, "upload_time": "2017-10-16T20:07:12", "url": "https://files.pythonhosted.org/packages/1a/61/021f79817e010adfea78e3ef3b2fbc4049b4cff470f37c54d32e68bb1599/npstreams-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "dd89816ac46b533ad286139cc5051966", "sha256": "88eaba1ac72416315f11ae4c58a4a7d917abecf124ee20ef56ba69fb57ea8d4b" }, "downloads": -1, "filename": "npstreams-1.1.0.tar.gz", "has_sig": false, "md5_digest": "dd89816ac46b533ad286139cc5051966", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24310, "upload_time": "2017-11-13T20:53:46", "url": "https://files.pythonhosted.org/packages/dd/a6/07bc2a36be8935d2312755fd36b5a98a4d6bdd6eee433eeda6bc37e460ea/npstreams-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "7586eb3cd5c32980f7e7a3793d5e6c8a", "sha256": "e8ea9ce91ca74b21a53afec9f44ef0b0ba986454821c251379945b37e9db75a6" }, "downloads": -1, "filename": "npstreams-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7586eb3cd5c32980f7e7a3793d5e6c8a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35358, "upload_time": "2017-12-12T15:02:49", "url": "https://files.pythonhosted.org/packages/08/5d/4bcd2f5bc3ad95a28344dfa9bea4954f8735e7ebb479c663fb900603d988/npstreams-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bdc358a5bf04e7a394f8f571d5baf0a0", "sha256": "471beffe74993e183f422624d38a33e366a37c6bdf4c924d5bc52527ce2388f2" }, "downloads": -1, "filename": "npstreams-1.2.0.tar.gz", "has_sig": false, "md5_digest": "bdc358a5bf04e7a394f8f571d5baf0a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24696, "upload_time": "2017-12-12T15:03:13", "url": "https://files.pythonhosted.org/packages/39/d9/42d107328b061abc77680fc6fb56bc8cb55c35f92cc0e8eac347b70e351b/npstreams-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "4b63c6983f1244f52fefa30358711f48", "sha256": "230ac923c74f8ddfc70f0a4fcc62a4bba4c090f85334608d7fcda6e341558728" }, "downloads": -1, "filename": "npstreams-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4b63c6983f1244f52fefa30358711f48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37515, "upload_time": "2018-01-22T14:40:58", "url": "https://files.pythonhosted.org/packages/0a/fe/de2c45703ce630ee5295d87b47dab40eb5b68b89c8ada1f5c551d88eff1c/npstreams-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "197f866d6db4aae30275b2ae037eeb07", "sha256": "b7a77d1942e1605a2da41ef6c2ca2054494543225e6f7dbfc65dc38d9194aa22" }, "downloads": -1, "filename": "npstreams-1.3.0.tar.gz", "has_sig": false, "md5_digest": "197f866d6db4aae30275b2ae037eeb07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26555, "upload_time": "2018-01-22T14:40:21", "url": "https://files.pythonhosted.org/packages/be/3f/9ac71a3a3420f9a2c1aa5c4d6ffbe8355f21ad48f38e4866a4497305e97c/npstreams-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "f670eabd284156f4747f6f2fd4a5eaf4", "sha256": "48876c4cb9b6cdfdfa065b27cfcb1c111316780a778f09d88360d56bcfdbd1d7" }, "downloads": -1, "filename": "npstreams-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f670eabd284156f4747f6f2fd4a5eaf4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37439, "upload_time": "2018-03-13T18:44:06", "url": "https://files.pythonhosted.org/packages/00/9f/624480bb1b1e135594299778a9a2e981a48c6ec24c4d50c1f57da9572a6b/npstreams-1.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "78bef1d66b67e6b2e95965c8012ce53c", "sha256": "0d1c41bd0a98743474fbf1491f8b5ce7b2ea02e566faf59db02010ba52833ca1" }, "downloads": -1, "filename": "npstreams-1.4.0.tar.gz", "has_sig": false, "md5_digest": "78bef1d66b67e6b2e95965c8012ce53c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26430, "upload_time": "2018-03-13T18:44:45", "url": "https://files.pythonhosted.org/packages/c0/c5/22c5e6ba51902e7b08e1ee141b3b2b7435a498a317ddbffb6175470a145b/npstreams-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "d7b999c03045dfb0d88c88bf07c114e6", "sha256": "f161bd03bd1d377fa2047c8ca221eb70990514d2bbffd2ce6f897271d5f0422e" }, "downloads": -1, "filename": "npstreams-1.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d7b999c03045dfb0d88c88bf07c114e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37681, "upload_time": "2018-05-28T15:12:06", "url": "https://files.pythonhosted.org/packages/70/80/7705803529e8166853355aea780906b85b2205eacf448973b8d4a95eeaae/npstreams-1.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8878e2f6c2e69b826d282c4b9c086734", "sha256": "dd4c1aeb92a9dae448b8a138b6d75902074ddcec7a132852e9de8b45401ceaa6" }, "downloads": -1, "filename": "npstreams-1.5.0.tar.gz", "has_sig": false, "md5_digest": "8878e2f6c2e69b826d282c4b9c086734", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26731, "upload_time": "2018-05-28T15:11:46", "url": "https://files.pythonhosted.org/packages/f5/0a/32bb248cc003c83ec38b6a85790e27c7c9928104be2d50148b32a1625483/npstreams-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "2b805960b002c04346934de455e8ea7e", "sha256": "56ed3553912faa4e0c662f1b83e5c6dae923da160a5984dacfdbf57d7648d4a1" }, "downloads": -1, "filename": "npstreams-1.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2b805960b002c04346934de455e8ea7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37841, "upload_time": "2018-05-30T19:31:36", "url": "https://files.pythonhosted.org/packages/4d/72/f97f0c8d3a32204c7cea0372434bd9989ffccaf142d8117d3b92d33f8154/npstreams-1.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53032d637d4f684ab226244ba90222bd", "sha256": "67b7e888502554b5af69228c6e27e4dee269984eb061343ca00a303b6fb5e858" }, "downloads": -1, "filename": "npstreams-1.5.1.tar.gz", "has_sig": false, "md5_digest": "53032d637d4f684ab226244ba90222bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26792, "upload_time": "2018-05-30T19:31:16", "url": "https://files.pythonhosted.org/packages/b7/e6/2c720f7041ca5e7598b740eb2d9d7f2486bab4ccd6f9cd870745370eb676/npstreams-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "32ff583f3df60a64310285d4ed330378", "sha256": "f85058a980d7a1fbeac893df69549e5d7ae94280ceb4964b671142517c8a958f" }, "downloads": -1, "filename": "npstreams-1.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "32ff583f3df60a64310285d4ed330378", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 37129, "upload_time": "2018-06-06T18:11:57", "url": "https://files.pythonhosted.org/packages/f8/4e/cce976dd7b81266017bc98eb1412865c44d675836fccf0d70401c42a2446/npstreams-1.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0b7fd460ac29e514bc1e94cd35be928", "sha256": "6b306bc64842accca1625da962b5b23d4492cef00bdc51018773014398e8aab0" }, "downloads": -1, "filename": "npstreams-1.5.2.tar.gz", "has_sig": false, "md5_digest": "f0b7fd460ac29e514bc1e94cd35be928", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 28341, "upload_time": "2018-06-06T18:11:39", "url": "https://files.pythonhosted.org/packages/f0/6d/f09df7c1384109aafccb303b90f35cf738be7bbcd25d099eb390788e9598/npstreams-1.5.2.tar.gz" } ], "1.6": [ { "comment_text": "", "digests": { "md5": "0338bd522a46983b97af116497099cec", "sha256": "35fa67df27f3a2f7dde7bb3fdbeea392792418b77c571f6eb4e10e3019afffac" }, "downloads": -1, "filename": "npstreams-1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "0338bd522a46983b97af116497099cec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 39235, "upload_time": "2019-02-05T18:44:57", "url": "https://files.pythonhosted.org/packages/3a/6e/5ddcd0d391b428a2820060eecbce54ad66f8372e2283ce89e781838ef52d/npstreams-1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74a04b47021bb25108d65c2a442f9544", "sha256": "9a2fab6bb7f454db9c695385cab922bf0b60f032e8d9771373300ad11a090861" }, "downloads": -1, "filename": "npstreams-1.6.tar.gz", "has_sig": false, "md5_digest": "74a04b47021bb25108d65c2a442f9544", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 61739, "upload_time": "2019-02-05T18:44:40", "url": "https://files.pythonhosted.org/packages/de/98/16d776cf23866f827e0596316678ba4d4ab9d78dddb5711ca92c345e1ec9/npstreams-1.6.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "7ea2478ee153049b73b9b6dd084bc5c7", "sha256": "39cf9ed248b3b7df04cd4494aa408d693e59302c9e0f36256e9845260732f03c" }, "downloads": -1, "filename": "npstreams-1.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7ea2478ee153049b73b9b6dd084bc5c7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 28688, "upload_time": "2019-08-29T18:25:24", "url": "https://files.pythonhosted.org/packages/a4/af/f979021f6a9a8439aa936ba75c822efa864b591c34edc6f64714d695192d/npstreams-1.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c23e640a67888a3718c403a9b34c74a", "sha256": "111d2ccb815366ad67f38bc9530aa350f63dfd856a5ffeb279e4e4cfc0a1424f" }, "downloads": -1, "filename": "npstreams-1.6.1.tar.gz", "has_sig": false, "md5_digest": "7c23e640a67888a3718c403a9b34c74a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 71203, "upload_time": "2019-08-29T18:25:04", "url": "https://files.pythonhosted.org/packages/bf/4f/464445975077e2d9522aeba83f2d75a124f84799f9dd7edd0d9c933a45ef/npstreams-1.6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7ea2478ee153049b73b9b6dd084bc5c7", "sha256": "39cf9ed248b3b7df04cd4494aa408d693e59302c9e0f36256e9845260732f03c" }, "downloads": -1, "filename": "npstreams-1.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7ea2478ee153049b73b9b6dd084bc5c7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 28688, "upload_time": "2019-08-29T18:25:24", "url": "https://files.pythonhosted.org/packages/a4/af/f979021f6a9a8439aa936ba75c822efa864b591c34edc6f64714d695192d/npstreams-1.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c23e640a67888a3718c403a9b34c74a", "sha256": "111d2ccb815366ad67f38bc9530aa350f63dfd856a5ffeb279e4e4cfc0a1424f" }, "downloads": -1, "filename": "npstreams-1.6.1.tar.gz", "has_sig": false, "md5_digest": "7c23e640a67888a3718c403a9b34c74a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 71203, "upload_time": "2019-08-29T18:25:04", "url": "https://files.pythonhosted.org/packages/bf/4f/464445975077e2d9522aeba83f2d75a124f84799f9dd7edd0d9c933a45ef/npstreams-1.6.1.tar.gz" } ] }