An intelligent block matrix library for numpy, PyTorch, and beyond.
Python
307
46 commits
updated Aug 4, 2024
An intelligent block matrix library for numpy, PyTorch, and beyond. Crafted by Brandon Amos with significant contributions by Eric Wong.
Let's try to construct the KKT matrix from Mattingley and Boyd's CVXGEN paper in numpy and PyTorch:

Without block, there is no way to infer the appropriate sizes of
the zero and identity matrix blocks.
It is an inconvenience to think about what size these
matrices should be.

block do?Block acts a lot like np.bmat and replaces:
'I' with an appropriately shaped identity matrix.'-I' with an appropriately shaped negated identity matrix.Yes, block is meant to be a quick prototyping tool and
there's probably a more efficient way to solve your system
if it has a lot of zeros or identity elements.
block handle numpy and PyTorch with the same interface?I wrote the logic to handle matrix sizing to be agnostic of the matrix library being used. numpy and PyTorch are just backends. More backends can easily be added for your favorite Python matrix library.
class Backend(metaclass=ABCMeta):
@abstractmethod
def extract_shape(self, x): pass
@abstractmethod
def build_eye(self, n): pass
@abstractmethod
def build_full(self, shape, fill_val): pass
@abstractmethod
def build(self, rows): pass
@abstractmethod
def is_complete(self, rows): pass
pip install blockfrom block import blocktest.py: nosetests test.pyI'd be happy to hear from you about any issues or features you add, please file an issue or send in a PR.
This repository is Apache-licensed.
Python
100.0%
An intelligent block matrix library for numpy, PyTorch, and beyond.
Python
307
46 commits
updated Aug 4, 2024
An intelligent block matrix library for numpy, PyTorch, and beyond. Crafted by Brandon Amos with significant contributions by Eric Wong.
Let's try to construct the KKT matrix from Mattingley and Boyd's CVXGEN paper in numpy and PyTorch:

Without block, there is no way to infer the appropriate sizes of
the zero and identity matrix blocks.
It is an inconvenience to think about what size these
matrices should be.

block do?Block acts a lot like np.bmat and replaces:
'I' with an appropriately shaped identity matrix.'-I' with an appropriately shaped negated identity matrix.Yes, block is meant to be a quick prototyping tool and
there's probably a more efficient way to solve your system
if it has a lot of zeros or identity elements.
block handle numpy and PyTorch with the same interface?I wrote the logic to handle matrix sizing to be agnostic of the matrix library being used. numpy and PyTorch are just backends. More backends can easily be added for your favorite Python matrix library.
class Backend(metaclass=ABCMeta):
@abstractmethod
def extract_shape(self, x): pass
@abstractmethod
def build_eye(self, n): pass
@abstractmethod
def build_full(self, shape, fill_val): pass
@abstractmethod
def build(self, rows): pass
@abstractmethod
def is_complete(self, rows): pass
pip install blockfrom block import blocktest.py: nosetests test.pyI'd be happy to hear from you about any issues or features you add, please file an issue or send in a PR.
This repository is Apache-licensed.
Python
100.0%