예제 #1
0
class PermutationVector(BaseCClass):
    TYPE_NAME = "permutation_vector"
    _free = UtilPrototype("void   perm_vector_free( permutation_vector )")
    _size = UtilPrototype("int    perm_vector_get_size( permutation_vector )")
    _iget = UtilPrototype("int    perm_vector_iget( permutation_vector , int)")

    
    def __init__(self):
        raise NotImplementedError("Can not instantiate PermutationVector directly")


    def __len__(self):
        return self._size( )


    def __str__(self):
        s = "("
        for index in self:
            s += " %d" % index
        return s + ")"

    
    def __getitem__(self, index):
        if index < 0:
            index += len(self)

        if 0 <= index < len(self):
            return self._iget( index )
        else:
            raise IndexError("Invalid index:%d" % index)

        
    def free(self):
        self._free( )
예제 #2
0
파일: buffer.py 프로젝트: pgdr/libecl
class Buffer(BaseCClass):
    _alloc = UtilPrototype("void* buffer_alloc(int)", bind=False)
    _free = UtilPrototype("void buffer_free(buffer)")

    def __init__(self, size):
        super(Buffer, self).__init__(self._alloc(size))

    def free(self):
        self._free()
예제 #3
0
class PathFormat(BaseCClass):
    TYPE_NAME = "path_fmt"
    _str = UtilPrototype("char* path_fmt_get_fmt(path_fmt)")
    _free = UtilPrototype("void path_fmt_free(path_fmt)")

    def __init__(self):
        raise NotImplementedError("Class can not be instantiated directly!")

    def __str__(self):
        return self._str()

    def free(self):
        self._free()
예제 #4
0
class CThreadPool(BaseCClass):
    TYPE_NAME = "thread_pool"

    _alloc   = UtilPrototype("void* thread_pool_alloc(int, bool)", bind = False)
    _free    = UtilPrototype("void thread_pool_free(thread_pool)")
    _add_job = UtilPrototype("void thread_pool_add_job(thread_pool, void*, void*)")
    _join    = UtilPrototype("void thread_pool_join(thread_pool)")

    def __init__(self, pool_size, start=True):
        c_ptr = self._alloc(pool_size, start)
        super(CThreadPool, self).__init__(c_ptr)
        self.arg_list = []

    def addTaskFunction(self, name, lib, c_function_name):
        function = CThreadPool.lookupCFunction(lib, c_function_name)

        def wrappedFunction(arg):
            return self.addTask(function, arg)

        setattr(self, name, wrappedFunction)

    def addTask(self, cfunc, arg):
        """
        The function should come from CThreadPool.lookupCFunction().
        """
        if isinstance(arg, BaseCClass):
            arg_ptr = BaseCClass.from_param(arg)
        else:
            arg_ptr = arg

        self.arg_list.append(arg)
        self._add_job(cfunc, arg_ptr)

    def join(self):
        self._join()

    def free(self):
        self.join()
        self._free()

    @staticmethod
    def lookupCFunction(lib, name):
        if isinstance(lib, ctypes.CDLL):
            func = getattr(lib, name)
            return func
        else:
            raise TypeError("The lib argument must be of type ctypes.CDLL")
예제 #5
0
파일: hash.py 프로젝트: mahg/ResInsight
class StringHash(Hash):
    _get_string = UtilPrototype("char* hash_get_string(hash, char*)")
    _insert_string = UtilPrototype("void hash_insert_string(hash, char*, char*)")

    def __init__(self):
        super(StringHash, self).__init__()

    def __setitem__(self, key, value):
        if isinstance(value, str):
            self._insert_string(key, value)
        else:
            raise ValueError("StringHash does not support type: %s" % value.__class__)

    def __getitem__(self, key):
        if key in self:
            return self._get_string(key)
        else:
            raise KeyError("Hash does not have key: %s" % key)
예제 #6
0
파일: path_format.py 프로젝트: pgdr/libecl
class PathFormat(BaseCClass):
    TYPE_NAME = "path_fmt"
    _alloc = UtilPrototype("void* path_fmt_alloc_directory_fmt(char*)", bind = False)
    _str  = UtilPrototype("char* path_fmt_get_fmt(path_fmt)")
    _free = UtilPrototype("void path_fmt_free(path_fmt)")

    def __init__(self, path_fmt):
        c_ptr = self._alloc( path_fmt )
        if c_ptr:
            super(PathFormat, self).__init__(c_ptr)
        else:
            raise ValueError('Unable to construct path format "%s"' % path_fmt)

    def __repr__(self):
        return self._create_repr('fmt=%s' % self._str())

    def free(self):
        self._free( )
예제 #7
0
파일: hash.py 프로젝트: mahg/ResInsight
class IntegerHash(Hash):
    _get_int = UtilPrototype("int hash_get_int(hash, char*)")
    _insert_int = UtilPrototype("void hash_insert_int(hash, char*, int)")

    def __init__(self):
        super(IntegerHash, self).__init__()

    def __setitem__(self, key, value):
        if isinstance(value, int):
            self._insert_int(key, value)
        else:
            raise ValueError("IntegerHash does not support type: %s" % value.__class__)

    def __getitem__(self, key):
        if key in self:
            return self._get_int(key)
        else:
            raise KeyError("Hash does not have key: %s" % key)
예제 #8
0
파일: hash.py 프로젝트: mahg/ResInsight
class DoubleHash(Hash):
    _get_double = UtilPrototype("double hash_get_double(hash, char*)")
    _insert_double = UtilPrototype("void hash_insert_double(hash, char*, double)")

    def __init__(self):
        super(DoubleHash, self).__init__()

    def __setitem__(self, key, value):
        if isinstance(value, int):
            value = float(value)

        if isinstance(value, float):
            self._insert_double(key, value)
        else:
            raise ValueError("DoubleHash does not support type: %s" % value.__class__)

    def __getitem__(self, key):
        if key in self:
            return self._get_double( key)
        else:
            raise KeyError("Hash does not have key: %s" % key)
예제 #9
0
파일: arg_pack.py 프로젝트: mahg/ResInsight
class ArgPack(BaseCClass):
    TYPE_NAME = "arg_pack"

    _alloc = UtilPrototype("void* arg_pack_alloc()", bind=False)
    _append_int = UtilPrototype("void arg_pack_append_int(arg_pack, int)")
    _append_double = UtilPrototype(
        "void arg_pack_append_double(arg_pack, double)")
    _append_ptr = UtilPrototype("void arg_pack_append_ptr(arg_pack, void*)")

    _size = UtilPrototype("int arg_pack_size(arg_pack)")
    _free = UtilPrototype("void arg_pack_free(arg_pack)")

    def __init__(self, *args):
        c_ptr = self._alloc()
        super(ArgPack, self).__init__(c_ptr)
        self.child_list = []
        for arg in args:
            self.append(arg)

    def append(self, data):
        if isinstance(data, int):
            self._append_int(data)
        elif isinstance(data, float):
            self._append_double(data)
        elif isinstance(data, BaseCClass):
            self._append_ptr(BaseCClass.from_param(data))
            self.child_list.append(data)
        else:
            raise TypeError("Can only add int/double/basecclass")

    def __len__(self):
        return self._size()

    def free(self):
        self._free()
예제 #10
0
class Log(BaseCClass):
    _get_filename = UtilPrototype("char* log_get_filename(log)")
    _reopen = UtilPrototype("void log_reopen(log, char*)")
    _get_level = UtilPrototype("int log_get_level(log)")
    _set_level = UtilPrototype("void log_set_level(log, int)")

    def __init__(self):
        raise NotImplementedError("Class can not be instantiated directly!")

    def get_filename(self):
        return self._get_filename()
        # return "ert_config.log"

    def reopen(self, filename):
        print('Logfile cannot be reopened')
        # cfunc.reopen( self , filename)

    def get_level(self):
        return self._get_level()

    def set_level(self, level):
        pass
