@@ -886,19 +886,8 @@ def __getattr__(self, attr):
886
886
)
887
887
888
888
889
- def _is_cf_flag_variable (da ):
890
- if (
891
- isinstance (da , xr .DataArray )
892
- and "flag_meanings" in da .attrs
893
- and "flag_values" in da .attrs
894
- ):
895
- return True
896
- else :
897
- return False
898
-
899
-
900
889
def create_flag_dict (da ):
901
- if not _is_cf_flag_variable ( da ) :
890
+ if not da . cf . is_flag_variable :
902
891
raise ValueError (
903
892
"Comparisons are only supported for DataArrays that represent CF flag variables."
904
893
".attrs must contain 'flag_values' and 'flag_meanings'"
@@ -1256,7 +1245,7 @@ def make_text_section(subtitle, attr, valid_values, default_keys=None):
1256
1245
1257
1246
return "\n " .join (rows ) + "\n "
1258
1247
1259
- if _is_cf_flag_variable (self ._obj ):
1248
+ if self . _obj . is_flag_variable (self ._obj ):
1260
1249
flag_dict = create_flag_dict (self ._obj )
1261
1250
text = f"CF Flag variable with mapping:\n \t { flag_dict !r} \n \n "
1262
1251
else :
@@ -2188,4 +2177,18 @@ def __getitem__(self, key: Union[str, List[str]]) -> DataArray:
2188
2177
2189
2178
return _getitem (self , key )
2190
2179
2191
- pass
2180
+ @property
2181
+ def is_flag_variable (self ):
2182
+ """
2183
+ Returns True if the DataArray satisfies CF conventions for flag variables.
2184
+
2185
+ Flag masks are not supported yet.
2186
+ """
2187
+ if (
2188
+ isinstance (self ._obj , xr .DataArray )
2189
+ and "flag_meanings" in self ._obj .attrs
2190
+ and "flag_values" in self ._obj .attrs
2191
+ ):
2192
+ return True
2193
+ else :
2194
+ return False
0 commit comments