Repository: Unidata/siphon
Pull request #804 (2024-10-31 20:20:13)

Update CI testing
<!--
Thanks for contributing a pull request! Please ensure you have taken a look at
the contribution guidelines: https://github.com/Unidata/siphon/blob/main/CONTRIBUTING.md
-->

#### Description Of Changes
This is pulling in the test workflows for PyPI and Conda from MetPy, making use of the composite actions over there. This also updates our Python versions to a "current" set of 3.10-3.12, rather than 3.7-3.9; this also requires a bunch of dependency bumps, both minimum and pinned version to get 3.12 to work.

Also cleaned up the codecov config and rebuilt the Python generated protobuf files since they were erroring on newer versions of protobuf.

<!--
Feel free to remove check-list items aren't relevant to your change

Please use keywords (e.g., Fixes, Closes) to create link to the issues or pull
requests you resolved, so that they will automatically be closed when your pull
request is merged. See https://github.com/blog/1506-closing-issues-via-pull-requests
-->




Patch:
diff --git a/.codecov.yml b/.codecov.yml
index 9c26d124..4f40a4d7 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -1,24 +1,13 @@
-codecov:
-  notify:
-    require_ci_to_pass: no
-
 coverage:
   status:
     patch:
       default:
         target: '80'
-        if_no_uploads: error
-        if_not_found: success
-        if_ci_failed: failure
     project:
-      default: false
       library:
         target: auto
-        if_no_uploads: error
-        if_not_found: success
-        if_ci_failed: failure
         paths:
-          - "siphon/(\w+/)?[^/]+\.py$"
+          - "src/siphon/.*"
 
       tests:
         target: 100%
@@ -31,4 +20,7 @@ coverage:
       default:
         url: "https://webhooks.gitter.im/e/0eb95be6d20af5b9a4f0"
 
+ignore:
+  - "**/*_pb2.py"
+
 comment: off
diff --git a/ci/Minimum b/ci/Minimum
deleted file mode 100644
index daee5247..00000000
--- a/ci/Minimum
+++ /dev/null
@@ -1,5 +0,0 @@
-beautifulsoup4==4.6
-numpy==1.16.0
-pandas==0.25.0
-protobuf==3.7.0
-requests==2.21.0
diff --git a/ci/doc_requirements.txt b/ci/doc_requirements.txt
index 6c414d21..3abaead6 100644
--- a/ci/doc_requirements.txt
+++ b/ci/doc_requirements.txt
@@ -6,4 +6,4 @@ sphinx==5.2.3
 sphinx_rtd_theme==1.0.0
 sphinx-gallery==0.11.1
 myst-parser==0.18.1
-netCDF4==1.6.1
+netCDF4==1.6.5
diff --git a/ci/extra_requirements.txt b/ci/extra_requirements.txt
index e2e2028a..04d9ac7d 100644
--- a/ci/extra_requirements.txt
+++ b/ci/extra_requirements.txt
@@ -1,1 +1,1 @@
-xarray==0.20.2
+xarray==2023.8.0
diff --git a/ci/requirements.txt b/ci/requirements.txt
index c62ae266..f2604ae6 100644
--- a/ci/requirements.txt
+++ b/ci/requirements.txt
@@ -1,6 +1,5 @@
-beautifulsoup4>=4.6
-numpy==1.21.5
-pandas==1.3.5
-protobuf==3.20.1
+beautifulsoup4==4.9.1
+numpy==1.26.0
+pandas==2.1.2
+protobuf==4.24.3
 requests==2.28.1
-importlib_metadata<5.0
diff --git a/pyproject.toml b/pyproject.toml
index e222add6..ac9c767f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,5 +1,64 @@
-requires = ["setuptools>=42", "wheel", "setuptools_scm[toml]>=3.4"]
+[build-system]
+requires = ["setuptools>=61", "wheel", "setuptools_scm[toml]>=3.4"]
 build-backend = "setuptools.build_meta"
 
+[project]
+name = "siphon"
+description = "A collection of Python utilities for interacting with the Unidata technology stack."
+readme = "README.rst"
+dynamic = ["version"]
+maintainers = [{name = "Siphon Developers", email = "support-python@unidata.ucar.edu"}]
+license = {text = "BSD-3-Clause"}
+keywords = ["meteorology", "weather"]
+classifiers = [
+    "Development Status :: 5 - Production/Stable",
+    "Programming Language :: Python",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Topic :: Scientific/Engineering",
+    "Topic :: Scientific/Engineering :: Atmospheric Science",
+    "Intended Audience :: Science/Research",
+    "Operating System :: OS Independent",
+    "License :: OSI Approved :: BSD License"
+]
+requires-python = ">=3.10"
+dependencies = [
+    "beautifulsoup4>=4.9.1",
+    "numpy>=1.22.0",
+    "pandas>=1.3.4",
+    "protobuf>=3.20.0",
+    "requests>=2.28.1"
+]
+
+[project.optional-dependencies]
+doc = [
+    "sphinx>=3.0",
+    "sphinx-gallery>=0.4",
+    "myst-parser",
+    "sphinx-rtd-theme"
+]
+examples = [
+    "matplotlib>=1.3",
+    "cartopy>=0.13.1",
+    "scipy"
+]
+test = [
+    "pytest>=7.0",
+    "netCDF4>=1.5.8",
+    "vcrpy>=3.0",
+    "siphon[extras]"
+]
+extras = [
+    "xarray>=2022.3.0"
+]
+
+[project.urls]
+"homepage" = "https://github.com/Unidata/siphon"
+"Documentation" = "https://unidata.github.io/siphon/"
+"Release Notes" = "https://github.com/Unidata/siphon/releases"
+"Bug Tracker" = "https://github.com/Unidata/siphon/issues"
+"Source Code" = "https://github.com/Unidata/siphon"
+
 [tool.setuptools_scm]
 version_scheme = "post-release"
\ No newline at end of file
diff --git a/setup.cfg b/setup.cfg
index 8316ba68..f97fd3b5 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,83 +1,3 @@
-[metadata]
-name = siphon
-description = A collection of Python utilities for interacting with the Unidata technology stack.
-description_file = README.rst
-author = Unidata Development Team
-author_email = support-python@unidata.ucar.edu
-maintainer = Siphon Developers
-maintainer_email = support-python@unidata.ucar.edu
-license = BSD 3-Clause
-license_file = LICENSE
-platform = any
-keywords = meteorology, weather
-classifiers =
-    Development Status :: 3 - Alpha
-    Programming Language :: Python :: 3
-    Programming Language :: Python :: 3.6
-    Programming Language :: Python :: 3.7
-    Programming Language :: Python :: 3.8
-    Programming Language :: Python :: 3.9
-    Topic :: Scientific/Engineering
-    Intended Audience :: Science/Research
-    Operating System :: OS Independent
-    License :: OSI Approved :: BSD Licens
-url = https://github.com/Unidata/siphon
-project_urls =
-    Documentation = https://unidata.github.io/siphon/
-    Release Notes = https://github.com/Unidata/siphon/releases
-    Bug Tracker = https://github.com/Unidata/siphon/issues
-    Source Code = https://github.com/Unidata/siphon
-
-[options]
-package_dir =
-    = src
-packages = find:
-python_requires = >=3.6
-install_requires =
-    beautifulsoup4>=4.6
-    numpy>=1.16
-    pandas>=0.25.0
-    protobuf>=3.7.0
-    requests>=2.21.0
-    
-[options.packages.find]
-where = src
-
-[options.extras_require]
-test =
-    pytest
-    pytest-flake8
-    pytest-runner
-    netCDF4>=1.1.0
-    flake8>3.2.0
-    flake8-builtins
-    flake8-comprehensions
-    flake8-copyright
-    flake8-docstrings
-    flake8-import-order
-    flake8-mutable
-    flake8-pep3101
-    flake8-print
-    flake8-quotes
-    flake8-rst-docstrings
-    pep8-naming
-    vcrpy~=1.5,!=1.7.0,!=1.7.1,!=1.7.2,!=1.7.3
-    xarray>=0.10.2
-doc =
-    sphinx>=1.3,!=1.6.4
-    sphinx-gallery
-    doc8
-    m2r
-# SciPy needed for cartopy; we don't use cartopy[plotting] because
-# that will pull in GDAL.
-examples =
-    matplotlib>=1.3
-    cartopy>=0.13.1
-    scipy
-    metpy
-netcdf = netCDF4>=1.1.0
-dev = ipython[all]>=3.1
-
 [flake8]
 max-line-length = 95
 application-import-names = siphon
diff --git a/src/siphon/_version.py b/src/siphon/_version.py
index 223d5525..9bd1cbce 100644
--- a/src/siphon/_version.py
+++ b/src/siphon/_version.py
@@ -15,10 +15,7 @@ def get_version():
         return _get_version(root='../..', relative_to=__file__,
                             version_scheme='post-release')
     except (ImportError, LookupError):
-        try:
-            from importlib.metadata import PackageNotFoundError, version
-        except ImportError:  # Can remove when we require Python > 3.7
-            from importlib_metadata import PackageNotFoundError, version
+        from importlib.metadata import PackageNotFoundError, version
 
         try:
             return version(__package__)