예제 #11
0
class TempArea(TestArea):
    """TempArea class is essentially similar to the TestArea class, with
    the only difference that the cwd is *not* changed into the newly
    created area.
    """

    _temp_area_alloc = UtilPrototype("void* temp_area_alloc( char* )",
                                     bind=False)
    _temp_area_alloc_relative = UtilPrototype(
        "void* temp_area_alloc_relative( char* , char* )", bind=False)

    def __init__(self, name, prefix=None, store_area=False):
        if prefix:
            if os.path.exists(prefix):
                c_ptr = self._temp_area_alloc_relative(prefix, name)
            else:
                raise IOError("The prefix path:%s must exist" % prefix)
        else:
            c_ptr = self._temp_area_alloc(name)
        super(TempArea, self).__init__(name,
                                       c_ptr=c_ptr,
                                       store_area=store_area)

    def __str__(self):
        return self.getPath()

    def get_cwd(self):
        """
        Since the TempArea class does *not* change the cwd this method
        just returns the ordinary os.getcwd().
        """
        return os.getcwd()

    def getPath(self):
        """
        Will return the full path to the temporary working area.
        """
        return self._get_cwd()
예제 #12
0
파일: hash.py 프로젝트: mahg/ResInsight
class Hash(BaseCClass):
    _alloc =      UtilPrototype("void* hash_alloc()" , bind = False)
    _free =       UtilPrototype("void hash_free(hash)")
    _size =       UtilPrototype("int hash_get_size(hash)")
    _keys =       UtilPrototype("stringlist_obj hash_alloc_stringlist(hash)")
    _has_key =    UtilPrototype("bool hash_has_key(hash, char*)")
    _get =        UtilPrototype("void* hash_get(hash, char*)")
    _insert_ref = UtilPrototype("void hash_insert_ref(hash, char*, void*)")

    """
    Base hash class that supports string:void* values
    """

    def __init__(self):
        c_ptr = self._alloc()
        super(Hash, self).__init__(c_ptr)

    def __len__(self):
        return self._size()

    def __getitem__(self, key):
        if self._has_key(key):
            return self._get(key)
        else:
            raise KeyError("Hash does not have key: %s" % key)

    def __setitem__(self, key, value):
        if isinstance(value, c_void_p):
            self._insert_ref(key, value)
        else:
            raise ValueError("Hash does not support type: %s" % value.__class__)

    def __contains__(self, key):
        """ @rtype: bool """
        return self._has_key(key)

    def __iter__(self):
        for key in self.keys():
            yield key

    def keys(self):
        """ @rtype: StringList """
        return self._keys()

    def free(self):
        self._free()

    def __str__(self):
        return str(["%s: %s" % (key, self[key]) for key in self.keys()])
예제 #13
0
파일: version.py 프로젝트: pgdr/libecl
class EclVersion(Version):
    _build_time = UtilPrototype("char* ecl_version_get_build_time()")
    _git_commit = UtilPrototype("char* ecl_version_get_git_commit()")
    _major_version = UtilPrototype("int ecl_version_get_major_version()")
    _minor_version = UtilPrototype("int ecl_version_get_minor_version()")
    _micro_version = UtilPrototype("char* ecl_version_get_micro_version()")
    _is_devel = UtilPrototype("bool ecl_version_is_devel_version()")

    def __init__(self):
        major = self._major_version( )
        minor = self._minor_version( )
        micro = self._micro_version( )
        git_commit = self._git_commit( )
        build_time = self._build_time( )
        super( EclVersion, self).__init__( major, minor , micro , git_commit, build_time)
예제 #14
0
파일: matrix.py 프로젝트: pgdr/libecl
class Matrix(BaseCClass):
    _matrix_alloc = UtilPrototype("void*  matrix_alloc(int, int )", bind=False)
    _matrix_alloc_identity = UtilPrototype(
        "matrix_obj  matrix_alloc_identity( int )", bind=False)
    _alloc_transpose = UtilPrototype(
        "matrix_obj  matrix_alloc_transpose(matrix)")
    _inplace_transpose = UtilPrototype(
        "void        matrix_inplace_transpose(matrix)")
    _copy = UtilPrototype("matrix_obj  matrix_alloc_copy(matrix)")
    _sub_copy = UtilPrototype(
        "matrix_obj  matrix_alloc_sub_copy(matrix, int , int , int , int)")
    _free = UtilPrototype("void   matrix_free(matrix)")
    _iget = UtilPrototype("double matrix_iget( matrix , int , int )")
    _iset = UtilPrototype("void   matrix_iset( matrix , int , int , double)")
    _set_all = UtilPrototype("void   matrix_scalar_set( matrix , double)")
    _scale_column = UtilPrototype(
        "void matrix_scale_column(matrix , int , double)")
    _scale_row = UtilPrototype("void matrix_scale_row(matrix , int , double)")
    _copy_column = UtilPrototype(
        "void matrix_copy_column(matrix , matrix , int , int)", bind=False)
    _rows = UtilPrototype("int matrix_get_rows(matrix)")
    _columns = UtilPrototype("int matrix_get_columns(matrix)")
    _equal = UtilPrototype("bool matrix_equal(matrix, matrix)")
    _pretty_print = UtilPrototype(
        "void matrix_pretty_print(matrix, char*, char*)")
    _fprint = UtilPrototype("void matrix_fprintf(matrix, char*, FILE)")
    _random_init = UtilPrototype("void matrix_random_init(matrix, rng)")
    _dump_csv = UtilPrototype("void matrix_dump_csv(matrix, char*)")

    # Requires BLAS. If the library does not have the
    # matrix_alloc_matmul() function the prototype will have _func =
    # None, and NotImplementedError( ) will be raised int the
    # __call__() method if we try to use this function.
    _alloc_matmul = UtilPrototype(
        "matrix_obj  matrix_alloc_matmul(matrix, matrix)",
        bind=False,
        allow_attribute_error=True)

    # Requires BLAS!
    @classmethod
    def matmul(cls, m1, m2):
        """
        Will return a new matrix which is matrix product of m1 and m2.
        """
        if m1.columns() == m2.rows():
            return cls._alloc_matmul(m1, m2)
        else:
            raise ValueError("Matrix size mismatch")

    def __init__(self, rows, columns, value=0):
        c_ptr = self._matrix_alloc(rows, columns)
        super(Matrix, self).__init__(c_ptr)
        self.setAll(value)

    def copy(self):
        return self._copy()

    @classmethod
    def identity(cls, dim):
        """Returns a dim x dim identity matrix."""
        if dim < 1:
            raise ValueError(
                'Identity matrix must have positive size, %d not allowed.' %
                dim)
        return cls._matrix_alloc_identity(dim)

    def subCopy(self, row_offset, column_offset, rows, columns):
        if row_offset < 0 or row_offset >= self.rows():
            raise ValueError("Invalid row offset")

        if column_offset < 0 or column_offset >= self.columns():
            raise ValueError("Invalid column offset")

        if row_offset + rows > self.rows():
            raise ValueError("Invalid rows")

        if column_offset + columns > self.columns():
            raise ValueError("Invalid columns")

        return self._sub_copy(row_offset, column_offset, rows, columns)

    def __str__(self):
        s = ""
        for i in range(self.rows()):
            s += "["
            for j in range(self.columns()):
                d = self._iget(i, j)
                s += "%6.3g " % d
            s += "]\n"
        return s

    def __getitem__(self, index_tuple):
        if not 0 <= index_tuple[0] < self.rows():
            raise IndexError("Expected 0 <= %d < %d" %
                             (index_tuple[0], self.rows()))

        if not 0 <= index_tuple[1] < self.columns():
            raise IndexError("Expected 0 <= %d < %d" %
                             (index_tuple[1], self.columns()))

        return self._iget(index_tuple[0], index_tuple[1])

    def __setitem__(self, index_tuple, value):
        if not 0 <= index_tuple[0] < self.rows():
            raise IndexError("Expected 0 <= %d < %d" %
                             (index_tuple[0], self.rows()))

        if not 0 <= index_tuple[1] < self.columns():
            raise IndexError("Expected 0 <= %d < %d" %
                             (index_tuple[1], self.columns()))

        return self._iset(index_tuple[0], index_tuple[1], value)

    def dims(self):
        return self._rows(), self._columns()

    def rows(self):
        """ @rtype: int """
        return self._rows()

    def transpose(self, inplace=False):
        """
        Will transpose the matrix. By default a transposed copy is returned.
        """
        if inplace:
            self._inplace_transpose()
            return self
        else:
            return self._alloc_transpose()

    def columns(self):
        """ @rtype: int """
        return self._columns()

    def __eq__(self, other):
        assert isinstance(other, Matrix)
        return self._equal(other)

    def scaleColumn(self, column, factor):
        if not 0 <= column < self.columns():
            raise IndexError("Expected column: [0,%d) got:%d" %
                             (self.columns(), column))
        self._scale_column(column, factor)

    def scaleRow(self, row, factor):
        if not 0 <= row < self.rows():
            raise IndexError("Expected row: [0,%d) got:%d" %
                             (self.rows(), row))
        self._scale_row(row, factor)

    def setAll(self, value):
        self._set_all(value)

    def copyColumn(self, target_column, src_column):
        columns = self.columns()
        if not 0 <= src_column < columns:
            raise ValueError("src column:%d invalid" % src_column)

        if not 0 <= target_column < columns:
            raise ValueError("target column:%d invalid" % target_column)

        if src_column != target_column:
            # The underlying C function accepts column copy between matrices.
            Matrix._copy_column(self, self, target_column, src_column)

    def dumpCSV(self, filename):
        self._dump_csv(filename)

    def prettyPrint(self, name, fmt="%6.3g"):
        self._pretty_print(name, fmt)

    def fprint(self, fileH, fmt="%g "):
        """Will print ASCII representation of matrix.

        The fileH argument should point to an open Python
        filehandle. If you supply a fmt string it is important that it
        contains a separator, otherwise you might risk that elements
        overlap in the output. For the matrix:

                  [0 1 2]
              m = [3 4 5]
                  [6 7 8]

        The code:

        with open("matrix.txt" , "w") as f:
           m.fprintf( f )

         The file 'matrix.txt' will look like:

         0 1 2
         3 4 5
         6 7 8

        """
        self._fprint(fmt, CFILE(fileH))

    def randomInit(self, rng):
        self._random_init(rng)

    def free(self):
        self._free()
