import unittest
[docs]
class TestFunc(unittest.TestCase):
[docs]
def runTest(self):
pass
[docs]
def setUp(self):
import PseudoNetCDF as pnc
import numpy as np
f = pnc.PseudoNetCDFFile()
f.createDimension('t', 2)
f.createDimension('z', 3)
f.createDimension('y', 4)
f.createDimension('x', 5)
var = f.createVariable('test', 'f', ('t', 'z', 'y', 'x'))
var[:] = np.arange(2 * 3 * 4 * 5).reshape(2, 3, 4, 5)
self._simplefile = f
[docs]
def testPncrename(self):
from PseudoNetCDF.sci_var import pncrename
f = self._simplefile.copy()
nf = pncrename(f, ('d,t,time'))
chkval = len(f.dimensions['t'])
outval = len(nf.dimensions['time'])
self.assertTrue(chkval == outval)
nf = pncrename(f, ('v,test,hooray'))
chkval = ['hooray']
outval = list(nf.variables)
self.assertTrue(chkval == outval)
[docs]
def testManglenames(self):
from PseudoNetCDF.sci_var import manglenames
f = self._simplefile.subset([]).copy()
f.createVariable('arg1$-+', 'f', ('t'))
nf = manglenames(f)
outval = list(nf.variables)
chkval = ['arg1S__add_']
self.assertTrue(outval == chkval)
[docs]
def testRemovesingleton(self):
from PseudoNetCDF.sci_var import removesingleton
f = self._simplefile.copy()
chkval = list(f.dimensions)
nf = f.copy()
nf.createDimension('o', 1)
tmpval = list(nf.dimensions)
nf2 = removesingleton(nf, 'o')
outval = list(nf2.dimensions)
self.assertFalse(tmpval == chkval)
self.assertTrue(outval == chkval)
[docs]
def testSlicedim(self):
from PseudoNetCDF.sci_var import slice_dim
import numpy as np
f = self._simplefile.copy()
nf = slice_dim(
slice_dim(
slice_dim(
slice_dim(f, 'x,0,1'),
'y,0,1'
),
'z,0,1'
),
't,0,1'
)
outval = nf.variables['test'][:]
chkval = np.array([[[[0]]]])
self.assertTrue((outval == chkval).all())
[docs]
def testReducedim(self):
from PseudoNetCDF.sci_var import reduce_dim
import numpy as np
f = self._simplefile.copy()
chkval = np.array(f.variables['test'][:]).mean(0, keepdims=True)
nf = reduce_dim(f, 't,mean')
outval = nf.variables['test'][:]
self.assertTrue((outval == chkval).all())
[docs]
def testPncbo(self):
from PseudoNetCDF.sci_var import pncbo
f = self._simplefile.copy()
nf = pncbo('+', f, f)
chkval = f.variables['test'] * 2
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testSeqpncbo(self):
from PseudoNetCDF.sci_var import seqpncbo
f = self._simplefile.copy()
nf = seqpncbo(['+', '+', '+'], [f, f, f, f])
chkval = f.variables['test'] * 4
outval = nf[0].variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testAddattr(self):
from PseudoNetCDF.sci_var import add_attr
f = self._simplefile.copy()
add_attr(f, 'test,global,o,i,1')
add_attr(f, 'test,test,o,i,1')
chkval = 1
outval = f.test
self.assertTrue(outval == chkval)
outval = f.variables['test'].test
self.assertTrue(outval == chkval)
chkval = 'a'
add_attr(f, 'test,global,o,c,a')
add_attr(f, 'test,test,o,c,a')
outval = f.test
self.assertTrue(outval == chkval)
outval = f.variables['test'].test
self.assertTrue(outval == chkval)
add_attr(f, 'test,global,d,c,a')
self.assertFalse(hasattr(f, 'test'))
[docs]
def testSplitdim(self):
from PseudoNetCDF.sci_var import splitdim
f = self._simplefile.copy()
tv = f.variables['test']
chkval = tv.shape[:2] + (2, 2) + tv.shape[-1:]
nf = splitdim(f, 'y', ('day', 'hour'), (2, 2))
outval = nf.variables['test'].shape
self.assertTrue(outval == chkval)
[docs]
def testStackfiles(self):
from PseudoNetCDF.sci_var import stack_files
import numpy as np
f = self._simplefile.copy()
tv = f.variables['test']
nf = stack_files([f, f, f], 't')
chkval = np.concatenate([tv] * 3, axis=0)
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testMerge(self):
from PseudoNetCDF.sci_var import merge
f = self._simplefile.copy()
f1 = f.renameVariable('test', 'test1')
f2 = f.renameVariable('test', 'test2')
f3 = f.renameVariable('test', 'test3')
nf = merge([f1, f2, f3])
chkval = ['test1', 'test2', 'test3']
outval = sorted(nf.variables)
self.assertTrue(outval == chkval)
[docs]
def testConvolvedim(self):
from PseudoNetCDF.sci_var import convolve_dim
f = self._simplefile.copy()
nf = convolve_dim(f, 't,valid,0.5,0.5')
chkval = f.variables['test'].mean(0, keepdims=True)
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testPncexpr(self):
from PseudoNetCDF.sci_var import pncexpr
f = self._simplefile.copy()
chkval = f.variables['test'][:] * 2 + 3
nf = pncexpr('test2 = test * 2 + 3', f)
outval = nf.variables['test2'][:]
self.assertTrue((outval == chkval).all())
[docs]
def testMaksvals(self):
from PseudoNetCDF.sci_var import mask_vals
import numpy as np
f = self._simplefile.copy()
chkval = np.ma.masked_greater(f.variables['test'], 5)
nf = mask_vals(f, 'greater,5')
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testInterpvars(self):
from PseudoNetCDF.sci_var import interpvars
import numpy as np
w = np.array([
[0.5, 0.5, 0, 0],
[0, 0.5, 0.5, 0],
[0, 0, 0.5, 0.5],
])
f = self._simplefile.copy()
chkval = (
f.variables['test'][:, :, None, :, :]
* w[None, None, :, :, None]
).sum(3)
nf = interpvars(f, w, 'y')
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testGetvarpnc(self):
from PseudoNetCDF.sci_var import getvarpnc
f = self._simplefile.copy()
chkval = sorted(f.variables)
f.copyVariable(f.variables['test'], key='test2')
tmpval = sorted(f.variables)
nf = getvarpnc(f, ['test'])
outval = sorted(nf.variables)
self.assertFalse(tmpval == chkval)
self.assertTrue(outval == chkval)
[docs]
def testMeshdim(self):
from PseudoNetCDF.sci_var import mesh_dim
f = self._simplefile.copy()
chkval = f.variables['test'][:].reshape(2, 3, 2, 2, 5).mean(3)
nf = mesh_dim(f, 'y,2,mean')
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testPncfunc(self):
from PseudoNetCDF.core._functions import pncfunc
f = self._simplefile.copy()
chkval = f.variables['test'] * 2 + 7
nf = pncfunc(lambda x: x * 2 + 7, f)
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
[docs]
def testPncbfunc(self):
from PseudoNetCDF.core._functions import pncbfunc
f = self._simplefile.copy()
chkval = f.variables['test'] * 3
nf = pncbfunc(lambda x, y: x * 2 + y, f, f)
outval = nf.variables['test']
self.assertTrue((outval == chkval).all())
# warnings.warn(str(outval))
"""
def extract_from_file(f, lonlatfs, unique=False, gridded=None, method='nn',
def extract_lonlat(f, lonlat, unique=False, gridded=None, method='nn',
def pncfunc(func, ifile1, coordkeys=None, verbose=0):
def pncbfunc(func, ifile1, ifile2, coordkeys=None, verbose=0):
"""