code: def _string_from_ip_int(self, ip_int=None):
          
          if not ip_int and ip_int != 0:
              ip_int = int(self._ip)
  
          if ip_int > self._ALL_ONES:
              raise ValueError('IPv6 address is too large')
  
          hex_str = '%032x' % ip_int
          hextets = []
          for x in range(0, 32, 4):
              hextets.append('%x' % int(hex_str[x:x+4], 16))
  
          hextets = self._compress_hextets(hextets)
          return ':'.join(hextets)
docs: Turns a 128-bit integer into hexadecimal notation.
  
          Args:
              ip_int: An integer, the IP address.
  
          Returns:
              A string, the hexadecimal representation of the address.
  
          Raises:
              ValueError: The address is bigger than 128 bits of all ones.