예제 #15
0
class TestArea(BaseCClass):
    _test_area_alloc = UtilPrototype("void* test_work_area_alloc( char* )",
                                     bind=False)
    _test_area_alloc_relative = UtilPrototype(
        "void* test_work_area_alloc_relative( char* , char* )", bind=False)
    _free = UtilPrototype("void test_work_area_free( test_area )")
    _install_file = UtilPrototype(
        "void test_work_area_install_file( test_area , char* )")
    _copy_directory = UtilPrototype(
        "void test_work_area_copy_directory( test_area , char* )")
    _copy_file = UtilPrototype(
        "void test_work_area_copy_file( test_area , char* )")
    _copy_directory_content = UtilPrototype(
        "void test_work_area_copy_directory_content( test_area , char* )")
    _copy_parent_directory = UtilPrototype(
        "void test_work_area_copy_parent_directory( test_area , char* )")
    _copy_parent_content = UtilPrototype(
        "void test_work_area_copy_parent_content( test_area , char* )")
    _get_cwd = UtilPrototype("char* test_work_area_get_cwd( test_area )")
    _get_original_cwd = UtilPrototype(
        "char* test_work_area_get_original_cwd( test_area )")
    _set_store = UtilPrototype(
        "void test_work_area_set_store( test_area , bool)")
    _sync = UtilPrototype("void test_work_area_sync( test_area )")

    def __init__(self, test_name, prefix=None, store_area=False, c_ptr=None):

        if c_ptr is None:
            if prefix:
                if os.path.exists(prefix):
                    c_ptr = self._test_area_alloc_relative(prefix, test_name)
                else:
                    raise IOError("The prefix path:%s must exist" % prefix)
            else:
                c_ptr = self._test_area_alloc(test_name)

        super(TestArea, self).__init__(c_ptr)
        self.set_store(store_area)

    def get_original_cwd(self):
        return self._get_original_cwd()

    def get_cwd(self):
        return self._get_cwd()

    def orgPath(self, path):
        if os.path.isabs(path):
            return path
        else:
            return os.path.abspath(os.path.join(self.get_original_cwd(), path))

    # All the methods install_file() , copy_directory(),
    # copy_parent_directory(), copy_parent_content(),
    # copy_directory_content() and copy_file() expect an input
    # argument which is relative to the original CWD - or absolute.

    def install_file(self, filename):
        if os.path.isfile(self.orgPath(filename)):
            self._install_file(filename)
        else:
            raise IOError("No such file:%s" % filename)

    def copy_directory(self, directory):
        if os.path.isdir(self.orgPath(directory)):
            self._copy_directory(directory)
        else:
            raise IOError("No such directory: %s" % directory)

    def copy_parent_directory(self, path):
        if os.path.exists(self.orgPath(path)):
            self._copy_parent_directory(path)
        else:
            raise IOError("No such file or directory: %s" % path)

    def copy_parent_content(self, path):
        if os.path.exists(self.orgPath(path)):
            self._copy_parent_content(path)
        else:
            raise IOError("No such file or directory: %s" % path)

    def copy_directory_content(self, directory):
        if os.path.isdir(self.orgPath(directory)):
            self._copy_directory_content(directory)
        else:
            raise IOError("No such directory: %s" % directory)

    def copy_file(self, filename):
        if os.path.isfile(self.orgPath(filename)):
            self._copy_file(filename)
        else:
            raise IOError("No such file:%s" % filename)

    def free(self):
        self._free()

    def set_store(self, store):
        self._set_store(store)

    def getFullPath(self, path):
        if not os.path.exists(path):
            raise IOError("Path not found:%s" % path)

        if os.path.isabs(path):
            raise IOError("Path:%s is already absolute" % path)

        return os.path.join(self.get_cwd(), path)

    def sync(self):
        return self._sync()
예제 #16
0
from ecl.util import UtilPrototype


def installAbortSignals():
    install_signals()


def updateAbortSignals():
    """
    Will install the util_abort_signal for all UNMODIFIED signals.
    """
    update_signals()


install_signals = UtilPrototype("void util_install_signals()")
update_signals = UtilPrototype("void util_update_signals()")
예제 #17
0
class RandomNumberGenerator(BaseCClass):
    TYPE_NAME = "rng"

    _rng_alloc = UtilPrototype(
        "void* rng_alloc(rng_alg_type_enum, rng_init_mode_enum)", bind=False)
    _free = UtilPrototype("void rng_free(rng)")
    _get_double = UtilPrototype("double rng_get_double(rng)")
    _get_int = UtilPrototype("int rng_get_int(rng, int)")
    _get_max_int = UtilPrototype("uint rng_get_max_int(rng)")
    _state_size = UtilPrototype("int rng_state_size(rng)")
    _set_state = UtilPrototype("void rng_set_state(rng , char*)")
    _load_state = UtilPrototype("void rng_load_state(rng , char*)")
    _save_state = UtilPrototype("void rng_save_state(rng , char*)")

    def __init__(self,
                 alg_type=RngAlgTypeEnum.MZRAN,
                 init_mode=RngInitModeEnum.INIT_CLOCK):
        assert isinstance(alg_type, RngAlgTypeEnum)
        assert isinstance(init_mode, RngInitModeEnum)

        c_ptr = self._rng_alloc(alg_type, init_mode)
        super(RandomNumberGenerator, self).__init__(c_ptr)

    def stateSize(self):
        return self._state_size()

    def setState(self, seed_string):
        state_size = self.stateSize()
        if len(seed_string) < state_size:
            raise ValueError(
                "The seed string must be at least %d characters long" %
                self.stateSize())
        self._set_state(seed_string)

    def getDouble(self):
        """ @rtype: float """
        return self._get_double()

    def getInt(self, max=None):
        """ @rtype: float """
        if max is None:
            max = self._get_max_int()

        return self._get_int(max)

    def free(self):
        self._free()

    def loadState(self, seed_file):
        """
        Will seed the RNG from the file @seed_file.
        """
        if os.path.isfile(seed_file):
            self._load_state(seed_file)
        else:
            raise IOError("No such file: %s" % seed_file)

    def saveState(self, seed_file):
        """
        Will save the state of the rng to @seed_file
        """
        self._save_state(seed_file)
