A small library providing a Clojure/Clojurescript compatible
  collection of maths related protocols, general math functions, bit
  manipulation functions, as well as macros to produce inline expanded,
  nested expressions to create more legible source code for involved
  maths and to avoid extraneous reduce calls caused by the higher
  arity versions of Clojure’s built-in maths functions.
The macros are useful to simplify code for many geometry & matrix operations and are defined for both Clojure & ClojureScript.
The protocols defined here are used by a number of other thi.ng projects, incl. thi.ng/color, thi.ng/geom, thi.ng/morphogen.
Note: This library relies on the new conditional reader syntax of recent Clojure & Clojurescript versions and therefore is not compatible with Clojure versions < 1.7.0…
[thi.ng/math "0.3.1"]0.3.1[org.clojure/clojure "1.11.1"][org.clojure/clojurescript "1.11.4"][thi.ng/typedarrays "0.1.7"][criterium "0.4.6"][com.cemerick/clojurescript.test "0.3.3"][lein-cljsbuild "1.1.8"]This project is written in a literate programming format and requires
  Emacs & Org-mode to generate usable source code. Assuming both tools
  are installed, the easiest way to generate a working project is via
  command line (make sure emacs is on your path or else edit its path
  in tangle.sh):
git clone https://github.com/thi.ng/math.git
cd math
./tangle.sh src/*.org test/*.orgTangling is the process of extracting & combining source blocks from
  .org files into an actual working project/source tree. Once tangling
  is complete, you can cd into the generated project directory
  (babel) and then use lein as usual.
The project.clj file defines an alias to trigger a complete build &
  tests for both CLJ & CLJS versions.
cd babel
lein cleantestTo build the Clojurescript version simply run lein cljsbuild test
  from the same directory. A small HTML harness for the resulting JS
  file is also located in that folder (babel/index.html), allowing for
  further experimentation in the browser.
Editing code blocks or files in Org-mode, then re-loading & testing
  changes is quite trivial. Simply launch a REPL (via lein or Emacs)
  as usual. Everytime you’ve made changes to an .org file, re-tangle
  it from Emacs (C-c C-v t) or tangle.sh, then reload the namespace
  in the REPL via (require 'thi.ng.math... :reload) or similar.
(defproject thi.ng/math "<<version>>"
  :description  "CLJ/CLJS math functions, macros & utilities"
  :url          "<<project-url>>"
  :license      {:name "Apache Software License 2.0"
                 :url "http://www.apache.org/licenses/LICENSE-2.0"
                 :distribution :repo}
  :scm          {:name "git"
                 :url "[email protected]:thi-ng/math.git"}
  :min-lein-vesion "2.4.0"
  :dependencies [<<dep-clj>>
                 <<dep-cljs>>
                 <<dep-tarrays>>]
  :profiles     {:dev {:dependencies [<<dep-criterium>>]
                       :plugins      [<<dep-cljsbuild>>
                                      <<dep-cljs-test>>]
                       :global-vars  {*warn-on-reflection* true}
                       :jvm-opts     ^:replace ["-Dclojure.compiler.direct-linking=true"]
                       :aliases      {"cleantest" ["do" "clean," "test," "cljsbuild" "test"]}}}
  :cljsbuild    {:builds [{:id           "simple"
                           :source-paths ["src" "test"]
                           :compiler     {:output-to "<<cljs-artefact-path>>"
                                          :optimizations :whitespace
                                          :pretty-print true}}]
                 :test-commands {"unit-tests" ["phantomjs" :runner "<<cljs-artefact-path>>"]}}
  :pom-addition [:developers
                 [:developer
                  [:name "Karsten Schmidt"]
                  [:url "https://thi.ng"]
                  [:timezone "0"]]])<!DOCTYPE html>
<html lang="en">
  <head>
    <title><<lein-coords>> test</title>
  </head>
  <body>
    <script type="text/javascript" src="<<cljs-artefact-path>>"></script>
  </body>
</html>The autogenerated namespace thi.ng.math.version contains a single
  symbol version holding the version string defined above:
(use '[thi.ng.math.version])
(prn version)
; "<<version>>"| Version | Released | Description | Lein coordinates | Tagged Github URL | 
|---|---|---|---|---|
| 0.3.1 | 2022-04-23 | update deps | [thi.ng/math "0.3.1"] | 0.3.1 | 
| 0.2.1 | 2016-03-19 | update typedarrays dependency | [thi.ng/math "0.2.1"] | 0.2.1 | 
| 0.2.0 | 2016-03-17 | add protocols, minor refactorings | [thi.ng/math "0.2.0"] | 0.2.0 | 
| 0.1.4 | 2015-06-17 | add interpolation fns, minor refactoring | [thi.ng/math "0.1.4"] | 0.1.4 | 
| 0.1.3 | 2015-06-08 | add interpolation fns | [thi.ng/math "0.1.3"] | 0.1.3 | 
| 0.1.2 | 2015-06-05 | update deps, add gamma fns | [thi.ng/math "0.1.2"] | 0.1.2 | 
| 0.1.1 | 2015-05-27 | add bit manipulations | [thi.ng/math "0.1.1"] | 0.1.1 | 
| 0.1.0 | 2015-05-25 | initial test release | [thi.ng/math "0.1.0"] | 0.1.0 | 
| Name | Role | Website | 
|---|---|---|
| Karsten Schmidt | initiator & principal developer | https://thi.ng | 
I’ve got a fairly detailed roadmap and task list to implement over the coming months, but am always happy to receive feedback & suggestions and have issues filed. Once the core engine is more refined I’ll be gladly welcoming other contributions. Thanks for understanding!
This project is open source and licensed under the Apache Software License 2.0.