diff --git a/src/siphon/cdmr/cdmrfeature_pb2.py b/src/siphon/cdmr/cdmrfeature_pb2.py
index dcfecf5c..e87cc82c 100644
--- a/src/siphon/cdmr/cdmrfeature_pb2.py
+++ b/src/siphon/cdmr/cdmrfeature_pb2.py
@@ -1,1026 +1,54 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: cdmrfeature.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf.internal import enum_type_wrapper
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import symbol_database as _symbol_database
-from google.protobuf import descriptor_pb2
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
 
 
-from . import ncStream_pb2 as ucar_dot_nc2_dot_stream_dot_ncStream__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='cdmrfeature.proto',
-  package='',
-  syntax='proto3',
-  serialized_pb=_b('\n\x11\x63\x64mrfeature.proto\x1a\x1eucar/nc2/stream/ncStream.proto\"K\n\x0e\x43oordTransform\x12\x0f\n\x07isHoriz\x18\x01 \x01(\x08\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1a\n\x06params\x18\x03 \x03(\x0b\x32\n.Attribute\"\xce\x02\n\tCoordAxis\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x18\n\x04\x61tts\x18\x03 \x03(\x0b\x32\n.Attribute\x12\x1b\n\x08\x61xisType\x18\x04 \x01(\x0e\x32\t.AxisType\x12\r\n\x05units\x18\x05 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x1f\n\x06\x64\x65pend\x18\x07 \x01(\x0e\x32\x0f.DependenceType\x12\x11\n\tdependsOn\x18\x08 \x03(\t\x12\r\n\x05shape\x18\t \x03(\r\x12\x0f\n\x07nvalues\x18\n \x01(\x03\x12\x1d\n\x07spacing\x18\x0b \x01(\x0e\x32\x0c.AxisSpacing\x12\x12\n\nstartValue\x18\x0c \x01(\x01\x12\x10\n\x08\x65ndValue\x18\r \x01(\x01\x12\x12\n\nresolution\x18\x0e \x01(\x01\x12\x0e\n\x06values\x18\x0f \x01(\x0c\"h\n\x08\x43oordSys\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\taxisNames\x18\x02 \x03(\t\x12\x16\n\x0etransformNames\x18\x03 \x03(\t\x12#\n\x0c\x63overageType\x18\x05 \x01(\x0e\x32\r.CoverageType\"L\n\x11\x43\x61lendarDateRange\x12\r\n\x05start\x18\x01 \x01(\x03\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x03\x12\x1b\n\x08\x63\x61lendar\x18\x03 \x01(\x0e\x32\t.Calendar\"G\n\tRectangle\x12\x0e\n\x06startx\x18\x01 \x01(\x01\x12\x0e\n\x06starty\x18\x02 \x01(\x01\x12\x0c\n\x04incx\x18\x03 \x01(\x01\x12\x0c\n\x04incy\x18\x04 \x01(\x01\"\x85\x01\n\x08\x43overage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x18\n\x04\x61tts\x18\x04 \x03(\x0b\x32\n.Attribute\x12\x10\n\x08\x63oordSys\x18\x05 \x01(\t\x12\r\n\x05units\x18\x06 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\"\xc3\x02\n\x0f\x43overageDataset\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x04\x61tts\x18\x02 \x03(\x0b\x32\n.Attribute\x12\x1e\n\nlatlonRect\x18\x03 \x01(\x0b\x32\n.Rectangle\x12\x1c\n\x08projRect\x18\x04 \x01(\x0b\x32\n.Rectangle\x12%\n\tdateRange\x18\x05 \x01(\x0b\x32\x12.CalendarDateRange\x12\x1b\n\x08\x63oordSys\x18\x06 \x03(\x0b\x32\t.CoordSys\x12(\n\x0f\x63oordTransforms\x18\x07 \x03(\x0b\x32\x0f.CoordTransform\x12\x1d\n\tcoordAxes\x18\x08 \x03(\x0b\x32\n.CoordAxis\x12\x18\n\x05grids\x18\t \x03(\x0b\x32\t.Coverage\x12#\n\x0c\x63overageType\x18\n \x01(\x0e\x32\r.CoverageType\"\xe8\x01\n\x12GeoReferencedArray\x12\x14\n\x0c\x63overageName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x0e\n\x06\x62igend\x18\x03 \x01(\x08\x12\x0f\n\x07version\x18\x04 \x01(\r\x12\x1b\n\x08\x63ompress\x18\x05 \x01(\x0e\x32\t.Compress\x12\x18\n\x10uncompressedSize\x18\x06 \x01(\x04\x12\r\n\x05shape\x18\x07 \x03(\r\x12\x10\n\x08\x61xisName\x18\x08 \x03(\t\x12\x14\n\x0c\x63oordSysName\x18\t \x01(\t\x12\x10\n\x08primdata\x18\n \x01(\x0c\"\xa3\x01\n\x14\x43overageDataResponse\x12\x1d\n\tcoordAxes\x18\x01 \x03(\x0b\x32\n.CoordAxis\x12\x1b\n\x08\x63oordSys\x18\x02 \x03(\x0b\x32\t.CoordSys\x12(\n\x0f\x63oordTransforms\x18\x03 \x03(\x0b\x32\x0f.CoordTransform\x12%\n\x08geoArray\x18\x04 \x03(\x0b\x32\x13.GeoReferencedArray*\xd3\x01\n\x08\x41xisType\x12\x0b\n\x07RunTime\x10\x00\x12\x0c\n\x08\x45nsemble\x10\x01\x12\x08\n\x04Time\x10\x02\x12\x08\n\x04GeoX\x10\x03\x12\x08\n\x04GeoY\x10\x04\x12\x08\n\x04GeoZ\x10\x05\x12\x07\n\x03Lat\x10\x06\x12\x07\n\x03Lon\x10\x07\x12\n\n\x06Height\x10\x08\x12\x0c\n\x08Pressure\x10\t\x12\x11\n\rRadialAzimuth\x10\n\x12\x12\n\x0eRadialDistance\x10\x0b\x12\x13\n\x0fRadialElevation\x10\x0c\x12\x0c\n\x08Spectral\x10\r\x12\x0e\n\nTimeOffset\x10\x0e*{\n\x0b\x41xisSpacing\x12\x10\n\x0cregularPoint\x10\x00\x12\x12\n\x0eirregularPoint\x10\x01\x12\x16\n\x12\x63ontiguousInterval\x10\x02\x12\x19\n\x15\x64iscontiguousInterval\x10\x03\x12\x13\n\x0fregularInterval\x10\x04*S\n\x0e\x44\x65pendenceType\x12\x0f\n\x0bindependent\x10\x00\x12\r\n\tdependent\x10\x01\x12\n\n\x06scalar\x10\x02\x12\x08\n\x04twoD\x10\x03\x12\x0b\n\x07\x66mrcReg\x10\x04*t\n\x08\x43\x61lendar\x12\x17\n\x13proleptic_gregorian\x10\x00\x12\r\n\tgregorian\x10\x01\x12\n\n\x06noleap\x10\x02\x12\x0c\n\x08\x61ll_leap\x10\x03\x12\x10\n\x0cuniform30day\x10\x04\x12\n\n\x06julian\x10\x05\x12\x08\n\x04none\x10\x06*K\n\x0c\x43overageType\x12\x0b\n\x07General\x10\x00\x12\x0f\n\x0b\x43urvilinear\x10\x01\x12\x08\n\x04Grid\x10\x02\x12\t\n\x05Swath\x10\x03\x12\x08\n\x04\x46mrc\x10\x04\x42\x30\n\x1cucar.nc2.ft2.coverage.remoteB\x10\x43\x64mrFeatureProtob\x06proto3')
-  ,
-  dependencies=[ucar_dot_nc2_dot_stream_dot_ncStream__pb2.DESCRIPTOR,])
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-_AXISTYPE = _descriptor.EnumDescriptor(
-  name='AxisType',
-  full_name='AxisType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='RunTime', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Ensemble', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Time', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='GeoX', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='GeoY', index=4, number=4,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='GeoZ', index=5, number=5,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Lat', index=6, number=6,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Lon', index=7, number=7,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Height', index=8, number=8,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Pressure', index=9, number=9,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='RadialAzimuth', index=10, number=10,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='RadialDistance', index=11, number=11,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='RadialElevation', index=12, number=12,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Spectral', index=13, number=13,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='TimeOffset', index=14, number=14,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=1588,
-  serialized_end=1799,
-)
-_sym_db.RegisterEnumDescriptor(_AXISTYPE)
-
-AxisType = enum_type_wrapper.EnumTypeWrapper(_AXISTYPE)
-_AXISSPACING = _descriptor.EnumDescriptor(
-  name='AxisSpacing',
-  full_name='AxisSpacing',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='regularPoint', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='irregularPoint', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='contiguousInterval', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='discontiguousInterval', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='regularInterval', index=4, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=1801,
-  serialized_end=1924,
-)
-_sym_db.RegisterEnumDescriptor(_AXISSPACING)
-
-AxisSpacing = enum_type_wrapper.EnumTypeWrapper(_AXISSPACING)
-_DEPENDENCETYPE = _descriptor.EnumDescriptor(
-  name='DependenceType',
-  full_name='DependenceType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='independent', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='dependent', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='scalar', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='twoD', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='fmrcReg', index=4, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=1926,
-  serialized_end=2009,
-)
-_sym_db.RegisterEnumDescriptor(_DEPENDENCETYPE)
-
-DependenceType = enum_type_wrapper.EnumTypeWrapper(_DEPENDENCETYPE)
-_CALENDAR = _descriptor.EnumDescriptor(
-  name='Calendar',
-  full_name='Calendar',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='proleptic_gregorian', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='gregorian', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='noleap', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='all_leap', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='uniform30day', index=4, number=4,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='julian', index=5, number=5,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='none', index=6, number=6,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2011,
-  serialized_end=2127,
-)
-_sym_db.RegisterEnumDescriptor(_CALENDAR)
-
-Calendar = enum_type_wrapper.EnumTypeWrapper(_CALENDAR)
-_COVERAGETYPE = _descriptor.EnumDescriptor(
-  name='CoverageType',
-  full_name='CoverageType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='General', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Curvilinear', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Grid', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Swath', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='Fmrc', index=4, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2129,
-  serialized_end=2204,
-)
-_sym_db.RegisterEnumDescriptor(_COVERAGETYPE)
-
-CoverageType = enum_type_wrapper.EnumTypeWrapper(_COVERAGETYPE)
-RunTime = 0
-Ensemble = 1
-Time = 2
-GeoX = 3
-GeoY = 4
-GeoZ = 5
-Lat = 6
-Lon = 7
-Height = 8
-Pressure = 9
-RadialAzimuth = 10
-RadialDistance = 11
-RadialElevation = 12
-Spectral = 13
-TimeOffset = 14
-regularPoint = 0
-irregularPoint = 1
-contiguousInterval = 2
-discontiguousInterval = 3
-regularInterval = 4
-independent = 0
-dependent = 1
-scalar = 2
-twoD = 3
-fmrcReg = 4
-proleptic_gregorian = 0
-gregorian = 1
-noleap = 2
-all_leap = 3
-uniform30day = 4
-julian = 5
-none = 6
-General = 0
-Curvilinear = 1
-Grid = 2
-Swath = 3
-Fmrc = 4
-
-
-
-_COORDTRANSFORM = _descriptor.Descriptor(
-  name='CoordTransform',
-  full_name='CoordTransform',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='isHoriz', full_name='CoordTransform.isHoriz', index=0,
-      number=1, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='name', full_name='CoordTransform.name', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='params', full_name='CoordTransform.params', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=53,
-  serialized_end=128,
-)
-
-
-_COORDAXIS = _descriptor.Descriptor(
-  name='CoordAxis',
-  full_name='CoordAxis',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='CoordAxis.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='CoordAxis.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='atts', full_name='CoordAxis.atts', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='axisType', full_name='CoordAxis.axisType', index=3,
-      number=4, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='units', full_name='CoordAxis.units', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='description', full_name='CoordAxis.description', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='depend', full_name='CoordAxis.depend', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dependsOn', full_name='CoordAxis.dependsOn', index=7,
-      number=8, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='shape', full_name='CoordAxis.shape', index=8,
-      number=9, type=13, cpp_type=3, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='nvalues', full_name='CoordAxis.nvalues', index=9,
-      number=10, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='spacing', full_name='CoordAxis.spacing', index=10,
-      number=11, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='startValue', full_name='CoordAxis.startValue', index=11,
-      number=12, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='endValue', full_name='CoordAxis.endValue', index=12,
-      number=13, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='resolution', full_name='CoordAxis.resolution', index=13,
-      number=14, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='values', full_name='CoordAxis.values', index=14,
-      number=15, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=131,
-  serialized_end=465,
-)
-
-
-_COORDSYS = _descriptor.Descriptor(
-  name='CoordSys',
-  full_name='CoordSys',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='CoordSys.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='axisNames', full_name='CoordSys.axisNames', index=1,
-      number=2, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='transformNames', full_name='CoordSys.transformNames', index=2,
-      number=3, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coverageType', full_name='CoordSys.coverageType', index=3,
-      number=5, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=467,
-  serialized_end=571,
-)
-
-
-_CALENDARDATERANGE = _descriptor.Descriptor(
-  name='CalendarDateRange',
-  full_name='CalendarDateRange',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='start', full_name='CalendarDateRange.start', index=0,
-      number=1, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='end', full_name='CalendarDateRange.end', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='calendar', full_name='CalendarDateRange.calendar', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=573,
-  serialized_end=649,
-)
-
-
-_RECTANGLE = _descriptor.Descriptor(
-  name='Rectangle',
-  full_name='Rectangle',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='startx', full_name='Rectangle.startx', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='starty', full_name='Rectangle.starty', index=1,
-      number=2, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='incx', full_name='Rectangle.incx', index=2,
-      number=3, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='incy', full_name='Rectangle.incy', index=3,
-      number=4, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=651,
-  serialized_end=722,
-)
-
-
-_COVERAGE = _descriptor.Descriptor(
-  name='Coverage',
-  full_name='Coverage',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='Coverage.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='Coverage.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='atts', full_name='Coverage.atts', index=2,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coordSys', full_name='Coverage.coordSys', index=3,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='units', full_name='Coverage.units', index=4,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='description', full_name='Coverage.description', index=5,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=725,
-  serialized_end=858,
-)
-
-
-_COVERAGEDATASET = _descriptor.Descriptor(
-  name='CoverageDataset',
-  full_name='CoverageDataset',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='CoverageDataset.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='atts', full_name='CoverageDataset.atts', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='latlonRect', full_name='CoverageDataset.latlonRect', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='projRect', full_name='CoverageDataset.projRect', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dateRange', full_name='CoverageDataset.dateRange', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coordSys', full_name='CoverageDataset.coordSys', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coordTransforms', full_name='CoverageDataset.coordTransforms', index=6,
-      number=7, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coordAxes', full_name='CoverageDataset.coordAxes', index=7,
-      number=8, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='grids', full_name='CoverageDataset.grids', index=8,
-      number=9, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coverageType', full_name='CoverageDataset.coverageType', index=9,
-      number=10, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=861,
-  serialized_end=1184,
-)
-
-
-_GEOREFERENCEDARRAY = _descriptor.Descriptor(
-  name='GeoReferencedArray',
-  full_name='GeoReferencedArray',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='coverageName', full_name='GeoReferencedArray.coverageName', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='GeoReferencedArray.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='bigend', full_name='GeoReferencedArray.bigend', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='GeoReferencedArray.version', index=3,
-      number=4, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='compress', full_name='GeoReferencedArray.compress', index=4,
-      number=5, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='uncompressedSize', full_name='GeoReferencedArray.uncompressedSize', index=5,
-      number=6, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='shape', full_name='GeoReferencedArray.shape', index=6,
-      number=7, type=13, cpp_type=3, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='axisName', full_name='GeoReferencedArray.axisName', index=7,
-      number=8, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coordSysName', full_name='GeoReferencedArray.coordSysName', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='primdata', full_name='GeoReferencedArray.primdata', index=9,
-      number=10, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1187,
-  serialized_end=1419,
-)
-
-
-_COVERAGEDATARESPONSE = _descriptor.Descriptor(
-  name='CoverageDataResponse',
-  full_name='CoverageDataResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='coordAxes', full_name='CoverageDataResponse.coordAxes', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coordSys', full_name='CoverageDataResponse.coordSys', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='coordTransforms', full_name='CoverageDataResponse.coordTransforms', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='geoArray', full_name='CoverageDataResponse.geoArray', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1422,
-  serialized_end=1585,
-)
-
-_COORDTRANSFORM.fields_by_name['params'].message_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._ATTRIBUTE
-_COORDAXIS.fields_by_name['dataType'].enum_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._DATATYPE
-_COORDAXIS.fields_by_name['atts'].message_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._ATTRIBUTE
-_COORDAXIS.fields_by_name['axisType'].enum_type = _AXISTYPE
-_COORDAXIS.fields_by_name['depend'].enum_type = _DEPENDENCETYPE
-_COORDAXIS.fields_by_name['spacing'].enum_type = _AXISSPACING
-_COORDSYS.fields_by_name['coverageType'].enum_type = _COVERAGETYPE
-_CALENDARDATERANGE.fields_by_name['calendar'].enum_type = _CALENDAR
-_COVERAGE.fields_by_name['dataType'].enum_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._DATATYPE
-_COVERAGE.fields_by_name['atts'].message_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._ATTRIBUTE
-_COVERAGEDATASET.fields_by_name['atts'].message_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._ATTRIBUTE
-_COVERAGEDATASET.fields_by_name['latlonRect'].message_type = _RECTANGLE
-_COVERAGEDATASET.fields_by_name['projRect'].message_type = _RECTANGLE
-_COVERAGEDATASET.fields_by_name['dateRange'].message_type = _CALENDARDATERANGE
-_COVERAGEDATASET.fields_by_name['coordSys'].message_type = _COORDSYS
-_COVERAGEDATASET.fields_by_name['coordTransforms'].message_type = _COORDTRANSFORM
-_COVERAGEDATASET.fields_by_name['coordAxes'].message_type = _COORDAXIS
-_COVERAGEDATASET.fields_by_name['grids'].message_type = _COVERAGE
-_COVERAGEDATASET.fields_by_name['coverageType'].enum_type = _COVERAGETYPE
-_GEOREFERENCEDARRAY.fields_by_name['dataType'].enum_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._DATATYPE
-_GEOREFERENCEDARRAY.fields_by_name['compress'].enum_type = ucar_dot_nc2_dot_stream_dot_ncStream__pb2._COMPRESS
-_COVERAGEDATARESPONSE.fields_by_name['coordAxes'].message_type = _COORDAXIS
-_COVERAGEDATARESPONSE.fields_by_name['coordSys'].message_type = _COORDSYS
-_COVERAGEDATARESPONSE.fields_by_name['coordTransforms'].message_type = _COORDTRANSFORM
-_COVERAGEDATARESPONSE.fields_by_name['geoArray'].message_type = _GEOREFERENCEDARRAY
-DESCRIPTOR.message_types_by_name['CoordTransform'] = _COORDTRANSFORM
-DESCRIPTOR.message_types_by_name['CoordAxis'] = _COORDAXIS
-DESCRIPTOR.message_types_by_name['CoordSys'] = _COORDSYS
-DESCRIPTOR.message_types_by_name['CalendarDateRange'] = _CALENDARDATERANGE
-DESCRIPTOR.message_types_by_name['Rectangle'] = _RECTANGLE
-DESCRIPTOR.message_types_by_name['Coverage'] = _COVERAGE
-DESCRIPTOR.message_types_by_name['CoverageDataset'] = _COVERAGEDATASET
-DESCRIPTOR.message_types_by_name['GeoReferencedArray'] = _GEOREFERENCEDARRAY
-DESCRIPTOR.message_types_by_name['CoverageDataResponse'] = _COVERAGEDATARESPONSE
-DESCRIPTOR.enum_types_by_name['AxisType'] = _AXISTYPE
-DESCRIPTOR.enum_types_by_name['AxisSpacing'] = _AXISSPACING
-DESCRIPTOR.enum_types_by_name['DependenceType'] = _DEPENDENCETYPE
-DESCRIPTOR.enum_types_by_name['Calendar'] = _CALENDAR
-DESCRIPTOR.enum_types_by_name['CoverageType'] = _COVERAGETYPE
-
-CoordTransform = _reflection.GeneratedProtocolMessageType('CoordTransform', (_message.Message,), dict(
-  DESCRIPTOR = _COORDTRANSFORM,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:CoordTransform)
-  ))
-_sym_db.RegisterMessage(CoordTransform)
-
-CoordAxis = _reflection.GeneratedProtocolMessageType('CoordAxis', (_message.Message,), dict(
-  DESCRIPTOR = _COORDAXIS,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:CoordAxis)
-  ))
-_sym_db.RegisterMessage(CoordAxis)
-
-CoordSys = _reflection.GeneratedProtocolMessageType('CoordSys', (_message.Message,), dict(
-  DESCRIPTOR = _COORDSYS,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:CoordSys)
-  ))
-_sym_db.RegisterMessage(CoordSys)
-
-CalendarDateRange = _reflection.GeneratedProtocolMessageType('CalendarDateRange', (_message.Message,), dict(
-  DESCRIPTOR = _CALENDARDATERANGE,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:CalendarDateRange)
-  ))
-_sym_db.RegisterMessage(CalendarDateRange)
-
-Rectangle = _reflection.GeneratedProtocolMessageType('Rectangle', (_message.Message,), dict(
-  DESCRIPTOR = _RECTANGLE,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:Rectangle)
-  ))
-_sym_db.RegisterMessage(Rectangle)
-
-Coverage = _reflection.GeneratedProtocolMessageType('Coverage', (_message.Message,), dict(
-  DESCRIPTOR = _COVERAGE,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:Coverage)
-  ))
-_sym_db.RegisterMessage(Coverage)
-
-CoverageDataset = _reflection.GeneratedProtocolMessageType('CoverageDataset', (_message.Message,), dict(
-  DESCRIPTOR = _COVERAGEDATASET,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:CoverageDataset)
-  ))
-_sym_db.RegisterMessage(CoverageDataset)
-
-GeoReferencedArray = _reflection.GeneratedProtocolMessageType('GeoReferencedArray', (_message.Message,), dict(
-  DESCRIPTOR = _GEOREFERENCEDARRAY,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:GeoReferencedArray)
-  ))
-_sym_db.RegisterMessage(GeoReferencedArray)
-
-CoverageDataResponse = _reflection.GeneratedProtocolMessageType('CoverageDataResponse', (_message.Message,), dict(
-  DESCRIPTOR = _COVERAGEDATARESPONSE,
-  __module__ = 'cdmrfeature_pb2'
-  # @@protoc_insertion_point(class_scope:CoverageDataResponse)
-  ))
-_sym_db.RegisterMessage(CoverageDataResponse)
-
-
-DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\034ucar.nc2.ft2.coverage.remoteB\020CdmrFeatureProto'))
+# Manually added package-relative import
+from . import ncStream_pb2 as ncStream__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x63\x64mrfeature.proto\x1a\x0encStream.proto\"K\n\x0e\x43oordTransform\x12\x0f\n\x07isHoriz\x18\x01 \x01(\x08\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1a\n\x06params\x18\x03 \x03(\x0b\x32\n.Attribute\"\xce\x02\n\tCoordAxis\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x18\n\x04\x61tts\x18\x03 \x03(\x0b\x32\n.Attribute\x12\x1b\n\x08\x61xisType\x18\x04 \x01(\x0e\x32\t.AxisType\x12\r\n\x05units\x18\x05 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x1f\n\x06\x64\x65pend\x18\x07 \x01(\x0e\x32\x0f.DependenceType\x12\x11\n\tdependsOn\x18\x08 \x03(\t\x12\r\n\x05shape\x18\t \x03(\r\x12\x0f\n\x07nvalues\x18\n \x01(\x03\x12\x1d\n\x07spacing\x18\x0b \x01(\x0e\x32\x0c.AxisSpacing\x12\x12\n\nstartValue\x18\x0c \x01(\x01\x12\x10\n\x08\x65ndValue\x18\r \x01(\x01\x12\x12\n\nresolution\x18\x0e \x01(\x01\x12\x0e\n\x06values\x18\x0f \x01(\x0c\"h\n\x08\x43oordSys\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\taxisNames\x18\x02 \x03(\t\x12\x16\n\x0etransformNames\x18\x03 \x03(\t\x12#\n\x0c\x63overageType\x18\x05 \x01(\x0e\x32\r.CoverageType\"L\n\x11\x43\x61lendarDateRange\x12\r\n\x05start\x18\x01 \x01(\x03\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x03\x12\x1b\n\x08\x63\x61lendar\x18\x03 \x01(\x0e\x32\t.Calendar\"G\n\tRectangle\x12\x0e\n\x06startx\x18\x01 \x01(\x01\x12\x0e\n\x06starty\x18\x02 \x01(\x01\x12\x0c\n\x04incx\x18\x03 \x01(\x01\x12\x0c\n\x04incy\x18\x04 \x01(\x01\"\x85\x01\n\x08\x43overage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x18\n\x04\x61tts\x18\x04 \x03(\x0b\x32\n.Attribute\x12\x10\n\x08\x63oordSys\x18\x05 \x01(\t\x12\r\n\x05units\x18\x06 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\"\xc3\x02\n\x0f\x43overageDataset\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x04\x61tts\x18\x02 \x03(\x0b\x32\n.Attribute\x12\x1e\n\nlatlonRect\x18\x03 \x01(\x0b\x32\n.Rectangle\x12\x1c\n\x08projRect\x18\x04 \x01(\x0b\x32\n.Rectangle\x12%\n\tdateRange\x18\x05 \x01(\x0b\x32\x12.CalendarDateRange\x12\x1b\n\x08\x63oordSys\x18\x06 \x03(\x0b\x32\t.CoordSys\x12(\n\x0f\x63oordTransforms\x18\x07 \x03(\x0b\x32\x0f.CoordTransform\x12\x1d\n\tcoordAxes\x18\x08 \x03(\x0b\x32\n.CoordAxis\x12\x18\n\x05grids\x18\t \x03(\x0b\x32\t.Coverage\x12#\n\x0c\x63overageType\x18\n \x01(\x0e\x32\r.CoverageType\"\xe8\x01\n\x12GeoReferencedArray\x12\x14\n\x0c\x63overageName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x0e\n\x06\x62igend\x18\x03 \x01(\x08\x12\x0f\n\x07version\x18\x04 \x01(\r\x12\x1b\n\x08\x63ompress\x18\x05 \x01(\x0e\x32\t.Compress\x12\x18\n\x10uncompressedSize\x18\x06 \x01(\x04\x12\r\n\x05shape\x18\x07 \x03(\r\x12\x10\n\x08\x61xisName\x18\x08 \x03(\t\x12\x14\n\x0c\x63oordSysName\x18\t \x01(\t\x12\x10\n\x08primdata\x18\n \x01(\x0c\"\xa3\x01\n\x14\x43overageDataResponse\x12\x1d\n\tcoordAxes\x18\x01 \x03(\x0b\x32\n.CoordAxis\x12\x1b\n\x08\x63oordSys\x18\x02 \x03(\x0b\x32\t.CoordSys\x12(\n\x0f\x63oordTransforms\x18\x03 \x03(\x0b\x32\x0f.CoordTransform\x12%\n\x08geoArray\x18\x04 \x03(\x0b\x32\x13.GeoReferencedArray*\xd3\x01\n\x08\x41xisType\x12\x0b\n\x07RunTime\x10\x00\x12\x0c\n\x08\x45nsemble\x10\x01\x12\x08\n\x04Time\x10\x02\x12\x08\n\x04GeoX\x10\x03\x12\x08\n\x04GeoY\x10\x04\x12\x08\n\x04GeoZ\x10\x05\x12\x07\n\x03Lat\x10\x06\x12\x07\n\x03Lon\x10\x07\x12\n\n\x06Height\x10\x08\x12\x0c\n\x08Pressure\x10\t\x12\x11\n\rRadialAzimuth\x10\n\x12\x12\n\x0eRadialDistance\x10\x0b\x12\x13\n\x0fRadialElevation\x10\x0c\x12\x0c\n\x08Spectral\x10\r\x12\x0e\n\nTimeOffset\x10\x0e*{\n\x0b\x41xisSpacing\x12\x10\n\x0cregularPoint\x10\x00\x12\x12\n\x0eirregularPoint\x10\x01\x12\x16\n\x12\x63ontiguousInterval\x10\x02\x12\x19\n\x15\x64iscontiguousInterval\x10\x03\x12\x13\n\x0fregularInterval\x10\x04*S\n\x0e\x44\x65pendenceType\x12\x0f\n\x0bindependent\x10\x00\x12\r\n\tdependent\x10\x01\x12\n\n\x06scalar\x10\x02\x12\x08\n\x04twoD\x10\x03\x12\x0b\n\x07\x66mrcReg\x10\x04*t\n\x08\x43\x61lendar\x12\x17\n\x13proleptic_gregorian\x10\x00\x12\r\n\tgregorian\x10\x01\x12\n\n\x06noleap\x10\x02\x12\x0c\n\x08\x61ll_leap\x10\x03\x12\x10\n\x0cuniform30day\x10\x04\x12\n\n\x06julian\x10\x05\x12\x08\n\x04none\x10\x06*K\n\x0c\x43overageType\x12\x0b\n\x07General\x10\x00\x12\x0f\n\x0b\x43urvilinear\x10\x01\x12\x08\n\x04Grid\x10\x02\x12\t\n\x05Swath\x10\x03\x12\x08\n\x04\x46mrc\x10\x04\x42\x30\n\x1cucar.nc2.ft2.coverage.remoteB\x10\x43\x64mrFeatureProtob\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cdmrfeature_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'\n\034ucar.nc2.ft2.coverage.remoteB\020CdmrFeatureProto'
+  _AXISTYPE._serialized_start=1572
+  _AXISTYPE._serialized_end=1783
+  _AXISSPACING._serialized_start=1785
+  _AXISSPACING._serialized_end=1908
+  _DEPENDENCETYPE._serialized_start=1910
+  _DEPENDENCETYPE._serialized_end=1993
+  _CALENDAR._serialized_start=1995
+  _CALENDAR._serialized_end=2111
+  _COVERAGETYPE._serialized_start=2113
+  _COVERAGETYPE._serialized_end=2188
+  _COORDTRANSFORM._serialized_start=37
+  _COORDTRANSFORM._serialized_end=112
+  _COORDAXIS._serialized_start=115
+  _COORDAXIS._serialized_end=449
+  _COORDSYS._serialized_start=451
+  _COORDSYS._serialized_end=555
+  _CALENDARDATERANGE._serialized_start=557
+  _CALENDARDATERANGE._serialized_end=633
+  _RECTANGLE._serialized_start=635
+  _RECTANGLE._serialized_end=706
+  _COVERAGE._serialized_start=709
+  _COVERAGE._serialized_end=842
+  _COVERAGEDATASET._serialized_start=845
+  _COVERAGEDATASET._serialized_end=1168
+  _GEOREFERENCEDARRAY._serialized_start=1171
+  _GEOREFERENCEDARRAY._serialized_end=1403
+  _COVERAGEDATARESPONSE._serialized_start=1406
+  _COVERAGEDATARESPONSE._serialized_end=1569
 # @@protoc_insertion_point(module_scope)