예제 #18
0
class LookupTable(BaseCClass):
    _alloc = UtilPrototype("void* lookup_table_alloc_empty()", bind=False)
    _max = UtilPrototype("double lookup_table_get_max_value( lookup_table )")
    _min = UtilPrototype("double lookup_table_get_min_value( lookup_table )")
    _arg_max = UtilPrototype("double lookup_table_get_max_arg( lookup_table )")
    _arg_min = UtilPrototype("double lookup_table_get_min_arg( lookup_table )")
    _append = UtilPrototype(
        "void lookup_table_append( lookup_table , double , double )")
    _size = UtilPrototype("int lookup_table_get_size( lookup_table )")
    _interp = UtilPrototype(
        "double lookup_table_interp( lookup_table , double)")
    _free = UtilPrototype("void lookup_table_free( lookup_table )")
    _set_low_limit = UtilPrototype(
        "void lookup_table_set_low_limit( lookup_table , double)")
    _set_high_limit = UtilPrototype(
        "void lookup_table_set_high_limit( lookup_table , double)")
    _has_low_limit = UtilPrototype(
        "bool lookup_table_has_low_limit( lookup_table)")
    _has_high_limit = UtilPrototype(
        "bool lookup_table_has_high_limit( lookup_table)")

    def __init__(self, lower_limit=None, upper_limit=None):
        super(LookupTable, self).__init__(self._alloc())

        if not lower_limit is None:
            self.setLowerLimit(lower_limit)

        if not upper_limit is None:
            self.setUpperLimit(upper_limit)

    def getMaxValue(self):
        self.assertSize(1)
        return self._max()

    def getMinValue(self):
        self.assertSize(1)
        return self._min()

    def getMinArg(self):
        self.assertSize(1)
        return self._arg_min()

    def getMaxArg(self):
        self.assertSize(1)
        return self._arg_max()

    def assertSize(self, N):
        if len(self) < N:
            raise ValueError("Lookup table is too small")

    def __len__(self):
        return self._size()

    @property
    def size(self):
        return len(self)

    # Deprecated properties
    @property
    def max(self):
        return self.getMaxValue()

    @property
    def min(self):
        return self.getMinValue()

    @property
    def arg_max(self):
        return self.getMaxArg()

    @property
    def arg_min(self):
        return self.getMinArg()

    def setLowerLimit(self, value):
        self._set_low_limit(value)

    def hasLowerLimit(self):
        return self._has_low_limit()

    def setUpperLimit(self, value):
        self._set_high_limit(value)

    def hasUpperLimit(self):
        return self._has_high_limit()

    def interp(self, x):
        self.assertSize(2)
        if x < self.getMinArg():
            if not self.hasLowerLimit():
                raise ValueError(
                    "Interpolate argument:%g is outside valid interval: [%g,%g]"
                    % (x, self.getMinArg(), self.getMaxArg()))
        elif x > self.getMaxArg():
            if not self.hasUpperLimit():
                raise ValueError(
                    "Interpolate argument:%g is outside valid interval: [%g,%g]"
                    % (x, self.getMinArg(), self.getMaxArg()))

        return self._interp(x)

    def append(self, x, y):
        self._append(x, y)

    #todo: necessary???
    def __del__(self):
        self._free()

    def free(self):
        self._free()
예제 #19
0
class SchemaItem(BaseCClass):
    TYPE_NAME = "schema_item"

    _alloc = ConfigPrototype("void* config_schema_item_alloc( char* , bool )",
                             bind=False)
    _free = ConfigPrototype("void config_schema_item_free( schema_item )")
    _iget_type = ConfigPrototype(
        "config_content_type_enum config_schema_item_iget_type( schema_item, int)"
    )
    _iset_type = ConfigPrototype(
        "void config_schema_item_iset_type( schema_item , int , config_content_type_enum)"
    )
    _set_argc_minmax = ConfigPrototype(
        "void config_schema_item_set_argc_minmax( schema_item , int , int)")
    _add_alternative = ConfigPrototype(
        "void config_schema_item_add_indexed_alternative(schema_item , int , char*)"
    )
    _set_deprecated = ConfigPrototype(
        "void config_schema_item_set_deprecated(schema_item ,  char*)")
    _valid_string = ConfigPrototype(
        "bool config_schema_item_valid_string(config_content_type_enum ,  char*)",
        bind=False)
    _sscanf_bool = UtilPrototype("bool util_sscanf_bool( char* , bool*)",
                                 bind=False)

    def __init__(self, keyword, required=False):
        c_ptr = self._alloc(keyword, required)
        super(SchemaItem, self).__init__(c_ptr)

    @classmethod
    def validString(cls, value_type, value):
        return cls._valid_string(value_type, value)

    @classmethod
    def convert(cls, value_type, value_string):
        if cls.validString(value_type, value_string):
            if value_type == ContentTypeEnum.CONFIG_INT:
                return int(value_string)

            if value_type == ContentTypeEnum.CONFIG_FLOAT:
                return float(value_string)

            if value_type == ContentTypeEnum.CONFIG_BOOL:
                value = ctypes.c_bool()
                SchemaItem._sscanf_bool(value_string, ctypes.byref(value))
                return value.value

            return value_string
        else:
            raise ValueError("Invalid string value: %s" % value_string)

    def iget_type(self, index):
        """ @rtype: ContentTypeEnum """
        return self._iget_type(index)

    def iset_type(self, index, schema_type):
        """
        @type schema_type: ContentTypeEnum
        """
        assert isinstance(schema_type, ContentTypeEnum)
        self._iset_type(index, schema_type)

    def set_argc_minmax(self, minimum, maximum):
        self._set_argc_minmax(minimum, maximum)

    def initSelection(self, index, alternatives):
        for alt in alternatives:
            self.addAlternative(index, alt)

    def addAlternative(self, index, alt):
        self._add_alternative(index, alt)

    def setDeprecated(self, msg):
        """This method can be used to mark this item as deprecated.

        If the deprecated item is used in a configuration file the
        @msg will be added to the warnings of the ConfigContent
        object,
        """
        self._set_deprecated(msg)

    def free(self):
        self._free()
