(deftype Matrix [r c v]
v/IKind
(kind [_] (cond (= r c) ::square-matrix
(= r 1) ::row-matrix
(= c 1) ::column-matrix
:else ::matrix))
d/IPerturbed
(perturbed? [_] (boolean (core/some d/perturbed? v)))
(replace-tag [M old new] (fmap #(d/replace-tag % old new) M))
(extract-tangent [M tag] (fmap #(d/extract-tangent % tag) M))
f/IArity
(arity [_] (transduce (map f/seq-arity) f/combine-arities v))
#?@(:clj
[Object
(equals [this that] (m:= this that))
(toString [_] (pr-str v))
Sequential
Associative
(assoc [_ k entry] (Matrix. r c (assoc v k entry)))
(containsKey [_ k] (contains? v k))
(entryAt [_ k] (.entryAt ^Associative v k))
(count [_] (count v))
(seq [_] (seq v))
(valAt [_ key] (get v key))
(valAt [_ key default] (get v key default))
(empty [this] (fmap g/zero-like this))
(equiv [this that] (m:= this that))
IFn
(invoke [_ a]
(Matrix. r c (mapv (fn [row] (mapv #(% a) row)) v)))
(invoke [_ a b]
(Matrix. r c (mapv (fn [row] (mapv #(% a b) row)) v)))
(invoke [_ a b cx]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx) row)) v)))
(invoke [_ a b cx d]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d) row)) v)))
(invoke [_ a b cx d e]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e) row)) v)))
(invoke [_ a b cx d e f]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f) row)) v)))
(invoke [_ a b cx d e f g]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g) row)) v)))
(invoke [_ a b cx d e f g h]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h) row)) v)))
(invoke [_ a b cx d e f g h i]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i) row)) v)))
(invoke [_ a b cx d e f g h i j]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j) row)) v)))
(invoke [_ a b cx d e f g h i j k]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k) row)) v)))
(invoke [_ a b cx d e f g h i j k l]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l) row)) v)))
(invoke [_ a b cx d e f g h i j k l m]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n o]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n o p]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n o p q]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n o p q rx]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q rx) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n o p q rx s]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q rx s) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n o p q rx s t]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q rx s t) row)) v)))
(invoke [_ a b cx d e f g h i j k l m n o p q rx s t rest]
(Matrix. r c (mapv (fn [row] (mapv #(apply % a b cx d e f g h i j k l m n o p q rx s t rest) row)) v)))
(applyTo [m xs]
(AFn/applyToHelper m xs))]
:cljs
[Object
(toString [_] (pr-str v))
IPrintWithWriter
(-pr-writer [x writer _]
(write-all writer
"#object[emmy.structure.Matrix \""
(.toString x)
"\"]"))
IEmptyableCollection
(-empty [this] (g/zero-like this))
ISequential
IEquiv
(-equiv [this that] (m:= this that))
ISeqable
(-seq [_] (-seq v))
ICounted
(-count [_] (-count v))
IIndexed
(-nth [_ n] (-nth v n))
(-nth [_ n not-found] (-nth v n not-found))
ILookup
(-lookup [_ k] (-lookup v k))
(-lookup [_ k not-found] (-lookup v k not-found))
IAssociative
(-assoc [_ k entry] (Matrix. r c (-assoc v k entry)))
(-contains-key? [_ k] (-contains-key? v k))
IFind
(-find [_ n] (-find v n))
IFn
(-invoke [_ a]
(Matrix. r c (mapv (fn [row] (mapv #(% a) row)) v)))
(-invoke [_ a b]
(Matrix. r c (mapv (fn [row] (mapv #(% a b) row)) v)))
(-invoke [_ a b cx]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx) row)) v)))
(-invoke [_ a b cx d]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d) row)) v)))
(-invoke [_ a b cx d e]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e) row)) v)))
(-invoke [_ a b cx d e f]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f) row)) v)))
(-invoke [_ a b cx d e f g]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g) row)) v)))
(-invoke [_ a b cx d e f g h]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h) row)) v)))
(-invoke [_ a b cx d e f g h i]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i) row)) v)))
(-invoke [_ a b cx d e f g h i j]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j) row)) v)))
(-invoke [_ a b cx d e f g h i j k]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k) row)) v)))
(-invoke [_ a b cx d e f g h i j k l]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n o]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n o p]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n o p q]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n o p q rx]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q rx) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n o p q rx s]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q rx s) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n o p q rx s t]
(Matrix. r c (mapv (fn [row] (mapv #(% a b cx d e f g h i j k l m n o p q rx s t) row)) v)))
(-invoke [_ a b cx d e f g h i j k l m n o p q rx s t rest]
(Matrix. r c (mapv (fn [row] (mapv #(apply % a b cx d e f g h i j k l m n o p q rx s t rest) row)) v)))]))