from typing import List
from typing import Union
import hashlib


def integer_seed(objs: List[Union[str, int]]) -> int:
  """Reproducibly and readably generate a seed value, from strings and integers.
  """
  assert isinstance(objs, list), isinstance(objs, tuple)
  h = hashlib.sha256()
  for obj in objs:
    if isinstance(obj, str):
      h.update(obj.encode('utf-8'))
    else:
      assert isinstance(obj, int)
      h.update(obj.to_bytes(16, 'little', signed=False))
  return int(h.hexdigest(), 16) % 2**64