{"id":14977186,"url":"https://github.com/callumjhays/mathpad","last_synced_at":"2025-10-28T01:30:44.428Z","repository":{"id":57440009,"uuid":"398078366","full_name":"CallumJHays/mathpad","owner":"CallumJHays","description":"Type-hinted, simplified interface to `sympy` for solving engineering, science and maths problems.","archived":false,"fork":false,"pushed_at":"2023-12-18T21:36:07.000Z","size":103460,"stargazers_count":14,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-11T15:24:53.305Z","etag":null,"topics":["compute-algebraic-systems","dynamical-systems","ipython-notebook","latex","maths","python","sympy","units-of-measurement"],"latest_commit_sha":null,"homepage":"https://colab.research.google.com/github/CallumJHays/mathpad/blob/main/examples/Walkthrough.ipynb","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CallumJHays.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["CallumJHays"]}},"created_at":"2021-08-19T21:26:22.000Z","updated_at":"2024-08-09T02:49:01.000Z","dependencies_parsed_at":"2024-09-11T12:33:11.822Z","dependency_job_id":"3ae2a47b-fbdb-477f-bb4c-721d9bbe95aa","html_url":"https://github.com/CallumJHays/mathpad","commit_stats":{"total_commits":88,"total_committers":3,"mean_commits":"29.333333333333332","dds":"0.19318181818181823","last_synced_commit":"db5066c9b970899dd7c098788fcffa74d84dce21"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CallumJHays%2Fmathpad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CallumJHays%2Fmathpad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CallumJHays%2Fmathpad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CallumJHays%2Fmathpad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CallumJHays","download_url":"https://codeload.github.com/CallumJHays/mathpad/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219860279,"owners_count":16556020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compute-algebraic-systems","dynamical-systems","ipython-notebook","latex","maths","python","sympy","units-of-measurement"],"created_at":"2024-09-24T13:55:15.693Z","updated_at":"2025-10-28T01:30:42.802Z","avatar_url":"https://github.com/CallumJHays.png","language":"Python","funding_links":["https://github.com/sponsors/CallumJHays"],"categories":[],"sub_categories":[],"readme":"# mathpad\n\n\u003c!-- TODO: set up all the services needed for these badges --\u003e\n\u003c!-- \u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/CallumJHays/mathpad/actions?query=workflow%3ACI\"\u003e\n    \u003cimg src=\"https://img.`sh`ields.io/github/workflow/status/CallumJHays/mathpad/CI/main?label=CI\u0026logo=github\u0026style=flat-square\" alt=\"CI Status\" \u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://mathpad.readthedocs.io\"\u003e\n    \u003cimg src=\"https://img.shields.io/readthedocs/mathpad.svg?logo=read-the-docs\u0026logoColor=fff\u0026style=flat-square\" alt=\"Documentation Status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/CallumJHays/mathpad\"\u003e\n    \u003cimg src=\"https://img.shields.io/codecov/c/github/CallumJHays/mathpad.svg?logo=codecov\u0026logoColor=fff\u0026style=flat-square\" alt=\"Test coverage percentage\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://python-poetry.org/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/packaging-poetry-299bd7?style=flat-square\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJJSURBVHgBfZLPa1NBEMe/s7tNXoxW1KJQKaUHkXhQvHgW6UHQQ09CBS/6V3hKc/AP8CqCrUcpmop3Cx48eDB4yEECjVQrlZb80CRN8t6OM/teagVxYZi38+Yz853dJbzoMV3MM8cJUcLMSUKIE8AzQ2PieZzFxEJOHMOgMQQ+dUgSAckNXhapU/NMhDSWLs1B24A8sO1xrN4NECkcAC9ASkiIJc6k5TRiUDPhnyMMdhKc+Zx19l6SgyeW76BEONY9exVQMzKExGKwwPsCzza7KGSSWRWEQhyEaDXp6ZHEr416ygbiKYOd7TEWvvcQIeusHYMJGhTwF9y7sGnSwaWyFAiyoxzqW0PM/RjghPxF2pWReAowTEXnDh0xgcLs8l2YQmOrj3N7ByiqEoH0cARs4u78WgAVkoEDIDoOi3AkcLOHU60RIg5wC4ZuTC7FaHKQm8Hq1fQuSOBvX/sodmNJSB5geaF5CPIkUeecdMxieoRO5jz9bheL6/tXjrwCyX/UYBUcjCaWHljx1xiX6z9xEjkYAzbGVnB8pvLmyXm9ep+W8CmsSHQQY77Zx1zboxAV0w7ybMhQmfqdmmw3nEp1I0Z+FGO6M8LZdoyZnuzzBdjISicKRnpxzI9fPb+0oYXsNdyi+d3h9bm9MWYHFtPeIZfLwzmFDKy1ai3p+PDls1Llz4yyFpferxjnyjJDSEy9CaCx5m2cJPerq6Xm34eTrZt3PqxYO1XOwDYZrFlH1fWnpU38Y9HRze3lj0vOujZcXKuuXm3jP+s3KbZVra7y2EAAAAAASUVORK5CYII=\" alt=\"Poetry\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/ambv/black\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square\" alt=\"black\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/pre-commit/pre-commit\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white\u0026style=flat-square\" alt=\"pre-commit\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/mathpad/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/v/mathpad.svg?logo=python\u0026logoColor=fff\u0026style=flat-square\" alt=\"PyPI Version\"\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/pyversions/mathpad.svg?style=flat-square\u0026logo=python\u0026amp;logoColor=fff\" alt=\"Supported Python versions\"\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/l/mathpad.svg?style=flat-square\" alt=\"License\"\u003e\n\u003c/p\u003e --\u003e\n\n`mathpad` is a robust Computer Algebra System (CAS) library built on top of `SymPy`, providing a simple and intuitive way to solve engineering, science, and math problems using Python.\n\n## Quickstart\n1. Install using package manager of choice. For example, `pip`:\n\n```bash\npip install mathpad\n```\n\n2. Import and use the library in `python`:\n\n  \u003ctable style=\"width: 100%;\"\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e Code \u003c/td\u003e \u003ctd\u003e Display \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n  ```python\n  from mathpad import *\n\n  v = 5 * m / s\n\n  mph = \"mph\" * miles / hour\n  eqn = mph == v.eval()\n  ```\n\n  \u003c/td\u003e\n  \u003ctd\u003e\n\n  ![Alt text](examples/imgs/showcase/basic.png)\n\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003c/table\u003e\n\n\n## Documentation\n\nCurrently the only in-depth documentation is `Walkthrough.ipynb`. You can access it on the [JupyterLite Sandbox Site here](https://callumjhays.github.io/mathpad/lab?path=Walkthrough.ipynb). \n\n\n## Showcase\n\n\u003ctable style=\"width: 100%;\"\u003e\n\u003ccol style=\"width: 10%\" /\u003e\n\u003ccol style=\"width: 45%\" /\u003e\n\u003ccol style=\"width: 45%\" /\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eFeature\u003c/td\u003e \u003ctd\u003eExample\u003c/td\u003e \u003ctd\u003e Display \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUnits\u003c/td\u003e\n\u003ctd\u003e\n\n```python\nm\n\nm / s ** 2\n\nfeet.in_units(cm)\n\n(V * A).in_units(watt)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/units.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eValues\u003c/td\u003e\n\u003ctd\u003e\n\n```python\nv = 2.5 * m / s\n\nc = m(5)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/values.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSymbols\u003c/td\u003e\n\u003ctd\u003e\n\n```python\nt = \"t\" * seconds\n\ny = \"\\\\hat{y}_1\" * volts\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/symbols.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSymbolic Functions\u003c/td\u003e\n\u003ctd\u003e\n\n```python\na = \"a(t)\" * m / s ** 2\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/sym-funcs.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eEquations\u003c/td\u003e\n\u003ctd\u003e\n\n```python\neqn = (v == a * t)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/equations.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSolving\u003c/td\u003e\n\u003ctd\u003e\n\n```python\nsln, = solve([eqn], solve_for=[a])\n\nsln[a]\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/solving.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eAlgebra\u003c/td\u003e\n\u003ctd\u003e\n\n```python\n\nsimplify(e ** (1j * pi))\n\nexpand((t + 1)(t + 2))\n\nfactor(t**2 + 3 * t * s + 2)\n\nsubs((t + 1)(t + 2), { t: 5 })\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/algebra.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCalculus\u003c/td\u003e\n\u003ctd\u003e\n\n```python\ndiff(a, wrt=t, order=1)\n\n\nintegral(a, wrt=t, between=(0, 10))\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/calculus.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eVectors\u003c/td\u003e\n\u003ctd\u003e\n\n```python\nO = R3(\"O\") # 3D frame of reference\nv1 = O[1, 2, 3]\n\n\nx, y, z = (\"x\", \"y\", \"z\") * m\nv2 = O[x, y, z]\n\n\n\nv3 = \"v_3\" @ O\n\n\n\nv2.cross(v3)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/vectors.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMatrices\u003c/td\u003e\n\u003ctd\u003e\n\n```python\nO2 = R2(\"O2\")\nA = Mat[O, O2](\n    [1, 2],\n    [3, 4],\n    [5, 6]\n)\n\n\nv2_wrt_O2 = v2 @ A\n\n\nB = Mat[O2, O](\"B\")\n\n\nI = Mat[O2, O2].I\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n![Alt text](examples/imgs/showcase/matrices.png)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNumpy Compatibility\u003c/td\u003e\n\u003ctd\u003e\n\n```python\ny = sin(t)\ny_fn = as_numpy_func(y)\n\ny_fn({ t: [1, 2, 3] })\n\nimport numpy as np\ny_fn({\n  t: np.arange(\n    start=0, stop=2 * np.pi, step=np.pi / 12\n  )\n})\n```\n\n\u003c/td\u003e\n\u003ctd style=\"font-family: Consolas;\"\u003e\n\u003cbr /\u003e\n\narray([0.84147098, 0.90929743, 0.14112001])\n\u003cbr /\u003e\n\u003cbr /\u003e\n\u003cbr /\u003e\n\narray([0.        , 0.25881905, 0.5       , 0.70710678, 0.8660254 ,\n       0.96592583, 1.        , 0.96592583, 0.8660254 , 0.70710678,\n       0.5       , 0.25881905])\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCode Generation\u003c/td\u003e\n\u003ctd\u003e\n\n```python\n\ngenerate_c_code(theta, [t])\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\n\u003c/table\u003e\n\n\n\n\u003c!-- ## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003c!-- markdownlint-enable --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n\u003c!-- This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! --\u003e\n\n## Credits\n\nThis package was created with\n[Cookiecutter](https://github.com/audreyr/cookiecutter) and the\n[browniebroke/cookiecutter-pypackage](https://github.com/browniebroke/cookiecutter-pypackage)\nproject template.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcallumjhays%2Fmathpad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcallumjhays%2Fmathpad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcallumjhays%2Fmathpad/lists"}