code: def normalize_ip(ip):
      
      theip = ip
      if theip.startswith('::'):
          theip = '0' + theip
      if theip.endswith('::'):
          theip += '0'
      segments = theip.split(':')
      if len(segments) == 1:
          raise ValueError('no colons in ipv6 address: ' + repr(ip))
      fill = 8 - len(segments)
      if fill < 0:
          raise ValueError('ipv6 address has too many segments: ' + repr(ip))
      result = []
      for segment in segments:
          if segment == '':
              if fill == 0:
                  raise ValueError('unexpected double colon: ' + repr(ip))
              for n in range(fill + 1):
                  result.append('0000')
              fill = 0
          else:
              try:
                  int(segment, 16)
              except ValueError:
                  raise ValueError('invalid hex value in ' + repr(ip))
              result.append(segment.rjust(4, '0'))
      return ':'.join(result).lower()
docs: Transform the address into a standard, fixed-length form, such as:
  
          1234:0:01:02:: -> 1234:0000:0001:0002:0000:0000:0000:0000
          1234::A -> 1234:0000:0000:0000:0000:0000:0000:000a
  
      :type  ip: string
      :param ip: An IP address.
      :rtype:  string
      :return: The normalized IP.