argamak 🐎

Hex Package Hex Docs License Build

A Gleam library for tensor maths.

β€œI admire the elegance of your method of computation; it must be nice to ride through these fields upon the horse of true mathematics while the like of us have to make our way laboriously on foot.”

β€”Albert Einstein, to Tullio Levi-Civita, circa 1915–1917

Argamak: A shiny steed.

Installation

Mix

# mix.exs
defp deps do
  [
    {:nx, "~> 0.1.0-dev", github: "elixir-nx/nx", branch: "main", sparse: "nx"},
    {:argamak, "~> 0.1"},
  ]
end

For the Erlang compilation target, argamak depends on Elixir.Nx and, for the time being, is easiest to use as a dependency of a Mix project.

Usage

// derby.gleam
import argamak/space
import argamak/tensor

pub type Axis {
  Horse
  Trial
}

pub fn print_times(from list: List(Float)) {
  assert Ok(space) = space.d2(#(Horse, 3), #(Trial, -1))
  try tensor = tensor.from_floats(of: list, into: space)

  tensor
  |> tensor.print(wrap_at: -1, meta: True)
  |> Ok
}

Example

> derby.print_times(from: [1.2, 1.3, 1.3, 1., 1.5, 0.9])
// Tensor
// format: Float32
// space: D2 #(Horse, 3), #(Trial, 2)
// data:
// [[1.2, 1.3],
//  [1.3, 1.0],
//  [1.5, 0.9]]
Ok(Nil)
✨