Skip to main content

Native (C++) implementation of Banded Matrices for TensorFlow

Project description

Banded Matrices

Overview

A library providing C++ linear algebra operators (matmul, solve, ...) dedicated to banded matrices and a TensorFlow interface. This extends the set of existing TensorFlow operators which as of August 2021 only include banded_triangular_solve.

Details on the implemented operators may be found in Durrande et al.: "Banded Matrix Operators for Gaussian Markov Models in the Automatic Differentiation Era", and in Adam et al.: "Doubly Sparse Variational Gaussian Processes"

Installation

For users

To install the latest (stable) release of the toolbox from PyPI, use pip:

$ pip install banded_matrices

For contributors

This project uses Poetry to manage dependencies in a local virtual environment. To install Poetry, follow the instructions in the Poetry documentation.

To install this project in editable mode, run the commands below from the root directory of the banded_matrices repository.

poetry install

This command creates a virtual environment for this project in a hidden .venv directory under the root directory.

You must also run the poetry install command to install updated dependencies when the pyproject.toml file is updated, for example after a git pull.

NOTE: Unlike most other Python packages, by installing the banded_matrices package from source you will trigger a compilation of the C++ TensorFlow ops library. This means that running poetry install can take a while - in the order of 5 minutes, depending on the machine you are installing onto.

Known issues

Poetry versions above 1.0.9 don't get along (for now) with Ubuntu 18.04, if you have this OS, you will likely need to install version 1.0.9. This can be done with the following command

wget https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py
POETRY_VERSION=1.0.9 python get-poetry.py 

Recommended Poetry installation might pick up Python 2 if it is used by the operating system, this will cause problems with looking up libraries and sorting out dependencies if your library uses Python 3. If this happens, poetry has a command you can use to instruct it to use a correct Python version (here assuming you want to use python3.7 and have it installed on your system - note that python3.7-venv package will need to be installed as well).

poetry env use python3.7 && poetry install

The poetry install command might fail to install certain Python packages (those that use the 'manylinux2010' platform tag), if the version of pip installed when creating the Poetry virtual environment is too old. Unfortunately the version of pip used when creating the virtual environment is vendored with each Python version, and it is not possible to update this.

The solution is to update the version of pip in the Poetry virtual environment after the initial install fails, and then reattempt the installation. To do this, use the command:

poetry install || { poetry run pip install -U pip==20.0.2 && poetry install; }

Running the tests

Run these commands from the root directory of this repository. To run the full Python test suite, including pylint and Mypy, run:

poetry run task test

Alternatively, you can run just the unit tests, starting with the failing tests and exiting after the first test failure:

poetry run task quicktest

To run linting of the C++ code (using cpplint), run:

poetry run task cpplint

NOTE: Running the tests requires that the project virtual environment has been updated. See Installation.

The Secondmind Labs Community

Getting help

Bugs, feature requests, pain points, annoying design quirks, etc: Please use GitHub issues to flag up bugs/issues/pain points, suggest new features, and discuss anything else related to the use of banded_matrices that in some sense involves changing the banded_matrices code itself. We positively welcome comments or concerns about usability, and suggestions for changes at any level of design. We aim to respond to issues promptly, but if you believe we may have forgotten about an issue, please feel free to add another comment to remind us.

Slack workspace

We have a public Secondmind Labs slack workspace. Please use this invite link and join the #banded_matrices channel, whether you'd just like to ask short informal questions or want to be involved in the discussion and future development of banded_matrices.

Contributing

All constructive input is very much welcome. For detailed information, see the guidelines for contributors.

Maintainers

Banded_matrices was originally created at Secondmind Labs and is now maintained by (in alphabetical order) Vincent Adam, Artem Artemev. We are grateful to all contributors who have helped shape banded_matrices.

Banded_matrices is an open source project. If you have relevant skills and are interested in contributing then please do contact us (see "The Secondmind Labs Community" section above).

We are very grateful to our Secondmind Labs colleagues, maintainers of GPflow, GPflux, Trieste and Bellman, for their help with creating contributing guidelines, instructions for users and open-sourcing in general.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

banded_matrices-0.1.3.tar.gz (67.2 kB view details)

Uploaded Source

Built Distributions

banded_matrices-0.1.3-cp39-cp39-manylinux_2_35_x86_64.whl (94.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.35+ x86-64

banded_matrices-0.1.3-cp38-cp38-manylinux_2_35_x86_64.whl (94.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.35+ x86-64

File details

Details for the file banded_matrices-0.1.3.tar.gz.

File metadata

  • Download URL: banded_matrices-0.1.3.tar.gz
  • Upload date:
  • Size: 67.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for banded_matrices-0.1.3.tar.gz
Algorithm Hash digest
SHA256 51701b9e0ea56807556c17f5a770c249326fd70c86468d899a7a271d4122e792
MD5 19ae2a69a30873ef40038317341b24d6
BLAKE2b-256 23dd6873f8840218d12bf0f6fd057281bde104f368ee92c2faf1b9dbd3b317d5

See more details on using hashes here.

File details

Details for the file banded_matrices-0.1.3-cp39-cp39-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for banded_matrices-0.1.3-cp39-cp39-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 169c0db5f32c940f27fef7b1256e95e85f2f8f47e435685c8c995a4f857f106a
MD5 4a76ec496fd3aa0bfc787872961eaa92
BLAKE2b-256 80060f89d7f263235dc3c5acc414a60df178287b4542576654aead4c41c5c038

See more details on using hashes here.

File details

Details for the file banded_matrices-0.1.3-cp38-cp38-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for banded_matrices-0.1.3-cp38-cp38-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 30beda3d08e81519b78d6802446718925116b3547491ed256d7b2aaa1e2d894d
MD5 cd11c4481b2d56680221e754e49e8313
BLAKE2b-256 694f063365cee8efb9c8db59d4fd8d99dfb368c3e3307d48d59f24c7811b5f68

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page