Sophie

Sophie

distrib > Fedora > 13 > i386 > media > os > by-pkgid > 6964be129b753c389f6479a3e34c4091 > files > 90

pygsl-devel-0.9.5-1.fc13.i686.rpm

# Author : Fabian Jakobs
import types
import unittest
import pygsl.math 
from pygsl._numobj import *
import pygsl._mlab as mlab
from pygsl import Float, Complex, ArrayType
fcmp = pygsl.math.fcmp

def iscomplex_default(a):
    return type(a) is types.ComplexType

def iscomplex_numpy(a):
    if type(a) == ArrayType:
        return a.dtypechar in typecodes["Complex"]
    else:
        if type(a) in (types.FloatType, types.IntType):
            return False

        return isinstance(a,types.ComplexType)

def isfloat_numpy(a):
    if type(a) == ArrayType:
        return a.dtypechar in typecodes["Float"]
    else:
        if type(a) == types.FloatType:
            return True
        return isinstance(a,types.FloatType)
        
def isfloat_default(a):
    return type(a) is types.FloatType

if nummodule == "numpy":
    iscomplex = iscomplex_numpy
    isfloat   = isfloat_numpy    
else:
    isfloat   = isfloat_default
    iscomplex = iscomplex_default
    
def fpcompare(a, b, digits):
    result = 1
    ac = iscomplex(a)
    bc = iscomplex(b)
    eps = 10**-digits
    test = 0
    try:
        if ac and bc:
            res1 = (fcmp(a.real, b.real, eps) == 0)
            res2 = (fcmp(a.imag, b.imag, eps) == 0)
            result = res1 and res2
        elif ac and not bc:
            res1 = (fcmp(a.real, b, eps) == 0)
            res2 = (fcmp(a.imag, 0, eps) == 0)
            result = res1 and res2
        elif not ac and bc:
            res1 = (fcmp(a, b.real, eps) == 0)
            res2 = (fcmp(0, b.imag, eps) == 0)
            result = res1 and res2
        else:
                result = (fcmp(a, b, eps) == 0)
        test = 1
    finally:
        if test == 0:
            print "a complex ?", ac, a, a.dtypechar in typecodes["Complex"]
            print "b complex ?", bc, b, b.dtypechar in typecodes["Complex"]
    return result

def arrayCompare(a, l, digits):
    result = 1 # true

    for i in range(len(l)):
        result = result and fpcompare(a[i], l[i], digits)
        if not result:
            print "Error: a = %s\t b = %s\t digits = %s" % (a[i], l[i], digits)
    return result

def arrayIsZero(a):
    result = 1
    return mlab.max(absolute(ravel(a))) < 1e-8


def herm(A):
    return transpose(conjugate(A))

class GSLTestCase(unittest.TestCase):
    def setUp(self):
        self.v1_4 = array([-13, 2.45, 4, 23])
        self.v2_4 = array([42, -2.55, 1, 19.23])
        self.vz1_4 = array([-13, 2.45+3j, 4, 23])
        self.vz2_4 = array([42, -2.55, 1, 19.23+1.4j])
        self.m1_4 = array([[1.123,2,3,4],
                           [5,6,7,8],
                           [9,10,11,12],
                           [13,14,15,-16]])
        self.m2_4 = array([[1.155,33,3,22],
                           [5,6,-12.5,8],
                           [701.3,10,31,12],
                           [13,14,15,-16]])
        self.mz1_4 = array([[1.123,2,3,4],
                           [5+3j,6,7,8],
                           [9,10,11-12.3j,12],
                           [13,14,15,-16]])
        self.mz2_4 = array([[1.123,22,3,4-1.44j],
                           [5+3j,6,71,8j],
                           [9,-10,11-12.3j,12],
                           [13+2j,14,15,-16]])
        self.symm = array([[1,2,6,-1.2],
                           [2,-3.4,6,77],
                           [6,6,77,-1],
                           [-1.2,77,-1,23]])
        self.symmz = array([[1,2+2j,6,-1.2],
                           [2+2j,-3.4,6,77],
                           [6,6,77-2.3j,-1],
                           [-1.2,77,-1,23]])
        self.triang = array([[1,0,0,0],
                           [2,-3.4,0,0],
                           [6,6,77,0],
                           [-1.2,77,-1,23]])
        self.triangz = array([[1,0,0,0],
                           [2+3j,-3.4,0,0],
                           [6j,6,77,0],
                           [-1.2,77-1.44j,-1,23]])
        self.herm = array([[1,    2,    6,   -1.2],
                           [2,   -3.4,  6,    77],
                           [6,    6,    77,  -1],
                           [-1.2, 77,  -1,    23]], Complex)