This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "matlisp".
The branch, tensor has been updated
via 04ac7f795b17225ad7f942b85bad9508a885ee1e (commit)
from cbb7c2bfaa2dedc65e56be04c1469e46be975801 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 04ac7f795b17225ad7f942b85bad9508a885ee1e
Author: Akshay Srinivasan <aks...@gm...>
Date: Thu Jul 12 21:15:12 2012 +0530
o Tweaks to methods in gemm, gemv and axpy.
diff --git a/src/level-1/axpy.lisp b/src/level-1/axpy.lisp
index 2de1898..0a3b9cc 100644
--- a/src/level-1/axpy.lisp
+++ b/src/level-1/axpy.lisp
@@ -145,10 +145,10 @@
(:method ((alpha number) (x complex-tensor) (y real-tensor))
(error 'coercion-error :from 'complex-tensor :to 'real-tensor)))
-(defmethod axpy! ((alpha number) (x (eql t)) (y real-tensor))
+(defmethod axpy! ((alpha number) (x (eql nil)) (y real-tensor))
(real-typed-num-axpy! (coerce-real alpha) y))
-(defmethod axpy! ((alpha number) (x (eql t)) (y complex-tensor))
+(defmethod axpy! ((alpha number) (x (eql nil)) (y complex-tensor))
(complex-typed-num-axpy! (coerce-complex alpha) y))
(defmethod axpy! ((alpha number) (x real-tensor) (y real-tensor))
diff --git a/src/level-2/gemv.lisp b/src/level-2/gemv.lisp
index 911759e..43b9e10 100644
--- a/src/level-2/gemv.lisp
+++ b/src/level-2/gemv.lisp
@@ -220,3 +220,12 @@
(scal! y result)
(gemv! alpha A x beta result job)))
+(defmethod gemv ((alpha number) (A standard-matrix) (x standard-vector)
+ (beta (eql nil)) (y (eql nil)) &optional (job :n))
+ (let ((result (apply
+ (if (or (complexp alpha) (complexp beta)
+ (typep A 'complex-matrix) (typep x 'complex-vector))
+ #'make-complex-tensor
+ #'make-real-tensor)
+ (list (ecase job (:n (nrows A)) (:t (ncols A)))))))
+ (gemv! alpha A x beta result job)))
diff --git a/src/level-3/gemm.lisp b/src/level-3/gemm.lisp
index 4cae6f3..f5172b7 100644
--- a/src/level-3/gemm.lisp
+++ b/src/level-3/gemm.lisp
@@ -304,7 +304,7 @@
"))
(defmethod gemm ((alpha number) (a standard-matrix) (b standard-matrix)
- (beta number) (c real-matrix)
+ (beta number) (c complex-matrix)
&optional (job :nn))
(let ((result (copy C)))
(gemm! alpha A B beta result job)))
@@ -312,7 +312,7 @@
;; if all args are not real then at least one of them
;; is complex, so we need to call GEMM! with a complex C
(defmethod gemm ((alpha number) (a standard-matrix) (b standard-matrix)
- (beta number) (c standard-matrix)
+ (beta number) (c real-matrix)
&optional (job :nn))
(let ((result (if (or (complexp alpha) (complexp beta)
(typep a 'complex-matrix) (typep b 'complex-matrix))
@@ -320,3 +320,20 @@
(make-real-tensor (nrows C) (ncols C)))))
(copy! C result)
(gemm! alpha A B beta result job)))
+
+(defmethod gemm ((alpha number) (a standard-matrix) (b standard-matrix)
+ (beta (eql nil)) (c (eql nil))
+ &optional (job :nn))
+ (multiple-value-bind (job-A job-B) (ecase job
+ (:nn (values :n :n))
+ (:nt (values :n :t))
+ (:tn (values :t :n))
+ (:tt (values :t :t)))
+ (let ((result (apply
+ (if (or (complexp alpha) (complexp beta)
+ (typep a 'complex-matrix) (typep b 'complex-matrix))
+ #'make-complex-tensor
+ #'make-real-tensor)
+ (list (if (eq job-A :n) (nrows A) (ncols A))
+ (if (eq job-B :n) (ncols B) (nrows B))))))
+ (gemm! alpha A B 0 result job))))
-----------------------------------------------------------------------
Summary of changes:
src/level-1/axpy.lisp | 4 ++--
src/level-2/gemv.lisp | 9 +++++++++
src/level-3/gemm.lisp | 21 +++++++++++++++++++--
3 files changed, 30 insertions(+), 4 deletions(-)
hooks/post-receive
--
matlisp
|