diff --git a/src/siphon/cdmr/ncStream_pb2.py b/src/siphon/cdmr/ncStream_pb2.py
index 2286d84d..0268b8f7 100644
--- a/src/siphon/cdmr/ncStream_pb2.py
+++ b/src/siphon/cdmr/ncStream_pb2.py
@@ -1,14 +1,11 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: ucar/nc2/stream/ncStream.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf.internal import enum_type_wrapper
+# source: ncStream.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import symbol_database as _symbol_database
-from google.protobuf import descriptor_pb2
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -16,1487 +13,54 @@ _sym_db = _symbol_database.Default()
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='ucar/nc2/stream/ncStream.proto',
-  package='',
-  syntax='proto3',
-  serialized_pb=_b('\n\x1eucar/nc2/stream/ncStream.proto\"\xe4\x01\n\tAttribute\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x04type\x18\x02 \x01(\x0e\x32\x0f.Attribute.Type\x12\x0b\n\x03len\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\r\n\x05sdata\x18\x05 \x03(\t\x12\x10\n\x08unsigned\x18\x06 \x01(\x08\x12\x1b\n\x08\x64\x61taType\x18\x07 \x01(\x0e\x32\t.DataType\"Q\n\x04Type\x12\n\n\x06STRING\x10\x00\x12\x08\n\x04\x42YTE\x10\x01\x12\t\n\x05SHORT\x10\x02\x12\x07\n\x03INT\x10\x03\x12\x08\n\x04LONG\x10\x04\x12\t\n\x05\x46LOAT\x10\x05\x12\n\n\x06\x44OUBLE\x10\x06\"a\n\tDimension\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\x13\n\x0bisUnlimited\x18\x03 \x01(\x08\x12\x0e\n\x06isVlen\x18\x04 \x01(\x08\x12\x11\n\tisPrivate\x18\x05 \x01(\x08\"\x9c\x01\n\x08Variable\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x05shape\x18\x03 \x03(\x0b\x32\n.Dimension\x12\x18\n\x04\x61tts\x18\x04 \x03(\x0b\x32\n.Attribute\x12\x10\n\x08unsigned\x18\x05 \x01(\x08\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x10\n\x08\x65numType\x18\x07 \x01(\t\"\xa1\x01\n\tStructure\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x05shape\x18\x03 \x03(\x0b\x32\n.Dimension\x12\x18\n\x04\x61tts\x18\x04 \x03(\x0b\x32\n.Attribute\x12\x17\n\x04vars\x18\x05 \x03(\x0b\x32\t.Variable\x12\x1b\n\x07structs\x18\x06 \x03(\x0b\x32\n.Structure\"h\n\x0b\x45numTypedef\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\"\n\x03map\x18\x02 \x03(\x0b\x32\x15.EnumTypedef.EnumType\x1a\'\n\x08\x45numType\x12\x0c\n\x04\x63ode\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\t\"\xb8\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x04\x64ims\x18\x02 \x03(\x0b\x32\n.Dimension\x12\x17\n\x04vars\x18\x03 \x03(\x0b\x32\t.Variable\x12\x1b\n\x07structs\x18\x04 \x03(\x0b\x32\n.Structure\x12\x18\n\x04\x61tts\x18\x05 \x03(\x0b\x32\n.Attribute\x12\x16\n\x06groups\x18\x06 \x03(\x0b\x32\x06.Group\x12\x1f\n\tenumTypes\x18\x07 \x03(\x0b\x32\x0c.EnumTypedef\"\\\n\x06Header\x12\x10\n\x08location\x18\x01 \x01(\t\x12\r\n\x05title\x18\x02 \x01(\t\x12\n\n\x02id\x18\x03 \x01(\t\x12\x14\n\x04root\x18\x04 \x01(\x0b\x32\x06.Group\x12\x0f\n\x07version\x18\x05 \x01(\r\"&\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\r\"4\n\x05Range\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0c\n\x04size\x18\x02 \x01(\x04\x12\x0e\n\x06stride\x18\x03 \x01(\x04\" \n\x07Section\x12\x15\n\x05range\x18\x01 \x03(\x0b\x32\x06.Range\"\xca\x01\n\x04\x44\x61ta\x12\x0f\n\x07varName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x07section\x18\x03 \x01(\x0b\x32\x08.Section\x12\x10\n\x06\x62igend\x18\x04 \x01(\x08H\x00\x12\x0f\n\x07version\x18\x05 \x01(\r\x12\x1b\n\x08\x63ompress\x18\x06 \x01(\x0e\x32\t.Compress\x12\r\n\x05vdata\x18\x07 \x01(\x08\x12\x18\n\x10uncompressedSize\x18\x08 \x01(\rB\x10\n\x0e\x62igend_present\"q\n\rStructureData\x12\x0e\n\x06member\x18\x01 \x03(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x11\n\theapCount\x18\x03 \x03(\r\x12\r\n\x05sdata\x18\x04 \x03(\t\x12\r\n\x05nrows\x18\x05 \x01(\x04\x12\x11\n\trowLength\x18\x06 \x01(\r\"\x81\x02\n\x07\x44\x61taCol\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x07section\x18\x03 \x01(\x0b\x32\x08.Section\x12\x0e\n\x06\x62igend\x18\x04 \x01(\x08\x12\x0f\n\x07version\x18\x05 \x01(\r\x12\x0e\n\x06isVlen\x18\x07 \x01(\x08\x12\x0e\n\x06nelems\x18\t \x01(\r\x12\x10\n\x08primdata\x18\n \x01(\x0c\x12\x12\n\nstringdata\x18\x0b \x03(\t\x12\r\n\x05vlens\x18\x0c \x03(\r\x12\x12\n\nopaquedata\x18\r \x03(\x0c\x12&\n\nstructdata\x18\x0e \x01(\x0b\x32\x12.ArrayStructureCol\"1\n\x11\x41rrayStructureCol\x12\x1c\n\nmemberData\x18\x01 \x03(\x0b\x32\x08.DataCol\"\x85\x02\n\x07\x44\x61taRow\x12\x10\n\x08\x66ullName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x07section\x18\x03 \x01(\x0b\x32\x08.Section\x12\x0e\n\x06\x62igend\x18\x04 \x01(\x08\x12\x0f\n\x07version\x18\x05 \x01(\r\x12\x0e\n\x06isVlen\x18\x07 \x01(\x08\x12\x0e\n\x06nelems\x18\t \x01(\r\x12\x10\n\x08primdata\x18\n \x01(\x0c\x12\x12\n\nstringdata\x18\x0b \x03(\t\x12\r\n\x05vlens\x18\x0c \x03(\r\x12\x12\n\nopaquedata\x18\r \x03(\x0c\x12&\n\nstructdata\x18\x0e \x01(\x0b\x32\x12.ArrayStructureRow\"W\n\x06Member\x12\x11\n\tshortName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\r\n\x05shape\x18\x03 \x03(\r\x12\x0e\n\x06isVlen\x18\x04 \x01(\x08\"\xae\x01\n\x11\x41rrayStructureRow\x12\x18\n\x07members\x18\x01 \x03(\x0b\x32\x07.Member\x12\r\n\x05nrows\x18\x05 \x01(\x04\x12\x11\n\trowLength\x18\x06 \x01(\r\x12\x0f\n\x07\x66ixdata\x18\n \x01(\x0c\x12\x12\n\nstringdata\x18\x0b \x03(\t\x12\x10\n\x08\x62ytedata\x18\r \x03(\x0c\x12&\n\nstructdata\x18\x0e \x03(\x0b\x32\x12.ArrayStructureRow*\xd5\x01\n\x08\x44\x61taType\x12\x08\n\x04\x43HAR\x10\x00\x12\x08\n\x04\x42YTE\x10\x01\x12\t\n\x05SHORT\x10\x02\x12\x07\n\x03INT\x10\x03\x12\x08\n\x04LONG\x10\x04\x12\t\n\x05\x46LOAT\x10\x05\x12\n\n\x06\x44OUBLE\x10\x06\x12\n\n\x06STRING\x10\x07\x12\r\n\tSTRUCTURE\x10\x08\x12\x0c\n\x08SEQUENCE\x10\t\x12\t\n\x05\x45NUM1\x10\n\x12\t\n\x05\x45NUM2\x10\x0b\x12\t\n\x05\x45NUM4\x10\x0c\x12\n\n\x06OPAQUE\x10\r\x12\t\n\x05UBYTE\x10\x0e\x12\n\n\x06USHORT\x10\x0f\x12\x08\n\x04UINT\x10\x10\x12\t\n\x05ULONG\x10\x11*!\n\x08\x43ompress\x12\x08\n\x04NONE\x10\x00\x12\x0b\n\x07\x44\x45\x46LATE\x10\x01\x42 \n\x0fucar.nc2.streamB\rNcStreamProtob\x06proto3')
-)
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-_DATATYPE = _descriptor.EnumDescriptor(
-  name='DataType',
-  full_name='DataType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CHAR', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='BYTE', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SHORT', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='INT', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='LONG', index=4, number=4,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='FLOAT', index=5, number=5,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DOUBLE', index=6, number=6,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='STRING', index=7, number=7,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='STRUCTURE', index=8, number=8,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SEQUENCE', index=9, number=9,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ENUM1', index=10, number=10,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ENUM2', index=11, number=11,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ENUM4', index=12, number=12,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPAQUE', index=13, number=13,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='UBYTE', index=14, number=14,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='USHORT', index=15, number=15,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='UINT', index=16, number=16,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ULONG', index=17, number=17,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2364,
-  serialized_end=2577,
-)
-_sym_db.RegisterEnumDescriptor(_DATATYPE)
-
-DataType = enum_type_wrapper.EnumTypeWrapper(_DATATYPE)
-_COMPRESS = _descriptor.EnumDescriptor(
-  name='Compress',
-  full_name='Compress',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='NONE', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DEFLATE', index=1, number=1,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2579,
-  serialized_end=2612,
-)
-_sym_db.RegisterEnumDescriptor(_COMPRESS)
-
-Compress = enum_type_wrapper.EnumTypeWrapper(_COMPRESS)
-CHAR = 0
-BYTE = 1
-SHORT = 2
-INT = 3
-LONG = 4
-FLOAT = 5
-DOUBLE = 6
-STRING = 7
-STRUCTURE = 8
-SEQUENCE = 9
-ENUM1 = 10
-ENUM2 = 11
-ENUM4 = 12
-OPAQUE = 13
-UBYTE = 14
-USHORT = 15
-UINT = 16
-ULONG = 17
-NONE = 0
-DEFLATE = 1
-
-
-_ATTRIBUTE_TYPE = _descriptor.EnumDescriptor(
-  name='Type',
-  full_name='Attribute.Type',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='STRING', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='BYTE', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SHORT', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='INT', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='LONG', index=4, number=4,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='FLOAT', index=5, number=5,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DOUBLE', index=6, number=6,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=182,
-  serialized_end=263,
-)
-_sym_db.RegisterEnumDescriptor(_ATTRIBUTE_TYPE)
-
-
-_ATTRIBUTE = _descriptor.Descriptor(
-  name='Attribute',
-  full_name='Attribute',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='Attribute.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='type', full_name='Attribute.type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='len', full_name='Attribute.len', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='data', full_name='Attribute.data', index=3,
-      number=4, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='sdata', full_name='Attribute.sdata', index=4,
-      number=5, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='unsigned', full_name='Attribute.unsigned', index=5,
-      number=6, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='Attribute.dataType', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _ATTRIBUTE_TYPE,
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=35,
-  serialized_end=263,
-)
-
-
-_DIMENSION = _descriptor.Descriptor(
-  name='Dimension',
-  full_name='Dimension',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='Dimension.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='length', full_name='Dimension.length', index=1,
-      number=2, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='isUnlimited', full_name='Dimension.isUnlimited', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='isVlen', full_name='Dimension.isVlen', index=3,
-      number=4, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='isPrivate', full_name='Dimension.isPrivate', index=4,
-      number=5, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=265,
-  serialized_end=362,
-)
-
-
-_VARIABLE = _descriptor.Descriptor(
-  name='Variable',
-  full_name='Variable',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='Variable.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='Variable.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='shape', full_name='Variable.shape', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='atts', full_name='Variable.atts', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='unsigned', full_name='Variable.unsigned', index=4,
-      number=5, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='data', full_name='Variable.data', index=5,
-      number=6, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='enumType', full_name='Variable.enumType', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=365,
-  serialized_end=521,
-)
-
-
-_STRUCTURE = _descriptor.Descriptor(
-  name='Structure',
-  full_name='Structure',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='Structure.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='Structure.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='shape', full_name='Structure.shape', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='atts', full_name='Structure.atts', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='vars', full_name='Structure.vars', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='structs', full_name='Structure.structs', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=524,
-  serialized_end=685,
-)
-
-
-_ENUMTYPEDEF_ENUMTYPE = _descriptor.Descriptor(
-  name='EnumType',
-  full_name='EnumTypedef.EnumType',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='code', full_name='EnumTypedef.EnumType.code', index=0,
-      number=1, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='EnumTypedef.EnumType.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=752,
-  serialized_end=791,
-)
-
-_ENUMTYPEDEF = _descriptor.Descriptor(
-  name='EnumTypedef',
-  full_name='EnumTypedef',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='EnumTypedef.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='map', full_name='EnumTypedef.map', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_ENUMTYPEDEF_ENUMTYPE, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=687,
-  serialized_end=791,
-)
-
-
-_GROUP = _descriptor.Descriptor(
-  name='Group',
-  full_name='Group',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='Group.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dims', full_name='Group.dims', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='vars', full_name='Group.vars', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='structs', full_name='Group.structs', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='atts', full_name='Group.atts', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='groups', full_name='Group.groups', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='enumTypes', full_name='Group.enumTypes', index=6,
-      number=7, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=794,
-  serialized_end=978,
-)
-
-
-_HEADER = _descriptor.Descriptor(
-  name='Header',
-  full_name='Header',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='location', full_name='Header.location', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='title', full_name='Header.title', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='id', full_name='Header.id', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='root', full_name='Header.root', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='Header.version', index=4,
-      number=5, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=980,
-  serialized_end=1072,
-)
-
-
-_ERROR = _descriptor.Descriptor(
-  name='Error',
-  full_name='Error',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='message', full_name='Error.message', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='code', full_name='Error.code', index=1,
-      number=2, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1074,
-  serialized_end=1112,
-)
-
-
-_RANGE = _descriptor.Descriptor(
-  name='Range',
-  full_name='Range',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='start', full_name='Range.start', index=0,
-      number=1, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='size', full_name='Range.size', index=1,
-      number=2, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='stride', full_name='Range.stride', index=2,
-      number=3, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1114,
-  serialized_end=1166,
-)
-
-
-_SECTION = _descriptor.Descriptor(
-  name='Section',
-  full_name='Section',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='range', full_name='Section.range', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1168,
-  serialized_end=1200,
-)
-
-
-_DATA = _descriptor.Descriptor(
-  name='Data',
-  full_name='Data',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='varName', full_name='Data.varName', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='Data.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='section', full_name='Data.section', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='bigend', full_name='Data.bigend', index=3,
-      number=4, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='Data.version', index=4,
-      number=5, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='compress', full_name='Data.compress', index=5,
-      number=6, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='vdata', full_name='Data.vdata', index=6,
-      number=7, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='uncompressedSize', full_name='Data.uncompressedSize', index=7,
-      number=8, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-    _descriptor.OneofDescriptor(
-      name='bigend_present', full_name='Data.bigend_present',
-      index=0, containing_type=None, fields=[]),
-  ],
-  serialized_start=1203,
-  serialized_end=1405,
-)
-
-
-_STRUCTUREDATA = _descriptor.Descriptor(
-  name='StructureData',
-  full_name='StructureData',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='member', full_name='StructureData.member', index=0,
-      number=1, type=13, cpp_type=3, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='data', full_name='StructureData.data', index=1,
-      number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='heapCount', full_name='StructureData.heapCount', index=2,
-      number=3, type=13, cpp_type=3, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='sdata', full_name='StructureData.sdata', index=3,
-      number=4, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='nrows', full_name='StructureData.nrows', index=4,
-      number=5, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='rowLength', full_name='StructureData.rowLength', index=5,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1407,
-  serialized_end=1520,
-)
-
-
-_DATACOL = _descriptor.Descriptor(
-  name='DataCol',
-  full_name='DataCol',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='DataCol.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='DataCol.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='section', full_name='DataCol.section', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='bigend', full_name='DataCol.bigend', index=3,
-      number=4, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='DataCol.version', index=4,
-      number=5, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='isVlen', full_name='DataCol.isVlen', index=5,
-      number=7, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='nelems', full_name='DataCol.nelems', index=6,
-      number=9, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='primdata', full_name='DataCol.primdata', index=7,
-      number=10, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='stringdata', full_name='DataCol.stringdata', index=8,
-      number=11, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='vlens', full_name='DataCol.vlens', index=9,
-      number=12, type=13, cpp_type=3, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='opaquedata', full_name='DataCol.opaquedata', index=10,
-      number=13, type=12, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='structdata', full_name='DataCol.structdata', index=11,
-      number=14, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1523,
-  serialized_end=1780,
-)
-
-
-_ARRAYSTRUCTURECOL = _descriptor.Descriptor(
-  name='ArrayStructureCol',
-  full_name='ArrayStructureCol',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='memberData', full_name='ArrayStructureCol.memberData', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1782,
-  serialized_end=1831,
-)
-
-
-_DATAROW = _descriptor.Descriptor(
-  name='DataRow',
-  full_name='DataRow',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='fullName', full_name='DataRow.fullName', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='DataRow.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='section', full_name='DataRow.section', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='bigend', full_name='DataRow.bigend', index=3,
-      number=4, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='DataRow.version', index=4,
-      number=5, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='isVlen', full_name='DataRow.isVlen', index=5,
-      number=7, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='nelems', full_name='DataRow.nelems', index=6,
-      number=9, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='primdata', full_name='DataRow.primdata', index=7,
-      number=10, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='stringdata', full_name='DataRow.stringdata', index=8,
-      number=11, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='vlens', full_name='DataRow.vlens', index=9,
-      number=12, type=13, cpp_type=3, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='opaquedata', full_name='DataRow.opaquedata', index=10,
-      number=13, type=12, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='structdata', full_name='DataRow.structdata', index=11,
-      number=14, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1834,
-  serialized_end=2095,
-)
-
-
-_MEMBER = _descriptor.Descriptor(
-  name='Member',
-  full_name='Member',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='shortName', full_name='Member.shortName', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dataType', full_name='Member.dataType', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='shape', full_name='Member.shape', index=2,
-      number=3, type=13, cpp_type=3, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='isVlen', full_name='Member.isVlen', index=3,
-      number=4, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2097,
-  serialized_end=2184,
-)
-
-
-_ARRAYSTRUCTUREROW = _descriptor.Descriptor(
-  name='ArrayStructureRow',
-  full_name='ArrayStructureRow',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='members', full_name='ArrayStructureRow.members', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='nrows', full_name='ArrayStructureRow.nrows', index=1,
-      number=5, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='rowLength', full_name='ArrayStructureRow.rowLength', index=2,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='fixdata', full_name='ArrayStructureRow.fixdata', index=3,
-      number=10, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='stringdata', full_name='ArrayStructureRow.stringdata', index=4,
-      number=11, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='bytedata', full_name='ArrayStructureRow.bytedata', index=5,
-      number=13, type=12, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='structdata', full_name='ArrayStructureRow.structdata', index=6,
-      number=14, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2187,
-  serialized_end=2361,
-)
-
-_ATTRIBUTE.fields_by_name['type'].enum_type = _ATTRIBUTE_TYPE
-_ATTRIBUTE.fields_by_name['dataType'].enum_type = _DATATYPE
-_ATTRIBUTE_TYPE.containing_type = _ATTRIBUTE
-_VARIABLE.fields_by_name['dataType'].enum_type = _DATATYPE
-_VARIABLE.fields_by_name['shape'].message_type = _DIMENSION
-_VARIABLE.fields_by_name['atts'].message_type = _ATTRIBUTE
-_STRUCTURE.fields_by_name['dataType'].enum_type = _DATATYPE
-_STRUCTURE.fields_by_name['shape'].message_type = _DIMENSION
-_STRUCTURE.fields_by_name['atts'].message_type = _ATTRIBUTE
-_STRUCTURE.fields_by_name['vars'].message_type = _VARIABLE
-_STRUCTURE.fields_by_name['structs'].message_type = _STRUCTURE
-_ENUMTYPEDEF_ENUMTYPE.containing_type = _ENUMTYPEDEF
-_ENUMTYPEDEF.fields_by_name['map'].message_type = _ENUMTYPEDEF_ENUMTYPE
-_GROUP.fields_by_name['dims'].message_type = _DIMENSION
-_GROUP.fields_by_name['vars'].message_type = _VARIABLE
-_GROUP.fields_by_name['structs'].message_type = _STRUCTURE
-_GROUP.fields_by_name['atts'].message_type = _ATTRIBUTE
-_GROUP.fields_by_name['groups'].message_type = _GROUP
-_GROUP.fields_by_name['enumTypes'].message_type = _ENUMTYPEDEF
-_HEADER.fields_by_name['root'].message_type = _GROUP
-_SECTION.fields_by_name['range'].message_type = _RANGE
-_DATA.fields_by_name['dataType'].enum_type = _DATATYPE
-_DATA.fields_by_name['section'].message_type = _SECTION
-_DATA.fields_by_name['compress'].enum_type = _COMPRESS
-_DATA.oneofs_by_name['bigend_present'].fields.append(
-  _DATA.fields_by_name['bigend'])
-_DATA.fields_by_name['bigend'].containing_oneof = _DATA.oneofs_by_name['bigend_present']
-_DATACOL.fields_by_name['dataType'].enum_type = _DATATYPE
-_DATACOL.fields_by_name['section'].message_type = _SECTION
-_DATACOL.fields_by_name['structdata'].message_type = _ARRAYSTRUCTURECOL
-_ARRAYSTRUCTURECOL.fields_by_name['memberData'].message_type = _DATACOL
-_DATAROW.fields_by_name['dataType'].enum_type = _DATATYPE
-_DATAROW.fields_by_name['section'].message_type = _SECTION
-_DATAROW.fields_by_name['structdata'].message_type = _ARRAYSTRUCTUREROW
-_MEMBER.fields_by_name['dataType'].enum_type = _DATATYPE
-_ARRAYSTRUCTUREROW.fields_by_name['members'].message_type = _MEMBER
-_ARRAYSTRUCTUREROW.fields_by_name['structdata'].message_type = _ARRAYSTRUCTUREROW
-DESCRIPTOR.message_types_by_name['Attribute'] = _ATTRIBUTE
-DESCRIPTOR.message_types_by_name['Dimension'] = _DIMENSION
-DESCRIPTOR.message_types_by_name['Variable'] = _VARIABLE
-DESCRIPTOR.message_types_by_name['Structure'] = _STRUCTURE
-DESCRIPTOR.message_types_by_name['EnumTypedef'] = _ENUMTYPEDEF
-DESCRIPTOR.message_types_by_name['Group'] = _GROUP
-DESCRIPTOR.message_types_by_name['Header'] = _HEADER
-DESCRIPTOR.message_types_by_name['Error'] = _ERROR
-DESCRIPTOR.message_types_by_name['Range'] = _RANGE
-DESCRIPTOR.message_types_by_name['Section'] = _SECTION
-DESCRIPTOR.message_types_by_name['Data'] = _DATA
-DESCRIPTOR.message_types_by_name['StructureData'] = _STRUCTUREDATA
-DESCRIPTOR.message_types_by_name['DataCol'] = _DATACOL
-DESCRIPTOR.message_types_by_name['ArrayStructureCol'] = _ARRAYSTRUCTURECOL
-DESCRIPTOR.message_types_by_name['DataRow'] = _DATAROW
-DESCRIPTOR.message_types_by_name['Member'] = _MEMBER
-DESCRIPTOR.message_types_by_name['ArrayStructureRow'] = _ARRAYSTRUCTUREROW
-DESCRIPTOR.enum_types_by_name['DataType'] = _DATATYPE
-DESCRIPTOR.enum_types_by_name['Compress'] = _COMPRESS
-
-Attribute = _reflection.GeneratedProtocolMessageType('Attribute', (_message.Message,), dict(
-  DESCRIPTOR = _ATTRIBUTE,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Attribute)
-  ))
-_sym_db.RegisterMessage(Attribute)
-
-Dimension = _reflection.GeneratedProtocolMessageType('Dimension', (_message.Message,), dict(
-  DESCRIPTOR = _DIMENSION,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Dimension)
-  ))
-_sym_db.RegisterMessage(Dimension)
-
-Variable = _reflection.GeneratedProtocolMessageType('Variable', (_message.Message,), dict(
-  DESCRIPTOR = _VARIABLE,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Variable)
-  ))
-_sym_db.RegisterMessage(Variable)
-
-Structure = _reflection.GeneratedProtocolMessageType('Structure', (_message.Message,), dict(
-  DESCRIPTOR = _STRUCTURE,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Structure)
-  ))
-_sym_db.RegisterMessage(Structure)
-
-EnumTypedef = _reflection.GeneratedProtocolMessageType('EnumTypedef', (_message.Message,), dict(
-
-  EnumType = _reflection.GeneratedProtocolMessageType('EnumType', (_message.Message,), dict(
-    DESCRIPTOR = _ENUMTYPEDEF_ENUMTYPE,
-    __module__ = 'ucar.nc2.stream.ncStream_pb2'
-    # @@protoc_insertion_point(class_scope:EnumTypedef.EnumType)
-    ))
-  ,
-  DESCRIPTOR = _ENUMTYPEDEF,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:EnumTypedef)
-  ))
-_sym_db.RegisterMessage(EnumTypedef)
-_sym_db.RegisterMessage(EnumTypedef.EnumType)
-
-Group = _reflection.GeneratedProtocolMessageType('Group', (_message.Message,), dict(
-  DESCRIPTOR = _GROUP,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Group)
-  ))
-_sym_db.RegisterMessage(Group)
-
-Header = _reflection.GeneratedProtocolMessageType('Header', (_message.Message,), dict(
-  DESCRIPTOR = _HEADER,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Header)
-  ))
-_sym_db.RegisterMessage(Header)
-
-Error = _reflection.GeneratedProtocolMessageType('Error', (_message.Message,), dict(
-  DESCRIPTOR = _ERROR,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Error)
-  ))
-_sym_db.RegisterMessage(Error)
-
-Range = _reflection.GeneratedProtocolMessageType('Range', (_message.Message,), dict(
-  DESCRIPTOR = _RANGE,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Range)
-  ))
-_sym_db.RegisterMessage(Range)
-
-Section = _reflection.GeneratedProtocolMessageType('Section', (_message.Message,), dict(
-  DESCRIPTOR = _SECTION,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Section)
-  ))
-_sym_db.RegisterMessage(Section)
-
-Data = _reflection.GeneratedProtocolMessageType('Data', (_message.Message,), dict(
-  DESCRIPTOR = _DATA,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Data)
-  ))
-_sym_db.RegisterMessage(Data)
-
-StructureData = _reflection.GeneratedProtocolMessageType('StructureData', (_message.Message,), dict(
-  DESCRIPTOR = _STRUCTUREDATA,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:StructureData)
-  ))
-_sym_db.RegisterMessage(StructureData)
-
-DataCol = _reflection.GeneratedProtocolMessageType('DataCol', (_message.Message,), dict(
-  DESCRIPTOR = _DATACOL,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:DataCol)
-  ))
-_sym_db.RegisterMessage(DataCol)
-
-ArrayStructureCol = _reflection.GeneratedProtocolMessageType('ArrayStructureCol', (_message.Message,), dict(
-  DESCRIPTOR = _ARRAYSTRUCTURECOL,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:ArrayStructureCol)
-  ))
-_sym_db.RegisterMessage(ArrayStructureCol)
-
-DataRow = _reflection.GeneratedProtocolMessageType('DataRow', (_message.Message,), dict(
-  DESCRIPTOR = _DATAROW,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:DataRow)
-  ))
-_sym_db.RegisterMessage(DataRow)
-
-Member = _reflection.GeneratedProtocolMessageType('Member', (_message.Message,), dict(
-  DESCRIPTOR = _MEMBER,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:Member)
-  ))
-_sym_db.RegisterMessage(Member)
-
-ArrayStructureRow = _reflection.GeneratedProtocolMessageType('ArrayStructureRow', (_message.Message,), dict(
-  DESCRIPTOR = _ARRAYSTRUCTUREROW,
-  __module__ = 'ucar.nc2.stream.ncStream_pb2'
-  # @@protoc_insertion_point(class_scope:ArrayStructureRow)
-  ))
-_sym_db.RegisterMessage(ArrayStructureRow)
-
-
-DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\017ucar.nc2.streamB\rNcStreamProto'))
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0encStream.proto\"\xe4\x01\n\tAttribute\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x04type\x18\x02 \x01(\x0e\x32\x0f.Attribute.Type\x12\x0b\n\x03len\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\r\n\x05sdata\x18\x05 \x03(\t\x12\x10\n\x08unsigned\x18\x06 \x01(\x08\x12\x1b\n\x08\x64\x61taType\x18\x07 \x01(\x0e\x32\t.DataType\"Q\n\x04Type\x12\n\n\x06STRING\x10\x00\x12\x08\n\x04\x42YTE\x10\x01\x12\t\n\x05SHORT\x10\x02\x12\x07\n\x03INT\x10\x03\x12\x08\n\x04LONG\x10\x04\x12\t\n\x05\x46LOAT\x10\x05\x12\n\n\x06\x44OUBLE\x10\x06\"a\n\tDimension\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\x13\n\x0bisUnlimited\x18\x03 \x01(\x08\x12\x0e\n\x06isVlen\x18\x04 \x01(\x08\x12\x11\n\tisPrivate\x18\x05 \x01(\x08\"\x9c\x01\n\x08Variable\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x05shape\x18\x03 \x03(\x0b\x32\n.Dimension\x12\x18\n\x04\x61tts\x18\x04 \x03(\x0b\x32\n.Attribute\x12\x10\n\x08unsigned\x18\x05 \x01(\x08\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x10\n\x08\x65numType\x18\x07 \x01(\t\"\xa1\x01\n\tStructure\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x05shape\x18\x03 \x03(\x0b\x32\n.Dimension\x12\x18\n\x04\x61tts\x18\x04 \x03(\x0b\x32\n.Attribute\x12\x17\n\x04vars\x18\x05 \x03(\x0b\x32\t.Variable\x12\x1b\n\x07structs\x18\x06 \x03(\x0b\x32\n.Structure\"h\n\x0b\x45numTypedef\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\"\n\x03map\x18\x02 \x03(\x0b\x32\x15.EnumTypedef.EnumType\x1a\'\n\x08\x45numType\x12\x0c\n\x04\x63ode\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\t\"\xb8\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x04\x64ims\x18\x02 \x03(\x0b\x32\n.Dimension\x12\x17\n\x04vars\x18\x03 \x03(\x0b\x32\t.Variable\x12\x1b\n\x07structs\x18\x04 \x03(\x0b\x32\n.Structure\x12\x18\n\x04\x61tts\x18\x05 \x03(\x0b\x32\n.Attribute\x12\x16\n\x06groups\x18\x06 \x03(\x0b\x32\x06.Group\x12\x1f\n\tenumTypes\x18\x07 \x03(\x0b\x32\x0c.EnumTypedef\"\\\n\x06Header\x12\x10\n\x08location\x18\x01 \x01(\t\x12\r\n\x05title\x18\x02 \x01(\t\x12\n\n\x02id\x18\x03 \x01(\t\x12\x14\n\x04root\x18\x04 \x01(\x0b\x32\x06.Group\x12\x0f\n\x07version\x18\x05 \x01(\r\"&\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\r\"4\n\x05Range\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0c\n\x04size\x18\x02 \x01(\x04\x12\x0e\n\x06stride\x18\x03 \x01(\x04\" \n\x07Section\x12\x15\n\x05range\x18\x01 \x03(\x0b\x32\x06.Range\"\xca\x01\n\x04\x44\x61ta\x12\x0f\n\x07varName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x07section\x18\x03 \x01(\x0b\x32\x08.Section\x12\x10\n\x06\x62igend\x18\x04 \x01(\x08H\x00\x12\x0f\n\x07version\x18\x05 \x01(\r\x12\x1b\n\x08\x63ompress\x18\x06 \x01(\x0e\x32\t.Compress\x12\r\n\x05vdata\x18\x07 \x01(\x08\x12\x18\n\x10uncompressedSize\x18\x08 \x01(\rB\x10\n\x0e\x62igend_present\"q\n\rStructureData\x12\x0e\n\x06member\x18\x01 \x03(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x11\n\theapCount\x18\x03 \x03(\r\x12\r\n\x05sdata\x18\x04 \x03(\t\x12\r\n\x05nrows\x18\x05 \x01(\x04\x12\x11\n\trowLength\x18\x06 \x01(\r\"\x81\x02\n\x07\x44\x61taCol\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x07section\x18\x03 \x01(\x0b\x32\x08.Section\x12\x0e\n\x06\x62igend\x18\x04 \x01(\x08\x12\x0f\n\x07version\x18\x05 \x01(\r\x12\x0e\n\x06isVlen\x18\x07 \x01(\x08\x12\x0e\n\x06nelems\x18\t \x01(\r\x12\x10\n\x08primdata\x18\n \x01(\x0c\x12\x12\n\nstringdata\x18\x0b \x03(\t\x12\r\n\x05vlens\x18\x0c \x03(\r\x12\x12\n\nopaquedata\x18\r \x03(\x0c\x12&\n\nstructdata\x18\x0e \x01(\x0b\x32\x12.ArrayStructureCol\"1\n\x11\x41rrayStructureCol\x12\x1c\n\nmemberData\x18\x01 \x03(\x0b\x32\x08.DataCol\"\x85\x02\n\x07\x44\x61taRow\x12\x10\n\x08\x66ullName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\x19\n\x07section\x18\x03 \x01(\x0b\x32\x08.Section\x12\x0e\n\x06\x62igend\x18\x04 \x01(\x08\x12\x0f\n\x07version\x18\x05 \x01(\r\x12\x0e\n\x06isVlen\x18\x07 \x01(\x08\x12\x0e\n\x06nelems\x18\t \x01(\r\x12\x10\n\x08primdata\x18\n \x01(\x0c\x12\x12\n\nstringdata\x18\x0b \x03(\t\x12\r\n\x05vlens\x18\x0c \x03(\r\x12\x12\n\nopaquedata\x18\r \x03(\x0c\x12&\n\nstructdata\x18\x0e \x01(\x0b\x32\x12.ArrayStructureRow\"W\n\x06Member\x12\x11\n\tshortName\x18\x01 \x01(\t\x12\x1b\n\x08\x64\x61taType\x18\x02 \x01(\x0e\x32\t.DataType\x12\r\n\x05shape\x18\x03 \x03(\r\x12\x0e\n\x06isVlen\x18\x04 \x01(\x08\"\xae\x01\n\x11\x41rrayStructureRow\x12\x18\n\x07members\x18\x01 \x03(\x0b\x32\x07.Member\x12\r\n\x05nrows\x18\x05 \x01(\x04\x12\x11\n\trowLength\x18\x06 \x01(\r\x12\x0f\n\x07\x66ixdata\x18\n \x01(\x0c\x12\x12\n\nstringdata\x18\x0b \x03(\t\x12\x10\n\x08\x62ytedata\x18\r \x03(\x0c\x12&\n\nstructdata\x18\x0e \x03(\x0b\x32\x12.ArrayStructureRow*\xd5\x01\n\x08\x44\x61taType\x12\x08\n\x04\x43HAR\x10\x00\x12\x08\n\x04\x42YTE\x10\x01\x12\t\n\x05SHORT\x10\x02\x12\x07\n\x03INT\x10\x03\x12\x08\n\x04LONG\x10\x04\x12\t\n\x05\x46LOAT\x10\x05\x12\n\n\x06\x44OUBLE\x10\x06\x12\n\n\x06STRING\x10\x07\x12\r\n\tSTRUCTURE\x10\x08\x12\x0c\n\x08SEQUENCE\x10\t\x12\t\n\x05\x45NUM1\x10\n\x12\t\n\x05\x45NUM2\x10\x0b\x12\t\n\x05\x45NUM4\x10\x0c\x12\n\n\x06OPAQUE\x10\r\x12\t\n\x05UBYTE\x10\x0e\x12\n\n\x06USHORT\x10\x0f\x12\x08\n\x04UINT\x10\x10\x12\t\n\x05ULONG\x10\x11*!\n\x08\x43ompress\x12\x08\n\x04NONE\x10\x00\x12\x0b\n\x07\x44\x45\x46LATE\x10\x01\x42 \n\x0fucar.nc2.streamB\rNcStreamProtob\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ncStream_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'\n\017ucar.nc2.streamB\rNcStreamProto'
+  _DATATYPE._serialized_start=2348
+  _DATATYPE._serialized_end=2561
+  _COMPRESS._serialized_start=2563
+  _COMPRESS._serialized_end=2596
+  _ATTRIBUTE._serialized_start=19
+  _ATTRIBUTE._serialized_end=247
+  _ATTRIBUTE_TYPE._serialized_start=166
+  _ATTRIBUTE_TYPE._serialized_end=247
+  _DIMENSION._serialized_start=249
+  _DIMENSION._serialized_end=346
+  _VARIABLE._serialized_start=349
+  _VARIABLE._serialized_end=505
+  _STRUCTURE._serialized_start=508
+  _STRUCTURE._serialized_end=669
+  _ENUMTYPEDEF._serialized_start=671
+  _ENUMTYPEDEF._serialized_end=775
+  _ENUMTYPEDEF_ENUMTYPE._serialized_start=736
+  _ENUMTYPEDEF_ENUMTYPE._serialized_end=775
+  _GROUP._serialized_start=778
+  _GROUP._serialized_end=962
+  _HEADER._serialized_start=964
+  _HEADER._serialized_end=1056
+  _ERROR._serialized_start=1058
+  _ERROR._serialized_end=1096
+  _RANGE._serialized_start=1098
+  _RANGE._serialized_end=1150
+  _SECTION._serialized_start=1152
+  _SECTION._serialized_end=1184
+  _DATA._serialized_start=1187
+  _DATA._serialized_end=1389
+  _STRUCTUREDATA._serialized_start=1391
+  _STRUCTUREDATA._serialized_end=1504
+  _DATACOL._serialized_start=1507
+  _DATACOL._serialized_end=1764
+  _ARRAYSTRUCTURECOL._serialized_start=1766
+  _ARRAYSTRUCTURECOL._serialized_end=1815
+  _DATAROW._serialized_start=1818
+  _DATAROW._serialized_end=2079
+  _MEMBER._serialized_start=2081
+  _MEMBER._serialized_end=2168
+  _ARRAYSTRUCTUREROW._serialized_start=2171
+  _ARRAYSTRUCTUREROW._serialized_end=2345
 # @@protoc_insertion_point(module_scope)


