Source code for cf.cellmeasure
from .variable import Variable
# ====================================================================
#
# CellMeasure object
#
# ====================================================================
[docs]class CellMeasure(Variable):
'''
A CF cell measure construct containing information that is needed
about the size, shape or location of the field's cells.
It is a variable which contains a data array and metadata comprising
properties to describe the physical nature of the data.
**Attributes**
========== ======= =================================================
Attribute Type Description
========== ======= =================================================
`!measure` ``str`` The spatial measure being represented. Either
``'area'`` or ``'volume'`` are allowed by the CF
conventions.
========== ======= =================================================
'''
@property
def ismeasure(self):
'''
Always True.
.. seealso:: `isauxiliary`, `isdimension`
:Examples:
>>> c.ismeasure
True
'''
return True
#--- End: def
[docs] def dump(self, display=True, domain=None, key=None, _level=0):
'''
Return a string containing a full description of the cell measure.
:Parameters:
display : bool, optional
If False then return the description as a string. By default
the description is printed, i.e. ``c.dump()`` is equivalent to
``print c.dump(display=False)``.
:Returns:
out : None or str
A string containing the description.
:Examples:
'''
indent1 = ' ' * _level
indent2 = ' ' * (_level+1)
if hasattr(self, 'measure'):
string = ['%sCell measure: %s' % (indent1, self.measure)]
elif hasattr(self.Units, 'units'):
string = ['%sCell measure: %s' % (indent1, self.units)]
else:
string = ['%sCell measure: %s' % (indent1, self.name(default=''))]
if self._hasData:
if domain:
x = ['%s(%d)' % (domain.axis_name(axis), domain.axis_size(axis))
for axis in domain.item_axes(key)]
string.append('%sData(%s) = %s' % (indent2, ', '.join(x), str(self.Data)))
else:
x = [str(s) for s in self.shape]
string.append('%sData(%s) = %s' % (indent2, ', '.join(x), str(self.Data)))
#--- End: if
if self._simple_properties():
string.append(self._dump_simple_properties(_level=_level+1))
string = '\n'.join(string)
if display:
print string
else:
return string
#--- End: def
[docs] def identity(self, default=None):
'''
Return the cell measure's identity.
The identity is first found of:
* The `!measure` attribute.
* The `standard_name` CF property.
* The `!id` attribute.
* The value of the *default* parameter.
:Parameters:
default : optional
If none of `measure`, `standard_name` and `!id` exist then
return *default*. By default, *default* is None.
:Returns:
out :
The identity.
:Examples:
'''
return super(CellMeasure, self).identity(default)
#--- End: def
[docs] def name(self, default=None, identity=False, ncvar=False):
'''Return a name for the cell measure.
By default the name is the first found of the following:
1. The `!measure` attribute.
2. The `standard_name` CF property.
3. The `!id` attribute.
4. The `long_name` CF property, preceeded by the string
``'long_name:'``.
5. The `!ncvar` attribute, preceeded by the string ``'ncvar:'``.
6. The value of the *default* parameter.
Note that ``c.name(identity=True)`` is equivalent to ``c.identity()``.
.. seealso:: `identity`
:Parameters:
default : *optional*
If no name can be found then return the value of the *default*
parameter. By default the default is None.
identity : bool, optional
If True then 3. and 4. are not considered as possible names.
ncvar : bool, optional
If True then 1., 2., 3. and 4. are not considered as possible
names.
:Returns:
out : str
A name for the cell measure.
:Examples:
>>> f.standard_name = 'air_temperature'
>>> f.long_name = 'temperature of the air'
>>> f.ncvar = 'tas'
>>> f.name()
'air_temperature'
>>> del f.standard_name
>>> f.name()
'long_name:temperature of the air'
>>> del f.long_name
>>> f.name()
'ncvar:tas'
>>> del f.ncvar
>>> f.name()
None
>>> f.name('no_name')
'no_name'
>>> f.standard_name = 'air_temperature'
>>> f.name('no_name')
'air_temperature'
'''
if ncvar:
if identity:
raise ValueError(
"Can't find name: ncvar and identity parameters can't both be True")
n = getattr(self, 'ncvar', None)
if n is not None:
return 'ncvar%%%s' % n
return default
#--- End: if
n = getattr(self, 'measure', None)
if n is not None:
return n
return super(CellMeasure, self).name(default,
identity=identity, ncvar=False)
#--- End: def
#--- End: class