From 2ded483683bbf0f84f8ea08c234d6274245683d8 Mon Sep 17 00:00:00 2001 From: ARF Date: Wed, 6 May 2015 16:41:48 +0200 Subject: [PATCH] cache ctable.dtype Among others, this allow improving the performance of custom implementations of the outflavor abstraction layer. --- bcolz/ctable.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bcolz/ctable.py b/bcolz/ctable.py index 97d7bb89..bbf982ad 100644 --- a/bcolz/ctable.py +++ b/bcolz/ctable.py @@ -139,9 +139,13 @@ def cparams(self): "The compression parameters for this object." return self._cparams + _dtype = None @property def dtype(self): "The data type of this object (numpy dtype)." + if self._dtype: + return self._dtype + names, cols = self.names, self.cols l = [] for name in names: @@ -150,7 +154,8 @@ def dtype(self): t = (name, col.dtype) if col.ndim == 1 else \ (name, (col.dtype, col.shape[1:])) l.append(t) - return np.dtype(l) + self._dtype = np.dtype(l) + return self._dtype @property def names(self): @@ -487,6 +492,8 @@ def addcol(self, newcol, name=None, pos=None, move=False, **kwargs): # Insert the column self.cols.insert(name, pos, newcol) + # Trigger update of dtype cache + self._dtype = None # Update _arr1 self._arr1 = np.empty(shape=(1,), dtype=self.dtype) @@ -540,6 +547,8 @@ def delcol(self, name=None, pos=None, keep=False): if not keep: col.purge() + # Trigger update of dtype cache + self._dtype = None # Update _arr1 self._arr1 = np.empty(shape=(1,), dtype=self.dtype)