def collect_members(module_to_name):
 members = {}
 for (module, module_name) in module_to_name.items():
  all_names = getattr(module, '__all__', None)
  for (name, member) in inspect.getmembers(module):
   if ((inspect.isfunction(member) or inspect.isclass(member)) and (not _always_drop_symbol_re.match(name)) and ((all_names is None) or (name in all_names))):
    fullname = ('%s.%s' % (module_name, name))
    if (name in members):
     (other_fullname, other_member) = members[name]
     if (member is not other_member):
      raise RuntimeError(('Short name collision between %s and %s' % (fullname, other_fullname)))
     if (len(fullname) == len(other_fullname)):
      raise RuntimeError(("Can't decide whether to use %s or %s for %s: both full names have length %d" % (fullname, other_fullname, name, len(fullname))))
     if (len(fullname) > len(other_fullname)):
      continue
    members[name] = (fullname, member)
 return members

def collect_members ( module_to_name ) : members = { } for ( module , module_name ) in module_to_name . items ( ) : all_names = getattr ( module , '__all__' , None ) for ( name , member ) in inspect . getmembers ( module ) : if ( ( inspect . isfunction ( member ) or inspect . isclass ( member ) ) and ( not _always_drop_symbol_re . match ( name ) ) and ( ( all_names is None ) or ( name in all_names ) ) ) : fullname = ( '%s.%s' % ( module_name , name ) ) if ( name in members ) : ( other_fullname , other_member ) = members [ name ] if ( member is not other_member ) : raise RuntimeError ( ( 'Short name collision between %s and %s' % ( fullname , other_fullname ) ) ) if ( len ( fullname ) == len ( other_fullname ) ) : raise RuntimeError ( ( "Can't decide whether to use %s or %s for %s: both full names have length %d" % ( fullname , other_fullname , name , len ( fullname ) ) ) ) if ( len ( fullname ) > len ( other_fullname ) ) : continue members [ name ] = ( fullname , member ) return members
collect all symbols from a list of modules .