def _should_suppress(obj, full_name):
  """Return True if the docs for the given object should be suppressed.

  We want to suppress:
    - typing.Text needs to be special cased because it resolves to bytes or
      unicode, so it doesn't appear as something in the typing module.
    - all __magic__ functions, methods, variables, constants, etc
    - any other typing, builtin or collections-related classes.

  Args:
    obj: Object
    full_name: Fully qualified name for the object (the "module path" via which
      it was accessed, e.g. tfma.evaluators.default_evaluators)

  Returns:
    True if the docs for the given object should be suppressed.
  """
  # We need to special case the Text type because it resolves to str or unicode,
  # and not a symbol in the typing module.
  if obj == str or obj == bytes:
    return True
  if full_name and full_name.endswith('Text'):
    return True

  if full_name:
    parts = full_name.split('.')
    if parts:
      # We may want to keep __new__ and __init__ (but not if they are methods
      # on things that should be otherwise suppressed)
      if parts[-1] != '__new__' and parts[-1] != '__init__':
        # But all other magic methods should be hidden.
        if parts[-1].startswith('__') and parts[-1].endswith('__'):
          return True

  if not hasattr(obj, '__module__'):
    obj = obj.__class__
  if not obj.__module__:
    return False

  return False