Last updated:
0 purchases
Puppy 0.1.8
A DSL for creating NetCDF files. Here’s a simple example:
from pup import *
class Test(NetCDF):
# NC_GLOBAL attributes go here
history = 'Created for a test'
# dimensions need to be set explicitly only when they
# have no variable associated with them
dim0 = Dimension(2)
# variables that don't specify dimensions are assumed to
# be their own dimension
time = Variable(range(10), record=True, units='days since 2008-01-01')
# now a variable with dimensions (time,)
temperature = Variable(range(10), (time,), units='deg C')
Test.save('simple.nc')
This will produce the following NetCDF file:
netcdf simple {
dimensions:
dim0 = 2 ;
time = UNLIMITED ; // (10 currently)
variables:
int time(time) ;
time:units = "days since 2008-01-01" ;
int temperature(time) ;
temperature:units = "deg C" ;
// global attributes:
:history = "Created for a test" ;
data:
time = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
temperature = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
}
Compare this with the code necessary to do the same using common NetCDF
libraries:
f = netcdf_file("simple.nc", "w")
f.history = "Created for a test"
f.createDimension("dim0", 2)
f.createDimension("time", None)
time = f.createVariable("time", "i", ("time",))
time.units = "days since 2008-01-01"
time[:] = range(10)
temperature = f.createVariable("temperature", "i", ("time",))
temperature.units = "deg C"
temperature[:] = range(10)
By default it uses pupynere for creating files, but this can be overloaded; we
can use the netCDF4 module, for example, which allows us to specify groups:
from netCDF4 import Dataset
class Test(NetCDF):
loader = Dataset
...
foo = Group(
dim = Dimension(10),
var = Variable(range(10)),
...
)
Test.save('simple.nc', format='NETCDF4')
Changelog:
0.1.8:
Ensure record dimensions are created first.
0.1.7:
Convert strings to array of chars.
0.1.6:
Fix bug in dimension name.
0.1.5:
Added support for Groups when using netcdf4.
0.1.4:
Added support for masked arrays.
0.1.3:
Pass keyword arguments in save() to the loader.
0.1.2:
Improved optional loader detection.
0.1.1:
Added pupynere dependency.
0.1:
Initial release.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.