{ "info": { "author": "Kirill Smelkov", "author_email": "kirr@nexedi.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: ZODB", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "==========================================\n Wendelin.core - Out-of-core NumPy arrays\n==========================================\n\nWendelin.core allows you to work with arrays bigger than RAM and local disk.\nBigarrays are persisted to storage, and can be changed in transactional manner.\n\nIn other words bigarrays are something like `numpy.memmap`_ for numpy.ndarray\nand OS files, but support transactions and files bigger than disk. The whole\nbigarray cannot generally be used as a drop-in replacement for numpy arrays,\nbut bigarray *slices* are real ndarrays and can be used everywhere ndarray can\nbe used, including in C/Cython/Fortran code. Slice size is limited by\nvirtual address-space size, which is ~ max 127TB on Linux/amd64.\n\nThe main class to work with is `ZBigArray` and is used like `ndarray` from\n`NumPy`_:\n\n1. create array::\n\n from wendelin.bigarray.array_zodb import ZBigArray\n import transaction\n\n # root is connected to opened database\n root['A'] = A = ZBigArray(shape=..., dtype=...)\n transaction.commit()\n\n2. view array as a real ndarray::\n\n a = A[:] # view which covers all array, if it fits into address-space\n b = A[10:100]\n\n data for views will be loaded lazily on memory access.\n\n3. work with views, including using C/Cython/Fortran functions from NumPy\n and other libraries to read/modify data::\n\n a[2] = 1\n a[10:20] = numpy.arange(10)\n numpy.mean(a)\n\n | the amount of modifications in one transaction should be less than available RAM.\n | the amount of data read is limited only by virtual address-space size.\n\n4. data can be appended to array in O(\u03b4) time::\n\n values # ndarray to append of shape (\u03b4,)\n A.append(values)\n\n and array itself can be resized in O(1) time::\n\n A.resize(newshape)\n\n5. changes to array data can be either discarded or saved back to DB::\n\n transaction.abort() # discard all made changes\n transaction.commit() # atomically save all changes\n\n\n\nWhen using NEO_ or ZEO_ as a database, bigarrays can be simultaneously used by\nseveral nodes in a cluster.\n\n\nPlease see `demo/demo_zbigarray.py`__ for a complete example.\n\n__ demo/demo_zbigarray.py\n\n\nCurrent state and Roadmap\n=========================\n\nWendelin.core works in real life for workloads Nexedi_ is using in production,\nincluding 24/7 projects. We are, however, aware of the following\nlimitations and things that need to be improved:\n\n- wendelin.core is currently not very fast\n- there are big - proportional to input in size - temporary array allocations\n in third-party libraries (NumPy_, `scikit-learn`_, ...) which might practically\n prevent processing out-of-core arrays depending on the functionality used.\n\nThus\n\n- we are currently working on improved wendelin.core design and implementation,\n which will use kernel virtual memory manager (instead of one implemented__ in__\n userspace__) with arrays backend presented to kernel via FUSE as virtual\n filesystem implemented in Go.\n\n__ https://lab.nexedi.com/nexedi/wendelin.core/blob/master/include/wendelin/bigfile/virtmem.h\n__ https://lab.nexedi.com/nexedi/wendelin.core/blob/master/bigfile/virtmem.c\n__ https://lab.nexedi.com/nexedi/wendelin.core/blob/master/bigfile/pagefault.c\n\nIn parallel we will also:\n\n- try wendelin.core 1.0 on large data sets\n- identify and incrementally fix big-temporaries allocation issues in NumPy and\n scikit-learn\n\nWe are open to community help with the above.\n\n\nAdditional materials\n====================\n\n- Wendelin.core tutorial__\n- Slides__ (pdf__) from presentation about wendelin.core in PyData Paris 2015\n\n__ https://www.nexedi.com/wendelin-Core.Tutorial.2016\n__ http://www.wendelin.io/NXD-Wendelin.Core.Non.Secret/asEntireHTML\n__ http://www.wendelin.io/NXD-Wendelin.Core.Non.Secret?format=pdf\n\n\n.. _NumPy: http://www.numpy.org/\n.. _scikit-learn: http://scikit-learn.org/\n.. _numpy.memmap: http://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html\n.. _NEO: http://www.neoppod.org/\n.. _ZEO: https://pypi.python.org/pypi/ZEO\n.. _Nexedi: https://www.nexedi.com/\n\n----\n\nWendelin.core change history\n============================\n\n0.13 (2019-06-18)\n-----------------\n\n- Add support for Python 3.7 (commit__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/bca5f79e6f\n\n- Add `RAMArray` class which is compatible to `ZBigArray` in API and semantic,\n but stores its data in RAM only (`commit 1`__, 2__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/7365979b9d\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/fc9b69d8e1\n\n- Add `lib.xnumpy.structured` - utility to create structured view of an array (`commit 1`__, 2__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/6a5dfefaf8\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/32ca80e2d5\n\n- Fix logic to keep `ZBigFileH` in sync with ZODB connection (commit__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/d9d6adec1b\n\n- Fix crash on PyVMA deallocation (commit__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/d97641d2ba\n\n- Move `py.bench` to pygolang__ so that it can be used not only in\n Wendelin.core (commit__).\n\n __ https://pypi.org/project/pygolang/\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/318efce0bf\n\n- Enhance `t/qemu-runlinux` - utility that is used to work on combined\n kernel/user-space workloads (`commit 1`__, 2__, 3__, 4__, 5__, 6__).\n This was in particular useful to develop Linux kernel fixes that are needed\n for Wendelin.core 2.0 (`kernel commit 1`__, 2__, 3__, 4__, 5__, 6__, 7__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/fe541453f8\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/ccca055cfe\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/6ab952207e\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/a568d6d999\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/208aca62ae\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/89fb89929a\n\n __ https://git.kernel.org/linus/ad2ba64dd489\n __ https://git.kernel.org/linus/10dce8af3422\n __ https://git.kernel.org/linus/bbd84f33652f\n __ https://git.kernel.org/linus/c5bf68fe0c86\n __ https://git.kernel.org/linus/438ab720c675\n __ https://git.kernel.org/linus/7640682e67b3\n __ https://git.kernel.org/linus/d4b13963f217\n\n- Various bugfixes.\n\n0.12 (2018-04-16)\n-----------------\n\n- Update licensing to be in line with whole Nexedi stack (`commit`__). Please\n see https://www.nexedi.com/licensing for details, rationale and options.\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/f11386a4\n\n- Add `ArrayRef` utility to find out for a NumPy array its top-level root\n parent and how to recreate the array as some view of the root;\n this builds the foundation for e.g. sending arrays as references without copy\n in CMFActivity joblib backend\n (`commit 1`__, 2__, 3__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/e9d61a89\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/d53371b6\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/450ad804\n\n\n- Don't crash if during `loadblk()` garbage collection was run twice at tricky\n times (`commit 1`__, 2__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/4228d8b6\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/3804cc39\n\n- Don't crash on writeout if previously `storeblk()` resulted in error\n (`commit`__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/87bf4908\n\n\n\n- Fix `py.bench` and rework it to produce output in Go benchmarking format\n (`commit 1`__, 2__, 3__, 4__, 5__); add benchmarks for handling pagefaults\n (`commit`__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/51f252d4\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/074ce24d\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/ed13c3f9\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/fc08766d\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/5a1ed45a\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/3cfc2728\n\n- Use zodbtools/zodburi, if available, to open database by URL\n (`commit`__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/f785ac07\n\n- Start to make sure it works with ZODB5 too (`commit 1`__, 2__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/808b59b7\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/0dbf3c44\n\n- Various bugfixes.\n\n0.11 (2017-03-28)\n-----------------\n\n- Switch back to using ZBlk0 format by default (`commit`__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/0b68f178\n\n0.10 (2017-03-16)\n-----------------\n\n- Tell the world `dtype=object` is not supported (`commit`__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/e44bd761\n\n0.9 (2017-01-17)\n----------------\n\n- Avoid deadlocks via doing `storeblk()` calls with virtmem lock released\n (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/8bb7f2f2\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/fb4bfb32\n\n- Don't crash if in `loadblk()` implementation an exception is internally\n raised & caught\n (`commit 1`__, 2__, 3__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/9aa6a5d7\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/61b18a40\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/024c246c\n\n0.8 (2016-09-28)\n----------------\n\n- Do not leak memory when loading data in ZBlk1 format (`commit`__).\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/542917d1\n\n0.7 (2016-07-14)\n------------------\n\n- Add support for Python 3.5 (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/20115391\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/e6beab19\n\n- Fix bug in pagemap code which could lead to crashes and other issues (`commit`__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/ee9bcd00\n\n- Various bugfixes\n\n0.6 (2016-06-13)\n----------------\n\n- Add support for FORTRAN ordering (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/ab9ca2df\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/2ca0f076\n\n\n- Avoid deadlocks via doing `loadblk()` calls with virtmem lock released\n (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/f49c11a3\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/0231a65d\n\n- Various bugfixes\n\n0.5 (2015-10-02)\n----------------\n\n- Introduce another storage format, which is optimized for small changes, and\n make it the default.\n (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/13c0c17c\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/9ae42085\n\n- Various bugfixes and documentation improvements\n\n\n0.4 (2015-08-19)\n----------------\n\n- Add support for O(\u03b4) in-place BigArray.append() (commit__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/1245acc9\n\n- Implement proper multithreading support (commit__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/d53271b9\n\n- Implement proper RAM pages invalidation when backing ZODB objects are changed\n from outside (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/cb779c7b\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/92bfd03e\n\n- Fix all kind of failures that could happen when ZODB connection changes\n worker thread in-between handling requests (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/c7c01ce4\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/64d1f40b\n\n- Tox tests now cover usage with FileStorage, ZEO and NEO ZODB storages\n (`commit 1`__, 2__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/010eeb35\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/7fc4ec66\n\n- Various bugfixes\n\n\n\n0.3 (2015-06-12)\n----------------\n\n- Add support for automatic BigArray -> ndarray conversion, so that e.g. the\n following::\n\n A = BigArray(...)\n numpy.mean(A) # passing BigArray to plain NumPy function\n\n either succeeds, or raises MemoryError if not enough address space is\n available to cover whole A. (current limitation is ~ 127TB on linux/amd64)\n\n (commit__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/00db08d6\n\n- Various bugfixes (build-fixes, crashes, overflows, etc)\n\n\n0.2 (2015-05-25)\n----------------\n\n- Add support for O(1) in-place BigArray.resize() (commit__)\n\n __ https://lab.nexedi.com/nexedi/wendelin.core/commit/ca064f75\n\n- Various build bugfixes (older systems, non-std python, etc)\n\n\n0.1 (2015-04-03)\n----------------\n\n- Initial release", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://lab.nexedi.com/nexedi/wendelin.core", "keywords": "bigdata out-of-core numpy virtual-memory", "license": "GPLv3+ with wide exception for Open-Source", "maintainer": "", "maintainer_email": "", "name": "wendelin.core", "package_url": "https://pypi.org/project/wendelin.core/", "platform": "", "project_url": "https://pypi.org/project/wendelin.core/", "project_urls": { "Homepage": "https://lab.nexedi.com/nexedi/wendelin.core" }, "release_url": "https://pypi.org/project/wendelin.core/0.13/", "requires_dist": null, "requires_python": "", "summary": "Out-of-core NumPy arrays", "version": "0.13" }, "last_serial": 5415939, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "05d0aef0d222407647d9ca0a7c53e493", "sha256": "29d088894a497f9f8dc1785bb29af8633a6254f4d56a04536c0a6bb91aa26afa" }, "downloads": -1, "filename": "wendelin.core-0.1.tar.gz", "has_sig": true, "md5_digest": "05d0aef0d222407647d9ca0a7c53e493", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2543891, "upload_time": "2015-04-03T13:49:17", "url": "https://files.pythonhosted.org/packages/32/97/4501ebed3ce17d1d66795865ba6da9644e14aeef6fde455270d7310acbfd/wendelin.core-0.1.tar.gz" } ], "0.10": [ { "comment_text": "", "digests": { "md5": "cb8545e2385bcc6b430d90aff3afa793", "sha256": "cd6abd5056fdcc6fb5f2e7edb439e263513fe4d56bf71b0a9b81395f80abd684" }, "downloads": -1, "filename": "wendelin.core-0.10.tar.gz", "has_sig": true, "md5_digest": "cb8545e2385bcc6b430d90aff3afa793", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3091415, "upload_time": "2017-03-16T09:04:47", "url": "https://files.pythonhosted.org/packages/e9/9c/a1a3fca65fbd34a1d5a280a9d6e43c734ac7728b2da49c8ee0b1fe231dba/wendelin.core-0.10.tar.gz" } ], "0.11": [ { "comment_text": "", "digests": { "md5": "a662590117c5f8a5d0d6fe2fca4df6c4", "sha256": "6c55b36edcacc263c34f571bd3fa935744727efdbf4d8bea53bc77256b5559ed" }, "downloads": -1, "filename": "wendelin.core-0.11.tar.gz", "has_sig": true, "md5_digest": "a662590117c5f8a5d0d6fe2fca4df6c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3091761, "upload_time": "2017-03-28T12:03:46", "url": "https://files.pythonhosted.org/packages/73/45/f4321ece05155cee52ed88d2fc2faa0192dcb1cd18d36c6ae3ddfa3ec4ac/wendelin.core-0.11.tar.gz" } ], "0.12": [ { "comment_text": "", "digests": { "md5": "603acf3d026e2f6531d56fa68df24740", "sha256": "38e483012f9b38ec544f5eb49b01e513cbe093c9b715431666a02375a14f7295" }, "downloads": -1, "filename": "wendelin.core-0.12.tar.gz", "has_sig": true, "md5_digest": "603acf3d026e2f6531d56fa68df24740", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3099090, "upload_time": "2018-04-16T14:21:16", "url": "https://files.pythonhosted.org/packages/fb/ad/fce2350037bd764786f1b6d580883c882581e4645b4406f1ee49cbc698f9/wendelin.core-0.12.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "363d9231212c2fb70ba24b3df850a979", "sha256": "b9a42b9006272fe128fb37dfe464a4ff643a502f169f5c62f93740ca73720c7c" }, "downloads": -1, "filename": "wendelin.core-0.13.tar.gz", "has_sig": true, "md5_digest": "363d9231212c2fb70ba24b3df850a979", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3105203, "upload_time": "2019-06-18T15:14:38", "url": "https://files.pythonhosted.org/packages/9f/16/19c7e649aa33353fc89cc3018f57e50730bbbbb8fb1c6b90f1e549655000/wendelin.core-0.13.tar.gz" } ], "0.2": [], "0.2.post1": [ { "comment_text": "", "digests": { "md5": "18713df7082df09c77ff82bb2b3586be", "sha256": "516559ae323fe33d70c32dcc444bea0408195f503e93e7290098716adce56570" }, "downloads": -1, "filename": "wendelin.core-0.2.post1.tar.gz", "has_sig": true, "md5_digest": "18713df7082df09c77ff82bb2b3586be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2539053, "upload_time": "2015-05-25T10:56:21", "url": "https://files.pythonhosted.org/packages/dd/45/fc8ba3f7b53fe0ec6418e8a7e4b9ffb65ca7db7f546bff94ccf9be46cd8e/wendelin.core-0.2.post1.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "156706c2d0bbc6699bb7d88e12c0e052", "sha256": "cc3e10e0457c7bf2453ec687e5fd233e1351fb393c285f109e2741f4c01cb780" }, "downloads": -1, "filename": "wendelin.core-0.3.tar.gz", "has_sig": true, "md5_digest": "156706c2d0bbc6699bb7d88e12c0e052", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2438262, "upload_time": "2015-06-16T13:55:04", "url": "https://files.pythonhosted.org/packages/99/33/e2db89a9c5814af4772a0331e9b302b05b9eed377e68f652f964f1f2d047/wendelin.core-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "1c01766239c5887bfa22a571b9b0b12f", "sha256": "dc0bcdfe2c64bbe48a3642dff73f010488e6cfb595057b54f96a0cd6002e9b6b" }, "downloads": -1, "filename": "wendelin.core-0.4.tar.gz", "has_sig": true, "md5_digest": "1c01766239c5887bfa22a571b9b0b12f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2447607, "upload_time": "2015-08-19T08:51:14", "url": "https://files.pythonhosted.org/packages/c8/70/65295565a65d0947b8c4e21b1d3e5996851defce6c4a3dc1174c313a4216/wendelin.core-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "18a1d965a38637893f39f2ae3ed0c6fb", "sha256": "44246ac28bb2e7f026225331f5b00e825c7aa4c13309240867e1dbeeb94920fe" }, "downloads": -1, "filename": "wendelin.core-0.5.tar.gz", "has_sig": true, "md5_digest": "18a1d965a38637893f39f2ae3ed0c6fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2456231, "upload_time": "2015-10-02T13:53:12", "url": "https://files.pythonhosted.org/packages/a9/15/1b32166f9cefd67fa8b413641913998685e4483bf8cb80b61ca2437ac188/wendelin.core-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "6c37e3649aecb1fa585bf9f0250602d1", "sha256": "781c471d369ee25189a8f02206976e66e44f1d61cfb5e1f8a996bfa33249505f" }, "downloads": -1, "filename": "wendelin.core-0.6.tar.gz", "has_sig": true, "md5_digest": "6c37e3649aecb1fa585bf9f0250602d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2593697, "upload_time": "2016-06-13T12:30:47", "url": "https://files.pythonhosted.org/packages/cd/d3/4610095c248ab9183861b3ec231621572b8cb38d9ee74118e6dc892575b2/wendelin.core-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "a24e186a9cd0d68819e3cae261de398c", "sha256": "070a2c1a06a90ed0350c2623d151fb2433974d8b6ac6b0d91a09acc8d531a647" }, "downloads": -1, "filename": "wendelin.core-0.7.tar.gz", "has_sig": true, "md5_digest": "a24e186a9cd0d68819e3cae261de398c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2596090, "upload_time": "2016-07-14T18:33:47", "url": "https://files.pythonhosted.org/packages/02/16/8d2cec619f21037b0d61ef0c880d56e9dd9274af818702d7f4565d5dff32/wendelin.core-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "53f850a458a49be37aa89d95c785cf4d", "sha256": "5588e0072c3377663aab623a73f2c87268fe31da9ed9bae6e01447cba770d53c" }, "downloads": -1, "filename": "wendelin.core-0.8.tar.gz", "has_sig": true, "md5_digest": "53f850a458a49be37aa89d95c785cf4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3086975, "upload_time": "2016-09-28T13:30:11", "url": "https://files.pythonhosted.org/packages/e7/ba/fbb9a72ab4d1991a628517bdebbfb48ba1abf535e7582e80b64d003074ec/wendelin.core-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "9ff796fbe34c76dbcaaaa1768a526896", "sha256": "fe426922c33195c45435e907c3c5936869e05a959ff77b3a4eee85654ba9b5cc" }, "downloads": -1, "filename": "wendelin.core-0.9.tar.gz", "has_sig": true, "md5_digest": "9ff796fbe34c76dbcaaaa1768a526896", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3091374, "upload_time": "2017-01-17T11:26:13", "url": "https://files.pythonhosted.org/packages/ce/86/54abe9d2a4a934d81c364455f22edb0bfb9a525f4ca2a5cefe5e09f34595/wendelin.core-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "363d9231212c2fb70ba24b3df850a979", "sha256": "b9a42b9006272fe128fb37dfe464a4ff643a502f169f5c62f93740ca73720c7c" }, "downloads": -1, "filename": "wendelin.core-0.13.tar.gz", "has_sig": true, "md5_digest": "363d9231212c2fb70ba24b3df850a979", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3105203, "upload_time": "2019-06-18T15:14:38", "url": "https://files.pythonhosted.org/packages/9f/16/19c7e649aa33353fc89cc3018f57e50730bbbbb8fb1c6b90f1e549655000/wendelin.core-0.13.tar.gz" } ] }