docs: def _load_recursive(self, shape, gen):
          """Recursively create a multidimensional array (as lists of lists)
          from a bit generator.
          """
          if len(shape) > 0:
              ans = []
              for i in range(shape[0]):
                  ans.append(self._load_recursive(shape[1:], gen))
          else:
              fields = []
              for code, length in self.format:
                  field = None
                  raw = gen.send(length)
                  if code == 'u':
                      field = raw
                  elif code == 'i':
                      field = raw
                      # Interpret as 2's complement
                      if field >= 1 << (length - 1):
                          field -= 1 << length
                  elif code == 'b':
                      field = bool(raw)
                  elif code == 'c':
                      field = six.int2byte(raw)
                  elif code == 'f':
                      if length == 32:
                          field = _np.uint32(raw).view(_np.float32)
                      elif length == 64:
                          field = _np.uint64(raw).view(_np.float64)
                      else:
                          raise ValueError('unhandled float length {0}'.format((code, length)))
                  else:
                      raise ValueError('unhandled format {0}'.format((code, length)))
                  fields.append(field)
              if len(fields) == 1:
                  ans = fields[0]
              else:
                  ans = tuple(fields)
          return ans