1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
|
from .variable import Variable
# ====================================================================
#
# CellMeasure object
#
# ====================================================================
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
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
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
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
|