예제 #20
0
class StringList(BaseCClass):
    TYPE_NAME = "stringlist"

    _alloc = UtilPrototype("void* stringlist_alloc_new( )", bind=False)
    _free = UtilPrototype("void stringlist_free(stringlist )")
    _append = UtilPrototype("void stringlist_append_copy(stringlist , char* )")
    _iget = UtilPrototype("char* stringlist_iget(stringlist , int )")
    _front = UtilPrototype("char* stringlist_front( stringlist )")
    _back = UtilPrototype("char* stringlist_back( stringlist )")
    _iget_copy = UtilPrototype("char* stringlist_iget_copy(stringlist, int)")
    _iset = UtilPrototype(
        "void  stringlist_iset_copy( stringlist , int , char* )")
    _get_size = UtilPrototype("int  stringlist_get_size( stringlist )")
    _contains = UtilPrototype("bool stringlist_contains(stringlist , char*)")
    _equal = UtilPrototype("bool stringlist_equal(stringlist , stringlist)")
    _sort = UtilPrototype("void stringlist_python_sort( stringlist , int)")
    _pop = UtilPrototype("char* stringlist_pop(stringlist)")
    _last = UtilPrototype("char* stringlist_get_last(stringlist)")
    _find_first = UtilPrototype("int stringlist_find_first(stringlist, char*)")

    def __init__(self, initial=None):
        """
        Creates a new stringlist instance.
        
        Creates a new stringlist instance. The optional argument
        @initial should be an iterable of strings which will be the
        initial content of the StringList; the content will be copied
        from the initial list:

            S = StringList( initial = ["My" , "name" , "is", "John" , "Doe"] )

        If an element in the @initial argument is not a string the
        TypeError exception will be raised.

        If c_ptr argument is different from None, that should refer to
        an already created stringlist instance; this Python will take
        ownership of the underlying object.
        """

        c_ptr = self._alloc()
        super(StringList, self).__init__(c_ptr)
        if initial:
            self._append_all(initial)

    def _append_all(self, lst):
        for s in lst:
            if isinstance(s, bytes):
                s.decode('ascii')
            if isinstance(s, string_types):
                self.append(s)
            else:
                raise TypeError('Item is not a string: "%s".' % s)

    def __eq__(self, other):
        if len(self) == len(other):
            if isinstance(other, StringList):
                return self._equal(other)
            else:
                equal = True
                for index, s2 in enumerate(other):
                    if self[index] != s2:
                        equal = False
                        break
                return equal
        else:
            return False

    def __setitem__(self, index, value):
        if isinstance(index, int):
            length = len(self)
            if index < 0:
                # Will only wrap backwards once
                index = len(self) + index

            if index < 0 or index >= length:
                raise IndexError("index must be in range %d <= %d < %d" %
                                 (0, index, len(self)))
            if isinstance(value, bytes):
                value = value.decode('ascii')
            if isinstance(value, string_types):
                self._iset(index, value)
            else:
                raise TypeError("Item: %s not string type" % value)

    def __getitem__(self, index):
        """
        Implements [] read operator on the stringlist.
        
        The __getitem__ method supports negative, i.e. from the right,
        indexing; but not slices.
        """
        if isinstance(index, int):
            length = len(self)
            if index < 0:
                index += length
            if index < 0 or index >= length:
                raise IndexError("index must be in range %d <= %d < %d" %
                                 (0, index, len(self)))
            else:
                return self._iget(index)
        else:
            raise TypeError("Index should be integer type")

    def __contains__(self, s):
        """
        Implements the 'in' operator.

        The 'in' check is based on string equality.
        """
        return self._contains(s)

    def __iadd__(self, other):
        if isinstance(other, bytes):
            other.decode('ascii')
        if isinstance(other, string_types):
            raise TypeError("Can not add strings with + - use append()")
        for s in other:
            self.append(s)
        return self

    def __add__(self, other):
        copy = StringList(initial=self)
        copy += other
        return copy

    def __ior__(self, other):
        if isinstance(other, bytes):
            other.decode('ascii')
        if isinstance(other, string_types):
            raise TypeError("Can not | with string.")
        for s in other:
            if not s in self:
                self.append(s)
        return self

    def __or__(self, other):
        copy = StringList(initial=self)
        copy |= other
        return copy

    def contains(self, s):
        """
        Checks if the list contains @s.

        Functionality also available through the 'in' builtin in
        Python.
        """
        return s in self

    def __len__(self):
        """
        The length of the list - used to support builtin len().
        """
        return self._get_size()

    def __str__(self):
        """
        String representation of list; used when calling print."
        """
        buffer = "["
        length = len(self)
        for i in range(length):
            if i == length - 1:
                buffer += "\'%s\'" % self[i]
            else:
                buffer += "\'%s\'," % self[i]
        buffer += "]"
        return buffer

    def __repr__(self):
        return 'StringList(size = %d) %s' % (len(self), self._ad_str())

    def empty(self):
        """Returns true if and only if list is empty."""
        return len(self) == 0

    def pop(self):
        """
        Will remove the last element from the list and return it. 
        
        Will raise IndexError if list is empty.
        """
        if not self.empty():
            return self._pop()
        else:
            raise IndexError("List empty.  Cannot call pop().")

    def append(self, s):
        """
        Appends a new string @s to list. If the input argument is not a
        string the string representation will be appended.
        """
        if isinstance(s, bytes):
            s.decode('ascii')
        if isinstance(s, string_types):
            self._append(s)
        else:
            self._append(str(s))

    @property
    def strings(self):
        """
        The strings in as a normal Python list of strings.

        The content is copied, so the StringList() instance can safely go
        out of scope after the call has completed. Hmmmm - is that true?
        """
        slist = []
        for s in self:
            slist.append(s)
        return slist

    @property
    def last(self):
        """
        Will return the last element in list. Raise IndexError if empty.
        """
        if not self.empty():
            return self._last()
        else:
            raise IndexError("List empty.  No such element last().")

    def sort(self, cmp_flag=0):
        """
        Will sort the list inplace.

        The string comparison can be altered with the value of the
        optional cmp_flag parameter:
        
             0 : Normal strcmp() string comparison
             1 : util_strcmp_int() string comparison
             2 : util_strcmp_float() string comparison

        """
        self._sort(cmp_flag)

    def index(self, value):
        """ @rtype: int """
        if isinstance(value, bytes):
            value.decode('ascii')
        if isinstance(value, string_types):
            return self._find_first(value)
        raise KeyError('Cannot index by "%s", lst.index() needs a string.' %
                       str(type(value)))

    def free(self):
        self._free()

    def front(self):
        if not self.empty():
            return self._front()
        else:
            raise IndexError('List empty.  No such element front().')

    def back(self):
        if not self.empty():
            return self._back()
        else:
            raise IndexError('List empty.  No such element back().')
예제 #21
0
#  the Free Software Foundation, either version 3 of the License, or 
#  (at your option) any later version. 
#   
#  ERT is distributed in the hope that it will be useful, but WITHOUT ANY 
#  WARRANTY; without even the implied warranty of MERCHANTABILITY or 
#  FITNESS FOR A PARTICULAR PURPOSE.   
#   
#  See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html> 
#  for more details. 
"""
Module with utility functions from util.c
"""

from ecl.util import UtilPrototype

