pyMOTO


NamepyMOTO JSON
Version 1.4.0 PyPI version JSON
download
home_pagehttps://github.com/aatmdelissen/pyMOTO
SummaryA modular approach for topology optimization
upload_time2024-09-05 20:00:14
maintainerNone
docs_urlNone
authorArnoud Delissen
requires_pythonNone
licenseMIT License
keywords topology optimization generative design structural sensitivities derivatives framework modular blocks pipeline
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![10.5281/zenodo.8138859](https://zenodo.org/badge/DOI/10.5281/zenodo.8138859.svg)](https://doi.org/10.5281/zenodo.8138859) 
[![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


For development, a local installation of `pyMOTO` can be done by first downloading/cloning the entire git repo, and then calling 
`pip install -e .` in the `pyMOTO` folder (of course from within your virtual environment).

## Dependencies
* [**numpy**](https://numpy.org/doc/stable/) - Dense linear algebra and solvers
* [**scipy**](https://docs.scipy.org/doc/scipy/) - Sparse linear algebra and solvers
* [**sympy**](https://docs.sympy.org/latest/index.html) - Symbolic differentiation for `MathGeneral` module
* [**Matplotlib**](https://matplotlib.org/stable/) - Plotting and visualisation
* (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": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "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/10/02/99f92445243f9b43514155f5289cfec4b806aae8900c4120f4bbda4fd919/pymoto-1.4.0.tar.gz",
    "platform": null,
    "description": "[![10.5281/zenodo.8138859](https://zenodo.org/badge/DOI/10.5281/zenodo.8138859.svg)](https://doi.org/10.5281/zenodo.8138859) \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\nFor development, a local installation of `pyMOTO` can be done by first downloading/cloning 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**](https://numpy.org/doc/stable/) - Dense linear algebra and solvers\n* [**scipy**](https://docs.scipy.org/doc/scipy/) - Sparse linear algebra and solvers\n* [**sympy**](https://docs.sympy.org/latest/index.html) - Symbolic differentiation for `MathGeneral` module\n* [**Matplotlib**](https://matplotlib.org/stable/) - Plotting and visualisation\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.4.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": "e4696b3bb8b5da16ffd1d98be3bbe9e980dd391f2081bae82d2c6f624b7b4a8a",
                "md5": "1799f7b23bbf678fe01bc9da8bb98ab3",
                "sha256": "3fe22e5031ed54c35af14c065ad7ffdc2ea466cb3ad6fbe2c05178522f8cd2e6"
            },
            "downloads": -1,
            "filename": "pyMOTO-1.4.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1799f7b23bbf678fe01bc9da8bb98ab3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 80377,
            "upload_time": "2024-09-05T20:00:11",
            "upload_time_iso_8601": "2024-09-05T20:00:11.764752Z",
            "url": "https://files.pythonhosted.org/packages/e4/69/6b3bb8b5da16ffd1d98be3bbe9e980dd391f2081bae82d2c6f624b7b4a8a/pyMOTO-1.4.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "100299f92445243f9b43514155f5289cfec4b806aae8900c4120f4bbda4fd919",
                "md5": "06fcfaafc5fb4b68051aef58c77676fc",
                "sha256": "c51b7b16decb11725dc3832410a04e3f4a3de8bcb29945b85e89a80ed40947da"
            },
            "downloads": -1,
            "filename": "pymoto-1.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "06fcfaafc5fb4b68051aef58c77676fc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 97453,
            "upload_time": "2024-09-05T20:00:14",
            "upload_time_iso_8601": "2024-09-05T20:00:14.111942Z",
            "url": "https://files.pythonhosted.org/packages/10/02/99f92445243f9b43514155f5289cfec4b806aae8900c4120f4bbda4fd919/pymoto-1.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-05 20:00:14",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "aatmdelissen",
    "github_project": "pyMOTO",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pymoto"
}
        
Elapsed time: 0.35817s