docs: def reflect(cls, X, **kwargs):
          """Reflect is for visitors where you are exposing some information
          about the types reachable from a starting type to an external system.
          For example, a front-end, a REST URL router and documentation
          framework, an avro schema definition, etc.
  
          X can be a type or an instance.
  
          This API should be considered **experimental**
          """
          if isinstance(X, type):
              value = None
              value_type = X
          else:
              value = X
              value_type = type(X)
          if not issubclass(value_type, Record):
              raise TypeError("Cannot reflect on %s" % value_type.__name__)
  
          visitor = cls.Visitor(
              cls.scantypes, cls.propinfo, cls.itemtypes,
              cls.typeinfo,
              **kwargs)
  
          return cls.map(visitor, value, value_type)