code: def _inet6_pton(addr):
      
      joker_pos = None
      result = b""
      addr = plain_str(addr)
      if addr == '::':
          return b'\x00' * 16
      if addr.startswith('::'):
          addr = addr[1:]
      if addr.endswith('::'):
          addr = addr[:-1]
      parts = addr.split(":")
      nparts = len(parts)
      for i, part in enumerate(parts):
          if not part:
              # "::" indicates one or more groups of 2 null bytes
              if joker_pos is None:
                  joker_pos = len(result)
              else:
                  # Wildcard is only allowed once
                  raise _INET6_PTON_EXC
          elif i + 1 == nparts and '.' in part:
              # The last part of an IPv6 address can be an IPv4 address
              if part.count('.') != 3:
                  # we have to do this since socket.inet_aton('1.2') ==
                  # b'\x01\x00\x00\x02'
                  raise _INET6_PTON_EXC
              try:
                  result += socket.inet_aton(part)
              except socket.error:
                  raise _INET6_PTON_EXC
          else:
              # Each part must be 16bit. Add missing zeroes before decoding.
              try:
                  result += hex_bytes(part.rjust(4, "0"))
              except (binascii.Error, TypeError):
                  raise _INET6_PTON_EXC
      # If there's a wildcard, fill up with zeros to reach 128bit (16 bytes)
      if joker_pos is not None:
          if len(result) == 16:
              raise _INET6_PTON_EXC
          result = (result[:joker_pos] + b"\x00" * (16 - len(result)) +
                    result[joker_pos:])
      if len(result) != 16:
          raise _INET6_PTON_EXC
      return result
docs: Convert an IPv6 address from text representation into binary form,
  used when socket.inet_pton is not available.