def METHOD_NAME(self, constructor: PuzzleInfo, inner_puzzle: Program) -> Program:
    also = constructor.also()
    if also is not None:
        inner_puzzle = self._construct(also, inner_puzzle)
    launcher_hash = constructor["launcher_ph"] if "launcher_ph" in constructor else SINGLETON_LAUNCHER_HASH
    return puzzle_for_singleton(constructor["launcher_id"], inner_puzzle, launcher_hash)