strcmp_int = UtilPrototype("int util_strcmp_int( char* , char* )")
"""
Function to compare strings with embedded integers.

Will use proper numeric comparison when comparing strings with
embedded numbers, i.e. "CASE-9" will follow after "CASE-10" when
sorting:

   >> l = ["CASE-9" , "CASE-10"]
   >> l.sort()
   >> print(l)
      ["CASE-10" , "CASE-9"]
   >> l.sort( strcmp_int )
   >> print(l)
      ["CASE-9" , "CASE-10"]
예제 #22
0
class DoubleVector(VectorTemplate):
    default_format = "%8.4f"

    _alloc            = UtilPrototype("void*  double_vector_alloc( int , double )" , bind = False)
    _alloc_copy       = UtilPrototype("double_vector_obj   double_vector_alloc_copy( double_vector )")
    _strided_copy     = UtilPrototype("double_vector_obj   double_vector_alloc_strided_copy( double_vector , int , int , int)")
    _free             = UtilPrototype("void   double_vector_free( double_vector )")
    _iget             = UtilPrototype("double double_vector_iget( double_vector , int )")
    _safe_iget        = UtilPrototype("double double_vector_safe_iget(double_vector , int )")
    _iset             = UtilPrototype("double double_vector_iset( double_vector , int , double)")
    _size             = UtilPrototype("int    double_vector_size( double_vector )")
    _append           = UtilPrototype("void   double_vector_append( double_vector , double )")
    _idel_block       = UtilPrototype("void   double_vector_idel_block( double_vector , int , int )")
    _pop              = UtilPrototype("double double_vector_pop( double_vector )")
    _idel             = UtilPrototype("void   double_vector_idel( double_vector , int )")
    _lshift           = UtilPrototype("void   double_vector_lshift( double_vector , int )")
    _rshift           = UtilPrototype("void   double_vector_rshift( double_vector , int )")
    _insert           = UtilPrototype("void   double_vector_insert( double_vector , int , double)")
    _fprintf          = UtilPrototype("void   double_vector_fprintf( double_vector , FILE , char* , char*)")
    _sort             = UtilPrototype("void   double_vector_sort( double_vector )")
    _rsort            = UtilPrototype("void   double_vector_rsort( double_vector )")
    _reset            = UtilPrototype("void   double_vector_reset( double_vector )")
    _get_read_only    = UtilPrototype("bool   double_vector_get_read_only( double_vector )")
    _set_read_only    = UtilPrototype("void   double_vector_set_read_only( double_vector , bool )")
    _get_max          = UtilPrototype("double double_vector_get_max( double_vector )")
    _get_min          = UtilPrototype("double double_vector_get_min( double_vector )")
    _get_max_index    = UtilPrototype("int    double_vector_get_max_index( double_vector , bool)")
    _get_min_index    = UtilPrototype("int    double_vector_get_min_index( double_vector , bool)")
    _shift            = UtilPrototype("void   double_vector_shift( double_vector , double )")
    _scale            = UtilPrototype("void   double_vector_scale( double_vector , double )")
    _div              = UtilPrototype("void   double_vector_div( double_vector , double )")
    _inplace_add      = UtilPrototype("void   double_vector_inplace_add( double_vector , double_vector )")
    _inplace_mul      = UtilPrototype("void   double_vector_inplace_mul( double_vector , double_vector )")
    _assign           = UtilPrototype("void   double_vector_set_all( double_vector , double)")
    _memcpy           = UtilPrototype("void   double_vector_memcpy(double_vector , double_vector )")
    _set_default      = UtilPrototype("void   double_vector_set_default( double_vector , double)")
    _get_default      = UtilPrototype("double double_vector_get_default( double_vector )")
    _element_size     = UtilPrototype("int    double_vector_element_size( double_vector )")

    _permute          = UtilPrototype("void double_vector_permute(double_vector, permutation_vector)")
    _sort_perm        = UtilPrototype("permutation_vector_obj double_vector_alloc_sort_perm(double_vector)")
    _rsort_perm       = UtilPrototype("permutation_vector_obj double_vector_alloc_rsort_perm(double_vector)")
    _contains         = UtilPrototype("bool double_vector_contains(double_vector, double)")
    _select_unique    = UtilPrototype("void double_vector_select_unique(double_vector)")
    _element_sum      = UtilPrototype("double double_vector_sum(double_vector)")
    _get_data_ptr     = UtilPrototype("double* double_vector_get_ptr(double_vector)")
    _count_equal      = UtilPrototype("int double_vector_count_equal(double_vector, double)")
    _init_range       = UtilPrototype("void double_vector_init_range(double_vector, double , double , double)")

    def __init__(self, default_value=0, initial_size=0):
        super(DoubleVector, self).__init__(default_value, initial_size)
예제 #23
0
파일: int_vector.py 프로젝트: pgdr/libecl
class IntVector(VectorTemplate):
    default_format = "%d"

    _alloc = UtilPrototype("void*  int_vector_alloc( int , int )", bind=False)
    _create_active_list = UtilPrototype(
        "int_vector_obj string_util_alloc_active_list( char*)", bind=False)
    _create_value_list = UtilPrototype(
        "int_vector_obj string_util_alloc_value_list( char*)", bind=False)
    _alloc_copy = UtilPrototype(
        "int_vector_obj int_vector_alloc_copy( int_vector )")
    _strided_copy = UtilPrototype(
        "int_vector_obj int_vector_alloc_strided_copy( int_vector , int , int , int)"
    )
    _free = UtilPrototype("void   int_vector_free( int_vector )")
    _iget = UtilPrototype("int    int_vector_iget( int_vector , int )")
    _safe_iget = UtilPrototype(
        "int    int_vector_safe_iget( int_vector , int )")
    _iset = UtilPrototype("int    int_vector_iset( int_vector , int , int)")
    _size = UtilPrototype("int    int_vector_size( int_vector )")
    _append = UtilPrototype("void   int_vector_append( int_vector , int )")
    _idel_block = UtilPrototype(
        "void   int_vector_idel_block( int_vector , int , int )")
    _pop = UtilPrototype("int    int_vector_pop( int_vector )")
    _idel = UtilPrototype("void   int_vector_idel( int_vector , int )")
    _insert = UtilPrototype(
        "void   int_vector_insert( int_vector , int , int)")
    _lshift = UtilPrototype("void   int_vector_lshift( int_vector , int )")
    _rshift = UtilPrototype("void   int_vector_rshift( int_vector , int )")
    _fprintf = UtilPrototype(
        "void   int_vector_fprintf( int_vector , FILE , char* , char*)")
    _sort = UtilPrototype("void   int_vector_sort( int_vector )")
    _rsort = UtilPrototype("void   int_vector_rsort( int_vector )")
    _reset = UtilPrototype("void   int_vector_reset( int_vector )")
    _set_read_only = UtilPrototype(
        "void   int_vector_set_read_only( int_vector , bool )")
    _get_read_only = UtilPrototype(
        "bool   int_vector_get_read_only( int_vector )")
    _get_max = UtilPrototype("int    int_vector_get_max( int_vector )")
    _get_min = UtilPrototype("int    int_vector_get_min( int_vector )")
    _get_max_index = UtilPrototype(
        "int    int_vector_get_max_index( int_vector , bool)")
    _get_min_index = UtilPrototype(
        "int    int_vector_get_min_index( int_vector , bool)")
    _shift = UtilPrototype("void   int_vector_shift( int_vector , int )")
    _scale = UtilPrototype("void   int_vector_scale( int_vector , int )")
    _div = UtilPrototype("void   int_vector_div( int_vector , int )")
    _inplace_add = UtilPrototype(
        "void   int_vector_inplace_add( int_vector , int_vector )")
    _inplace_mul = UtilPrototype(
        "void   int_vector_inplace_mul( int_vector , int_vector )")
    _assign = UtilPrototype("void   int_vector_set_all( int_vector , int)")
    _memcpy = UtilPrototype(
        "void   int_vector_memcpy(int_vector , int_vector )")
    _set_default = UtilPrototype(
        "void   int_vector_set_default( int_vector , int)")
    _get_default = UtilPrototype("int    int_vector_get_default( int_vector )")
    _element_size = UtilPrototype(
        "int    int_vector_element_size( int_vector )")

    _permute = UtilPrototype(
        "void int_vector_permute(int_vector, permutation_vector)")
    _sort_perm = UtilPrototype(
        "permutation_vector_obj int_vector_alloc_sort_perm(int_vector)")
    _rsort_perm = UtilPrototype(
        "permutation_vector_obj int_vector_alloc_rsort_perm(int_vector)")
    _contains = UtilPrototype("bool int_vector_contains(int_vector, int)")
    _select_unique = UtilPrototype("void int_vector_select_unique(int_vector)")
    _element_sum = UtilPrototype("int int_vector_sum(int_vector)")
    _get_data_ptr = UtilPrototype("int* int_vector_get_ptr(int_vector)")
    _count_equal = UtilPrototype("int int_vector_count_equal(int_vector, int)")
    _init_range = UtilPrototype(
        "void int_vector_init_range(int_vector, int , int , int)")

    def __init__(self, default_value=0, initial_size=0):
        super(IntVector, self).__init__(default_value, initial_size)

    @classmethod
    def active_list(cls, range_string):
        """Will create a IntVector instance with the values from @range_string.

        The range_string input should be of the type "1,3-5,9,17",
        i.e. integer values separated by commas, and dashes to
        represent ranges. If the input string contains ANY invalid
        characters the returned active list will be empty:

           "1,4-7,10"  =>  {1,4,5,6,7,10}
           "1,4-7,10X" =>  {}
        
        The empty list will evaluate to false. The values in the input
        string are meant to indicate "active values", i.e. the output
        values are sorted and repeated values are only counted once:
        
           "1,1,7,2" => {1,2,7}
        
        """
        return cls._create_active_list(range_string)

    @classmethod
    def valueList(cls, range_string):
        """Will create a IntVecter of all the values in the @range_string.

        Will not sort the values, and not uniquiefy - in contrast to
        the active_list() method.

        """
        return cls._create_value_list(range_string)

    def count(self, value):
        """ @rtype: int """
        return self._count_equal(value)
예제 #24
0
파일: ctime.py 프로젝트: mahg/ResInsight
class CTime(BaseCValue):
    TYPE_NAME = "time_t"
    DATA_TYPE = ctypes.c_long
    _timezone = UtilPrototype("char* util_get_timezone()", bind=False)
    _timegm = UtilPrototype(
        "long util_make_datetime_utc(int, int, int, int, int, int)",
        bind=False)

    def __init__(self, value):
        if isinstance(value, int):
            value = value
        elif isinstance(value, CTime):
            value = value.value()
        elif isinstance(value, datetime.datetime):
            value = CTime._timegm(value.second, value.minute, value.hour,
                                  value.day, value.month, value.year)
        elif isinstance(value, datetime.date):
            value = CTime._timegm(0, 0, 0, value.day, value.month, value.year)
        else:
            raise NotImplementedError("Can not convert class %s to CTime" %
                                      value.__class__)

        super(CTime, self).__init__(value)

    def ctime(self):
        """ @rtype: int """
        return self.value()

    def time(self):
        """Return this time_t as a time.gmtime() object"""
        return time.gmtime(self.value())

    def date(self):
        """Return this time_t as a datetime.date([year, month, day])"""
        return datetime.date(*self.time()[0:3])

    def datetime(self):
        return datetime.datetime(*self.time()[0:6])

    def __str__(self):
        return self.datetime().strftime("%Y-%m-%d %H:%M:%S%z")

    def __ge__(self, other):
        return self > other or self == other

    def __le__(self, other):
        return self < other or self == other

    def __gt__(self, other):
        if isinstance(other, CTime):
            return self.value() > other.value()
        elif isinstance(other, (int, datetime.datetime, datetime.date)):
            return self > CTime(other)
        else:
            raise TypeError("CTime does not support type: %s" %
                            other.__class__)

    def __lt__(self, other):
        if isinstance(other, CTime):
            return self.value() < other.value()
        elif isinstance(other, (int, datetime.datetime, datetime.date)):
            return self < CTime(other)
        else:
            raise TypeError("CTime does not support type: %s" %
                            other.__class__)

    def __ne__(self, other):
        return not self == other

    def __eq__(self, other):
        if isinstance(other, CTime):
            return self.value() == other.value()
        elif isinstance(other, (int, datetime.datetime, datetime.date)):
            return self == CTime(other)
        elif isinstance(other, type(None)):
            return False
        else:
            raise TypeError("CTime does not support type: %s" %
                            other.__class__)

    def __imul__(self, other):
        value = int(self.value() * other)
        self.setValue(value)
        return self

    def __hash__(self):
        return hash(self.value())

    def __iadd__(self, other):
        if isinstance(other, CTime):
            self.setValue(self.value() + other.value())
            return self
        else:
            self.setValue(self.value() + CTime(other).value())
            return self

    def __add__(self, other):
        copy = CTime(self)
        copy += other
        return copy

    def __radd__(self, other):
        return self + other

    def __mul__(self, other):
        copy = CTime(self)
        copy *= other
        return copy

    def __rmul__(self, other):
        return self * other

    def timetuple(self):
        # this function is a requirement for comparing against datetime objects where the CTime is on the right side
        pass

    def __repr__(self):
        return "time_t value: %d [%s]" % (self.value(), str(self))

    @property
    def stripped(self):
        return time.strptime(self, "%Y-%m-%d %H:%M:S%")

    @classmethod
    def timezone(cls):
        """
         Returns the current timezone "in" C
         @rtype: str
        """
        return CTime._timezone()
예제 #25
0
파일: stat.py 프로젝트: mahg/ResInsight
#  the Free Software Foundation, either version 3 of the License, or 
#  (at your option) any later version. 
#   
#  ERT is distributed in the hope that it will be useful, but WITHOUT ANY 
#  WARRANTY; without even the implied warranty of MERCHANTABILITY or 
#  FITNESS FOR A PARTICULAR PURPOSE.   
#   
#  See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html> 
#  for more details.
from collections import Sequence

from cwrap import PrototypeError
from ecl.util import LLSQResultEnum, UtilPrototype, Matrix


quantile = UtilPrototype("double statistics_empirical_quantile(double_vector, double)")
"""@type: (ecl.util.DoubleVector, float)->float"""

quantile_sorted = UtilPrototype("double statistics_empirical_quantile(double_vector, double)")
"""@type: (ecl.util.DoubleVector, float)->float"""

try:
    _polyfit = UtilPrototype("llsq_result_enum matrix_stat_polyfit(matrix, matrix, matrix, matrix)")
except PrototypeError:
    _polyfit = None

def polyfit(n, x, y, s=None):
    """
    @type n: int
    @type x: Matrix or Sequence
    @type y: Matrix or Sequence
