{ "info": { "author": "Rohan Kumar", "author_email": "seirdy@pm.ch", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "Intended Audience :: Education", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering :: Mathematics" ], "description": "=================\nFunction Analysis\n=================\n\n+------------------+-------------------------------------------------------+\n| CI & Test Status | |Gitlab Pipeline Status| |Coverage Report| |\n+------------------+-------------------------------------------------------+\n| Code Quality | |Code Climate| |Codacy| |codebeat| |CodeFactor| |\n| | |LGTM| |\n+------------------+-------------------------------------------------------+\n| Code Style | |code style: black| |\n+------------------+-------------------------------------------------------+\n| Dependencies | |Requirements Status| |\n+------------------+-------------------------------------------------------+\n| Usage | |license| |\n+------------------+-------------------------------------------------------+\n| PyPI | |python version| |latest release| |\n+------------------+-------------------------------------------------------+\n\nThis library uses concepts typically taught in an introductory Calculus class\nto describe properties of continuous, differentiable, single-variable\nfunctions.\n\nUsing this library\n==================\n\nThe ``func_analysis`` module defines the class ``AnalyzedFunc``. An instance of\nthis class has several attributes describing the behavior of this function.\n\nRequired data include:\n\n- A range\n- The function to be analyzed\n\nSpecial points include zeros, critical numbers, extrema, and points of\ninflection. It\u2019s possible to calculate these when given the number of points\nwanted.\n\nOptional data can be provided to improve precision and performance. Such data\ninclude:\n\n- Any derivatives of the function\n- Any known zeros, critical numbers, extrema, points of inflection\n- Intervals of concavity, convexity, increase, decrease\n- Any vertical axis of symmetry\n\nAny of the above data can be calculated by an instance of ``AnalyzedFunc``.\n\nExample Usage\n-------------\n\nThis paste from an interactive Python session showcases all the functionality\nof ``AnalyzedFunc``:\n\n.. code:: python\n\n >>> from func_analysis import AnalyzedFunc\n\n >>> import mpmath as mp; import numpy as np\n\n >>> mp.pretty = True\n\n >>> def example_func(x):\n ... return mp.cos(x ** 2) - mp.sin(x) + (x / 68)\n ...\n\n >>> analyzed_example = AnalyzedFunc(\n ... func=example_func,\n ... x_range=(-47.05, -46.3499),\n ... zeros_wanted=21,\n ... crits_wanted=21,\n ... pois_wanted=21,\n ... zeros=[-47.038289673236127, -46.406755885040056],\n ... )\n\n >>> analyzed_example.zeros\n array([mpf('-47.038289673236127'), mpf('-47.018473233395284'),\n mpf('-46.972318087653945'), mpf('-46.950739626397913'),\n mpf('-46.906204518117636'), mpf('-46.882958270910017'),\n mpf('-46.839955720658347'), mpf('-46.815121707485004'),\n mpf('-46.77357601136889'), mpf('-46.747224922729004'),\n mpf('-46.707068062964038'), mpf('-46.679264553080846'),\n mpf('-46.640433373296687'), mpf('-46.611238416225623'),\n mpf('-46.57367255467036'), mpf('-46.543145221101676'),\n mpf('-46.506785519620839'), mpf('-46.474984380574834'),\n mpf('-46.439771604599501'), mpf('-46.406755885040056'),\n mpf('-46.372629655875102')], dtype=object)\n\n >>> analyzed_example.crits\n array([mpf('-47.028400867252276'), mpf('-46.995216177440788'),\n mpf('-46.961552135996999'), mpf('-46.928318300227147'),\n mpf('-46.894608617023608'), mpf('-46.861324416365338'),\n mpf('-46.827569901478539'), mpf('-46.794234116960419'),\n mpf('-46.760435575283916'), mpf('-46.72704699248236'),\n mpf('-46.693205219083057'), mpf('-46.659762632756908'),\n mpf('-46.625878408195688'), mpf('-46.592380626945829'),\n mpf('-46.558454712583136'), mpf('-46.524900563516225'),\n mpf('-46.490933696823733'), mpf('-46.457322030198712'),\n mpf('-46.42331492009863'), mpf('-46.389644613934263'),\n mpf('-46.355597936188148')], dtype=object)\n\n >>> analyzed_example.pois\n array([mpf('-47.04521505151731'), mpf('-47.011813891641338'),\n mpf('-46.978389522478297'), mpf('-46.944940655832212'),\n mpf('-46.911468800195282'), mpf('-46.877972023301726'),\n mpf('-46.844452476333207'), mpf('-46.81090758498618'),\n mpf('-46.777340139630388'), mpf('-46.743746928888186'),\n mpf('-46.710131375870707'), mpf('-46.676489640045468'),\n mpf('-46.64282576785548'), mpf('-46.60913530049924'),\n mpf('-46.575422895374974'), mpf('-46.541683489262155'),\n mpf('-46.507922335179564'), mpf('-46.474133782285819'),\n mpf('-46.440323660950513'), mpf('-46.406485752427894'),\n mpf('-46.372626443270374')], dtype=object)\n\n >>> analyzed_example.increasing\n [Interval(start=-47.05, stop=mpf('-47.028400867252276')),\n Interval(start=mpf('-46.995216177440788'), stop=mpf('-46.961552135996999')),\n Interval(start=mpf('-46.928318300227147'), stop=mpf('-46.894608617023608')),\n Interval(start=mpf('-46.861324416365338'), stop=mpf('-46.827569901478539')),\n Interval(start=mpf('-46.794234116960419'), stop=mpf('-46.760435575283916')),\n Interval(start=mpf('-46.72704699248236'), stop=mpf('-46.693205219083057')),\n Interval(start=mpf('-46.659762632756908'), stop=mpf('-46.625878408195688')),\n Interval(start=mpf('-46.592380626945829'), stop=mpf('-46.558454712583136')),\n Interval(start=mpf('-46.524900563516225'), stop=mpf('-46.490933696823733')),\n Interval(start=mpf('-46.457322030198712'), stop=mpf('-46.42331492009863')),\n Interval(start=mpf('-46.389644613934263'), stop=mpf('-46.355597936188148'))]\n\n >>> analyzed_example.decreasing\n [Interval(start=mpf('-47.028400867252276'), stop=mpf('-46.995216177440788')),\n Interval(start=mpf('-46.961552135996999'), stop=mpf('-46.928318300227147')),\n Interval(start=mpf('-46.894608617023608'), stop=mpf('-46.861324416365338')),\n Interval(start=mpf('-46.827569901478539'), stop=mpf('-46.794234116960419')),\n Interval(start=mpf('-46.760435575283916'), stop=mpf('-46.72704699248236')),\n Interval(start=mpf('-46.693205219083057'), stop=mpf('-46.659762632756908')),\n Interval(start=mpf('-46.625878408195688'), stop=mpf('-46.592380626945829')),\n Interval(start=mpf('-46.558454712583136'), stop=mpf('-46.524900563516225')),\n Interval(start=mpf('-46.490933696823733'), stop=mpf('-46.457322030198712')),\n Interval(start=mpf('-46.42331492009863'), stop=mpf('-46.389644613934263')),\n Interval(start=mpf('-46.355597936188148'), stop=-46.3499)]\n\n >>> analyzed_example.concave\n [Interval(start=-47.05, stop=mpf('-47.04521505151731')),\n Interval(start=mpf('-47.011813891641338'), stop=mpf('-46.978389522478297')),\n Interval(start=mpf('-46.944940655832212'), stop=mpf('-46.911468800195282')),\n Interval(start=mpf('-46.877972023301726'), stop=mpf('-46.844452476333207')),\n Interval(start=mpf('-46.81090758498618'), stop=mpf('-46.777340139630388')),\n Interval(start=mpf('-46.743746928888186'), stop=mpf('-46.710131375870707')),\n Interval(start=mpf('-46.676489640045468'), stop=mpf('-46.64282576785548')),\n Interval(start=mpf('-46.60913530049924'), stop=mpf('-46.575422895374974')),\n Interval(start=mpf('-46.541683489262155'), stop=mpf('-46.507922335179564')),\n Interval(start=mpf('-46.474133782285819'), stop=mpf('-46.440323660950513')),\n Interval(start=mpf('-46.406485752427894'), stop=mpf('-46.372626443270374'))]\n\n >>> analyzed_example.convex\n [Interval(start=mpf('-47.04521505151731'), stop=mpf('-47.011813891641338')),\n Interval(start=mpf('-46.978389522478297'), stop=mpf('-46.944940655832212')),\n Interval(start=mpf('-46.911468800195282'), stop=mpf('-46.877972023301726')),\n Interval(start=mpf('-46.844452476333207'), stop=mpf('-46.81090758498618')),\n Interval(start=mpf('-46.777340139630388'), stop=mpf('-46.743746928888186')),\n Interval(start=mpf('-46.710131375870707'), stop=mpf('-46.676489640045468')),\n Interval(start=mpf('-46.64282576785548'), stop=mpf('-46.60913530049924')),\n Interval(start=mpf('-46.575422895374974'), stop=mpf('-46.541683489262155')),\n Interval(start=mpf('-46.507922335179564'), stop=mpf('-46.474133782285819')),\n Interval(start=mpf('-46.440323660950513'), stop=mpf('-46.406485752427894')),\n Interval(start=mpf('-46.372626443270374'), stop=-46.3499)]\n\n >>> analyzed_example.relative_maxima\n array([mpf('-47.028400867252276'), mpf('-46.961552135996999'),\n mpf('-46.894608617023608'), mpf('-46.827569901478539'),\n mpf('-46.760435575283916'), mpf('-46.693205219083057'),\n mpf('-46.625878408195688'), mpf('-46.558454712583136'),\n mpf('-46.490933696823733'), mpf('-46.42331492009863'),\n mpf('-46.355597936188148')], dtype=object)\n\n >>> analyzed_example.relative_minima\n array([mpf('-46.995216177440788'), mpf('-46.928318300227147'),\n mpf('-46.861324416365338'), mpf('-46.794234116960419'),\n mpf('-46.72704699248236'), mpf('-46.659762632756908'),\n mpf('-46.592380626945829'), mpf('-46.524900563516225'),\n mpf('-46.457322030198712'), mpf('-46.389644613934263')],\n dtype=object)\n\n >>> analyzed_example.absolute_maximum\n Coordinate(x_val=mpf('-46.355597936188148'), y_val=mpf('1.0131766438615282'))\n\n >>> analyzed_example.absolute_minimum\n Coordinate(x_val=mpf('-46.995216177440788'), y_val=mpf('-1.5627299417380764'))\n\n >>> analyzed_example.signed_area\n mpf('-0.1835790011406907')\n\n >>> analyzed_example.unsigned_area\n mpf('0.46577475660746492')\n\nWe can see that the inflection points of a function, the critical points of its\nfirst derivative, and the zeros of its second derivative are identical.\n\n.. code:: python\n\n >>> np.array_equal(\n ... analyzed_example.pois, analyzed_example.rooted_first_derivative.crits\n ... )\n True\n\n >>> np.array_equal(\n ... analyzed_example.pois, analyzed_example.rooted_second_derivative.zeros\n ... )\n True\n\nOther examples to demonstrate the relationship between derivatives:\n\n.. code:: python\n\n >>> np.array_equal(analyzed_example.concave, analyzed_example.rooted_first_derivative.increasing)\n True\n\n >>> np.array_equal(analyzed_example.first_derivative.convex, analyzed_example.rooted_second_derivative.decreasing)\n True\n\nA work-in-progress feature is listing x-values of vertical axes of symmetry.\nHere's an example of a function that's symmetric about the y-axis:\n\n.. code:: python\n\n >>> def symmetric_func(x):\n return mp.power(x, 2) - 4\n\n >>> analyzed_symmetric_example = AnalyzedFunc(\n ... func=lambda x: mp.power(x, 2) - 4,\n ... x_range=(-8,8),\n ... zeros_wanted=2\n ... )\n\n >>> analyzed_symmetric_example.vertical_axis_of_symmetry\n [0.0]\n\nLicense\n=======\n\nThis program is licensed under the GNU Affero General Public License v3 or\nlater.\n\n.. |Gitlab Pipeline Status| image:: https://gitlab.com/Seirdy/func-analysis/badges/master/pipeline.svg\n :target: https://gitlab.com/Seirdy/func-analysis/commits/master\n.. |Coverage Report| image:: https://gitlab.com/Seirdy/func-analysis/badges/master/coverage.svg\n :target: https://gitlab.com/Seirdy/func-analysis/commits/master\n.. |Code Climate| image:: https://codeclimate.com/github/Seirdy/func-analysis/badges/gpa.svg\n :target: https://codeclimate.com/github/Seirdy/func-analysis\n.. |Codacy| image:: https://api.codacy.com/project/badge/Grade/cd4ff1fd5f26481f9da4e9f8a1ee8b7a\n :target: https://www.codacy.com/app/Seirdy/func-analysis\n.. |codebeat| image:: https://codebeat.co/badges/439f2845-f06f-483c-848d-50633cae37bd\n :target: https://codebeat.co/projects/gitlab-com-seirdy-func-analysis-master\n.. |CodeFactor| image:: https://www.codefactor.io/repository/github/seirdy/func-analysis/badge\n :target: https://www.codefactor.io/repository/github/seirdy/func-analysis\n.. |LGTM| image:: https://img.shields.io/lgtm/alerts/g/Seirdy/func-analysis.svg?logo=lgtm&logoWidth=18\n :target: https://lgtm.com/projects/g/Seirdy/func-analysis/\n.. |code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :target: https://github.com/ambv/black\n.. |Requirements Status| image:: https://requires.io/enterprise/Seirdy/func-analysis/requirements.svg?branch=MASTER\n :target: https://requires.io/enterprise/Seirdy/func-analysis/requirements/?branch=MASTER\n.. |license| image:: https://img.shields.io/pypi/l/func-analysis.svg\n :target: https://gitlab.com/Seirdy/func-analysis/blob/master/LICENSE\n.. |python version| image:: https://img.shields.io/pypi/pyversions/func-analysis.svg?logo=python\n :target: https://pypi.org/project/func-analysis/\n.. |latest release| image:: https://img.shields.io/pypi/v/func-analysis.svg\n :target: https://pypi.org/project/func-analysis/\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/Seirdy/func-analysis", "keywords": "func-analysis,calculus,math", "license": "AGPLv3+", "maintainer": "", "maintainer_email": "", "name": "func-analysis", "package_url": "https://pypi.org/project/func-analysis/", "platform": "", "project_url": "https://pypi.org/project/func-analysis/", "project_urls": { "Homepage": "https://gitlab.com/Seirdy/func-analysis" }, "release_url": "https://pypi.org/project/func-analysis/0.3.0/", "requires_dist": [ "mpmath", "numpy", "scipy" ], "requires_python": "", "summary": "Analyze function behavior using introductory calculus.", "version": "0.3.0" }, "last_serial": 5279043, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "55ef5881f389cf4ab88db184bf85af82", "sha256": "4c2d6faa235d43a217365fe84ac51c85bc7c50bfe932290a5329b4f3b0fbef4e" }, "downloads": -1, "filename": "func_analysis-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "55ef5881f389cf4ab88db184bf85af82", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42955, "upload_time": "2018-12-11T09:58:08", "url": "https://files.pythonhosted.org/packages/3d/3b/4aef3431304cf87026ddf43682f0686c375fe8578dbdb17ff647dbcc49cf/func_analysis-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc12edf637cf670f65dd774f983cacd2", "sha256": "c13ae832f3505b62a1f2873914dcfa13e9cd82e8b6aa868d46cf4ea71cbb70ec" }, "downloads": -1, "filename": "func-analysis-0.0.1.tar.gz", "has_sig": false, "md5_digest": "dc12edf637cf670f65dd774f983cacd2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13124, "upload_time": "2018-12-11T09:58:10", "url": "https://files.pythonhosted.org/packages/18/ec/d804cadff3382da2c3093d27300a296f0369738a05b54069aa0ead8f3fec/func-analysis-0.0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "10164d93761d90abe95a36d5414408b5", "sha256": "d596ec0f5b99de7ca061986226637c2c01767d88366ecfeb839bcc7bb7c0e880" }, "downloads": -1, "filename": "func_analysis-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "10164d93761d90abe95a36d5414408b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22476, "upload_time": "2018-12-18T08:04:52", "url": "https://files.pythonhosted.org/packages/14/0c/e3911fc479d97aea365ab2723222e30a6dd9f17b2c5013fa2591bb915d03/func_analysis-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6de36146d7471bde48c904d5345cfcf7", "sha256": "110e367cb049b3862ccb2dabb606b7be3fc8420905275f39738cd7c9ff93beac" }, "downloads": -1, "filename": "func-analysis-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6de36146d7471bde48c904d5345cfcf7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10426, "upload_time": "2018-12-18T08:04:54", "url": "https://files.pythonhosted.org/packages/f7/7f/d7c3093409011a2318e7d8fc0b865220e549453c1f7420c054b8331b6bc6/func-analysis-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "e91883fa4c903c1cf715f6f6e8acff54", "sha256": "42dcd3abf7180a5c9ec78faf4899a678bf9c91b30df5eedf5ef6d1068d219e5f" }, "downloads": -1, "filename": "func_analysis-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e91883fa4c903c1cf715f6f6e8acff54", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21736, "upload_time": "2018-12-19T15:17:42", "url": "https://files.pythonhosted.org/packages/47/f7/cffd106e8c13ac2caf2a336ad359584371bb7ae40a8decace5c9967d1e36/func_analysis-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "43956ef29e2ddb230c68e7c6e488c642", "sha256": "670eda7dcb47b160a78d1ac137acc6d5af00841b1744d986e8455241399eb312" }, "downloads": -1, "filename": "func-analysis-0.1.2.tar.gz", "has_sig": false, "md5_digest": "43956ef29e2ddb230c68e7c6e488c642", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10549, "upload_time": "2018-12-19T15:17:44", "url": "https://files.pythonhosted.org/packages/c4/6d/3b8a2b1d7f4bfaf025d26f5991c7f8171536953ab7b358d4d70822c7c858/func-analysis-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1cfa08267a87b319ae86ce985d2fba82", "sha256": "be3263194fea2af6b5627a9904be085fb181c57dff358cc479bd9de85a24161f" }, "downloads": -1, "filename": "func_analysis-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1cfa08267a87b319ae86ce985d2fba82", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 44910, "upload_time": "2018-12-28T03:52:39", "url": "https://files.pythonhosted.org/packages/20/d3/cb6a8c2d91fd0add3528120e7086ed89505b572c1c8abd5e238f79dc3d31/func_analysis-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48161eafae2e83af3f31ddb430033d96", "sha256": "709a9abb6f942b6f5568288536af8d1119dbef3933dd456cf5fce01e9342ef9d" }, "downloads": -1, "filename": "func-analysis-0.2.0.tar.gz", "has_sig": false, "md5_digest": "48161eafae2e83af3f31ddb430033d96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11555, "upload_time": "2018-12-28T03:52:43", "url": "https://files.pythonhosted.org/packages/47/9c/f6fbeb1c5df9d76c03980931a5a656c6b0b059618f18bfadacdc9f11b9b9/func-analysis-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "e887fc10368468dd1250e4a51efe8e33", "sha256": "c7fd2682212f84425d9b51419bceb67c860b6970c0ef807977081714c49a5235" }, "downloads": -1, "filename": "func_analysis-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e887fc10368468dd1250e4a51efe8e33", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31561, "upload_time": "2019-05-16T20:06:31", "url": "https://files.pythonhosted.org/packages/2d/6a/6ba3cd7f725a122234d81ac66ba4519dcd074bf17d0db4230efd0e635c88/func_analysis-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51d6896299b8d6101305ab0d6c87444a", "sha256": "3d952ec57f4fb8ed72c2aed0ce065c0a67f44bb7bc5dcca1b6e1a89f08308175" }, "downloads": -1, "filename": "func-analysis-0.3.0.tar.gz", "has_sig": false, "md5_digest": "51d6896299b8d6101305ab0d6c87444a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19928, "upload_time": "2019-05-16T20:06:33", "url": "https://files.pythonhosted.org/packages/56/3b/91560abfb4bca9d22bb55e26f2620893a515fec1fb6bde0ab286faa84951/func-analysis-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e887fc10368468dd1250e4a51efe8e33", "sha256": "c7fd2682212f84425d9b51419bceb67c860b6970c0ef807977081714c49a5235" }, "downloads": -1, "filename": "func_analysis-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e887fc10368468dd1250e4a51efe8e33", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31561, "upload_time": "2019-05-16T20:06:31", "url": "https://files.pythonhosted.org/packages/2d/6a/6ba3cd7f725a122234d81ac66ba4519dcd074bf17d0db4230efd0e635c88/func_analysis-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51d6896299b8d6101305ab0d6c87444a", "sha256": "3d952ec57f4fb8ed72c2aed0ce065c0a67f44bb7bc5dcca1b6e1a89f08308175" }, "downloads": -1, "filename": "func-analysis-0.3.0.tar.gz", "has_sig": false, "md5_digest": "51d6896299b8d6101305ab0d6c87444a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19928, "upload_time": "2019-05-16T20:06:33", "url": "https://files.pythonhosted.org/packages/56/3b/91560abfb4bca9d22bb55e26f2620893a515fec1fb6bde0ab286faa84951/func-analysis-0.3.0.tar.gz" } ] }