Test patch:
diff --git a/.github/workflows/tests-conda.yml b/.github/workflows/tests-conda.yml
index 5267052b..98465bb2 100644
--- a/.github/workflows/tests-conda.yml
+++ b/.github/workflows/tests-conda.yml
@@ -3,9 +3,17 @@ name: Conda Tests
 # We don't want pushes (or PRs) to gh-pages to kick anything off
 on:
   push:
-    branches: [ main ]
+    branches:
+      - main
+      - '[0-9]+.[0-9]+.x'
   pull_request:
-    branches: [ main ]
+    branches:
+      - main
+      - '[0-9]+.[0-9]+.x'
+
+concurrency:
+  group: ${{ github.workflow}}-${{ github.head_ref }}
+  cancel-in-progress: true
 
 jobs:
   #
@@ -20,62 +28,49 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: [3.7, 3.8, 3.9]
+        python-version: ['3.10', 3.12]
         os: [macOS, Windows]
+        include:
+          - python-version: 3.11
+            os: Windows
 
     steps:
-    # We check out only a limited depth and then pull tags to save time
     - name: Checkout source
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
-        fetch-depth: 100
-
-    - name: Get tags
-      run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
+        fetch-depth: 150
+        fetch-tags: true
 
-    - name: Setup conda caching
-      uses: actions/cache@v3
+    - name: Install from Conda
+      uses: Unidata/MetPy/.github/actions/install-conda@main
       with:
