Projects/laydi
Projects
/
laydi
Archived
7
0
Fork 0

Started working on Dimension and Universe objects (which will probably be renamed before actually being used in the program).

This commit is contained in:
Einar Ryeng 2011-01-05 15:48:00 +00:00
parent 5f1f4d0dc2
commit ebda69049e
1 changed files with 71 additions and 2 deletions

View File

@ -1,11 +1,80 @@
from scipy import ndarray,atleast_2d,asarray,intersect1d,zeros,empty,sparse,\ from scipy import ndarray, atleast_2d, asarray, intersect1d, zeros
where from scipy import empty, sparse, where
from scipy import sort as array_sort from scipy import sort as array_sort
from itertools import izip from itertools import izip
import shelve import shelve
import copy import copy
import re import re
class Universe(object):
def __init__(self, name):
self.name = name
self._ids = {}
def register(self, dim):
"""Increase reference count for identifiers in Dimension object dim"""
if dim.name != self.name:
return
for i in dim:
self._ids[i] = self._ids.get(i, 0) + 1
def unregister(self, dim):
"""Update reference count for identifiers in Dimension object dim
Update reference count for identifiers in Dimension object dim, and remove all
identifiers with a reference count of 0, as they do not (by definition) exist
any longer.
"""
if dim.name != self.name:
return
for i in dim:
refcount = self._ids[i]
if refcount == 1:
self._ids.pop(i)
else:
self._ids[i] -= 1
def __str__(self):
return "%s: %i elements, %i references" % (self.name, len(self._ids), sum(self._ids.values()))
def __contains__(self, element):
return self._ids.__contains__(element)
def __len__(self):
return len(self._ids)
def intersection(self, dim):
return set(self._ids).intersection(dim.idset)
class Dimension(object):
"""A Dimension represents the set of identifiers an object has along an axis.
"""
def __init__(self, name, ids=[]):
self.name = name
self.idset = set(ids)
self.idlist = list(ids)
def __getitem__(self, element):
return self.idlist[element]
def __getslice__(self, start, end):
return self.idlist[start:end]
def __contains__(self, element):
return self.idset.__contains__(element)
def __str__(self):
return "%s: %s" % (self.name, str(self.idlist))
def __len__(self):
return len(self.idlist)
def __iter__(self):
return iter(self.idlist)
def intersection(self, dim):
return self.idset.intersection(dim.idset)
class Dataset(object): class Dataset(object):
"""The Dataset base class. """The Dataset base class.