# package lacaml

Legend:
Library
Module
Module type
Parameter
Class
Class type
`type patt = [ `
1. `| `Full`
2. `| `Utr`
3. `| `Ltr`
4. `| `Upent of int`
5. `| `Lpent of int`
` ]`

Pattern of a matrix operation

Documentation of matrix patterns:

x = accessed ? = not accessed

``Full` for an `(m, n) = (3, 4)` full matrix operation:

x x x x x x x x x x x x

``Utr` for an `(m, n) = (3, 4)` upper trapezoidal matrix operation:

x x x x ? x x x ? ? x x

``Utr` for an `(m, n) = (4, 3)` upper trapezoidal matrix operation (the accessed part is actually only upper triangular due to dimension constraints):

x x x ? x x ? ? x ? ? ?

``Utr` for an `(m, n) = (3, 3)` upper triangular matrix operation:

x x x ? x x ? ? x

``Ltr` for an `(m, n) = (4, 3)` lower trapezoidal matrix operation:

x ? ? x x ? x x x x x x

``Ltr` for an `(m, n) = (3, 4)` lower trapezoidal matrix operation (the accessed part is actually only lower triangular due to dimension constraints):

x ? ? ? x x ? ? x x x ?

``Ltr` for an `(m, n) = (3, 3)` lower triangular matrix operation:

x x x ? x x ? ? x

``Upent 2` for an `(m, n) = (4, 3)` upper pentagonal matrix operation. The pattern argument describes the number of topmost full rows:

x x x x x x ? x x ? ? x

``Lpent 2` for an `(m, n) = (3, 4)` lower pentagonal matrix operation. The pattern argument describes the number of leftmost full columns:

x x ? ? x x x ? x x x x

The transpose of a ``Upent l` operation is an ``Lpent l` operation if `m` and `n` are also flipped.

Note that the following holds:

* ``Utr = `Upent 1` * ``Ltr = `Lpent 1`

Whether an operation operates on a triangular or trapezoidal part of a matrix is inferred from size parameters `m` and `n`, which are passed separately.

Pentagonal matrix patterns have the advantage of being fractal: it is always possible to cut a pentagonal pattern along an arbitrary row or column and obtain two sub-problems that can also be described by a pentagonal pattern. This makes pentagonal patterns suitable for parallelizing many operations, e.g. on triagonal matrices, by cutting them into smaller problems using pentagonal patterns. Neither triagonal nor trapezoidal patterns are fractal. Rectangular patterns are fractal, but too limited in expressiveness.

```type 'mat unop = ?patt:patt -> ?m:int -> ?n:int -> ?br:int -> ?bc:int -> ?b:'mat -> ?ar:int -> ?ac:int -> 'mat -> 'mat```
```type 'mat binop = ?patt:patt -> ?m:int -> ?n:int -> ?cr:int -> ?cc:int -> ?c:'mat -> ?ar:int -> ?ac:int -> 'mat -> ?br:int -> ?bc:int -> 'mat -> 'mat```

Innovation. Community. Security.

##### Ecosystem
Packages Community Events OCaml Planet Jobs
##### Policies
Carbon Footprint Governance Privacy Code of Conduct