-        path: ~/conda_pkgs_dir
-        key: conda-tests-${{ runner.os }}-${{ matrix.python-version}}-${{ hashFiles('ci/*') }}
-        restore-keys: |
-          conda-tests-${{ runner.os }}-${{ matrix.python-version}}
-          conda-tests-${{ runner.os }}
-          conda-tests-
-
-    - name: Set up Python ${{ matrix.python-version }}
-      uses: conda-incubator/setup-miniconda@v2
-      with:
-        miniconda-version: "latest"
+        type: 'test'
         python-version: ${{ matrix.python-version }}
-        channel-priority: strict
-        channels: conda-forge
-        show-channel-urls: true
-        # Needed for caching
-        use-only-tar-bz2: true
 
-    - name: Install dependencies
-      run: conda install --quiet --yes --file ci/test_requirements.txt --file ci/extra_requirements.txt --file ci/requirements.txt
+    - name: Run tests
+      uses: Unidata/MetPy/.github/actions/run-tests@main
+      with:
+        run-doctests: 'false'
+        key: conda-${{ matrix.python-version }}-${{ runner.os }}
+        pytest-args: ''
 
-    - name: Install
-      # For some reason on Windows 3.7 building the wheel fails to properly include our extra
-      # stuff. Executing the egg_info beforehand for some reason fixes it. No idea why. We're
-      # deep in territory where googling for answers helps not at all.
-      run: |
-        python setup.py egg_info
-        python -m pip install --no-deps .
+  codecov:
+    name: CodeCov Upload
+    needs: CondaTests
+    runs-on: ubuntu-latest
+    environment:
+      name: CodeCov
+    timeout-minutes: 2
+    steps:
+      - name: Checkout source
+        uses: actions/checkout@v4
 
