# HG changeset patch # User James Bergstra # Date 1216141041 14400 # Node ID 040cb796f4e06ea858878259846c0a912026fabd # Parent 43d9aa93934ed15d00690e2cc0331e244df25774 Removed feature of passing the file as a pathname from filetensor.{read, write} Rationale: 1. The common pattern of multiple successive reads to load a list of arrays doesn't work for the string argument. 2. It isn't clear without checking the docs whether the write() will open a file in append mode, which could lead to bugs. 3. It's a fairly useless feature anyway, because the truly lazy programmer can call write(open(filename, 'w'), mat) to reproduce the old behaviour if he wants it, and without the open-mode ambiguity. diff -r 43d9aa93934e -r 040cb796f4e0 _test_filetensor.py --- a/_test_filetensor.py Mon Jul 14 16:48:02 2008 -0400 +++ b/_test_filetensor.py Tue Jul 15 12:57:21 2008 -0400 @@ -30,8 +30,12 @@ def test_filename(self): gen = numpy.random.rand(1) - write(self.fname, gen) - mat = read(self.fname, None, debug=False) #load from filename + f = file(self.fname, 'w') + write(f, gen) + f.close() + f = file(self.fname, 'r') + mat = read(f, None, debug=False) #load from filename + f.close() self.failUnless(gen.shape == mat.shape) self.failUnless(numpy.all(gen == mat)) diff -r 43d9aa93934e -r 040cb796f4e0 filetensor.py --- a/filetensor.py Mon Jul 14 16:48:02 2008 -0400 +++ b/filetensor.py Tue Jul 15 12:57:21 2008 -0400 @@ -56,7 +56,8 @@ def read(f, subtensor=None, debug=False): """Load all or part of file 'f' into a numpy ndarray - If f is a string, it will be treated as a filename, and opened in read mode. + @param f: file from which to read + @type f: file-like object If subtensor is not None, it should be like the argument to numpy.ndarray.__getitem__. The following two expressions should return @@ -74,10 +75,6 @@ s_array = numpy.fromstring(s, dtype='int32') return s_array.item() - if isinstance(f, str): - if debug: print 'f', f - f = file(f, 'r') - #what is the data type of this matrix? #magic_s = f.read(4) #magic = numpy.fromstring(magic_s, dtype='int32') @@ -116,15 +113,17 @@ def write(f, mat): """Write a numpy.ndarray to file. - If 'f' is a string, then it will be interpreted as a filename. This filename - will be opened in 'w+' mode, and (automatically) closed at the end of the function. + @param f: file into which to write + @type f: file-like object + + @param mat: array to write to file + @type mat: numpy ndarray or compatible + """ def _write_int32(f, i): i_array = numpy.asarray(i, dtype='int32') if 0: print 'writing int32', i, i_array i_array.tofile(f) - if isinstance(f, str): - f = file(f, 'w+') try: _write_int32(f, _dtype_magic[str(mat.dtype)])