{ "info": { "author": "Tor Aksel N. Heirung", "author_email": "github@torheirung.com", "bugtrack_url": null, "classifiers": [], "description": "# pytope\nPackage with a limited set of operations for polytopes, zonotopes, and invariant sets.\n\nThe currently implemented features include \n* constructing polytopes from inequalities (halfspace representation), vertices, and upper and lower bounds, \n* linear mapping (multiplying a matrix *M* and a polytope *P*: *M P*), \n* the Minkowski sum and Pontryagin difference of polytopes, \n* the intersection of polytopes, and\n* simple plotting. \n\nThe figures below are generated with pytope. \nThe first two illustrate the currently implemented operations (see [demo.py](https://github.com/heirung/pytope/blob/master/pytope/demo.py)); \nthe third uses pytope to plot a robust MPC trajectory (implemented in [CasADi](https://github.com/casadi), combining Figures 1 and 2 from Mayne et al. (2005)) (with a rough approximation of the disturbance sequence); \nthe fourth shows an outer *ε*-approximation of a minimal robust positively invariant (or MRPI) set (computed with pytope), reproducing the example from Rakovi\u0107 et al. (2005). \n\nMost of pytope is experimental, fragile, largely untested, and buggy.\n\n![Illustration of various polytope operations](https://raw.githubusercontent.com/heirung/pytope/master/docs/various_operations.svg?sanitize=true) \nFigure: Illustration of various polytope operations.\n\n![The Minkowski sum of two polytopes](https://raw.githubusercontent.com/heirung/pytope/master/docs/minkowski_sum.svg?sanitize=true) \nFigure: The Minkowski sum of two polytopes.\n\n![Robust MPC trajectory from Mayne et al. (2005)](https://raw.githubusercontent.com/heirung/pytope/master/docs/Mayne_2005.svg?sanitize=true) \nFigure: Robust MPC trajectory from Mayne et al. (2005), combining Figures 1 and 2.\n\n![Outer *ε*-approximation of a minimal RPI](https://raw.githubusercontent.com/heirung/pytope/master/docs/Rakovic_2005.svg?sanitize=true) \nFigure: Outer *ε*-approximation of a minimal robust positively invariant (MRPI) set \u2013 a reproduction of the example in Rakovi\u0107 et al. (2005).\n\n### References\n* Mayne, D.Q., Seron, M.M., & Rakovi\u0107, S.V. (2005). \nRobust model predictive control of constrained linear systems with bounded disturbances. \n[*Automatica*, 41(2), 219\u2013224](https://doi.org/10.1016/j.automatica.2004.08.019).\n* Rakovi\u0107, S.V., Kerrigan, E.C., Kouramas, K.I., & Mayne, D.Q. (2005). \nInvariant approximations of the minimal robust positively invariant set. \n[*IEEE Transactions on Automatic Control*, 50(3), 406\u2013410](https://doi.org/10.1109/TAC.2005.843854).\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/heirung/pytope", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pytope", "package_url": "https://pypi.org/project/pytope/", "platform": "", "project_url": "https://pypi.org/project/pytope/", "project_urls": { "Homepage": "https://github.com/heirung/pytope" }, "release_url": "https://pypi.org/project/pytope/0.0.4/", "requires_dist": [ "numpy", "scipy (>=1.3.0)", "pycddlib", "matplotlib" ], "requires_python": ">=3.6", "summary": "Polytope operations --- limited functionality", "version": "0.0.4" }, "last_serial": 5823440, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "7e205210097800010493cb7b14a0cd0c", "sha256": "54533c19b40414fba55ef6c53c9b5c239b66b2cc6475b7ac3f3d59e980eb167c" }, "downloads": -1, "filename": "pytope-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7e205210097800010493cb7b14a0cd0c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3225, "upload_time": "2019-08-31T22:45:11", "url": "https://files.pythonhosted.org/packages/47/48/456d9cfccf767b4a5dd4d42333a525253b0b42cc72ab036e354eb5ffaf95/pytope-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b36df22b4fe6df919cf16d256f2c8df", "sha256": "52b4993a0c09ba09a7574bd5b42416323c7519c5bdab71e1cf469eccc3495a76" }, "downloads": -1, "filename": "pytope-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1b36df22b4fe6df919cf16d256f2c8df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2532, "upload_time": "2019-08-31T22:45:14", "url": "https://files.pythonhosted.org/packages/a4/90/41783488093c4fb19a4350378c0c38e6cf0f6a2c982611f71e96ea006636/pytope-0.0.1.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "a6c8e5c5e1876bcf318dc28f6d4418d6", "sha256": "3d3b25080264a133c09ff08fbffd775f60472511516fecd4df0d3599cdd4d33b" }, "downloads": -1, "filename": "pytope-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a6c8e5c5e1876bcf318dc28f6d4418d6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8873, "upload_time": "2019-09-10T17:32:38", "url": "https://files.pythonhosted.org/packages/54/2f/ca4eeef2527af61b381f943ec41e145a4fdbf538566fde01784da454e1c9/pytope-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35717263141ada8d023e8e2998881ddc", "sha256": "f4d5c2e42bc10d0244e382661a63b8fc4f69b30c4cb228f2c26937ab4110c55a" }, "downloads": -1, "filename": "pytope-0.0.3.tar.gz", "has_sig": false, "md5_digest": "35717263141ada8d023e8e2998881ddc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8664, "upload_time": "2019-09-10T17:32:40", "url": "https://files.pythonhosted.org/packages/4d/ea/cb0bfd482d0d70e1246b0d52dc739817c4fd624264aed0a73050cc1b975e/pytope-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "afdd059f1fa2fe5db95af5168b18f29a", "sha256": "4e86f8d240c38ac229368ee481e459b4171fb88729fc5a7505d43f9e36a7afed" }, "downloads": -1, "filename": "pytope-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "afdd059f1fa2fe5db95af5168b18f29a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11660, "upload_time": "2019-09-13T01:24:30", "url": "https://files.pythonhosted.org/packages/e3/bb/0f422fa1e1a0613389ac20b18a31ff841f91739539d09e03178912ded122/pytope-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b3c81cea778c76b5195a3875a56aed4", "sha256": "0caf6abd840bf5cfacbae80e887ed8c6f5c0d0c2089fb531899a0206d3a11145" }, "downloads": -1, "filename": "pytope-0.0.4.tar.gz", "has_sig": false, "md5_digest": "8b3c81cea778c76b5195a3875a56aed4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11988, "upload_time": "2019-09-13T01:24:32", "url": "https://files.pythonhosted.org/packages/f1/38/47d1a335b132ce14de93336152694c01d406ef71eeb408a43ae7170922d0/pytope-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "afdd059f1fa2fe5db95af5168b18f29a", "sha256": "4e86f8d240c38ac229368ee481e459b4171fb88729fc5a7505d43f9e36a7afed" }, "downloads": -1, "filename": "pytope-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "afdd059f1fa2fe5db95af5168b18f29a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11660, "upload_time": "2019-09-13T01:24:30", "url": "https://files.pythonhosted.org/packages/e3/bb/0f422fa1e1a0613389ac20b18a31ff841f91739539d09e03178912ded122/pytope-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b3c81cea778c76b5195a3875a56aed4", "sha256": "0caf6abd840bf5cfacbae80e887ed8c6f5c0d0c2089fb531899a0206d3a11145" }, "downloads": -1, "filename": "pytope-0.0.4.tar.gz", "has_sig": false, "md5_digest": "8b3c81cea778c76b5195a3875a56aed4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11988, "upload_time": "2019-09-13T01:24:32", "url": "https://files.pythonhosted.org/packages/f1/38/47d1a335b132ce14de93336152694c01d406ef71eeb408a43ae7170922d0/pytope-0.0.4.tar.gz" } ] }