code: def create(cls, spec_path, address_maps):
      
      if spec_path == '.':
        spec_path = ''
      for address_map in address_maps:
        if not address_map.path.startswith(spec_path):
          raise DifferingFamiliesError('Expected AddressMaps to share the same parent directory {}, '
                                       'but received: {}'
                                       .format(spec_path, address_map.path))
  
  
      objects_by_name = {}
      for address_map in address_maps:
        current_path = address_map.path
        for name, obj in address_map.objects_by_name.items():
          previous = objects_by_name.get(name)
          if previous:
            previous_path, _ = previous
            raise DuplicateNameError('An object with name {name!r} is already defined in '
                                     '{previous_path!r}, will not overwrite with {obj!r} from '
                                     '{current_path!r}.'
                                     .format(name=name,
                                             previous_path=previous_path,
                                             obj=obj,
                                             current_path=current_path))
          objects_by_name[name] = (current_path, obj)
      return AddressFamily(namespace=spec_path,
                           objects_by_name=OrderedDict((name, (path, obj)) for name, (path, obj)
                                                        in sorted(objects_by_name.items())))
docs: Creates an address family from the given set of address maps.
  
      :param spec_path: The directory prefix shared by all address_maps.
      :param address_maps: The family of maps that form this namespace.
      :type address_maps: :class:`collections.Iterable` of :class:`AddressMap`
      :returns: a new address family.
      :rtype: :class:`AddressFamily`
      :raises: :class:`MappingError` if the given address maps do not form a family.