docs: def parse (name):
          """parse(name) -> [typename | None, nelems | None]
  
          Parses an ArrayType name to return the element type name and
          number of elements, e.g.:
  
              >>> ArrayType.parse('MSB_U16[32]')
              ['MSB_U16', 32]
  
          If typename cannot be determined, None is returned.
          Similarly, if nelems is not an integer or less than one (1),
          None is returned.
          """
          parts = [None, None]
          start = name.find('[')
  
          if start != -1:
              stop = name.find(']', start)
              if stop != -1:
                  try:
                      parts[0] = name[:start]
                      parts[1] = int(name[start + 1:stop])
                      if parts[1] <= 0:
                          raise ValueError
                  except ValueError:
                      msg  = 'ArrayType specification: "%s" must have an '
                      msg += 'integer greater than zero in square brackets.'
                      raise ValueError(msg % name)
  
          return parts