[![10.5281/zenodo.7708738](https://zenodo.org/badge/DOI/10.5281/zenodo.7708738.svg)](https://doi.org/10.5281/zenodo.7708738)
[![anaconda.org/aatmdelissen/pymoto](https://anaconda.org/aatmdelissen/pymoto/badges/version.svg)](https://anaconda.org/aatmdelissen/pymoto)
[![pypi.org/project/pyMOTO](https://badge.fury.io/py/pyMOTO.svg)](https://pypi.org/project/pyMOTO/)
# pyMOTO
* [Link to Documentation](https://pymoto.readthedocs.io)
* [Link to GitHub](https://github.com/aatmdelissen/pyMOTO)
Modular topology optimization framework with semi-automatic derivatives. The two main types `Module` and `Signal`
are used to implement a problem formulation to be optimized. The `Module` implements functionality (and design
sensitivity calculations) and `Signal` carries data of both the variables and their derivatives.
Sensitivity calculations are done based on backpropagation. The final value of interest is seeded with sensitivity
value $\frac{\textup{d}f}{\textup{d}f}=1$. Then the modules are executed in reverse order, each applying the chain rule.
As example for a `Module` which maps $x\rightarrow y$, only the following operation needs to be implemented:
$$
\frac{\textup{d}f}{\textup{d}x} = \frac{\textup{d}f}{\textup{d}y}\frac{\textup{d}y}{\textup{d}x}\text{.}
$$
In this way, the order of modules can easily be adapted without having to worry about sensitivities, as these are
automatically calculated.
# Quick start installation
1. Make sure you have Python running in some kind of virtual environment (e.g.
[conda](https://docs.conda.io/projects/conda/en/stable/), [miniconda](https://docs.conda.io/en/latest/miniconda.html),
[venv](https://realpython.com/python-virtual-environments-a-primer/))
2. Install the pymoto Python package (and its dependencies)
- Option A (conda): If you are working with Conda, install by `conda install -c aatmdelissen pymoto`
- Option B (pip): Type `pip install pymoto` into your console to install
3. Download one of the examples found in the repository's example folder
([here](https://github.com/aatmdelissen/pyMOTO/tree/master/examples))
4. Run the example by typing `python ex_....py` in the console
A local installation for development in `pyMOTO` can be done by first downloading the entire git repo, and then calling
`pip install -e .` in the `pyMOTO` folder (of course from within your virtual environment).
## Dependencies
* **NumPy** - Dense linear algebra and solvers
* **SciPy** - Sparse linear algebra and solvers
* **SymPy** - Symbolic differentiation for `MathGeneral` module
* **Matplotlib** - Plotting and visualisation
* (optional) **SAO** - Sequential approximated optimizers
* (optional) [**opt_einsum**](https://optimized-einsum.readthedocs.io/en/stable/install.html) - Optimized function for `EinSum` module
For fast linear solvers for sparse matrices:
* (optional) [**pypardiso**](https://github.com/haasad/PyPardisoProject) - Uses the Intel OneAPI PARDISO solver (recommended)
* (optional) [**scikit-umfpack**](https://scikit-umfpack.github.io/scikit-umfpack/install.html) - Fast LU linear solver based on UMFPACK
* (optional) [**scikit-sparse**](https://github.com/scikit-sparse/scikit-sparse) - Fast Cholesky solver based on CHOLMOD
* (optional) [**cvxopt**](https://cvxopt.org/install/index.html) - Another fast Cholesky solver based on CHOLMOD
__Note on linear solvers for sparse matrices:__ Scipy implements a version of LU which is quite slow. To increase the
speed of the optimization, `pypardiso` is recommended as it contains a very robust and flexible solver for symmetric
and asymmetric matrices. An alternative is `scikit-umfpack` which provides a fast LU factorization. For symmetric
matrices a Cholesky factorization is recommended (not provided with Scipy), which can be used by either installing
`scikit-sparse` or `cvxopt`.
# License
pyMOTO is available under te [MIT License](https://opensource.org/licenses/MIT).
Raw data
{
"_id": null,
"home_page": "https://github.com/aatmdelissen/pyMOTO",
"name": "pyMOTO",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "topology optimization,generative design,structural,sensitivities,derivatives,framework,modular,blocks,pipeline",
"author": "Arnoud Delissen",
"author_email": "arnouddelissen+pymoto@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/60/2a/c77be0abd4fd48125b0874adab0cef9218681b36ee12ab621ca97cbb3ba1/pyMOTO-1.3.0.tar.gz",
"platform": null,
"description": "[![10.5281/zenodo.7708738](https://zenodo.org/badge/DOI/10.5281/zenodo.7708738.svg)](https://doi.org/10.5281/zenodo.7708738) \n[![anaconda.org/aatmdelissen/pymoto](https://anaconda.org/aatmdelissen/pymoto/badges/version.svg)](https://anaconda.org/aatmdelissen/pymoto)\n[![pypi.org/project/pyMOTO](https://badge.fury.io/py/pyMOTO.svg)](https://pypi.org/project/pyMOTO/)\n\n# pyMOTO\n\n* [Link to Documentation](https://pymoto.readthedocs.io)\n* [Link to GitHub](https://github.com/aatmdelissen/pyMOTO)\n\nModular topology optimization framework with semi-automatic derivatives. The two main types `Module` and `Signal`\nare used to implement a problem formulation to be optimized. The `Module` implements functionality (and design \nsensitivity calculations) and `Signal` carries data of both the variables and their derivatives. \n\nSensitivity calculations are done based on backpropagation. The final value of interest is seeded with sensitivity\nvalue $\\frac{\\textup{d}f}{\\textup{d}f}=1$. Then the modules are executed in reverse order, each applying the chain rule.\nAs example for a `Module` which maps $x\\rightarrow y$, only the following operation needs to be implemented:\n\n$$\n\\frac{\\textup{d}f}{\\textup{d}x} = \\frac{\\textup{d}f}{\\textup{d}y}\\frac{\\textup{d}y}{\\textup{d}x}\\text{.} \n$$\n\nIn this way, the order of modules can easily be adapted without having to worry about sensitivities, as these are \nautomatically calculated.\n\n# Quick start installation\n1. Make sure you have Python running in some kind of virtual environment (e.g. \n[conda](https://docs.conda.io/projects/conda/en/stable/), [miniconda](https://docs.conda.io/en/latest/miniconda.html),\n[venv](https://realpython.com/python-virtual-environments-a-primer/))\n2. Install the pymoto Python package (and its dependencies)\n - Option A (conda): If you are working with Conda, install by `conda install -c aatmdelissen pymoto`\n - Option B (pip): Type `pip install pymoto` into your console to install\n3. Download one of the examples found in the repository's example folder \n([here](https://github.com/aatmdelissen/pyMOTO/tree/master/examples))\n4. Run the example by typing `python ex_....py` in the console\n\n\nA local installation for development in `pyMOTO` can be done by first downloading the entire git repo, and then calling \n`pip install -e .` in the `pyMOTO` folder (of course from within your virtual environment).\n\n## Dependencies\n* **NumPy** - Dense linear algebra and solvers\n* **SciPy** - Sparse linear algebra and solvers\n* **SymPy** - Symbolic differentiation for `MathGeneral` module\n* **Matplotlib** - Plotting and visualisation\n* (optional) **SAO** - Sequential approximated optimizers\n* (optional) [**opt_einsum**](https://optimized-einsum.readthedocs.io/en/stable/install.html) - Optimized function for `EinSum` module\n\nFor fast linear solvers for sparse matrices:\n* (optional) [**pypardiso**](https://github.com/haasad/PyPardisoProject) - Uses the Intel OneAPI PARDISO solver (recommended)\n* (optional) [**scikit-umfpack**](https://scikit-umfpack.github.io/scikit-umfpack/install.html) - Fast LU linear solver based on UMFPACK\n* (optional) [**scikit-sparse**](https://github.com/scikit-sparse/scikit-sparse) - Fast Cholesky solver based on CHOLMOD\n* (optional) [**cvxopt**](https://cvxopt.org/install/index.html) - Another fast Cholesky solver based on CHOLMOD\n\n__Note on linear solvers for sparse matrices:__ Scipy implements a version of LU which is quite slow. To increase the \nspeed of the optimization, `pypardiso` is recommended as it contains a very robust and flexible solver for symmetric \nand asymmetric matrices. An alternative is `scikit-umfpack` which provides a fast LU factorization. For symmetric \nmatrices a Cholesky factorization is recommended (not provided with Scipy), which can be used by either installing \n`scikit-sparse` or `cvxopt`.\n\n# License\npyMOTO is available under te [MIT License](https://opensource.org/licenses/MIT).\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "A modular approach for topology optimization",
"version": "1.3.0",
"project_urls": {
"Homepage": "https://github.com/aatmdelissen/pyMOTO"
},
"split_keywords": [
"topology optimization",
"generative design",
"structural",
"sensitivities",
"derivatives",
"framework",
"modular",
"blocks",
"pipeline"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2442f94d29266c504a330ca64fc6c9da6e478d1329d3e2392bfc6e9fd6f1684b",
"md5": "12f0264c472d8d9923bb8c7085a22424",
"sha256": "f52e4b1399e3790fb8903a529fd1906d9fba2214f87ee5a9fef293fd090b15cf"
},
"downloads": -1,
"filename": "pyMOTO-1.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "12f0264c472d8d9923bb8c7085a22424",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 66566,
"upload_time": "2024-02-01T12:37:45",
"upload_time_iso_8601": "2024-02-01T12:37:45.551731Z",
"url": "https://files.pythonhosted.org/packages/24/42/f94d29266c504a330ca64fc6c9da6e478d1329d3e2392bfc6e9fd6f1684b/pyMOTO-1.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "602ac77be0abd4fd48125b0874adab0cef9218681b36ee12ab621ca97cbb3ba1",
"md5": "d15fb46463809eb3741bb53acbe3bc5b",
"sha256": "42858ec551569f7ef9d2d21d4c88cd5344a4139b057534e82900f9a5ee4777e7"
},
"downloads": -1,
"filename": "pyMOTO-1.3.0.tar.gz",
"has_sig": false,
"md5_digest": "d15fb46463809eb3741bb53acbe3bc5b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 80626,
"upload_time": "2024-02-01T12:37:47",
"upload_time_iso_8601": "2024-02-01T12:37:47.177459Z",
"url": "https://files.pythonhosted.org/packages/60/2a/c77be0abd4fd48125b0874adab0cef9218681b36ee12ab621ca97cbb3ba1/pyMOTO-1.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-01 12:37:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aatmdelissen",
"github_project": "pyMOTO",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pymoto"
}