;;;; test-matrico.scm ;;@project: matrico (numerical-schemer.xyz) ;;@version: 0.2 (2022-07-07) ;;@authors: Christian Himpe (0000-0003-2194-6754) ;;@license: zlib-acknowledgement (spdx.org/licenses/zlib-acknowledgement.html) ;;@summary: matrico (compounding matrix/dense/mx) module unit tests (import (chicken load)) (load-relative "check.scm") (load-relative "../matrico.scm") (import matrico) (define m33 (mx% '((8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 9.0 2.0)))) (define m31 (mx% '((8.0) (3.0) (4.0)))) (define m13 (mx% '((8.0 1.0 6.0)))) (define m11 (mx% '((8.0)))) (mx-print m33) (mx-print m31) (mx-print m13) (mx-print m11) (define u33 (mx% '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)))) (define u32 (mx% '((1.0 0.0) (0.0 1.0) (0.0 0.0)))) (define u23 (mx% '((1.0 0.0 0.0) (0.0 1.0 0.0)))) (run-tests ;; matrico-ver (check 'matrico-ver (list '(() . (0 . 2)))) ;; matrico-cite ;not tested automatically ;; matrico-about ;not tested automatically ;; matrico? ;not tested automatically ;; mx (check 'mx `(((3 2 1.0) . ,(mx% '((1.0 1.0) (1.0 1.0) (1.0 1.0)))) ((1 1 1.0) . ,(mx% '((1.0)))) ((0 2 1.0) . ,'xfail) ((3 0 1.0) . ,'xfail) ((0 0 1.0) . ,'xfail))) ;; mx% (check 'mx% `((('((1.0 1.0) (1.0 1.0))) . ,(mx 2 2 1.0)) (('((1.0 1.0))) . ,(mx 1 2 1.0)) (('((1.0) (1.0))) . ,(mx 2 1 1.0)) (('((1.0))) . ,(mx 1 1 1.0)))) ;; mx-identity (check 'mx-identity `(((3) . ,(mx% '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)))) ((0) . ,'xfail))) ;; mx-exchange (check 'mx-exchange `(((3) . ,(mx% '((0.0 0.0 1.0) (0.0 1.0 0.0) (1.0 0.0 0.0)))) ((0) . ,'xfail))) ;; mx-hilbert (check 'mx-hilbert `(((3) . ,(mx% `((1.0 0.5 ,(/ 3.0)) (0.5 ,(/ 3.0) 0.25) (,(/ 3.0) 0.25 0.2)))) ((0) . ,'xfail))) ;; mx-pascal (check 'mx-pascal `(((5) . ,(mx% '((1.0 0.0 0.0 0.0 0.0) (1.0 1.0 0.0 0.0 0.0) (1.0 2.0 1.0 0.0 0.0) (1.0 3.0 3.0 1.0 0.0) (1.0 4.0 6.0 4.0 1.0)))) ((0) . ,'xfail))) ;; mx-lehmer (check 'mx-lehmer `(((3 3) . ,(mx% `((1.0 0.5 ,(/ 3.0)) (0.5 1.0 ,(/ 2.0 3.0)) (,(/ 3.0) ,(/ 2.0 3.0) 1.0)))) ((3 1) . ,(mx% `((1.0) (0.5) (,(/ 3.0))))) ((1 3) . ,(mx% `((1.0 0.5 ,(/ 3.0))))) ( (0) . ,'xfail))) ;; mx-tridiag (check 'mx-tridiag `(((1 1.0 2.0 3.0) . ,(mx% '((2.0)))) ((2 1.0 2.0 3.0) . ,(mx% '((2.0 3.0) (1.0 2.0)))) ((3 1.0 2.0 3.0) . ,(mx% '((2.0 3.0 0.0) (1.0 2.0 3.0) (0.0 1.0 2.0)))) ((0 1.0 2.0 3.0) . ,'xfail))) ;; mx-linspace (check 'mx-linspace `(((0.0 4.0 5) . ,(mx% '((0.0 1.0 2.0 3.0 4.0)))) (((mx 1 1 0.0) 4.0 5) . ,(mx% '((0.0 1.0 2.0 3.0 4.0)))) ((0.0 (mx 1 1 4.0) 5) . ,(mx% '((0.0 1.0 2.0 3.0 4.0)))) (((mx 3 1 0.0) 4.0 5) . ,(mx% '((0.0 1.0 2.0 3.0 4.0) (0.0 1.0 2.0 3.0 4.0) (0.0 1.0 2.0 3.0 4.0)))) ((0.0 (mx 3 1 4.0) 5) . ,(mx% '((0.0 1.0 2.0 3.0 4.0) (0.0 1.0 2.0 3.0 4.0) (0.0 1.0 2.0 3.0 4.0)))))) ;; mx-logspace (check 'mx-logspace `(( (1.0 10000.0 5) . ,(mx% '((1.0 10.0 100.0 1000.0 10000.0)))) (((mx 1 1 1.0) 10000.0 5) . ,(mx% '((1.0 10.0 100.0 1000.0 10000.0)))) ((1.0 (mx 1 1 10000.0) 5) . ,(mx% '((1.0 10.0 100.0 1000.0 10000.0)))) (((mx 3 1 1.0) 10000.0 5) . ,(mx% '((1.0 10.0 100.0 1000.0 10000.0) (1.0 10.0 100.0 1000.0 10000.0) (1.0 10.0 100.0 1000.0 10000.0)))) ((1.0 (mx 3 1 10000.0) 5) . ,(mx% '((1.0 10.0 100.0 1000.0 10000.0) (1.0 10.0 100.0 1000.0 10000.0) (1.0 10.0 100.0 1000.0 10000.0)))))) ;; mx-unit (check 'mx-unit `(((3 1) . ,(mx% '((1.0) (0.0) (0.0)))) ((3 2) . ,(mx% '((0.0) (1.0) (0.0)))) ((3 3) . ,(mx% '((0.0) (0.0) (1.0)))) ((3 0) . ,'xfail) ((3 4) . ,'xfail) ((0 1) . ,'xfail) ((0 0) . ,'xfail))) ;; mx-iota (check 'mx-iota `(((1) . ,(mx% '((0.0)))) ((2) . ,(mx% '((0.0) (1.0)))) ((3) . ,(mx% '((0.0) (1.0) (2.0)))) ((0) . ,'xfail))) ;; mx-cols (check 'mx-cols `(((m33) . 3) ((m31) . 1) ((m13) . 3) ((m11) . 1) ((0.0) . ,'xfail))) ;; mx-rows (check 'mx-rows `(((m33) . 3) ((m31) . 3) ((m13) . 1) ((m11) . 1) ((0.0) . ,'xfail))) ;; mx-numel (check 'mx-numel `(((m33) . 9) ((m31) . 3) ((m13) . 3) ((m11) . 1) ((0.0) . ,'xfail))) ;; mx-dims (check 'mx-dims `(((m33) . 2) ((m31) . 1) ((m13) . 1) ((m11) . 0) ((0.0) . ,'xfail))) ;; mx? (check 'mx? `(((m33) . #t) ((1.0) . #f))) ;; mx-col? (check 'mx-col? `(((m33) . #f) ((m31) . #t) ((m13) . #f) ((m11) . #t) ((0.0) . ,'xfail))) ;; mx-row? (check 'mx-row? `(((m33) . #f) ((m31) . #f) ((m13) . #t) ((m11) . #t) ((0.0) . ,'xfail))) ;; mx-scalar? (check 'mx-scalar? `(((m33) . #f) ((m31) . #f) ((m13) . #f) ((m11) . #t) ((0.0) . xfail))) ;; mx-vector? (check 'mx-vector? `(((m33) . #f) ((m31) . #t) ((m13) . #t) ((m11) . #t) ((0.0) . xfail))) ;; mx-square? (check 'mx-square? `(((m33) . #t) ((m31) . #f) ((m13) . #f) ((m11) . #t) ((0.0) . ,'xfail))) ;; mx-samecols? (check 'mx-samecols? `(((m33 m31) . #f) ((m33 m13) . #t))) ;; mx-samerows? (check 'mx-samerows? `(((m33 m31) . #t) ((m33 m13) . #f))) ;; mx-samedims? (check 'mx-samedims? `(((m33 m33) . #t) ((m33 m31) . #f) ((m33 m13) . #f) ((m13 m31) . #f) ((m11 m13) . #f) ((m11 m31) . #f) ((m11 m11) . #t))) ;; mx-any? (check 'mx-any? `((((lambda (x) (> x 0.0)) m33) . #t) (((lambda (x) (< x 0.0)) m33) . #f))) ;; mx-all? (check 'mx-all? `((((lambda (x) (> x 0.0)) m33) . #t) (((lambda (x) (< x 0.0)) m33) . #f))) ;; mx=? TODO ;; mx-ref (check 'mx-ref `(((m33 1 1) . 8.0) ((m33 3 3) . 2.0) ((m33 -1 -1) . 2.0) ((m33 -3 -3) . 8.0) ((m33 0 0) . ,'xfail) ((m33 4 4) . ,'xfail) ((m33 -4 -4) . ,'xfail))) ;; mx-ref11 (check 'mx-ref11 `(((m33) . 8.0) ((m31) . 8.0) ((m13) . 8.0) ((m11) . 8.0))) ;; mx-col (check 'mx-col `(((m33 1) . ,m31) ((m33 3) . ,(mx% '((6.0) (7.0) (2.0)))) ((m33 -1) . ,(mx% '((6.0) (7.0) (2.0)))) ((m33 -3) . ,m31) ((m33 0) . ,'xfail) ((m33 4) . ,'xfail) ((m33 -4) . ,'xfail))) ;; mx-row (check 'mx-row `(((m33 1) . ,(mx% '((8.0 1.0 6.0)))) ((m33 3) . ,(mx% '((4.0 9.0 2.0)))) ((m33 -1) . ,(mx% '((4.0 9.0 2.0)))) ((m33 -3) . ,(mx% '((8.0 1.0 6.0)))) ((m33 0) . ,'xfail) ((m33 4) . ,'xfail) ((m33 -4) . ,'xfail))) ;; mx-submatrix (check 'mx-submatrix `(( (m33 1 2 1 2) . ,(mx% '((8.0 1.0) (3.0 5.0)))) ( (m33 2 3 2 3) . ,(mx% '((5.0 7.0) (9.0 2.0)))) ( (m33 1 3 1 1) . ,m31) ( (m33 1 1 1 3) . ,(mx% '((8.0 1.0 6.0)))) ( (m33 1 1 1 1) . ,m11) ((m33 -3 -2 -3 -2) . ,(mx% '((8.0 1.0) (3.0 5.0)))) ((m33 -2 -1 -2 -1) . ,(mx% '((5.0 7.0) (9.0 2.0)))) ((m33 -3 -1 -3 -3) . ,m31) ((m33 -3 -3 -3 -1) . ,(mx% '((8.0 1.0 6.0)))) ( (m33 1 3 1 3) . ,m33) ( (m33 1 -1 1 -1) . ,m33) ( (m33 2 1 1 1) . ,'xfail) ( (m33 1 1 2 1) . ,'xfail) ( (m33 1 4 1 1) . ,'xfail) ( (m33 1 1 1 4) . ,'xfail) ( (m33 -1 1 1 1) . ,'xfail) ( (m33 1 1 -1 1) . ,'xfail) ( (m33 -4 1 1 1) . ,'xfail) ( (m33 1 1 -4 1) . ,'xfail))) ;; mx-diag (check 'mx-diag `(((m33) . ,(mx% '((8.0) (5.0) (2.0)))) ((m31) . ,'xfail) ((m13) . ,'xfail) ((m11) . ,m11))) ;; mx-set! TODO ;; mx+ (check 'mx+ `(((m33 m33) . ,(mx% '((16.0 2.0 12.0) (6.0 10.0 14.0) (8.0 18.0 4.0)))) ((m33 m31) . ,(mx% '((16.0 9.0 14.0) (6.0 8.0 10.0) (8.0 13.0 6.0)))) ((m33 m13) . ,(mx% '((16.0 2.0 12.0) (11.0 6.0 13.0) (12.0 10.0 8.0)))) ((m33 m11) . ,(mx% '((16.0 9.0 14.0) (11.0 13.0 15.0) (12.0 17.0 10.0)))) ((m33 1.0) . ,(mx% '((9.0 2.0 7.0) (4.0 6.0 8.0) (5.0 10.0 3.0)))) ((m31 m33) . ,(mx% '((16.0 9.0 14.0) (6.0 8.0 10.0) (8.0 13.0 6.0)))) ((m13 m33) . ,(mx% '((16.0 2.0 12.0) (11.0 6.0 13.0) (12.0 10.0 8.0)))) ((m11 m33) . ,(mx% '((16.0 9.0 14.0) (11.0 13.0 15.0) (12.0 17.0 10.0)))) ((1.0 m33) . ,(mx% '((9.0 2.0 7.0) (4.0 6.0 8.0) (5.0 10.0 3.0)))) ((m31 m13) . ,(mx% '((16.0 9.0 14.0) (11.0 4.0 9.0) (12.0 5.0 10.0)))) ((m13 m31) . ,(mx% '((16.0 9.0 14.0) (11.0 4.0 9.0) (12.0 5.0 10.0)))))) ;; mx- (check 'mx- `(( (m33) . ,(mx% '((-8.0 -1.0 -6.0) (-3.0 -5.0 -7.0) (-4.0 -9.0 -2.0)))) ( (m31) . ,(mx% '((-8.0) (-3.0) (-4.0)))) ( (m13) . ,(mx% '((-8.0 -1.0 -6.0)))) ( (m11) . ,(mx% '((-8.0)))) ( (1.0) . ,(mx% '((-1.0)))) ((m33 m33) . ,(mx% '((0.0 0.0 0.0) (0.0 0.0 0.0) (0.0 0.0 0.0)))) ((m33 m31) . ,(mx% '((0.0 -7.0 -2.0) (0.0 2.0 4.0) (0.0 5.0 -2.0)))) ((m33 m13) . ,(mx% '((0.0 0.0 0.0) (-5.0 4.0 1.0) (-4.0 8.0 -4.0)))) ((m33 m11) . ,(mx% '((0.0 -7.0 -2.0) (-5.0 -3.0 -1.0) (-4.0 1.0 -6.0)))) ((m33 1.0) . ,(mx% '((7.0 0.0 5.0) (2.0 4.0 6.0) (3.0 8.0 1.0)))) ((m31 m33) . ,(mx% '((0.0 7.0 2.0) (0.0 -2.0 -4.0) (0.0 -5.0 2.0)))) ((m13 m33) . ,(mx% '((0.0 0.0 0.0) (5.0 -4.0 -1.0) (4.0 -8.0 4.0)))) ((m11 m33) . ,(mx% '((0.0 7.0 2.0) (5.0 3.0 1.0) (4.0 -1.0 6.0)))) ((1.0 m33) . ,(mx% '((-7.0 0.0 -5.0) (-2.0 -4.0 -6.0) (-3.0 -8.0 -1.0)))) ((m31 m13) . ,(mx% '((0.0 7.0 2.0) (-5.0 2.0 -3.0) (-4.0 3.0 -2.0)))) ((m13 m31) . ,(mx% '((0.0 -7.0 -2.0) (5.0 -2.0 3.0) (4.0 -3.0 2.0)))))) ;; mx* (check 'mx* `(((m33 m33) . ,(mx% '((64.0 1.0 36.0) (9.0 25.0 49.0) (16.0 81.0 4.0)))) ((m33 m31) . ,(mx% '((64.0 8.0 48.0) (9.0 15.0 21.0) (16.0 36.0 8.0)))) ((m33 m13) . ,(mx% '((64.0 1.0 36.0) (24.0 5.0 42.0) (32.0 9.0 12.0)))) ((m33 m11) . ,(mx% '((64.0 8.0 48.0) (24.0 40.0 56.0) (32.0 72.0 16.0)))) ((m33 1.0) . ,(mx% '((8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 9.0 2.0)))) ((m31 m33) . ,(mx% '((64.0 8.0 48.0) (9.0 15.0 21.0) (16.0 36.0 8.0)))) ((m13 m33) . ,(mx% '((64.0 1.0 36.0) (24.0 5.0 42.0) (32.0 9.0 12.0)))) ((m11 m33) . ,(mx% '((64.0 8.0 48.0) (24.0 40.0 56.0) (32.0 72.0 16.0)))) ((1.0 m33) . ,(mx% '((8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 9.0 2.0)))) ((m31 m13) . ,(mx% '((64.0 8.0 48.0) (24.0 3.0 18.0) (32.0 4.0 24.0)))) ((m13 m31) . ,(mx% '((64.0 8.0 48.0) (24.0 3.0 18.0) (32.0 4.0 24.0)))))) ;; mx/ (check 'mx/ `(((m33) . ,(mx% `((,(/ 8.0) ,(/ 1.0) ,(/ 6.0)) (,(/ 3.0) ,(/ 5.0) ,(/ 7.0)) (,(/ 4.0) ,(/ 9.0) ,(/ 2.0))))) ((m31) . ,(mx% `((,(/ 8.0)) (,(/ 3.0)) (,(/ 4.0))))) ((m13) . ,(mx% `((,(/ 8.0) 1.0 ,(/ 6.0))))) ((m11) . ,(mx% `((,(/ 8.0))))) ((1.0) . ,(mx% '((1.0)))) ((m33 m33) . ,(mx% '((1.0 1.0 1.0) (1.0 1.0 1.0) (1.0 1.0 1.0)))) ((m33 m31) . ,(mx% `((1.0 ,(/ 1.0 8.0) ,(/ 6.0 8.0)) (1.0 ,(/ 5.0 3.0) ,(/ 7.0 3.0)) (1.0 ,(/ 9.0 4.0) ,(/ 2.0 4.0))))) ((m33 m13) . ,(mx% `((1.0 1.0 1.0) (,(/ 3.0 8.0) ,(/ 5.0 1.0) ,(/ 7.0 6.0)) (,(/ 4.0 8.0) ,(/ 9.0 1.0) ,(/ 2.0 6.0))))) ((m33 m11) . ,(mx% `((,(/ 8.0 8.0) ,(/ 1.0 8.0) ,(/ 6.0 8.0)) (,(/ 3.0 8.0) ,(/ 5.0 8.0) ,(/ 7.0 8.0)) (,(/ 4.0 8.0) ,(/ 9.0 8.0) ,(/ 2.0 8.0))))) ((m33 1.0) . ,m33) ((m31 m33) . ,(mx% `((1.0 ,(/ 8.0 1.0) ,(/ 8.0 6.0)) (1.0 ,(/ 3.0 5.0) ,(/ 3.0 7.0)) (1.0 ,(/ 4.0 9.0) ,(/ 4.0 2.0))))) ((m13 m33) . ,(mx% `((1.0 1.0 1.0) (,(/ 8.0 3.0) ,(/ 1.0 5.0) ,(/ 6.0 7.0)) (,(/ 8.0 4.0) ,(/ 1.0 9.0) ,(/ 6.0 2.0))))) ((m11 m33) . ,(mx% `((1.0 ,(/ 8.0 1.0) ,(/ 8.0 6.0)) (,(/ 8.0 3.0) ,(/ 8.0 5.0) ,(/ 8.0 7.0)) (,(/ 8.0 4.0) ,(/ 8.0 9.0) ,(/ 8.0 2.0))))) ((1.0 m33) . ,(mx% `((,(/ 8.0) ,(/ 1.0) ,(/ 6.0)) (,(/ 3.0) ,(/ 5.0) ,(/ 7.0)) (,(/ 4.0) ,(/ 9.0) ,(/ 2.0))))) ((m31 m13) . ,(mx% `((,(/ 8.0 8.0) ,(/ 8.0 1.0) ,(/ 8.0 6.0)) (,(/ 3.0 8.0) ,(/ 3.0 1.0) ,(/ 3.0 6.0)) (,(/ 4.0 8.0) ,(/ 4.0 1.0) ,(/ 4.0 6.0))))) ((m13 m31) . ,(mx% `((,(/ 8.0 8.0) ,(/ 1.0 8.0) ,(/ 6.0 8.0)) (,(/ 8.0 3.0) ,(/ 1.0 3.0) ,(/ 6.0 3.0)) (,(/ 8.0 4.0) ,(/ 1.0 4.0) ,(/ 6.0 4.0))))))) ;; mx*2 (check 'mx*2 `(( (m33) . ,(mx% '((16.0 2.0 12.0) (6.0 10.0 14.0) (8.0 18.0 4.0)))) ( (m31) . ,(mx% '((16.0) (6.0) (8.0)))) ( (m13) . ,(mx% '((16.0 2.0 12.0)))) ( (m11) . ,(mx% '((16.0)))) ( (1.0) . ,(mx% '((2.0)))))) ;; mx^2 (check 'mx^2 `(( (m33) . ,(mx% '((64.0 1.0 36.0) (9.0 25.0 49.0) (16.0 81.0 4.0)))) ( (m31) . ,(mx% '((64.0) (9.0) (16.0)))) ( (m13) . ,(mx% '((64.0 1.0 36.0)))) ( (m11) . ,(mx% '((64.0)))) ( (1.0) . ,(mx% '((1.0)))))) ;; mx^ (check 'mx^ `(((m33 m33) . ,(mx% '((16777216.0 1.0 46656.0) (27.0 3125.0 823543.0) (256.0 387420489.0 4.0)))) ((m33 m31) . ,(mx% '((16777216.0 1.0 1679616.0) (27.0 125.0 343.0) (256.0 6561.0 16.0)))) ((m33 m13) . ,(mx% '((16777216.0 1.0 46656.0) (6561.0 5.0 117649.0) (65536.0 9.0 64.0)))) ((m33 m11) . ,(mx% '((16777216.0 1.0 1679616.0) (6561.0 390625.0 5764801.0) (65536.0 43046721.0 256.0)))) ((m33 2.0) . ,(mx% '((64.0 1.0 36.0) (9.0 25.0 49.0) (16.0 81.0 4.0)))) ((m31 m33) . ,(mx% '((16777216.0 8.0 262144.0) (27.0 243.0 2187.0) (256.0 262144.0 16.0)))) ((m13 m33) . ,(mx% '((16777216.0 1.0 46656.0) (512.0 1.0 279936.0) (4096.0 1.0 36.0)))) ((m11 m33) . ,(mx% '((16777216.0 8.0 262144.0) (512.0 32768.0 2097152.0) (4096.0 134217728.0 64.0)))) ((2.0 m33) . ,(mx% '((256.0 2.0 64.0) (8.0 32.0 128.0) (16.0 512.0 4.0)))) ((m31 m13) . ,(mx% '((16777216.0 8.0 262144.0) (6561.0 3.0 729.0) (65536.0 4.0 4096.0)))) ((m13 m31) . ,(mx% '((16777216.0 1.0 1679616.0) (512.0 1.0 216.0) (4096.0 1.0 1296.0)))))) ;; mx-log TODO ;; mx-where (check 'mx-where `(((fp< m33 m33) . ,(mx% '((8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 9.0 2.0)))) ((fp< m33 m31) . ,(mx% '((8.0 1.0 6.0) (3.0 3.0 3.0) (4.0 4.0 2.0)))) ((fp< m33 m13) . ,(mx% '((8.0 1.0 6.0) (3.0 1.0 6.0) (4.0 1.0 2.0)))) ((fp< m33 m11) . ,(mx% '((8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 8.0 2.0)))) ((fp< m33 1.0) . ,(mx% '((1.0 1.0 1.0) (1.0 1.0 1.0) (1.0 1.0 1.0)))) ((fp< m31 m33) . ,(mx% '((8.0 1.0 6.0) (3.0 3.0 3.0) (4.0 4.0 2.0)))) ((fp< m13 m33) . ,(mx% '((8.0 1.0 6.0) (3.0 1.0 6.0) (4.0 1.0 2.0)))) ((fp< m11 m33) . ,(mx% '((8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 8.0 2.0)))) ((fp< 1.0 m33) . ,(mx% '((1.0 1.0 1.0) (1.0 1.0 1.0) (1.0 1.0 1.0)))) ((fp< m31 m13) . ,(mx% '((8.0 1.0 6.0) (3.0 1.0 3.0) (4.0 1.0 4.0)))) ((fp< m13 m31) . ,(mx% '((8.0 1.0 6.0) (3.0 1.0 3.0) (4.0 1.0 4.0)))))) ;; mx+* (check 'mx*+ `(( (0.0 m33 m33) . ,m33) ((-1.0 m33 m33) . ,(mx 3 3 0.0)) ( (0.0 m31 m31) . ,m31) ((-1.0 m31 m31) . ,(mx 3 1 0.0)) ( (0.0 m13 m13) . ,m13) ((-1.0 m13 m13) . ,(mx 1 3 0.0)) ( (0.0 m11 m11) . ,m11) ((-1.0 m11 m11) . ,(mx 1 1 0.0)) ( (1.0 1.0 m33) . ,(mx% '((9.0 2.0 7.0) (4.0 6.0 8.0) (5.0 10.0 3.0)))) ( (1.0 1.0 m31) . ,(mx% '((9.0) (4.0) (5.0)))) ( (1.0 1.0 m13) . ,(mx% '((9.0 2.0 7.0)))) ( (1.0 1.0 m11) . ,(mx% '((9.0)))) ( (1.0 m33 1.0) . ,(mx% '((9.0 2.0 7.0) (4.0 6.0 8.0) (5.0 10.0 3.0)))) ( (1.0 m31 1.0) . ,(mx% '((9.0) (4.0) (5.0)))) ( (1.0 m13 1.0) . ,(mx% '((9.0 2.0 7.0)))) ( (1.0 m11 1.0) . ,(mx% '((9.0)))))) ;; mx-rowsum (check 'mx-rowsum `(((m33) . ,(mx% '((15.0) (15.0) (15.0)))) ((m31) . ,m31) ((m13) . ,(mx% '((15.0)))) ((m11) . ,(mx% '((8.0)))))) ;; mx-colsum (check 'mx-colsum `(((m33) . ,(mx% '((15.0 15.0 15.0)))) ((m31) . ,(mx% '((15.0)))) ((m13) . ,m13) ((m11) . ,(mx% '((8.0)))))) ;; mx-sum (check 'mx-sum `(((m33) . 45.0) ((m31) . 15.0) ((m13) . 15.0) ((m11) . 8.0))) ;; mx-rowprod (check 'mx-rowprod `(((m33) . ,(mx% '((48.0) (105.0) (72.0)))) ((m31) . ,m31) ((m13) . ,(mx% '((48.0)))) ((m11) . ,(mx% '((8.0)))))) ;; mx-colprod (check 'mx-colprod `(((m33) . ,(mx% '((96.0 45.0 84.0)))) ((m31) . ,(mx% '((96.0)))) ((m13) . ,m13) ((m11) . ,(mx% '((8.0)))))) ;; mx-prod (check 'mx-prod `(((m33) . 362880.0) ((m31) . 96.0) ((m13) . 48.0) ((m11) . 8.0))) ;; mx-rowmin (check 'mx-rowmin `(((m33) . ,(mx% '((1.0) (3.0) (2.0)))) ((m31) . ,m31) ((m13) . ,(mx% '((1.0)))) ((m11) . ,(mx% '((8.0)))))) ;; mx-colmin (check 'mx-colmin `(((m33) . ,(mx% '((3.0 1.0 2.0)))) ((m31) . ,(mx% '((3.0)))) ((m13) . ,m13) ((m11) . ,(mx% '((8.0)))))) ;; mx-min (check 'mx-min `(((m33) . 1.0) ((m31) . 3.0) ((m13) . 1.0) ((m11) . 8.0))) ;; mx-rowmax (check 'mx-rowmax `(((m33) . ,(mx% '((8.0) (7.0) (9.0)))) ((m31) . ,m31) ((m13) . ,(mx% '((8.0)))) ((m11) . ,(mx% '((8.0)))))) ;; mx-colmax (check 'mx-colmax `(((m33) . ,(mx% '((8.0 9.0 7.0)))) ((m31) . ,(mx% '((8.0)))) ((m13) . ,m13) ((m11) . ,(mx% '((8.0)))))) ;; mx-max (check 'mx-max `(((m33) . 9.0) ((m31) . 8.0) ((m13) . 8.0) ((m11) . 8.0))) ;; mx-rowmidr (check 'mx-rowmidr `(((m33) . ,(mx% '((4.5) (5.0) (5.5)))) ((m31) . ,(mx% '((8.0) (3.0) (4.0)))) ((m13) . ,(mx% '((4.5)))) ((m11) . ,(mx% '((8.0)))))) ;; mx-colmidr (check 'mx-colmidr `(((m33) . ,(mx% '((5.5 5.0 4.5)))) ((m31) . ,(mx% '((5.5)))) ((m13) . ,(mx% '((8.0 1.0 6.0)))) ((m11) . ,(mx% '((8.0)))))) ;; mx-midr (check 'mx-midr `(((m33) . 5.0) ((m31) . 5.5) ((m13) . 4.5) ((m11) . 8.0))) ;; mx-rowmean (check 'mx-rowmean `(( (m33 -1) . ,(mx% `((,(/ 3.0 (+ (/ 8.0) (/ 1.0) (/ 6.0)))) (,(/ 3.0 (+ (/ 3.0) (/ 5.0) (/ 7.0)))) (,(/ 3.0 (+ (/ 4.0) (/ 9.0) (/ 2.0))))))) ( (m31 -1) . ,m31) ( (m13 -1) . ,(mx% `((,(/ 3.0 (+ (/ 8.0) (/ 1.0) (/ 6.0))))))) ( (m11 -1) . ,m11) ( (m33 0) . ,(mx% `((,(expt (* 8.0 1.0 6.0) (/ 3.0))) (,(expt (* 3.0 5.0 7.0) (/ 3.0))) (,(expt (* 4.0 9.0 2.0) (/ 3.0)))))) ( (m31 0) . ,m31) ( (m13 0) . ,(mx% `((,(expt (* 8.0 1.0 6.0) (/ 3.0)))))) ( (m11 0) . ,m11) ( (m33 1) . ,(mx% '((5.0) (5.0) (5.0)))) ( (m31 1) . ,m31) ( (m13 1) . ,(mx% '((5.0)))) ( (m11 1) . ,m11) ( (m33 2) . ,(mx% `((,(sqrt (/ (+ (* 8.0 8.0) (* 1.0 1.0) (* 6.0 6.0)) 3.0))) (,(sqrt (/ (+ (* 3.0 3.0) (* 5.0 5.0) (* 7.0 7.0)) 3.0))) (,(sqrt (/ (+ (* 4.0 4.0) (* 9.0 9.0) (* 2.0 2.0)) 3.0)))))) ( (m31 2) . ,m31) ( (m13 2) . ,(mx% `((,(sqrt (/ (+ (* 8.0 8.0) (* 1.0 1.0) (* 6.0 6.0)) 3.0)))))) ( (m11 2) . ,m11) ((m33 'inf) . ,(mx% '((8.0) (7.0) (9.0)))) ((m31 'inf) . ,m31) ((m13 'inf) . ,(mx% '((8.0)))) ((m11 'inf) . ,m11))) ;; mx-colmean (check 'mx-colmean `(( (m33 -1) . ,(mx% `((,(/ 3.0 (+ (/ 8.0) (/ 3.0) (/ 4.0))) ,(/ 3.0 (+ (/ 1.0) (/ 5.0) (/ 9.0))) ,(/ 3.0 (+ (/ 6.0) (/ 7.0) (/ 2.0))))))) ( (m31 -1) . ,(mx% `((,(/ 3.0 (+ (/ 8.0) (/ 3.0) (/ 4.0))))))) ( (m13 -1) . ,m13) ( (m11 -1) . ,m11) ( (m33 0) . ,(mx% `((,(expt (* 8.0 3.0 4.0) (/ 3.0)) ,(expt (* 1.0 5.0 9.0) (/ 3.0)) ,(expt (* 6.0 7.0 2.0) (/ 3.0)))))) ( (m31 0) . ,(mx% `((,(expt (* 8.0 3.0 4.0) (/ 3.0)))))) ( (m13 0) . ,m13) ( (m11 0) . ,m11) ( (m33 1) . ,(mx% '((5.0 5.0 5.0)))) ( (m31 1) . ,(mx% '((5.0)))) ( (m13 1) . ,m13) ( (m11 1) . ,m11) ( (m33 2) . ,(mx% `((,(sqrt (/ (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0)) 3.0)) ,(sqrt (/ (+ (* 1.0 1.0) (* 5.0 5.0) (* 9.0 9.0)) 3.0)) ,(sqrt (/ (+ (* 6.0 6.0) (* 7.0 7.0) (* 2.0 2.0)) 3.0)))))) ( (m31 2) . ,(mx% `((,(sqrt (/ (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0)) 3.0)))))) ( (m13 2) . ,m13) ( (m11 2) . ,m11) ((m33 'inf) . ,(mx% '((8.0 9.0 7.0)))) ((m31 'inf) . ,(mx% '((8.0)))) ((m13 'inf) . ,m13) ((m11 'inf) . ,m11))) ;; mx-mean (check 'mx-mean `(((m33 -1) . ,(/ 9.0 (+ (/ 8.0) (/ 3.0) (/ 4.0) (/ 1.0) (/ 5.0) (/ 9.0) (/ 6.0) (/ 7.0) (/ 2.0)))) ((m31 -1) . ,(/ 3.0 (+ (/ 8.0) (/ 3.0) (/ 4.0)))) ((m13 -1) . ,(/ 3.0 (+ (/ 8.0) (/ 1.0) (/ 6.0)))) ((m11 -1) . 8.0) ( (m33 0) . ,(expt (* 8.0 3.0 4.0 1.0 5.0 9.0 6.0 7.0 2.0) (/ 9.0))) ( (m31 0) . ,(expt (* 8.0 3.0 4.0) (/ 3.0))) ( (m13 0) . ,(expt (* 8.0 1.0 6.0) (/ 3.0))) ( (m11 0) . 8.0) ( (m33 1) . ,(/ (+ 8.0 3.0 4.0 1.0 5.0 9.0 6.0 7.0 2.0) 9.0)) ( (m31 1) . ,(/ (+ 8.0 3.0 4.0) 3.0)) ( (m13 1) . ,(/ (+ 8.0 1.0 6.0) 3.0)) ( (m11 1) . 8.0) ( (m33 2) . ,(sqrt (/ (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0) (* 1.0 1.0) (* 5.0 5.0) (* 9.0 9.0) (* 6.0 6.0) (* 7.0 7.0) (* 2.0 2.0)) 9.0))) ( (m31 2) . ,(sqrt (/ (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0)) 3.0))) ( (m13 2) . ,(sqrt (/ (+ (* 8.0 8.0) (* 1.0 1.0) (* 6.0 6.0)) 3.0))) ( (m11 2) . 8.0))) ;; mx-rownorm (check 'mx-rownorm `(( (m33 1) . ,(mx% `((,(+ 8.0 1.0 6.0)) (,(+ 3.0 5.0 7.0)) (,(+ 4.0 9.0 2.0))))) ( (m31 1) . ,m31) ( (m13 1) . ,(mx% `((,(+ 8.0 3.0 4.0))))) ( (m11 1) . ,m11) ( (m33 2) . ,(mx% `((,(sqrt (+ (* 8.0 8.0) (* 1.0 1.0) (* 6.0 6.0)))) (,(sqrt (+ (* 3.0 3.0) (* 5.0 5.0) (* 7.0 7.0)))) (,(sqrt (+ (* 4.0 4.0) (* 9.0 9.0) (* 2.0 2.0))))))) ( (m31 2) . ,m31) ( (m13 2) . ,(mx% `((,(sqrt (+ (* 8.0 8.0) (* 1.0 1.0) (* 6.0 6.0))))))) ( (m11 2) . ,m11) ((m33 'inf) . ,(mx% '((8.0) (7.0) (9.0)))) ((m31 'inf) . ,m31) ((m13 'inf) . ,(mx% '((8.0)))) ((m11 'inf) . ,m11))) ;; mx-colnorm (check 'mx-colnorm `(( (m33 1) . ,(mx% `((,(+ 8.0 3.0 4.0) ,(+ 1.0 5.0 9.0) ,(+ 6.0 7.0 2.0))))) ( (m31 1) . ,(mx% `((,(+ 8.0 3.0 4.0))))) ( (m13 1) . ,m13) ( (m11 1) . ,m11) ( (m33 2) . ,(mx% `((,(sqrt (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0))) ,(sqrt (+ (* 1.0 1.0) (* 5.0 5.0) (* 9.0 9.0))) ,(sqrt (+ (* 6.0 6.0) (* 7.0 7.0) (* 2.0 2.0))))))) ( (m31 2) . ,(mx% `((,(sqrt (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0))))))) ( (m13 2) . ,m13) ( (m11 2) . ,m11) ((m33 'inf) . ,(mx% '((8.0 9.0 7.0)))) ((m31 'inf) . ,(mx% '((8.0)))) ((m13 'inf) . ,m13) ((m11 'inf) . ,m11))) ;; mx-norm (check 'mx-norm `(( (m33 1) . 15.0) ( (m31 1) . 15.0) ( (m13 1) . 8.0) ( (m11 1) . 8.0) ((m33 'inf) . 15.0) ((m31 'inf) . 8.0) ((m13 'inf) . 15.0) ((m11 'inf) . 8.0) ((m33 'fro) . ,(sqrt (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0) (* 1.0 1.0) (* 5.0 5.0) (* 9.0 9.0) (* 6.0 6.0) (* 7.0 7.0) (* 2.0 2.0)))) ((m31 'fro) . ,(sqrt (+ (* 8.0 8.0) (* 3.0 3.0) (* 4.0 4.0)))) ((m13 'fro) . ,(sqrt (+ (* 8.0 8.0) (* 1.0 1.0) (* 6.0 6.0)))) ((m11 'fro) . 8.0) ((m33 'max) . 9.0) ((m31 'max) . 8.0) ((m13 'max) . 8.0) ((m11 'max) . 8.0))) ;; mx-horcat (check 'mx-horcat `(((m33 m31) . ,(mx% '((8.0 1.0 6.0 8.0) (3.0 5.0 7.0 3.0) (4.0 9.0 2.0 4.0)))) ((m31 m33) . ,(mx% '((8.0 8.0 1.0 6.0) (3.0 3.0 5.0 7.0) (4.0 4.0 9.0 2.0)))) ((m33 m13) . ,'xfail))) ;; mx-vercat (check 'mx-vercat `(((m33 m13) . ,(mx% '((8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 9.0 2.0) (8.0 1.0 6.0)))) ((m13 m33) . ,(mx% '((8.0 1.0 6.0) (8.0 1.0 6.0) (3.0 5.0 7.0) (4.0 9.0 2.0)))) ((m33 m31) . ,'xfail))) ;; mx-vec (check 'mx-vec `(((m33) . ,(mx% '((8.0) (3.0) (4.0) (1.0) (5.0) (9.0) (6.0) (7.0) (2.0)))) ((m31) . ,m31) ((m13) . ,(mx% '((8.0) (1.0) (6.0)))))) ;; mx-transpose (check 'mx-transpose `(((m33) . ,(mx% '((8.0 3.0 4.0) (1.0 5.0 9.0) (6.0 7.0 2.0)))) ((m31) . ,(mx% '((8.0 3.0 4.0)))) ((m13) . ,(mx% '((8.0) (1.0) (6.0)))) ((m11) . ,m11) ((0.0) . ,'xfail))) ;; mx-sympart (check 'mx-sympart `(((m33) . ,(mx% '((8.0 2.0 5.0) (2.0 5.0 8.0) (5.0 8.0 2.0)))) ((m13) . ,'xfail) ((m13) . ,'xfail) ((m11) . ,(mx% '((8.0)))) ((0.0) . ,'xfail))) ;; mx-skewpart (check 'mx-skewpart `(((m33) . ,(mx% '((0.0 -1.0 1.0) (1.0 0.0 -1.0) (-1.0 1.0 0.0)))) ((m13) . ,'xfail) ((m13) . ,'xfail) ((m11) . ,(mx% '((0.0)))) ((0.0) . ,'xfail))) ;; mx-diagonal (check 'mx-diagonal `(((m33) . ,'xfail) ((m31) . ,(mx% '((8.0 0.0 0.0) (0.0 3.0 0.0) (0.0 0.0 4.0)))) ((m13) . ,'xfail) ((m11) . ,(mx% '((8.0)))) ((0.0) . ,'xfail))) ;; mx-qr TODO: add tests (check 'mx-qr `(((u33) . ,(cons (mx% '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))) (mx% '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))))) ((u32) . ,(cons (mx% '((1.0 0.0) (0.0 1.0) (0.0 0.0))) (mx% '((1.0 0.0) (0.0 1.0))))) ((u23) . ,(cons (mx% '((1.0 0.0) (0.0 1.0))) (mx% '((1.0 0.0 0.0) (0.0 1.0 0.0))))))) ; TODO: test mx-solver ; TODO: test mx-solve ;; mx-absdet TODO: add tests (check 'mx-absdet `(((m11) . 8.0) ((u33) . 1.0))) ; TODO: test mx-logdet ;; mx-trace (check 'mx-trace `(((m33) . 15.0) ((m31) . ,'xfail) ((m13) . ,'xfail) ((m11) . 8.0) ((1.0) . ,'xfail))) ;; mx-multrace (check 'mx-multrace `(((m33) . 80.0) ((m31) . ,'xfail) ((m13) . ,'xfail) ((m11) . 8.0) ((1.0) . ,'xfail))) ;; mx-prodtrace* (check 'mx-prodtrace* `(((m33 m33) . 285.0) ((m31 m31) . 89.0) ((m13 m13) . 101.0) ((m11 m11) . 64.0) ((m13 m31) . ,'xfail) ((m31 m13) . ,'xfail))) ;; mx-prodtrace (check 'mx-prodtrace `(((m33 m33) . 273.0) ((m31 m13) . 91.0) ((m13 m31) . 91.0) ((m11 m11) . 64.0) ((m13 m13) . ,'xfail) ((m31 m31) . ,'xfail))) ;; mx-scalar (check 'mx-scalar `(((m11 m11) . 64.0) ((m31 m31) . 89.0) ((m13 m13) . ,'xfail) ((m33 m33) . ,'xfail))) ;; mx-dot* (check 'mx-dot* `(((m13 m13) . ,(mx% '((64.0 8.0 48.0) (8.0 1.0 6.0) (48.0 6.0 36.0)))) ((m31 m31) . ,(mx% '((89.0)))) ((m33 m31) . ,(mx% '((89.0) (59.0) (77.0)))) ((m31 m33) . ,(mx% '((89.0 59.0 77.0)))) ((m33 m33) . ,(mx% '((89.0 59.0 77.0) (59.0 107.0 59.0) (77.0 59.0 89.0)))))) ;; mx-dot (check 'mx-dot `(((m31 m13) . ,(mx% '((64.0 8.0 48.0) (24.0 3.0 18.0) (32.0 4.0 24.0)))) ((m13 m31) . ,(mx% '((91.0)))) ((m33 m31) . ,(mx% '((91.0) (67.0) (67.0)))) ((m13 m33) . ,(mx% '((91.0 67.0 67.0)))) ((m33 m33) . ,(mx% '((91.0 67.0 67.0) (67.0 91.0 67.0) (67.0 67.0 91.0)))))) ;; mx-gram (check 'mx-gram `(((m13) . ,(mx% '((64.0 8.0 48.0) (8.0 1.0 6.0) (48.0 6.0 36.0)))) ((m31) . ,(mx% '((89.0)))) ((m33) . ,(mx% '((89.0 59.0 77.0) (59.0 107.0 59.0) (77.0 59.0 89.0)))) ((m11) . ,(mx% '((64.0)))))) ;; mx-gram* (check 'mx-gram* `(((m13) . ,(mx% '((101.0)))) ((m31) . ,(mx% '((64.0 24.0 32.0) (24.0 9.0 12.0) (32.0 12.0 16.0)))) ((m33) . ,(mx% '((101.0 71.0 53.0) (71.0 83.0 71.0) (53.0 71.0 101.0)))) ((m11) . ,(mx% '((64.0)))))) ;; mx-square (check 'mx-square `(((m33) . ,(mx% '((91.0 67.0 67.0) (67.0 91.0 67.0) (67.0 67.0 91.0)))) ((m11) . ,(mx% '((64.0)))) ((m13) . ,'xfail) ((m31) . ,'xfail))) ; TODO: test mx-xcov ; TODO: test mx-cov ; mx-std (check 'mx-std `(((u33) . ,(mx% `((,(sqrt (/ 2.0 3.0))) (,(sqrt (/ 2.0 3.0))) (,(sqrt (/ 2.0 3.0)))))) ((m33) . ,(mx% `((,(sqrt 26.0)) (,(sqrt 8.0)) (,(sqrt 26.0))))) ((m13) . ,(mx% `((,(sqrt 26.0))))) ((m31) . ,(mx% `((0.0) (0.0) (0.0)))) ((m11) . ,(mx% `((0.0)))))) ; TODO: test mx-xcor ; TODO: test mx-cor ; TODO: test mx-coher ;; mx-diff (check 'mx-diff `(((m33) . ,(mx% '((-7.0 5.0) (2.0 2.0) (5.0 -7.0)))) ((m31) . ,'xfail) ((m13) . ,(mx% '((-7.0 5.0)))) ((m11) . ,'xfail))) ;; mx-trapz (check 'mx-trapz `(((m33) . ,(mx% '((8.0) (10.0) (12.0)))) ((m31) . ,(mx% '((0.0) (0.0) (0.0)))) ((m13) . ,(mx% '((8.0)))) ((m11) . ,(mx% '((0.0)))))) ; TODO: test mx-ode2-hyp ; TODO: test mx-ode2-ssp (mx-save "test.mx" m33) (mx-export "test.csv" m33) (check 'mx-load `((("test.mx") . ,m33))) )