-    - name: Run tests
-      # By running coverage in "parallel" mode and "combining", we can clean up the path names
-      run: |
-        export TEST_DATA_DIR=$GITHUB_WORKSPACE/staticdata
-        python -m coverage run -p -m pytest tests
-        python -m coverage combine
-        python -m coverage report
-        python -m coverage xml
+      - name: Download coverage artifacts
+        uses: actions/download-artifact@v4
 
-    - name: Upload coverage
-      if: ${{ always() }}
-      uses: codecov/codecov-action@v3
-      with:
-        name: conda-${{ matrix.python-version }}-${{ runner.os }}
+      - name: Upload coverage
+        uses: codecov/codecov-action@v4
+        with:
+          name: ${{ github.workflow }}
+          fail_ci_if_error: true
+          token: ${{ secrets.CODECOV_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/tests-pypi.yml b/.github/workflows/tests-pypi.yml
index 0dfe70ef..11ed4c57 100644
--- a/.github/workflows/tests-pypi.yml
+++ b/.github/workflows/tests-pypi.yml
@@ -3,84 +3,102 @@ name: PyPI Tests
 # We don't want pushes (or PRs) to gh-pages to kick anything off
 on:
   push:
-    branches: [ main ]
+    branches:
+      - main
+      - '[0-9]+.[0-9]+.x'
   pull_request:
-    branches: [ main ]
+    branches:
+      - main
+      - '[0-9]+.[0-9]+.x'
+
+concurrency:
+  group: ${{ github.workflow}}-${{ github.head_ref }}
+  cancel-in-progress: true
 
 jobs:
   #
-  # Run all tests on Linux using standard PyPI packages, including min and pre-releases
+  # Run all tests on Linux using standard PyPI packages, including minimum requirements
   #
   PyPITests:
     name: ${{ matrix.python-version }} ${{ matrix.dep-versions }} ${{ matrix.no-extras }}
-    runs-on: ubuntu-20.04
-    continue-on-error: ${{ matrix.dep-versions == 'Prerelease' }}
+    runs-on: ubuntu-latest
     strategy:
       fail-fast: false
       matrix:
-        python-version: [3.7, 3.8, 3.9]
-        dep-versions: [requirements.txt]
+        python-version: ['3.10', 3.11, 3.12]
+        dep-versions: [Latest]
         no-extras: ['']
         include:
-          - python-version: 3.7
+          - python-version: '3.10'
+            dep-versions: Minimum
+          - python-version: '3.10'
             dep-versions: Minimum
             no-extras: 'No Extras'
-          - python-version: 3.9
-            dep-versions: requirements.txt
+          - python-version: 3.12
+            dep-versions: Latest
             no-extras: 'No Extras'
 
     steps:
-    # We check out only a limited depth and then pull tags to save time
     - name: Checkout source
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
-        fetch-depth: 100
+        fetch-depth: 150
+        fetch-tags: true
 
-    - name: Get tags
-      run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
+    - name: Generate minimum dependencies
+      if: ${{ matrix.dep-versions == 'Minimum' }}
+      run: |
+        pip install tomli
+        python << EOF
+        import tomli as tomllib
+        from pathlib import Path
 
-    - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v4
-      with:
-        python-version: ${{ matrix.python-version }}
+        # Read our pyproject.toml
+        config = tomllib.load(open('pyproject.toml', 'rb'))['project']
+        opt_deps = config['optional-dependencies']
 
-    # This uses pip to find the right cache dir and then sets up caching for it
-    - name: Get pip cache dir
-      id: pip-cache
-      run: echo "::set-output name=dir::$(pip cache dir)"
+        # Generate a Minimum dependency file
+        for src, fname in [(config['dependencies'], 'requirements.txt'),
+                           (opt_deps['test'], 'test_requirements.txt'), (opt_deps['extras'], 'extra_requirements.txt')]:
+          with (Path('ci') / fname).open('wt') as out:
+            for dep in src:
+              dep = dep.split(';')[0]
+              if 'siphon' not in dep:
+                out.write(dep.replace('>=', '==') + '\n')
+        EOF
 
-    - name: Setup caching
-      uses: actions/cache@v3
+    - name: Install from PyPI
+      uses: Unidata/MetPy/.github/actions/install-pypi@main
       with:
-        path: ${{ steps.pip-cache.outputs.dir }}
-        key: pip-tests-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('ci/*') }}
-        restore-keys: |
-          pip-tests-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('ci/*') }}
-          pip-tests-${{ runner.os }}-${{ matrix.python-version }}-
-          pip-tests-${{ runner.os }}-
-          pip-tests-
-
-    - name: Add extras to requirements
-      if: ${{ matrix.no-extras != 'No Extras' }}
-      run: cat ci/extra_requirements.txt >> ci/test_requirements.txt
+        need-extras: ${{ matrix.no-extras != 'No Extras' }}
+        type: 'test'
+        python-version: ${{ matrix.python-version }}
+        need-cartopy: 'false'
 
