Commit 8a08f552 authored by Liam Healy's avatar Liam Healy

Conditionalize FSBV

All source code is now conditionalized so that FSBV is optional.  If
present, functions using complex scalars will work.  If absent, GSLL
will compile and load correctly, and all functions except those using
complex scalars will work.  The examples and tests are defined
appropriately.  Documentation on FSBV dependence has been added to
index.html.
parent 0ca58836
;; Tests of array functions
;; Liam Healy 2008-10-20 22:41:48EDT array-tests.lisp
;; Time-stamp: <2009-04-29 22:23:37EDT array-tests.lisp>
;; Time-stamp: <2009-05-03 11:18:04EDT array-tests.lisp>
;; $Id: $
;;; Generate each file with #'write-test-to-file, e.g.
......@@ -15,11 +15,11 @@
;;;; Bulk operations
;;;;****************************************************************************
(generate-all-array-tests vector-set-all t
(generate-all-array-tests vector-set-all #+fsbv t #-fsbv :no-complex
(let ((v1 (array-default 3 t)))
(cl-array (set-all v1 (scalar-default)))))
(generate-all-array-tests matrix-set-all t
(generate-all-array-tests matrix-set-all #+fsbv t #-fsbv :no-complex
(let ((m1 (array-default '(3 3) t)))
(cl-array (set-all m1 (scalar-default)))))
......
;; Functions for both vectors and matrices.
;; Liam Healy 2008-04-26 20:48:44EDT both.lisp
;; Time-stamp: <2009-04-26 22:29:34EDT both.lisp>
;; Time-stamp: <2009-05-03 11:24:50EDT both.lisp>
;; $Id$
(in-package :gsl)
......@@ -39,6 +39,7 @@
("gsl_" :category :type "_set_all")
(((mpointer object) :pointer) (value :element-c-type))
:definition :generic
:element-types #+fsbv t #-fsbv :no-complex
:inputs (object)
:outputs (object)
:c-return :void
......@@ -90,6 +91,7 @@
("gsl_" :category :type "_set")
(((mpointer object) :pointer) (index sizet) (value :element-c-type))
:definition :generic
:element-types #+fsbv t #-fsbv :no-complex
:inputs (object)
:outputs (object)
:c-return :void
......
......@@ -115,6 +115,8 @@ version 0.10.0 or newer; callbacks and <code>foreign-funcall</code> must be supp
<li><a href="http://www.cliki.net/asdf">ASDF</a></li>
<li><a href="http://repo.or.cz/w/lisp-unit.git">lisp-unit</a>, <i>(Optional)</i> necessary
to run <code>gsll-tests</code>
<li><a href="http://repo.or.cz/w/fsbv.git">FSBV</a>, <i>(Optional)</i> necessary
for functions using complex scalars
</li>
</ul>
......@@ -135,7 +137,9 @@ version 0.10.0 or newer; callbacks and <code>foreign-funcall</code> must be supp
<p>Download/update:
<ul>
<li><code>git clone git://repo.or.cz/gsll.git</code></li>
<li><code>git pull</code> in the <code>gsll</code> directory
<li><code>git clone git://repo.or.cz/fsbv.git</code></li>
<li><code>git pull</code> in the <code>gsll</code> and
<code>fsbv</code> directories
afterwards to update</li>
</ul>
<p>The <a href="http://repo.or.cz/w/gsll.git"> repository web page</a>
......@@ -152,6 +156,7 @@ Then in Lisp, load the system:
Add the following to <code>wnpp-projects</code>:
<ul>
<li><code>gsll get_git git://repo.or.cz/gsll.git</code></li>
<li><code>fsbv get_git git://repo.or.cz/fsbv.git</code></li>
<li><code>trivial-garbage get_darcs http://common-lisp.net/~loliveira/darcs/trivial-garbage</code></li>
</ul>
<p>and add
......@@ -166,11 +171,12 @@ from within the clbuild directory:
</ul>
<h3>With Debian or Ubuntu</h3>
<ul>
<li><code>sudo aptitude install libgsl0-dev cl-cffi</code></li>
<li><code>sudo aptitude install libgsl0-dev cl-cffi libffi-dev</code></li>
<li><code>git clone git://repo.or.cz/gsll.git</code></li>
<li><code>darcs get http://common-lisp.net/~loliveira/darcs/trivial-garbage</code></li>
<li><code>clc-register-user-package trivial-garbage/trivial-garbage.asd</code></li>
<li><code>clc-register-user-package gsll/gsll.asd</code></li>
<li><code>clc-register-user-package gsll/fsbv.asd</code></li>
<li><code>clc-register-user-package gsll/gsll-tests.asd</code></li>
</ul>
<p>
......@@ -386,7 +392,7 @@ and arrays used internally or for function return.
<!-- Created: Feb 25 2005 -->
<!-- hhmts start -->
<small>
Time-stamp: <2009-04-04 18:01:52EDT index.html>
Time-stamp: <2009-05-03 12:08:21EDT index.html>
</small>
<!-- hhmts end -->
</div>
......
;; Definition of GSLL system
;; Liam Healy
;; Time-stamp: <2009-04-29 22:25:14EDT gsll-tests.asd>
;; Time-stamp: <2009-05-03 11:16:04EDT gsll-tests.asd>
(asdf:defsystem "gsll-tests"
:name "gsll-tests"
......@@ -99,7 +99,7 @@
(:file "matrix-sub")
(:file "matrix-add")
(:file "matrix-mult")
(:file "matrix-product-hermitian")
#+fsbv (:file "matrix-product-hermitian")
(:file "matrix-product")
(:file "matrix-product-nonsquare")
(:file "matrix-product-symmetric")
......
;; Definition of GSLL system
;; Liam Healy
;; Time-stamp: <2009-04-16 21:33:09EDT gsll.asd>
;; Time-stamp: <2009-05-03 09:37:17EDT gsll.asd>
;; $Id$
(when (asdf:find-system :fsbv nil)
(pushnew :fsbv *features*))
(asdf:defsystem "gsll"
:name "gsll"
:description "GNU Scientific Library for Lisp."
:version "0"
:author "Liam M. Healy"
:licence "LLGPL v3, FDL"
:depends-on (cffi trivial-garbage fsbv)
:depends-on (cffi trivial-garbage #+fsbv fsbv)
:components
((:module init
:components
......@@ -44,6 +47,7 @@
:depends-on (init)
:components
((:file "mathematical")
#+fsbv
(:file "complex")))
(:module data
:depends-on (init)
......
;; Expand the body of a defmfun
;; Liam Healy 2009-04-13 22:07:13EDT body-expand.lisp
;; Time-stamp: <2009-05-02 21:43:36EDT body-expand.lisp>
;; Time-stamp: <2009-05-03 10:03:03EDT body-expand.lisp>
;; $Id: $
(in-package :gsl)
......@@ -42,6 +42,17 @@
:test 'st-symbol))
finally (return answer)))
;;; This function should never be called even when FSBV is absent,
;;; because the potential callers should all have #-fsbv
;;; conditionalization. It is here just so that body-expand can
;;; compile when FSBV is absent.
#-fsbv
(defmacro no-fsbv-error (function-name &rest args)
(declare (ignore args))
`(error
"System FSBV is not present, so function ~a cannot be used."
,function-name))
(defun body-expand (name arglist gsl-name c-arguments key-args)
"Expand the body (computational part) of the defmfun."
(with-defmfun-key-args key-args
......@@ -86,7 +97,8 @@
cbinfo callback-dynamic-variables callback-dynamic)
(let ((,(st-symbol creturn-st)
(,(if (some 'identity pbv)
'fsbv:foreign-funcall
#+fsbv 'fsbv:foreign-funcall
#-fsbv 'no-fsbv-error
'cffi:foreign-funcall)
,gsl-name
,@(mappend
......
;; Complex number types
;; Liam Healy 2009-01-13 21:24:05EST complex-types.lisp
;; Time-stamp: <2009-04-26 00:02:09EDT complex-types.lisp>
;; Time-stamp: <2009-05-03 10:00:23EDT complex-types.lisp>
;; $Id: $
(in-package :gsl)
......@@ -27,14 +27,22 @@
;;; cannot use functions that call or return complex scalars.
;;; See /usr/include/gsl/gsl_complex.h
#+fsbv
(fsbv:defcstruct
(complex-float-c :constructor complex :deconstructor (realpart imagpart))
(dat :float :count 2))
#-fsbv
(cffi:defcstruct complex-float-c (dat :float :count 2))
#+fsbv
(fsbv:defcstruct
(complex-double-c :constructor complex :deconstructor (realpart imagpart))
(dat :double :count 2))
#-fsbv
(cffi:defcstruct complex-double-c (dat :double :count 2))
#+long-double
(cffi:defcstruct complex-long-double-c
(dat :long-double :count 2))
......
;; Number types used by GSL functions, and specification conversion
;; Liam Healy 2008-12-31 21:06:34EST types.lisp
;; Time-stamp: <2009-04-29 22:48:31EDT types.lisp>
;; Time-stamp: <2009-05-03 09:42:01EDT types.lisp>
;; $Id: $
(in-package :gsl)
......@@ -14,11 +14,11 @@
(8
(push :int64 *features*)
(cffi:defctype sizet :uint64)
(fsbv:defsynonym sizet :uint64))
#+fsbv (fsbv:defsynonym sizet :uint64))
(4
(push :int32 *features*)
(cffi:defctype sizet :uint32)
(fsbv:defsynonym sizet :uint64))
#+fsbv (fsbv:defsynonym sizet :uint32))
(t (error "Size of :long unrecognized")))
;;;;****************************************************************************
......
;; BLAS level 1, Vector operations
;; Liam Healy, Wed Apr 26 2006 - 15:23
;; Time-stamp: <2009-04-27 21:30:47EDT blas1.lisp>
;; Time-stamp: <2009-05-03 11:28:12EDT blas1.lisp>
;; $Id$
(in-package :gsl)
......@@ -103,7 +103,7 @@
("gsl_blas_" :type "axpy")
((alpha :element-c-type) ((mpointer x) :pointer) ((mpointer y) :pointer))
:definition :generic
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (x y)
:outputs (y)
:documentation ; FDL
......@@ -115,7 +115,7 @@
("gsl_blas_" :type "scal")
((alpha :element-c-type) ((mpointer x) :pointer))
:definition :generic
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:c-return :void
:inputs (x)
:outputs (x)
......@@ -194,12 +194,12 @@
(generate-all-array-tests dot :float-complex
(let ((v1 (array-default 8))
(v2 (array-default 8)))
(v2 (array-default 8)))
(dot v1 v2)))
(generate-all-array-tests cdot :complex
(let ((v1 (array-default 8))
(v2 (array-default 8)))
(v2 (array-default 8)))
(cdot v1 v2)))
(generate-all-array-tests euclidean-norm :float-complex
......@@ -232,7 +232,7 @@
(scalar (scalar-default)))
(cl-array (axpy scalar v1 v2))))
(generate-all-array-tests scale :float-complex
(generate-all-array-tests scale #+fsbv :float-complex #-fsbv :float
(let ((v1 (array-default 8))
(scalar (scalar-default)))
(cl-array (scale scalar v1))))
......
;; BLAS level 2, Matrix-vector operations
;; Liam Healy, Wed Apr 26 2006 - 21:08
;; Time-stamp: <2009-04-29 20:38:03EDT blas2.lisp>
;; Time-stamp: <2009-05-03 11:31:55EDT blas2.lisp>
;; $Id$
(in-package :gsl)
......@@ -15,18 +15,21 @@
"CBLAS_TRANSPOSE from /usr/include/gsl/gsl_cblas.h."
(:notrans 111) :trans :conjtrans)
#+fsbv
(fsbv:defcenum-aux cblas-transpose)
(cffi:defcenum cblas-uplo
"/usr/include/gsl/gsl_cblas.h."
(:upper 121) :lower)
#+fsbv
(fsbv:defcenum-aux cblas-uplo)
(cffi:defcenum cblas-diag
"/usr/include/gsl/gsl_cblas.h."
(:nonunit 131) :unit)
#+fsbv
(fsbv:defcenum-aux cblas-diag)
;;;;****************************************************************************
......@@ -39,7 +42,6 @@
(second (dimensions b)))
(first (dimensions a))))
;;; To do: the y should be an optional argument, default to a zero vector.
(defmfun matrix-product
((A matrix) (x vector)
&optional
......@@ -51,7 +53,7 @@
((transa cblas-transpose) (alpha :element-c-type) ((mpointer A) :pointer)
((mpointer x) :pointer) (beta :element-c-type) ((mpointer y) :pointer))
:definition :generic
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (A x y)
:outputs (y)
:documentation ; FDL
......@@ -78,7 +80,7 @@
:outputs (x)
:documentation ; FDL
"If the second argument is a vector, compute
the matrix-vector product x =alpha op(A) x
the matrix-vector product x = op(A) x
for the triangular matrix A, where op(A) = A, A^T, A^H for
TransA = :NoTrans, :Trans, :ConjTrans. When Uplo
is :Upper then the upper triangle of A is used, and when
......@@ -88,7 +90,7 @@
matrix A are taken as unity and are not referenced.
If the second argument is a matrix, compute
the matrix-matrix product B = alpha op(A) B
if Side is :Left and B = \alpha B op(A) if Side is
if Side is :Left and B = alpha B op(A) if Side is
:Right. The matrix A is triangular and op(A) = A, A^T, A^H
for TransA = :NoTrans, :Trans, :ConjTrans When Uplo
is :Upper then the upper triangle of A is used, and when
......@@ -157,14 +159,13 @@
are used, and when Uplo is :Lower then the lower triangle
and diagonal of A are used.")
#+fsbv
(defmfun matrix-product-hermitian
((A matrix) (x vector)
&optional
(y (make-marray element-type :dimensions (matrix-product-dimensions A x)
:initial-element 0))
(alpha 1) (beta 1) (uplo :upper) (side :left))
;; This always signals an error because you can't pass a
;; struct in CFFI yet.
("gsl_blas_" :type "hemv")
((uplo cblas-uplo) (alpha :element-c-type) ((mpointer A) :pointer)
((mpointer x) :pointer) (beta :element-c-type) ((mpointer y) :pointer))
......@@ -194,7 +195,7 @@
((alpha :element-c-type) ((mpointer A) :pointer)
((mpointer x) :pointer) ((mpointer y) :pointer))
:definition :generic
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (x y A)
:outputs (A)
:documentation ; FDL
......@@ -205,7 +206,7 @@
((alpha :element-c-type) ((mpointer A) :pointer)
((mpointer x) :pointer) ((mpointer y) :pointer))
:definition :generic
:element-types :complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (x y A)
:outputs (A)
:documentation ; FDL
......@@ -236,6 +237,7 @@
used, and when Uplo is CblasLower then the lower triangle and
diagonal of C are used.")
#+fsbv
(defmfun hermitian-rank-1-update
((x vector) (A matrix)
&optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
......@@ -289,6 +291,7 @@
then the upper triangle and diagonal of C are used, and when Uplo is
:lower then the lower triangle and diagonal of C are used.")
#+fsbv
(defmfun hermitian-rank-2-update
((x vector) (y vector) (A matrix)
&optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
......@@ -321,7 +324,7 @@
;;;; Examples and unit test
;;;;****************************************************************************
(generate-all-array-tests matrix-product :float-complex
(generate-all-array-tests matrix-product #+fsbv :float-complex #-fsbv :float
(let ((m1 (array-default '(3 3)))
(v1 (array-default 3))
(v2 (array-default 3))
......@@ -329,13 +332,15 @@
(s2 (scalar-default)))
(cl-array (matrix-product m1 v1 v2 s1 s2))))
(generate-all-array-tests matrix-product-triangular :float-complex
(generate-all-array-tests matrix-product-triangular
#+fsbv :float-complex #-fsbv :float
(let ((m1 (array-default '(3 3)))
(v1 (array-default 3))
(s1 (scalar-default)))
(cl-array (matrix-product-triangular m1 v1 s1))))
(generate-all-array-tests inverse-matrix-product :float-complex
(generate-all-array-tests inverse-matrix-product
#+fsbv :float-complex #-fsbv :float
(let ((m1 (array-default '(3 3)))
(v1 (array-default 3))
(s1 (scalar-default)))
......@@ -349,6 +354,7 @@
(s2 (scalar-default)))
(cl-array (matrix-product-symmetric m1 v1 v3 s1 s2))))
#+fsbv
(generate-all-array-tests matrix-product-hermitian :complex
(let ((m1 (array-default '(3 3)))
(v1 (array-default 3))
......
;; BLAS level 3, Matrix-matrix operations
;; Liam Healy, Wed Apr 26 2006 - 21:08
;; Time-stamp: <2009-04-29 20:36:48EDT blas3.lisp>
;; Time-stamp: <2009-05-03 11:18:02EDT blas3.lisp>
;; $Id$
(in-package :gsl)
......@@ -15,6 +15,7 @@
"/usr/include/gsl/gsl_cblas.h."
(:left 141) :right)
#+fsbv
(fsbv:defcenum-aux cblas-side)
;;;;****************************************************************************
......@@ -33,7 +34,7 @@
(alpha :element-c-type) ((mpointer A) :pointer)
((mpointer B) :pointer) (beta :element-c-type) ((mpointer C) :pointer))
:definition :methods
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (A B C)
:outputs (C))
......@@ -48,10 +49,11 @@
((mpointer A) :pointer) ((mpointer B) :pointer)
(beta :element-c-type) ((mpointer C) :pointer))
:definition :methods
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (A B C)
:outputs (C))
#+fsbv
(defmfun matrix-product-hermitian
((A matrix) (B matrix)
&optional
......@@ -78,7 +80,7 @@
(diag cblas-diag)
(alpha :element-c-type) ((mpointer A) :pointer) ((mpointer B) :pointer))
:definition :methods
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (A B)
:outputs (B))
......@@ -93,7 +95,7 @@
(TransA cblas-transpose) (diag cblas-diag)
(alpha :element-c-type) ((mpointer A) :pointer) ((mpointer B) :pointer))
:definition :methods
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (A B)
:outputs (B))
......@@ -105,10 +107,11 @@
(alpha :element-c-type) ((mpointer A) :pointer)
(beta :element-c-type) ((mpointer C) :pointer))
:definition :methods
:element-types :float-complex
:element-types #+fsbv :float-complex #-fsbv :float
:inputs (A C)
:outputs (C))
#+fsbv
(defmfun hermitian-rank-1-update
((A matrix) (C matrix)
&optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
......@@ -134,6 +137,7 @@
:inputs (A B C)
:outputs (C))
#+fsbv
(defmfun hermitian-rank-2-update
((A matrix) (B matrix) (C matrix)
&optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
......@@ -151,7 +155,7 @@
;;;; Examples and unit test
;;;;****************************************************************************
(generate-all-array-tests matrix-product :float-complex
(generate-all-array-tests matrix-product #+fsbv :float-complex #-fsbv :float
(let ((m1 (array-default '(3 3)))
(m2 (array-default '(3 3)))
(m3 (array-default '(3 3)))
......@@ -164,13 +168,15 @@
(m2 (array-default '(3 2))))
(cl-array (matrix-product m1 m2))))
(generate-all-array-tests matrix-product-triangular :float-complex
(generate-all-array-tests matrix-product-triangular
#+fsbv :float-complex #-fsbv :float
(let ((m1 (array-default '(3 3)))
(m2 (array-default '(3 3)))
(s1 (scalar-default)))
(cl-array (matrix-product-triangular m1 m2 s1))))
(generate-all-array-tests inverse-matrix-product :float-complex
(generate-all-array-tests inverse-matrix-product
#+fsbv :float-complex #-fsbv :float
(let ((m1 (array-default '(3 3)))
(m2 (array-default '(3 3)))
(s1 (scalar-default)))
......@@ -184,6 +190,7 @@
(s2 (scalar-default)))
(cl-array (matrix-product-symmetric m1 m2 m3 s1 s2))))
#+fsbv
(generate-all-array-tests matrix-product-hermitian :complex
(let ((m1 (array-default '(3 3)))
(m2 (array-default '(3 3)))
......
;; Polynomials
;; Liam Healy, Tue Mar 21 2006 - 18:33
;; Time-stamp: <2009-04-30 22:57:18EDT polynomial.lisp>
;; Time-stamp: <2009-05-03 09:37:35EDT polynomial.lisp>
;; $Id$
(in-package :gsl)
......@@ -26,6 +26,7 @@
:documentation ; FDL
"Evaluate the polyonomial with coefficients at the point x.")
#+fsbv
(defmfun evaluate
((coefficients vector-double-float) (x complex)
&key)
......@@ -39,6 +40,7 @@
:documentation ; FDL
"Evaluate the polyonomial with coefficients at the complex value x.")
#+fsbv
(defmfun evaluate
((coefficients vector-complex-double-float) (x complex)
&key)
......
......@@ -36,6 +36,7 @@
-49.08d0)))
(SCALAR -39.66d0))
(CL-ARRAY (AXPY SCALAR V1 V2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(1808.3204 1422.3015) #C(-589.3992 234.75043)
......@@ -59,6 +60,7 @@
31.67)))
(SCALAR #C(-39.66 -49.46)))
(CL-ARRAY (AXPY SCALAR V1 V2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(1808.3204d0 1422.3016000000002d0)
......
......@@ -42,6 +42,7 @@
(-49.08d0 -39.66d0 -49.46d0))))
(S1 19.68d0))
(CL-ARRAY (INVERSE-MATRIX-PRODUCT M1 M2 S1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-28.191956 35.052914) #C(-13.378113 28.736774)
......@@ -71,6 +72,7 @@
-5.55 -8.82))))
(S1 #C(19.68 -5.55)))
(CL-ARRAY (INVERSE-MATRIX-PRODUCT M1 M2 S1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-28.191956546692666d0 35.052909000810466d0)
......
......@@ -30,6 +30,7 @@
(32.5d0 42.73d0)
(-17.24d0 43.31d0)))))
(CL-ARRAY (MATRIX-PRODUCT M1 M2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-1422.0259 2305.5098)
......@@ -51,6 +52,7 @@
(32.5 42.73 -17.24 43.31)
(-17.24 43.31 -16.12 -8.25)))))
(CL-ARRAY (MATRIX-PRODUCT M1 M2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-1422.0258d0 2305.5097000000005d0)
......
......@@ -42,6 +42,7 @@
(-49.08d0 -39.66d0 -49.46d0))))
(S1 19.68d0))
(CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 M2 S1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-66397.9 18986.908) #C(-56335.145 48514.305)
......@@ -72,6 +73,7 @@
-5.55 -8.82))))
(S1 #C(19.68 -5.55)))
(CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 M2 S1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-66397.89753899998d0 18986.908142999997d0)
......@@ -130,6 +132,7 @@
'(42.73d0 -17.24d0 43.31d0)))
(S1 -16.12d0))
(CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 V1 S1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(-1483.223 1289.3523) #C(-57.63159 1675.6711)
......@@ -151,6 +154,7 @@
21.44)))
(S1 #C(-16.12 -8.25)))
(CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 V1 S1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(-1483.2230999999997d0 1289.3523999999998d0)
......
......@@ -54,6 +54,7 @@
(S1 -41.67d0)
(S2 42.0d0))
(CL-ARRAY (MATRIX-PRODUCT M1 M2 M3 S1 S2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(140927.64 -143005.16) #C(72986.305 -201162.86)
......@@ -93,6 +94,7 @@
(S1 #C(-41.67 42.0))
(S2 #C(42.0 -20.81)))
(CL-ARRAY (MATRIX-PRODUCT M1 M2 M3 S1 S2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(140927.638311d0 -143005.14965699997d0)
......@@ -171,6 +173,7 @@
(S1 -49.08d0)
(S2 -39.66d0))
(CL-ARRAY (MATRIX-PRODUCT M1 V1 V2 S1 S2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(124163.57 -3332.2988) #C(119793.48 -166378.0)
......@@ -198,6 +201,7 @@
(S1 #C(-49.08 -39.66))
(S2 #C(-39.66 -49.46)))
(CL-ARRAY (MATRIX-PRODUCT M1 V1 V2 S1 S2)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(124163.58013199999d0 -3332.2974459999896d0)
......
......@@ -21,6 +21,7 @@
(LET ((M1
(MAKE-MARRAY 'DOUBLE-FLOAT :DIMENSIONS '(3 3))))
(CL-ARRAY (SET-ALL M1 -34.5d0)))))
#+fsbv
(LISP-UNIT:ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-34.5 8.24) #C(-34.5 8.24) #C(-34.5 8.24))
......@@ -31,6 +32,7 @@
(MAKE-MARRAY '(COMPLEX SINGLE-FLOAT)
:DIMENSIONS '(3 3))))
(CL-ARRAY (SET-ALL M1 #C(-34.5 8.24))))))
#+fsbv
(LISP-UNIT:ASSERT-NUMERICAL-EQUAL
(LIST
#2A((#C(-34.5d0 8.24d0) #C(-34.5d0 8.24d0)
......
......@@ -62,6 +62,7 @@
-13.49d0)))
(SCALAR 32.5d0))
(CL-ARRAY (SCALE SCALAR V1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(-1473.3452 -1206.385) #C(488.5039 -149.64331)
......@@ -78,6 +79,7 @@
-49.08)))
(SCALAR #C(32.5 42.73)))
(CL-ARRAY (SCALE SCALAR V1)))))
#+fsbv
(LISP-UNIT::ASSERT-NUMERICAL-EQUAL
(LIST
#(#C(-1473.3452d0 -1206.385d0)
......
......@@ -13,6 +13,7 @@
(MULTIPLE-VALUE-LIST
(LET ((V1 (MAKE-MARRAY 'DOUBLE-FLOAT :DIMENSIONS '3)))
(CL-ARRAY (SET-ALL V1 -34.5d0)))))
#+fsbv