/formulae

A set of function to deal with analytical formulae.

Primary LanguageElixir

Formulae    Kantox ❤ OSS  Test  Dialyzer

Nifty precompiled formulae handling

Installation

def deps do
  [{:formulae, "~> 0.11"}]
end

Using

iex|1 ▸ f = Formulae.compile("rem(a, 5) - b == 0")
#ℱ<[
  sigil: "~F[rem(a, 5) - b == 0]",
  eval: &:"Elixir.Formulae.rem(a, 5) - b == 0".eval/1,
  formula: "rem(a, 5) - b == 0",
  guard: nil,
  module: :"Elixir.Formulae.rem(a, 5) - b == 0",
  variables: [:a, :b]
]>
iex|2 ▸ f.eval.(a: 11, b: 1)
true
iex|3 ▸ f.variables
[:a, :b]
iex|4 ▸ f.module
:"Elixir.Formulae.rem(a, 5) - b == 0"

Changelog

  • 0.14.0 [UPD] Fully optional Finitomata, configurable through config :formulae, compiler: :finitomata
  • 0.13.0 [UPD] Elixir v1.16, modern libs
  • 0.12.0 [ENH] Formulae.Compiler to avoid compilation glitches in highly concurrent environment
  • 0.11.7 make dialyzer happy with new :imports formats
  • 0.11.6 improve syntax for imports with arguments, accept {:math, only: [pi: 0]}
  • 0.11.5 [FIX] elixir nested aliases + [FEAT] accept except: and only: for imports
  • 0.11.4 [FIX] reattempt to create module if not existing on eval/3 call
  • 0.11.2 [FIX] restrict apply/3, spawn/3, and import/2
  • 0.11.1 [FIX] Formulae.formulas/1 + aliases are handled more naturally
  • 0.11.0 v1.0.0 pre-release
    • options in a call to Formulae.compile/2
    • accurate validation of module existence
    • default arguments
    • aliases
    • imports
  • 0.10.0
    • Inspect and String.Chars protocols implementation
    • Formulae.Sigils.sigil_F/2 aka ~F[x > y]
  • 0.9.0
    • options: [eval: :guard, alias: SomeModName]
    • fixes for modern Elixir
    • optimizations in module generation
    • benchmarks
  • 0.8.0 — generate combinators functions in Formulae module