code: def compute_layers(elements: List[Keccak256]) -> List[List[Keccak256]]:
      
  
      elements = list(elements)  # consume generators
      assert elements, 'Use make_empty_merkle_tree if there are no elements'
  
      if not all(isinstance(item, bytes) for item in elements):
          raise ValueError('all elements must be bytes')
  
      if any(len(item) != 32 for item in elements):
          raise HashLengthNot32()
  
      if len(elements) != len(set(elements)):
          raise ValueError('Duplicated element')
  
      leaves = sorted(item for item in elements)
      tree = [leaves]
  
      layer = leaves
      while len(layer) > 1:
          paired_items = split_in_pairs(layer)
          layer = [hash_pair(a, b) for a, b in paired_items]
          tree.append(layer)
  
      return tree
docs: Computes the layers of the merkletree.
  
      First layer is the list of elements and the last layer is a list with a
      single entry, the merkleroot.