Module garoupa.algebra.matrix.mat8bit

Classes

class Mat8bit (i)
Expand source code
class Mat8bit(Element):
    def __init__(self, i, _m=None):
        """
        17x17 with 8 zeros to match 128 bits.

        Usage:

        >>> a = Mat8bit(127)
        >>> b = Mat8bit(88)
        >>> a * b
        [[1. 0. 0. 0. 1.]
         [0. 1. 0. 0. 1.]
         [0. 0. 1. 1. 1.]
         [0. 0. 0. 1. 0.]
         [0. 0. 0. 0. 1.]]
        >>> (a * b) * ~b == a
        True
        """
        super().__init__(i, 2**8)
        if i == self.i and _m is not None:
            self.m = _m
        else:
            self.m = int2bm8bit(self.i)

    def __mul__(self, other):
        m = (self.m @ other.m) % 2
        return Mat8bit(bm2int8bit(m), _m=m)

    def __repr__(self):
        return f"{self.m}"

    def __invert__(self):
        import numpy as np

        m = np.linalg.inv(self.m) % 2
        return Mat8bit(bm2int8bit(m), _m=m)

Element(i: int, order: int)

17x17 with 8 zeros to match 128 bits.

Usage:

>>> a = Mat8bit(127)
>>> b = Mat8bit(88)
>>> a * b
[[1. 0. 0. 0. 1.]
 [0. 1. 0. 0. 1.]
 [0. 0. 1. 1. 1.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]
>>> (a * b) * ~b == a
True

Ancestors

Inherited members