import cdms2, numpy.ma, regrid2 as regrid, os, sys from regrid2 import Regridder from markError import clearError, markError, reportError from markError import get_sample_data_dir clearError() print 'Test 8: Regridding ...', ## lat = cdms2.createGaussianAxis(32) ## lon = cdms2.createUniformLongitudeAxis(0.0,64,360.0/64.) ## outgrid = cdms2.createRectGrid(lat,lon,'yx','gaussian') outgrid = cdms2.createGaussianGrid(32) f = cdms2.openDataset(os.path.join(get_sample_data_dir(), 'readonly.nc')) u = f.variables['u'] ingrid = u.getGrid() try: sh = ingrid.shape except: markError('Grid shape') regridf = Regridder(ingrid, outgrid) newu = regridf(u) if (abs(newu[0, 0, -1] - 488.4763488) > 1.e-3): markError('regrid', newu[0, 0, -1]) newu = u.regrid(outgrid) if (abs(newu[0, 0, -1] - 488.4763488) > 1.e-3): markError('regrid', newu[0, 0, -1])
g = cdms2.open('cdtest10_t_%d.nc'%year,'w') if year==2004: tchunk = t.subSlice(imo+6) else: tchunk = t.subSlice((imo,imo+12)) g.write(tchunk) g.close() imo += 12 os.unlink('cdtest10_t_2001.nc') os.unlink('cdtest10_t_2003.nc') os.unlink('cdtest10_uv_2003.nc') os.unlink('cdtest10_uv_2005.nc') # Copy cdtest10.xml to working directory shutil.copyfile(os.path.join(get_sample_data_dir(), 'cdtest10.xml'), 'cdtest10.xml') # Test filemap access ... try: f = cdms2.open('cdtest10.xml') except Exception,err: print err markError('Opening cdtest10.xml using filemap: Version 3.0 or greater required') reportError() sys.exit(1) # Read u from 2001-7 to 2002-7 and compare u = f.getVariable('u')
import cdms2, numpy, os, sys from markError import NTIME,NLAT,NLON,x,clearError,markError,reportError from markError import get_sample_data_dir clearError() print 'Test 4: CdmsFile [numpy.ma] read/write ...', time = numpy.ma.array([0.0,366.0,731.0]) lat = numpy.ma.arange(NLAT)*(180./(NLAT-1))-90. lon = numpy.ma.arange(NLON)*(360.0/NLON) timestr = ['2000','2001','2002'] u = x[0] f = cdms2.createDataset('readwrite.nc') h = cdms2.open(os.path.join(get_sample_data_dir(),'readonly.nc')) tobj = f.createAxis('time',numpy.ma.array([time[1]])) tobj.units = 'days since 2000-1-1' latobj = f.createAxis('latitude',lat) latobj.units = 'degrees_north' lonobj = f.createAxis('longitude',lon) lonobj.units = 'degrees_east' var = f.createVariable('u',numpy.float,(tobj,latobj,lonobj)) var.units = 'm/s' try: var[:]=u[0] except: markError("Setting a slice") try: var.assignValue(u[0]) except:
## Automatically adapted for numpy.oldnumeric Aug 01, 2007 by #!/usr/bin/env python import cdms2,numpy,cdtime,os,sys from cdms2 import MV2 as MV from markError import NTIME,NLAT,NLON,x,clearError,markError,reportError from markError import get_sample_data_dir clearError() print 'Test 5: get/sub, time functions ...', f = cdms2.open(os.path.join(get_sample_data_dir(),'test.xml')) v = f.variables['v'] vp = x[1,1:,4:12,8:24] wp = x[1,2,4:12] xp = numpy.ma.concatenate((x[1,1:,4:12,8:NLON],x[1,1:,4:12,0:8]),axis=2) # getRegion - positional s = v.getRegion((366.,731.,'ccn'),(-42.,42.,'ccn'),(90.,270.,'con')) if not numpy.ma.allequal(vp,s): markError('getRegion/positional failed') # getRegion - keyword s = v.getRegion(latitude=(-42.,42.,'ccn'),longitude=(90.,270.,'con'),time=(366.,731.,'ccn')) if not numpy.ma.allequal(vp,s): markError('getRegion/keyword failed') # getRegion - wraparound s4 = v.getRegion(time=(366.,731.,'ccn'),latitude=(-42.,42.,'ccn'),longitude=(90.,450.,'con')) if not numpy.ma.allequal(xp,s4): markError('getRegion wraparound failed')
if len(coord)==2: indic = 'ccn' else: indic = coord[2] inter = lon.mapIntervalExt(ci,indic) if inter is not None: if inter[2]==-1: result = inter else: result = (inter[0],inter[1]) else: result = inter if result!=index: markError("%s ==> %s, not %s"%(`coord`,`result`,`index`)) f = cdms2.open(os.path.join(get_sample_data_dir(),'test.xml')) lon = f['longitude'] lat = f['latitude'] rlat = cdms2.createAxis(lat[::-1], id='latitude') rlat.units = 'degrees_north' time = f['time'] time0 = time.subAxis(0,1) lev = cdms2.createAxis([0.05035, 0.10089999,], id='level') testwrap(lon,(-90,90,'ccn'),(-8,9)) testwrap(lon,(-90,0,'ccn'),(-8,1)) testwrap(lon,(-6,5,'ccb'),(-1,1)) testwrap(lon,(-17,-5,'ccb'),(-2,1)) testwrap(lon,(353,365,'ccb'),(31,33)) testwrap(lon,(-6,1,'ccn'),(0,1)) testwrap(lon,(0,348.75),(0,32))
## Automatically adapted for numpy.oldnumeric Aug 01, 2007 by import numpy import cdms2, os, sys from cdms2.tvariable import TransientVariable as TV import MV2 print 'Test 11: MV module (transient variable arithmetic) ... ', from markError import NTIME, NLAT, NLON, x, clearError, markError, reportError from markError import get_sample_data_dir clearError() d = cdms2.open(os.path.join(get_sample_data_dir(), 'test.xml')) ud = d['u'] vd = d['v'] udat = ud[:] vdat = vd[:] ulat = ud.getLatitude() if not isinstance(udat, TV): markError('Slice does not return TV') f = cdms2.open(os.path.join(get_sample_data_dir(), 'u_2000.nc')) uf = f['u'] vel = MV2.sqrt(ud * ud + vd * vd) vel.id = 'velocity' vel2 = MV2.sqrt(udat * udat + vdat * vdat) vel2.id = 'velocity' vel2.units = ud.units if not MV2.allequal(vel, vel2): markError('Slice operators do not compare') x1 = uf + 1.0 x2 = 1.0 - ud
#!/usr/bin/env python # Test curvilinear grids print 'Test 14: Generic grids ...', import cdms2, numpy, os, sys from markError import clearError,markError,reportError from markError import get_sample_data_dir clearError() datb = numpy.array([ 693., 694.,]) latb = numpy.array([-26.67690036,-30.99890917,]) lonb = numpy.array([92.41822415, 94.4512163 ,]) f = cdms2.open(os.path.join(get_sample_data_dir(),'sampleGenGrid3.nc')) # Slice a file variable on a curvilinear grid: by coordinates ... samp = f['sample'] x = samp(lat=(-32,-25), lon=(90,95)) if not numpy.ma.allequal(x.data, datb): markError('slicing a file variable by coordinates') grid = x.getGrid() if grid.shape!=(2,): markError('grid shape is wrong') lat = grid.getLatitude() if not numpy.ma.allclose(lat.data, latb, atol=1.e-5): markError('latitude array is wrong') lon = grid.getLongitude() if not numpy.ma.allclose(lon.data, lonb, atol=1.e-5):
## Automatically adapted for numpy.oldnumeric Aug 01, 2007 by #!/usr/bin/env python import cdms2, numpy, cdtime, os, sys from cdms2 import MV2 as MV from markError import NTIME, NLAT, NLON, x, clearError, markError, reportError from markError import get_sample_data_dir clearError() print 'Test 5: get/sub, time functions ...', f = cdms2.open(os.path.join(get_sample_data_dir(), 'test.xml')) v = f.variables['v'] vp = x[1, 1:, 4:12, 8:24] wp = x[1, 2, 4:12] xp = numpy.ma.concatenate((x[1, 1:, 4:12, 8:NLON], x[1, 1:, 4:12, 0:8]), axis=2) # getRegion - positional s = v.getRegion((366., 731., 'ccn'), (-42., 42., 'ccn'), (90., 270., 'con')) if not numpy.ma.allequal(vp, s): markError('getRegion/positional failed') # getRegion - keyword s = v.getRegion(latitude=(-42., 42., 'ccn'), longitude=(90., 270., 'con'), time=(366., 731., 'ccn')) if not numpy.ma.allequal(vp, s): markError('getRegion/keyword failed') # getRegion - wraparound
datasetnode.dump(xmlpath) if verbose: print xmlpath,'written' #-------------------------------------------------------------------------------------------------------------------------- if __name__ == '__main__': from cdms2 import CDMSError print 'Test 7: Database import ...', from markError import clearError,markError,reportError from markError import get_sample_data_dir clearError() import os,sys argv = string.split('cdtest07.py -q -d test -x junk.xml u_2000.nc u_2001.nc u_2002.nc v_2000.nc v_2001.nc v_2002.nc') os.chdir(os.path.join(get_sample_data_dir())) try: main(argv) except CDMSError,e: markError(str(e)) except Exception,err: markError("Importing dataset") err = os.system("diff junk.xml test.xml") if err!=0: markError("Comparison with benchmark test.xml") reportError()
g = cdms2.open('cdtest10_t_%d.nc' % year, 'w') if year == 2004: tchunk = t.subSlice(imo + 6) else: tchunk = t.subSlice((imo, imo + 12)) g.write(tchunk) g.close() imo += 12 os.unlink('cdtest10_t_2001.nc') os.unlink('cdtest10_t_2003.nc') os.unlink('cdtest10_uv_2003.nc') os.unlink('cdtest10_uv_2005.nc') # Copy cdtest10.xml to working directory shutil.copyfile(os.path.join(get_sample_data_dir(), 'cdtest10.xml'), 'cdtest10.xml') # Test filemap access ... try: f = cdms2.open('cdtest10.xml') except Exception, err: print err markError( 'Opening cdtest10.xml using filemap: Version 3.0 or greater required') reportError() sys.exit(1) # Read u from 2001-7 to 2002-7 and compare u = f.getVariable('u') t = u.getTime()
#!/usr/bin/env python import cdms2,numpy.ma, regrid2 as regrid, os, sys from regrid2 import Regridder from markError import clearError,markError,reportError from markError import get_sample_data_dir clearError() print 'Test 8: Regridding ...', ## lat = cdms2.createGaussianAxis(32) ## lon = cdms2.createUniformLongitudeAxis(0.0,64,360.0/64.) ## outgrid = cdms2.createRectGrid(lat,lon,'yx','gaussian') outgrid = cdms2.createGaussianGrid(32) f = cdms2.openDataset(os.path.join(get_sample_data_dir(),'readonly.nc')) u = f.variables['u'] ingrid = u.getGrid() try: sh = ingrid.shape except: markError('Grid shape') regridf = Regridder(ingrid, outgrid) newu = regridf(u) if (abs(newu[0,0,-1]-488.4763488) > 1.e-3): markError('regrid',newu[0,0,-1]) newu = u.regrid(outgrid) if (abs(newu[0,0,-1]-488.4763488) > 1.e-3): markError('regrid',newu[0,0,-1]) # Regrid TV
147.00098336,], [ 99.68231972, 109.40769163, 119.04011194, 128.54493672, 137.88992043, 147.04571884,], [ 99.74090681, 109.50235408, 119.16667376, 128.69809779, 138.06369873, 147.23389768,], [ 99.89478673, 109.74975596, 119.49504331, 129.09174691, 138.50528817, 147.70588394,]]) maskb = numpy.array( [[0,0,0,0,0,0,], [0,0,0,0,0,0,], [0,0,0,0,0,0,], [0,0,0,0,0,0,], [1,1,1,1,1,0,]], 'b') f = cdms2.open(os.path.join(get_sample_data_dir(),'sampleCurveGrid4.nc')) #------------------------------------------------------------- # Slice a file variable on a curvilinear grid: by coordinates ... samp = f['sample'] x=samp() x = samp(lat=(-10,30), lon=(90,150)) if not numpy.ma.allequal(x.data, datb): markError('slicing a file variable by coordinates') if not numpy.ma.allequal(x.mask, maskb): markError('slicing a file variable by coordinates: invalid mask') grid = x.getGrid() if not (grid.shape==(5,6)): markError('grid shape is wrong')