code: def _clone_block_and_wires(block_in):
      
      block_in.sanity_check()  # make sure that everything is valid
      block_out = block_in.__class__()
      temp_wv_map = {}
      with set_working_block(block_out, no_sanity_check=True):
          for wirevector in block_in.wirevector_subset():
              new_wv = clone_wire(wirevector)
              temp_wv_map[wirevector] = new_wv
  
      return block_out, temp_wv_map
docs: This is a generic function to copy the WireVectors for another round of
      synthesis This does not split a WireVector with multiple wires.
  
      :param block_in: The block to change
      :param synth_name: a name to prepend to all new copies of a wire
      :return: the resulting block and a WireVector map