package prbnmcn-linalg

  1. Overview
  2. Docs

Rational allows to manipulate Q.t-valued vectors

type 'a k = 'a

Ambient monad.

type 'a m = 'a

Representation.

type 'a shape = 'a Tensor.Int.t

Type of shapes.

type ('a, 'b) morphism = ('a, 'b) Tensor.Int.Morphism.t

Type of shape morphisms.

type elt = Q.t

Type of elements.

type 'i t = ('i shape, 'i m, elt m) Intf.vec
type 'i out = ('i shape, 'i m, elt m, unit m) Intf.ovec
val idim : 'i t -> 'i shape

Dimensions of an input vector.

val odim : 'i out -> 'i shape

Dimensions of an output vector.

val make : 'i shape -> ('i m -> elt m) -> 'i t

Creates an input vector from a dimension and a function.

val pullback : ('j, 'i) morphism -> 'i t -> 'j t k

Pullback a vector along a shape morphism.

val get : 'i t -> 'i m -> elt m k

Get an elemement of an input vector.

  • raises Out_of_bounds

    if given index is not in the domain of the vector.

val unsafe_get : 'i t -> 'i m -> elt m

Get an elemement of an input vector. Does not perform bound checking.

val set : 'i out -> 'i m -> elt m -> unit m k

Set an elemement in an output vector.

  • raises Out_of_bounds

    if given index is not in the domain of the vector.

val map : ('a m -> 'b m) -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec
val mapi : ('i m -> 'a m -> 'b m) -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec
val map2 : ('a m -> 'b m -> 'c m) -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec -> ('i shape, 'i m, 'c m) Intf.vec k
val map2i : ('i m -> 'a m -> 'b m -> 'c m) -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec -> ('i shape, 'i m, 'c m) Intf.vec k
val assign : ('i shape, 'i m, 'a m, unit m) Intf.ovec -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, unit m) Intf.vec k
val zero : 'i shape -> 'i t

Everywhere zero vector.

val one : 'i shape -> 'i t

Everywhere one vector.

val const : 'i shape -> elt m -> 'i t

Constant vector.

val basis : 'i shape -> 'i m -> elt m -> 'i t k

basis s i r is the vector of shape s everywhere equal to R.zero except at index i where it is equal to r. Raises Out_of_bounds if i does not belong to s.

val add : 'i t -> 'i t -> 'i t k

Pointwise addition. Raises Dimensions_mismatch if the shape of operands are not equal.

val sub : 'i t -> 'i t -> 'i t k

Pointwise subtraction. Raises Dimensions_mismatch if the shape of operands are not equal.

val mul : 'i t -> 'i t -> 'i t k

Pointwise multiplication. Raises Dimensions_mismatch if the shape of operands are not equal.

val neg : 'i t -> 'i t

Pointwise negation.

val smul : elt m -> 'i t -> 'i t

Multiplication by a scalar.

val swap : 'i m -> 'i m -> 'i t -> 'i t k

Swapping of indices. Raises Out_of_bounds if given indices are invalid.

val iter : ('i shape, 'i m, unit m) Intf.vec -> unit m

iter v iterates the effectful computation at each index

val reduce : (elt m -> elt m -> elt m) -> elt m -> ('i shape, 'i m, elt m) Intf.vec -> elt m

reduce op zero v folds the binary, associative operator op over the elements of v with initial value zero. Fold ordering is implementation-dependent: consider using commutative operators.

val (:=) : ('i shape, 'i m, 'a m, unit m) Intf.ovec -> ('i shape, 'i m, 'a m) Intf.vec -> unit m k

Vector assignement.

  • raises Dimensions_mismatch

    if the size of operands are not equal.

val add_ : 'i out -> 'i t -> 'i t -> unit m k

Pointwise addition, stores result in first operand.

  • raises Dimensions_mismatch

    if the size of operands are not equal.

val sub_ : 'i out -> 'i t -> 'i t -> unit m k

Pointwise subtraction, stores result in first operand.

  • raises Dimensions_mismatch

    if the size of operands are not equal.

val mul_ : 'i out -> 'i t -> 'i t -> unit m k

Pointwise multiplication, stores result in first operand.

  • raises Dimensions_mismatch

    if the size of operands are not equal.

val dot : 'i t -> 'i t -> elt m k

Dot product.

  • raises Dimensions_mismatch

    if the size of operands are not equal.

module Infix : sig ... end