예제 #26
0
class SubstitutionList(BaseCClass):
    TYPE_NAME = "subst_list"

    _alloc = UtilPrototype("void* subst_list_alloc(void*)", bind=False)
    _free = UtilPrototype("void subst_list_free(subst_list)")
    _size = UtilPrototype("int subst_list_get_size(subst_list)")
    _get_key = UtilPrototype("char* subst_list_iget_key(subst_list, int)")
    _get_value = UtilPrototype("char* subst_list_iget_value(subst_list, int)")
    _get_doc_string = UtilPrototype(
        "char* subst_list_iget_doc_string(subst_list, int)")
    _append_copy = UtilPrototype(
        "void subst_list_append_copy(subst_list, char*, char*, char*)")

    def __init__(self):
        c_ptr = self._alloc(0)
        super(SubstitutionList, self).__init__(c_ptr)

    def __len__(self):
        return self._size()

    def addItem(self, key, value, doc_string=""):
        self._append_copy(key, value, doc_string)

    def __getitem__(self, index_or_key):
        if not isinstance(index_or_key, int):
            raise IndexError("Index must be a number!")

        if index_or_key < 0 or index_or_key >= len(self):
            raise IndexError("Index must be in the range: [%i, %i]" %
                             (0, len(self) - 1))

        key = self._get_key(index_or_key)
        value = self._get_value(index_or_key)
        doc_string = self._get_doc_string(index_or_key)

        return key, value, doc_string

    def __iter__(self):
        index = 0
        while index < len(self):
            yield self[index]
            index += 1

    def __contains__(self, key):
        for kw, value, doc in self:
            if key == kw:
                return True
        return False

    def indexForKey(self, key):
        if not key in self:
            raise KeyError("Key '%s' not in substitution list!" % key)

        for index, key_val_doc in enumerate(self):
            if key == key_val_doc[0]:
                return index

        return None  # Should never happen!

    def free(self):
        self._free()
예제 #27
0
class UIReturn(BaseCClass):
    TYPE_NAME = "ui_return"

    _alloc = UtilPrototype("void* ui_return_alloc( ui_return_status )",
                           bind=False)
    _free = UtilPrototype("void ui_return_free(ui_return)")
    _get_status = UtilPrototype(
        "ui_return_status ui_return_get_status(ui_return)")
    _get_help = UtilPrototype("char* ui_return_get_help(ui_return)")
    _add_help = UtilPrototype("void ui_return_add_help(ui_return)")
    _add_error = UtilPrototype("void ui_return_add_error(ui_return)")
    _num_error = UtilPrototype("int ui_return_get_error_count(ui_return)")
    _last_error = UtilPrototype("char* ui_return_get_last_error(ui_return)")
    _first_error = UtilPrototype("char* ui_return_get_first_error(ui_return)")
    _iget_error = UtilPrototype(
        "char* ui_return_iget_error(ui_return ,       int)")

    def __init__(self, status):
        c_ptr = self._alloc(status)
        if c_ptr:
            super(UIReturn, self).__init__(c_ptr)
        else:
            raise ValueError('Unable to construct UIReturn with status = %s' %
                             str(status))

    def __nonzero__(self):
        if self.status() == UIReturnStatusEnum.UI_RETURN_OK:
            return True
        else:
            return False

    def __len__(self):
        return self._num_error()

    def __getitem__(self, index):
        if isinstance(index, int):
            if index < 0:
                index += len(self)
            if 0 <= index < len(self):
                return self._iget_error(index)
            else:
                raise IndexError('Invalid index.  Valid range: [0, %d)' %
                                 len(self))
        else:
            raise TypeError("Lookup type must be integer")

    def iget_error(self, index):
        return self[index]

    def help_text(self):
        help_text = self._get_help()
        if help_text:
            return help_text
        else:
            return ""

    def add_help(self, help_text):
        self._add_help(help_text)

    def status(self):
        return self._get_status()

    def __assert_error(self):
        if self.status() == UIReturnStatusEnum.UI_RETURN_OK:
            raise ValueError(
                "Can not add error messages to object in state RETURN_OK")

    def add_error(self, error):
        self.__assert_error()
        self._add_error(error)

    def last_error(self):
        self.__assert_error()
        return self._last_error()

    def first_error(self):
        self.__assert_error()
        return self._first_error()

    def free(self):
        self._free()

    def __repr__(self):
        ec = len(self)
        st = self.status()
        ad = self._ad_str()
        return 'UIReturn(error_count = %d, status = %s) %s' % (ec, st, ad)
예제 #28
0
class SubstitutionList(BaseCClass):
    TYPE_NAME = "subst_list"

    _alloc = UtilPrototype("void* subst_list_alloc(void*)", bind=False)
    _free = UtilPrototype("void subst_list_free(subst_list)")
    _size = UtilPrototype("int subst_list_get_size(subst_list)")
    _iget_key = UtilPrototype("char* subst_list_iget_key(subst_list, int)")
    _iget_value = UtilPrototype("char* subst_list_iget_value(subst_list, int)")
    _get_value = UtilPrototype("char* subst_list_get_value(subst_list, char*)")
    _has_key = UtilPrototype("bool subst_list_has_key(subst_list, char*)")
    _get_doc = UtilPrototype(
        "char* subst_list_get_doc_string(subst_list, char*)")
    _append_copy = UtilPrototype(
        "void subst_list_append_copy(subst_list, char*, char*, char*)")

    def __init__(self):
        c_ptr = self._alloc(0)
        super(SubstitutionList, self).__init__(c_ptr)

    def __len__(self):
        return self._size()

    def addItem(self, key, value, doc_string=""):
        self._append_copy(key, value, doc_string)

    def keys(self):
        key_list = []
        for i in range(len(self)):
            key_list.append(self._iget_key(i))
        return key_list

    def __iter__(self):
        index = 0
        keys = self.keys()
        for index in range(len(self)):
            key = keys[index]
            yield (key, self[key], self.doc(key))

    def __contains__(self, key):
        if not isinstance(key, str):
            return False
        return self._has_key(key)

    def __getitem__(self, key):
        if key in self:
            return self._get_value(key)
        else:
            raise KeyError("No such key:%s" % key)

    def get(self, key, default=None):
        return self[key] if key in self else default

    def doc(self, key):
        if key in self:
            return self._get_doc(key)
        else:
            raise KeyError("No such key:%s" % key)

    def indexForKey(self, key):
        if not key in self:
            raise KeyError("Key '%s' not in substitution list!" % key)

        for index, key_val_doc in enumerate(self):
            if key == key_val_doc[0]:
                return index

        return None  # Should never happen!

    def free(self):
        self._free()

    def __repr__(self):
        return self._create_repr('len=%d' % len(self))

    def __str__(self):
        return 'SubstitutionList{%s}' % ", ".join(map(str, self.keys()))
