#!/usr/bin/env python
# (C) 2000 Huaiyu Zhu <hzhu@users.sourceforge.net>. Licence: GPL
# $Id: Scalar.py,v 1.4 2000/07/26 20:58:27 hzhu Exp $
"""
Scalar class in association with Matrix class.
It behaves like a number, but allows operations such as shape and typecode.
Providing a Scalar class is very inefficient.
It is, however, necessary because of the qirks of Numeric:
o matrixmultiply (scalar, matrix) is transposed
o Sometimes it is necessary to use .shape on scalars
"""
from MatPy import ScalarType
from MatPy.Matrix import Matrix
import MLab
#------------------------------------------------------------------
class Scalar(ScalarType):
"class Scalar : class of numbers with customizable formats"
def __init__(self, data):
if isinstance(data, Matrix):
if self.shape != (1,1):
raise ValueError, "Can't change matrix of %dx%d to Scalar" % self.shape
else:
self.data = data[0]
else: self.data = data
self.shape = (1, 1)
self.typecode = MLab.array(self.data).typecode()
def __add__(self, other): return self.data + other
def __radd__(self, other): return other + self.data
def __sub__(self, other): return self.data - other
def __rsub__(self, other): return other - self.data
def __mul__(self, other): return self.data * other
def __rmul__(self, other): return other * self.data
def __div__(self, other): return self.data / other
def __rdiv__(self, other): return other / self.data
def __cmp__(self, other):
if self.data < other: return -1
elif self.data == other: return 0
else: return 1
def __int__(self): return int(self.data)
def __float__(self): return float(self.data)
|