#!/usr/bin/env python
# Author : Pierre Schnizer
import _block
class _generic:
"""
Generic block class. Handles common operation.
"""
# Defines what basis type this class handles. To be defined in a derived
# class. e.g. base = 'vector'
_base = None
def _get_function(self, suffix):
"""
translate some prefix to the full qualified name of the block
"""
if self._type == '':
tmp = '_'
else:
tmp = '_' + self._type + '_'
# base is matrix or vector or .....
assert self._base != None, 'Use a derived class!'
base = self._base
function = eval('_block.gsl_' + base + tmp + suffix)
return function
def __init__(self):
self._fread = self._get_function('fread')
self._fwrite = self._get_function('fwrite')
self._fscanf = self._get_function('fscanf')
self._fprintf = self._get_function('fprintf')
def fread(self, *args):
"""
reads a binary stream of the vector from an open file.
input: file, size of the vector
output: flag, the vector
"""
return apply(self._fread, args)
def fwrite(self, *args):
"""
writes a binary stream of the vector to an open file.
input: file, vector
output: flag if sucessful
"""
return apply(self._fwrite , args)
def fscanf(self, *args):
"""
scans the length of the vector from the file.
input: file, length of the vector to be read
output: flag, the vector
"""
return apply(self._fscanf , args)
def fprintf(self, file, vector, format):
"""
prints the vector to an open file.
input: file, vector, format
file ... an file open for writing
vector ... a vector of data
format ... a "c" type format string. These are similar to the
python ones, but differences exist.
"""
#Some checking if the file type is good ... should go in here.
return self._fprintf(file, vector, format)
class _generic_block(_generic):
"""
Basis functions for vectors and matrices.
"""
def __init__(self):
_generic.__init__(self)
self.set_zero = self._get_function('set_zero')
self.set_all = self._get_function('set_all')
self.swap = self._get_function('swap')
self.isnull = self._get_function('isnull')
if(self._type != 'complex' and self._type != 'complex_float'):
self.max = self._get_function('max')
self.min = self._get_function('min')
self.minmax = self._get_function('minmax')
self.max_index = self._get_function('max_index')
self.min_index = self._get_function('min_index')
self.minmax_index = self._get_function('minmax_index')
syntax highlighted by Code2HTML, v. 0.9.1