When presenting code, you should take the width of the code into consideration. The comment "Processes a user's turn. First draws the current state of the game: current hangman, partially-guessed word, and" is 116 characters long. The line of code "def process_turn(incorrect_guess_count: int, secret_word: str, guessed_letters: list) -> Tuple[int, bool]:" is 106 characters long. You can break function declarations into several lines:
def process_turn(
incorrect_guess_count: int,
secret_word: str,
guessed_letters: list
) -> Tuple[int, bool]:
While Python allows you to have a function call another function that is defined later, it's easier to read if functions call functions that are previously defined.
You should use == to compare Boolean variables to constants. A == True just returns A and A == False returns not A.
Your pick_secret_word() function can be replaced by the single line 'secret_word = random.choice(WORDS).
Maybe it's personal taste, but I find the use of functions excessive. You spend a lot of your time passing parameters back and forth, and documenting what each parameter is.
If you use a for-loop rather than a while-loop for your rounds, you don't have to increment round. Also, round is a key word in Python, so you should use another name, such as turn. I'm using Spyder, which color codes keywords. If you're not using an IDE that does so, you might consider doing so.
6 is a "magic number". You can put it in as a parameter with a default value instead.
You should give the user more feedback about what's wrong if they don't give a valid response to whether they want to play again, or you could just take anything other than Y as a "no".
WORDS and HANGMAN_STAGES aren't defined anywhere.
def run_game(WORDS, HANGMAN_STAGES, max_turns = 26, max_guesses = 6) -> None:
while True:
print("WELCOME TO HANGMAN.")
secret_word = random.choice(WORDS)
guessed_letters = []
incorrect_guesses = 0
max_turns = 26
max_guesses = 6
letters_remaining = len(secret_word)
for turn in max_turns:
print('\n\nROUND ' + str(turn))
print(HANGMAN_STAGES[number_of_guesses])
print(''.join([letter for letter in secret_word
if letter in guessed_letters
else '_'])+'/n')
guessed_letters.sort()
print("Guesses: " + str(guessed_letters))
while True:
guess = input("Your guess? ").strip().upper()
if len(guess) > 1:
print("Sorry, you can only guess one letter at a time.")
continue
elif guess in guessed_letters:
print("Sorry, you already guessed that letter.")
continue
break
guessed_letters.append(guess)
if guess in secret_word:
if letters_remaining == 0:
print("\n\n")
print("Congratulations! You won!", end=" ")
break
else:
letter_remaining -=
sum([letter == guess for letter in secret_word])
else:
incorrect_guess +=1
if incorrect_guesses == max_guesses:
print("\n\n")
print("GAME OVER! You lost.")
print(HANGMAN_STAGES[6]
break
print("The secret word was: " + secret_word)
choice = input("Press Y to play again").strip().upper()
if choice != 'Y':
break