{ "info": { "author": "mrava", "author_email": "mrava@equinor.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 1 - Planning", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "Natural Language :: English", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering :: Mathematics" ], "description": "![PyLops-distributed](https://github.com/equinor/pylops-distributed/blob/master/docs/source/_static/distr-pylops_b.png)\n\n[![Build Status](https://travis-ci.org/equinor/pylops-distributed.svg?branch=master)](https://travis-ci.org/equinor/pylops-distributed)\n[![AzureDevOps Status](https://dev.azure.com/MRAVA/PyLops/_apis/build/status/equinor.pylops-distributed?branchName=master)](https://dev.azure.com/MRAVA/PyLops/_build/latest?definitionId=3&branchName=master)\n[![Documentation Status](https://readthedocs.org/projects/pylops-distributed/badge/?version=latest)](https://pylops-distributed.readthedocs.io/en/latest/?badge=latest)\n[![OS-support](https://img.shields.io/badge/OS-linux,osx-850A8B.svg)](https://github.com/equinor/pylops)\n[![Slack Status](https://img.shields.io/badge/chat-slack-green.svg)](https://pylops.slack.com)\n\n\n:vertical_traffic_light: :vertical_traffic_light: This library is under early development.\nExpect things to constantly change until version v1.0.0. :vertical_traffic_light: :vertical_traffic_light:\n\n## Objective\nThis library is an extension of [PyLops](https://pylops.readthedocs.io/en/latest/)\nfor distributed operators.\n\nAs much as [numpy](http://www.numpy.org) and [scipy](http://www.scipy.org/scipylib/index.html) lie\nat the core of the parent project PyLops, PyLops-distributed heavily builds on top of\n[Dask](https://dask.org), a Python library for distributed computing.\n\nDoing so, linear operators can be distributed across several processes on a single node\nor even across multiple nodes. Their forward and adjoint\nare first lazily built as directed acyclic graphs and evaluated only when requested by\nthe user (or automatically within one of our solvers).\n\nHere is a simple example showing how a diagonal operator can be created,\napplied and inverted using PyLops:\n```python\nimport numpy as np\nfrom pylops import Diagonal\n\nn = 10\nx = np.ones(n)\nd = np.arange(n) + 1\n\nDop = Diagonal(d)\n\n# y = Dx\ny = Dop*x\n# x = D'y\nxadj = Dop.H*y\n# xinv = D^-1 y\nxinv = Dop / y\n```\n\nand similarly using PyLops-distributed:\n```python\nimport numpy as np\nimport dask.array as da\nimport pylops_distributed\nfrom pylops_distributed import Diagonal\n\n# set-up client\nclient = pylops_distributed.utils.backend.dask()\n\nn = 10\nx = da.ones(n, chunks=(n//2,))\nd = da.from_array(np.arange(n) + 1, chunks=(n//2, n//2))\n\nDop = Diagonal(d)\n\n# y = Dx\ny = Dop*x\n# x = D'y\nxadj = Dop.H*y\n# xinv = D^-1 y\nxinv = Dop / y\n\nda.compute((y, xadj, xinv))\nclient.close()\n```\n\nIt is worth noticing two things at this point:\n\n- in this specific case we did not even need to reimplement the ``Derivative`` operator.\n Calling numpy operations as methods (e.g., ``x.sum()``) instead of functions (e.g., ``np.sum(x)``)\n makes it automatic for our operator to act as a distributed operator when a dask array is provided instead. Unfortunately not all numpy functions are also implemented as methods: in those cases we\n reimplement the operator directly within PyLops-distributed.\n- Using ``*`` and ``.H*`` is still possible also within PyLops-distributed, however when initializing an\n operator we will need to decide whether we want to simply create dask graph or also evaluation.\n This gives flexibility as we can decide if and when apply evaluation using the ``compute`` method\n on a dask array of choice.\n\n\n## Getting started\n\nYou need **Python 3.5 or greater**.\n\n#### From PyPi\nComing soon...\n\n#### From Github\n\nYou can also directly install from the master node\n\n```\npip install https://git@github.com/equinor/pylops-distributed.git@master\n```\n\n## Contributing\n*Feel like contributing to the project? Adding new operators or tutorial?*\n\nFollow the instructions from [PyLops official documentation](https://pylops.readthedocs.io/en/latest/contributing.html).\n\n## Documentation\nThe official documentation of PyLops-distributed is available [here](https://pylops-distributed.readthedocs.io/).\n\n\nMoreover, if you have installed PyLops using the *developer environment* you can also build the documentation locally by\ntyping the following command:\n```\nmake doc\n```\nOnce the documentation is created, you can make any change to the source code and rebuild the documentation by\nsimply typing\n```\nmake docupdate\n```\nNote that if a new example or tutorial is created (and if any change is made to a previously available example or tutorial)\nyou are required to rebuild the entire documentation before your changes will be visible.\n\n\n## History\nPyLops-Distributed was initially written and it is currently maintained by [Equinor](https://www.equinor.com).\nIt is an extension of [PyLops](https://pylops.readthedocs.io/en/latest/) for large-scale optimization with\n*distributed* linear operators that can be tailored to our needs, and as contribution to the free software community.\n\n\n## Contributors\n* Matteo Ravasi, mrava87\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "algebra,inverse problems,large-scale optimization", "license": "", "maintainer": "", "maintainer_email": "", "name": "pylops-distributed", "package_url": "https://pypi.org/project/pylops-distributed/", "platform": "", "project_url": "https://pypi.org/project/pylops-distributed/", "project_urls": null, "release_url": "https://pypi.org/project/pylops-distributed/0.0.0/", "requires_dist": [ "numpy (>=1.15.0)", "scipy", "llvmlite", "numba", "dask[complete] (>=2.0.0)", "pylops" ], "requires_python": "", "summary": " An extension to PyLops for distributed linear operators.", "version": "0.0.0" }, "last_serial": 5768105, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "352c8998e6921e6dc3628173ec275ff7", "sha256": "a4c1b0c389e7b171334c9cb972cca19ab2aa3a11a8a920dff99d2899d071a777" }, "downloads": -1, "filename": "pylops_distributed-0.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "352c8998e6921e6dc3628173ec275ff7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40576, "upload_time": "2019-09-01T21:18:20", "url": "https://files.pythonhosted.org/packages/41/37/0afbbc3ac90e978062067341040d0563492ae9b847793a7394877b5cae8e/pylops_distributed-0.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6596736a3444ec462d4b52ca8ae8eefb", "sha256": "5d0cde08f575b9dd9a9e84b8dbbc42c22a822c8bb252254eba418065dfba0977" }, "downloads": -1, "filename": "pylops_distributed-0.0.0.tar.gz", "has_sig": false, "md5_digest": "6596736a3444ec462d4b52ca8ae8eefb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25627, "upload_time": "2019-09-01T21:18:23", "url": "https://files.pythonhosted.org/packages/8c/86/27ac279c41dd0ed90f2c8b3c1126c97c6b7945fb502d6dca1565313273ee/pylops_distributed-0.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "352c8998e6921e6dc3628173ec275ff7", "sha256": "a4c1b0c389e7b171334c9cb972cca19ab2aa3a11a8a920dff99d2899d071a777" }, "downloads": -1, "filename": "pylops_distributed-0.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "352c8998e6921e6dc3628173ec275ff7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40576, "upload_time": "2019-09-01T21:18:20", "url": "https://files.pythonhosted.org/packages/41/37/0afbbc3ac90e978062067341040d0563492ae9b847793a7394877b5cae8e/pylops_distributed-0.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6596736a3444ec462d4b52ca8ae8eefb", "sha256": "5d0cde08f575b9dd9a9e84b8dbbc42c22a822c8bb252254eba418065dfba0977" }, "downloads": -1, "filename": "pylops_distributed-0.0.0.tar.gz", "has_sig": false, "md5_digest": "6596736a3444ec462d4b52ca8ae8eefb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25627, "upload_time": "2019-09-01T21:18:23", "url": "https://files.pythonhosted.org/packages/8c/86/27ac279c41dd0ed90f2c8b3c1126c97c6b7945fb502d6dca1565313273ee/pylops_distributed-0.0.0.tar.gz" } ] }