예제 #29
0
class TimeVector(VectorTemplate):
    TYPE_NAME = "time_t_vector"
    default_format = "%d"

    _alloc = UtilPrototype("void*   time_t_vector_alloc(int, time_t )",
                           bind=False)
    _alloc_copy = UtilPrototype(
        "time_t_vector_obj time_t_vector_alloc_copy(time_t_vector )")
    _strided_copy = UtilPrototype(
        "time_t_vector_obj time_t_vector_alloc_strided_copy(time_t_vector , int , int , int)"
    )
    _free = UtilPrototype("void   time_t_vector_free( time_t_vector )")
    _iget = UtilPrototype("time_t   time_t_vector_iget( time_t_vector , int )")
    _safe_iget = UtilPrototype(
        "time_t   time_t_vector_safe_iget( time_t_vector , int )")
    _iset = UtilPrototype(
        "time_t   time_t_vector_iset( time_t_vector , int , time_t)")
    _size = UtilPrototype("int      time_t_vector_size( time_t_vector )")
    _append = UtilPrototype(
        "void     time_t_vector_append( time_t_vector , time_t )")
    _idel_block = UtilPrototype(
        "void     time_t_vector_idel_block( time_t_vector , int , int )")
    _idel = UtilPrototype("void     time_t_vector_idel( time_t_vector , int )")
    _pop = UtilPrototype("time_t   time_t_vector_pop( time_t_vector )")
    _lshift = UtilPrototype(
        "void     time_t_vector_lshift( time_t_vector , int )")
    _rshift = UtilPrototype(
        "void     time_t_vector_rshift( time_t_vector , int )")
    _insert = UtilPrototype(
        "void     time_t_vector_insert( time_t_vector , int , time_t)")
    _fprintf = UtilPrototype(
        "void     time_t_vector_fprintf( time_t_vector , FILE , char* , char*)"
    )
    _sort = UtilPrototype("void     time_t_vector_sort( time_t_vector )")
    _rsort = UtilPrototype("void     time_t_vector_rsort( time_t_vector )")
    _reset = UtilPrototype("void     time_t_vector_reset( time_t_vector )")
    _set_read_only = UtilPrototype(
        "void     time_t_vector_set_read_only( time_t_vector , bool )")
    _get_read_only = UtilPrototype(
        "bool     time_t_vector_get_read_only( time_t_vector )")
    _get_max = UtilPrototype("time_t   time_t_vector_get_max( time_t_vector )")
    _get_min = UtilPrototype("time_t   time_t_vector_get_min( time_t_vector )")
    _get_max_index = UtilPrototype(
        "int      time_t_vector_get_max_index( time_t_vector , bool)")
    _get_min_index = UtilPrototype(
        "int      time_t_vector_get_min_index( time_t_vector , bool)")
    _shift = UtilPrototype(
        "void     time_t_vector_shift( time_t_vector , time_t )")
    _scale = UtilPrototype(
        "void     time_t_vector_scale( time_t_vector , time_t )")
    _div = UtilPrototype(
        "void     time_t_vector_div( time_t_vector , time_t )")
    _inplace_add = UtilPrototype(
        "void     time_t_vector_inplace_add( time_t_vector , time_t_vector )")
    _inplace_mul = UtilPrototype(
        "void     time_t_vector_inplace_mul( time_t_vector , time_t_vector )")
    _assign = UtilPrototype(
        "void     time_t_vector_set_all( time_t_vector , time_t)")
    _memcpy = UtilPrototype(
        "void     time_t_vector_memcpy(time_t_vector , time_t_vector )")
    _set_default = UtilPrototype(
        "void     time_t_vector_set_default( time_t_vector , time_t)")
    _get_default = UtilPrototype(
        "time_t   time_t_vector_get_default( time_t_vector )")
    _element_size = UtilPrototype(
        "int      time_t_vector_element_size( time_t_vector )")

    _permute = UtilPrototype(
        "void time_t_vector_permute(time_t_vector, permutation_vector)")
    _sort_perm = UtilPrototype(
        "permutation_vector_obj time_t_vector_alloc_sort_perm(time_t_vector)")
    _rsort_perm = UtilPrototype(
        "permutation_vector_obj time_t_vector_alloc_rsort_perm(time_t_vector)")
    _contains = UtilPrototype(
        "bool time_t_vector_contains(time_t_vector, time_t)")
    _select_unique = UtilPrototype(
        "void time_t_vector_select_unique(time_t_vector)")
    _element_sum = UtilPrototype("time_t time_t_vector_sum(time_t_vector)")
    _count_equal = UtilPrototype(
        "int time_t_vector_count_equal(time_t_vector, time_t)")
    _init_range = UtilPrototype(
        "void time_t_vector_init_range(time_t_vector, time_t , time_t , time_t)"
    )

    def __init__(self, default_value=None, initial_size=0):
        if default_value is None:
            super(TimeVector, self).__init__(CTime(0), initial_size)
        else:
            try:
                default = CTime(default_value)
            except:
                raise ValueError(
                    "default value invalid - must be type ctime() or date/datetime"
                )

            super(TimeVector, self).__init__(default, initial_size)

    @classmethod
    def parseTimeUnit(cls, deltaString):
        deltaRegexp = re.compile("(?P<num>\d*)(?P<unit>[dmy])", re.IGNORECASE)
        matchObj = deltaRegexp.match(deltaString)
        if matchObj:
            try:
                num = int(matchObj.group("num"))
            except:
                num = 1

            timeUnit = matchObj.group("unit").lower()
            return num, timeUnit
        else:
            raise TypeError(
                "The delta string must be on form \'1d\', \'2m\', \'Y\' for one day, two months or one year respectively"
            )

    def __str__(self):
        """
        Returns string representantion of vector.
        """
        string_list = []
        for d in self:
            string_list.append("%s" % d)

        return str(string_list)

    def append(self, value):
        self._append(CTime(value))

    def __contains__(self, value):
        return self._contains(CTime(value))

    def nextTime(self, num, timeUnit):
        currentTime = self[-1].datetime()
        hour = currentTime.hour
        minute = currentTime.minute
        second = currentTime.second

        if timeUnit == "d":
            td = datetime.timedelta(days=num)
            currentTime += td
        else:
            day = currentTime.day
            month = currentTime.month
            year = currentTime.year

            if timeUnit == "y":
                year += num
            else:
                month += num - 1
                (deltaYear, newMonth) = divmod(month, 12)
                month = newMonth + 1
                year += deltaYear
            currentTime = datetime.datetime(year, month, day, hour, minute,
                                            second)

        return currentTime

    def appendTime(self, num, timeUnit):
        next = self.nextTime(num, timeUnit)
        self.append(CTime(next))

    @classmethod
    def createRegular(cls, start, end, deltaString):
        """
        The last element in the vector will be <= end; i.e. if the
        question of whether the range is closed in the upper end
        depends on the commensurability of the [start,end] interval
        and the delta:

        createRegular(0 , 10 , delta=3) => [0,3,6,9]
        createRegular(0 , 10 , delta=2) => [0,2,4,6,8,10]
        """
        start = CTime(start)
        end = CTime(end)
        if start > end:
            raise ValueError("The time interval is invalid start is after end")

        (num, timeUnit) = cls.parseTimeUnit(deltaString)

        timeVector = TimeVector()
        currentTime = start
        while currentTime <= end:
            ct = CTime(currentTime)
            timeVector.append(ct)
            currentTime = timeVector.nextTime(num, timeUnit)

        return timeVector

    def getDataPtr(self):
        raise NotImplementedError(
            "The getDataPtr() function is not implemented for time_t vectors")