DSL for creating NetCDF files
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file Puppy-0.1.8.tar.gz
.
File metadata
- Download URL: Puppy-0.1.8.tar.gz
- Upload date:
- Size: 3.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 19ea7908bc997ab956f8ec79b23d9fcad134d5d72762d2bec97be79043192963 |
|
MD5 | 2302d7c0654dcfc11764f75ed87c521e |
|
BLAKE2b-256 | e6227275af67f649b89a9dd9ea0ca7bbb7155160251b93d616eaa474ad3247e2 |
Provenance
File details
Details for the file Puppy-0.1.8-py2.7.egg
.
File metadata
- Download URL: Puppy-0.1.8-py2.7.egg
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aee1c9f6c2e1d3e7617c2f1b60748bc03ad2b3d48987a457f9a465793f068eaa |
|
MD5 | 583d9853d46d6c371906cf62a0bda1da |
|
BLAKE2b-256 | d2d316fb5a7d3419266ef1e26e39bc6ef12b1f4357672605699e6d2e4980586c |