{ "info": { "author": "Shemyakin Roman", "author_email": "ramon93i7@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries" ], "description": "# iter2\n\nThis library provides implementation of \n[rich-iterator](http://code.activestate.com/recipes/498272-rich-iterator-wrapper/) \nconcept, inspired by \n[Rust's std::iter::Iterator](https://doc.rust-lang.org/std/iter/trait.Iterator.html), \n[Java's Stream](https://docs.oracle.com/javase/8/docs/api/?java/util/stream/Stream.html)\nand [more-itertools library](https://more-itertools.readthedocs.io/en/latest/).\n\n\n## Usage\nThe main object of library is `iter2`. It behaves like built-in \n`iter` except that it creates an instance of rich-iterator. \n```python\niter2(['dzen', 'of', 'python']).map(str.capitalize).join(' ') # 'Dzen Of Python'\n```\n\n> **Every** method of rich-iterator that returns new iterator makes original rich-iterator **invalid**, so it\n> **cannot be used** in any iteration process. This behaviour can be bypassed with `ref` method. \n\nOriginal iterator can be retrieved with `raw` method:\n```python\norig = iter2.range(5).raw()\ntuple(orig) # (0, 1, 2, 3, 4)\n```\n\n`iter2` has some methods to build sequences of values:\n```python\niter2.of('a', 'b', 'cde').join() # 'abcde'\niter2.range(5).map(str).join() # '01234'\niter2.count_from(100).take(5).map(str).join('->') # '100->101->102->103->104'\niter2.numeric_range(1.0, 3.5, 0.3).to_tuple() # (1.0, 1.3, 1.6, 1.9, 2.2, 2.5, 2.8, 3.1, 3.4)\n# and some other ...\n```\n\nand some algorithm-methods on multiple iterables:\n```python\niter2.cartesian_product(range(2), repeat=2).to_tuple() # ((0, 0), (0, 1), (1, 0), (1, 1))\niter2.zip_longest(range(3), range(1, 5), fillvalue=-1).to_tuple() # ((0, 1), (1, 2), (2, 3), (-1, 4))\niter2.chain(['Somewhere', 'over'], ['the', 'Rainbow']).join(' ') # 'Somewhere over the Rainbow\n# and some other ...\n```\n\n\n### Comparison\nHere are some examples of usage compared with builtins-and-itertools-based \nimplementations:\n\n```python\nfrom itertools import islice\nfrom functools import reduce\nimport operator\n\nfrom iter2 import iter2\n\nsquare = lambda x: x ** 2\nodd = lambda x: x % 2 == 1\n\ndef fibonacci():\n a = b = 1\n while True:\n yield a\n a, b = b, a + b\n\n\n# Example 1:\ncool_song = 'Somewhere over the Rainbow'\n# \"from `cool_song` take capital characters and join them with '+'\"\niter2(cool_song).filter(str.isupper).join('+')\n# vs\n# \"with '+' join capital characters from `cool_song`\"\n'+'.join(filter(str.isupper, cool_song)) \n\n\n# Example 2:\n# \"for values in 0..99 take squares of them that are odd and sum them\" (sounds like algo)\niter2.range(100).map(square).filter(odd).sum()\n# vs\n# \"sum values that are odd that are squares of values in 0..99\" (sounds like shit)\nsum(filter(odd, map(square, range(100))))\n# \"sum squares of values in 0..99 that are odd\"\nsum(x ** 2 for x in range(100) if x % 2 == 1) # luckily, oddity doesn't change on squaring\n\n\n# Example 3: \"Playing with infinite sequences\"\n(iter2(fibonacci())\n .drop(10)\n .filter(odd)\n .map(square)\n .take(5)\n .product()) # shortcut for `.fold(operator.mul)`\n# vs\nreduce(operator.mul,islice(map(square, filter(odd, islice(fibonacci(), 10, None))), 5)) # (counting braces balance and commas positions)\n# (to make clearer):\nreduce(\n operator.mul,\n islice(\n map(\n square, \n filter(\n odd, \n islice(fibonacci(), 10, None)\n )\n ), \n 5\n )\n) # or not?\n```\n\n##Changelog\n\n####v1.1\n\n- Tuple-wise methods\n\n#### v1.0\n\n- Initial\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ramon93i7/iter2", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "iter2", "package_url": "https://pypi.org/project/iter2/", "platform": "", "project_url": "https://pypi.org/project/iter2/", "project_urls": { "Homepage": "https://github.com/ramon93i7/iter2" }, "release_url": "https://pypi.org/project/iter2/1.1/", "requires_dist": null, "requires_python": "", "summary": "Implementation of some rich-iterator concept", "version": "1.1" }, "last_serial": 5233552, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "be5fd2e8b112d8da7dad38bad398cc31", "sha256": "a1c32daae365dfed26efe5d2a8314a625a8b330f1d2822563659c77336a072c5" }, "downloads": -1, "filename": "iter2-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "be5fd2e8b112d8da7dad38bad398cc31", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24356, "upload_time": "2019-01-29T15:23:11", "url": "https://files.pythonhosted.org/packages/d4/f8/ecae63db0faace8df729a49e691f32ee4f7b7f0bf98548c5488fccccb425/iter2-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad89c36a37b2c266656df8afad8b5fd9", "sha256": "90f021f23485281d41ccba003727de1607892d43b51c07052dd20537b603c90c" }, "downloads": -1, "filename": "iter2-1.0.tar.gz", "has_sig": false, "md5_digest": "ad89c36a37b2c266656df8afad8b5fd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19409, "upload_time": "2019-01-29T15:23:13", "url": "https://files.pythonhosted.org/packages/c0/19/1ec18424c69122c9e6ac5e5f16fc1bd78aed709b53e01e37ec057894a7e6/iter2-1.0.tar.gz" } ], "1.0rc0": [ { "comment_text": "", "digests": { "md5": "8a51e20bba1ffa6fff57c53fd653d837", "sha256": "37ee808ecdedc21f5e4add9697e1467ce741a874d73d5b9a6aac015bdd8c3b65" }, "downloads": -1, "filename": "iter2-1.0rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "8a51e20bba1ffa6fff57c53fd653d837", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36475, "upload_time": "2018-12-24T17:27:45", "url": "https://files.pythonhosted.org/packages/b1/c3/9da2a5483dac23b616aad2bfdabf19dbb975a801c4b46aacc4e5c3bc7ba4/iter2-1.0rc0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f3cfe8c8efac559fbbb60fef73f779e", "sha256": "006f0fecefd6d14dd06d0ba604bfd2c02045912dcbbe1ed59173095a3b8412db" }, "downloads": -1, "filename": "iter2-1.0rc0.tar.gz", "has_sig": false, "md5_digest": "9f3cfe8c8efac559fbbb60fef73f779e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27477, "upload_time": "2018-12-24T17:27:47", "url": "https://files.pythonhosted.org/packages/50/5f/0130a459398cf0196772c221b0f3d6bb23d982de2be140b75a2f5faba16c/iter2-1.0rc0.tar.gz" } ], "1.0rc1": [ { "comment_text": "", "digests": { "md5": "e472d7059e6317ef2127b9e046caab66", "sha256": "22b6180f60de079842c57de015a696415af8eae75af061bde5c56f6d43f35aca" }, "downloads": -1, "filename": "iter2-1.0rc1-py3-none-any.whl", "has_sig": false, "md5_digest": "e472d7059e6317ef2127b9e046caab66", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36793, "upload_time": "2019-01-17T14:40:36", "url": "https://files.pythonhosted.org/packages/99/ae/6607f6a4b16ceb8e539c5a9afad589859e67d3cb341781c0840bcf219704/iter2-1.0rc1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9d892c8ffc393879c14ce3b8e300479", "sha256": "5a97e1f609874a3765bfabe451ea760bd340b699d4d837bcc9556f3ea345020e" }, "downloads": -1, "filename": "iter2-1.0rc1.tar.gz", "has_sig": false, "md5_digest": "b9d892c8ffc393879c14ce3b8e300479", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27561, "upload_time": "2019-01-17T14:40:38", "url": "https://files.pythonhosted.org/packages/e5/30/e93e5d98fbad327f8ce70caf324d6422320aeadbe0000d1251d21f1bc2bf/iter2-1.0rc1.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "81436fff32ab3db40bf74120a528f39a", "sha256": "acfde2f60ce4970d3e40794e0c28794b5c9252cb098d64873c7aba360cc79973" }, "downloads": -1, "filename": "iter2-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "81436fff32ab3db40bf74120a528f39a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26781, "upload_time": "2019-05-06T15:22:10", "url": "https://files.pythonhosted.org/packages/07/66/aa75f9400af28c3e65f0fb87c089977373408e42a32832143d1d88b78e74/iter2-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d829629909a0dbd168371ea499869cab", "sha256": "ee2f973aa85e2c8535416fae16f82fdfa6f5cea3ef139350127ac47d85f1defa" }, "downloads": -1, "filename": "iter2-1.1.tar.gz", "has_sig": false, "md5_digest": "d829629909a0dbd168371ea499869cab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19619, "upload_time": "2019-05-06T15:22:11", "url": "https://files.pythonhosted.org/packages/7f/09/b5f7b05b06c3cac8b76f0557b0247a1027391c882edbc4438a7925259c8b/iter2-1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "81436fff32ab3db40bf74120a528f39a", "sha256": "acfde2f60ce4970d3e40794e0c28794b5c9252cb098d64873c7aba360cc79973" }, "downloads": -1, "filename": "iter2-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "81436fff32ab3db40bf74120a528f39a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26781, "upload_time": "2019-05-06T15:22:10", "url": "https://files.pythonhosted.org/packages/07/66/aa75f9400af28c3e65f0fb87c089977373408e42a32832143d1d88b78e74/iter2-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d829629909a0dbd168371ea499869cab", "sha256": "ee2f973aa85e2c8535416fae16f82fdfa6f5cea3ef139350127ac47d85f1defa" }, "downloads": -1, "filename": "iter2-1.1.tar.gz", "has_sig": false, "md5_digest": "d829629909a0dbd168371ea499869cab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19619, "upload_time": "2019-05-06T15:22:11", "url": "https://files.pythonhosted.org/packages/7f/09/b5f7b05b06c3cac8b76f0557b0247a1027391c882edbc4438a7925259c8b/iter2-1.1.tar.gz" } ] }