docs: def determinize(self) -> DFA:
          """Determinize the NFA
  
          :return: the DFA equivalent to the DFA.
          """
  
          nfa = self
  
          new_states = {macro_state for macro_state in powerset(nfa._states)}
          initial_state = frozenset([nfa._initial_state])
          final_states = {q for q in new_states if len(q.intersection(nfa._accepting_states)) != 0}
          transition_function = {}
  
          for state_set in new_states:
              for action in nfa._alphabet:
  
                  next_macrostate = set()
                  for s in state_set:
                      for next_state in nfa._transition_function.get(s, {}).get(action, set()):
                          next_macrostate.add(next_state)
  
                  next_macrostate = frozenset(next_macrostate)
                  transition_function.setdefault(state_set, {})[action] = next_macrostate
  
          return DFA(new_states, set(nfa._alphabet), initial_state, set(final_states), transition_function)