-    - name: Install dependencies
-      run: |
-        python -m pip install --upgrade pip setuptools
-        python -m pip install -r ci/test_requirements.txt -c ci/${{ matrix.dep-versions }}
+    - name: Run tests
+      uses: Unidata/MetPy/.github/actions/run-tests@main
+      with:
+        run-doctests: 'false'
+        key: pypi-${{ matrix.python-version }}-${{ matrix.dep-versions }}-${{ matrix.no-extras }}-${{ runner.os }}
+        pytest-args: ''
 
-    - name: Install
-      run: python -m pip install -c ci/${{ matrix.dep-versions }} .
+  codecov:
+    needs: PyPITests
+    name: CodeCov Upload
+    runs-on: ubuntu-latest
+    environment:
+      name: CodeCov
+    timeout-minutes: 2
+    steps:
+      - name: Checkout source
+        uses: actions/checkout@v4
 
-    - name: Run tests
-      run: |
-        python -m coverage run -p -m pytest tests
-        python -m coverage combine
-        python -m coverage report
-        python -m coverage xml
+      - name: Download coverage artifacts
+        uses: actions/download-artifact@v4
 
-    - name: Upload coverage
-      if: ${{ always() }}
-      uses: codecov/codecov-action@v3
-      with:
-        name: pypi-${{ matrix.python-version }}-${{ matrix.dep-versions }}-${{ matrix.no-extras }}-${{ runner.os }}
+      - name: Upload coverage
+        uses: codecov/codecov-action@v4
+        with:
+          name: ${{ github.workflow }}
+          fail_ci_if_error: true
+          token: ${{ secrets.CODECOV_TOKEN }}
\ No newline at end of file
diff --git a/ci/test_requirements.txt b/ci/test_requirements.txt
index 265398a7..b3dfa0aa 100644
--- a/ci/test_requirements.txt
+++ b/ci/test_requirements.txt
@@ -1,4 +1,4 @@
-pytest==7.1.3
-netCDF4==1.6.1
-coverage==6.4.4
-vcrpy==4.2.1
+pytest==7.2.0
+netCDF4==1.6.5
+coverage==7.3.1
+vcrpy==5.1.0