Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Bug in scipy.io.netcdf #232

Closed
wants to merge 1 commit into from

3 participants

Marc Honnorat Pauli Virtanen Ralf Gommers
Marc Honnorat

Hi,

There is a bug in scipy.io.netcdf when calling sync() or flush(). When writing to disk, the whole Netcdf structure is written, but the file is not rewound. Therefore, the second call to _write() (which can happen when closing the file) just append a second version of the structure after the first one.

This patch just adds a seek(0) before any writing operation.

Pauli Virtanen
Owner
pv commented

Can you add a regression test --- i.e., write a small test program that fails previously, but works after this bugfix?

Marc Honnorat
#!/usr/bin/env python
import os
import scipy.io.netcdf as cdf

f = cdf.netcdf_file('example.nc', mode='w')
x = f.createDimension('x',4)
v = f.createVariable('v', 'i2', ['x'])

v[:] = 1
f.flush()
print "First read  : %d" % os.path.getsize('example.nc')

v[:] = 2
f.flush()
print "Second read : %d" % os.path.getsize('example.nc')

f.close()
print "Last read   : %d" % os.path.getsize('example.nc')

Before the fix:

First read  : 80
Second read : 168
Last read   : 264

After the fix:

First read  : 80
Second read : 88
Last read   : 88
Ralf Gommers
Owner

I converted the above to a regression test. It actually didn't work with numpy 1.7.0-dev (because of http://news.gmane.org/gmane.comp.python.numeric.general), so I fixed the dtype parameter handling as well. Please check if that looks OK: rgommers@76a983e

Ralf Gommers
Owner

I merged this PR and my fix/tests in 7ac86ab, in order to get it in for 0.11.

Ralf Gommers
Owner

Thanks for your contribution Marc.

Ralf Gommers rgommers closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on May 23, 2012
  1. Marc Honnorat
This page is out of date. Refresh to see the latest.
Showing with 1 addition and 0 deletions.
  1. +1 −0  scipy/io/netcdf.py
1  scipy/io/netcdf.py
View
@@ -305,6 +305,7 @@ def flush(self):
sync = flush
def _write(self):
+ self.fp.seek(0)
self.fp.write(asbytes('CDF'))
self.fp.write(array(self.version_byte, '>b').tostring())
Something went wrong with that request. Please try again.